Import of kelvin-sim using copybara.

Included changes:

  - 678377290 BEGIN_PUBLIC by atv <atv@google.com>
  - 672961212 Fix kelvin instrution bin_fmt by hcindyl <hcindyl@google.com>
  - 672960925 Update MPACT-RiscV to latest GH version. by hcindyl <hcindyl@google.com>
  - 671861339 BEGIN_PUBLIC by torerik <torerik@google.com>
  - 667625877 BEGIN_PUBLIC by torerik <torerik@google.com>
  - 664876757 Update copybara flow to create squashed gerrit CL by hcindyl <hcindyl@google.com>
  - 663874941 Update GoB build setting by hcindyl <hcindyl@google.com>
  - 660101382 BEGIN_PUBLIC by torerik <torerik@google.com>
  - 643345868 BEGIN_PUBLIC by torerik <torerik@google.com>
  - 643133613 BEGIN_PUBLIC by torerik <torerik@google.com>
  - 642055439 Fixes failure in Kelvin due to inclusion of minstret[h] i... by torerik <torerik@google.com>
  - 640964667 BEGIN_PUBLIC by torerik <torerik@google.com>
  - 639096497 BEGIN_PUBLIC by torerik <torerik@google.com>
  - 635590378 Updates implementation of breakpoints to build upon a new... by torerik <torerik@google.com>
  - 635251467 Upgrade to the latest protobuf edition by Shodan Team <no-reply@google.com>
  - 633566852 Adds explicit include of type_helpers. Must not rely on i... by torerik <torerik@google.com>
  - 632296711 Adjusted code due to debug command shell interface refact... by torerik <torerik@google.com>
  - 632101965 Fix 9 AbslSpanParams findings: by Shodan Team <no-reply@google.com>

PiperOrigin-RevId: 678377290
Change-Id: I351d908940387cbd1f1aaaa72211285fe7a020fc
diff --git a/.bazelrc b/.bazelrc
index 0341edd..75ca3f6 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -4,4 +4,8 @@
 # Disable warnings we don't care about or that generally have a low signal/noise
 # ratio.
 build --copt=-Wno-unused-function
-build --host_copt=-Wno-unused-function
\ No newline at end of file
+build --host_copt=-Wno-unused-function
+
+# TODO: migrate all dependencies from WORKSPACE to MODULE.bazel
+# https://github.com/protocolbuffers/protobuf/issues/14313
+common --noenable_bzlmod
diff --git a/.bazelversion b/.bazelversion
index 0df17dd..a8a1887 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-6.2.1
\ No newline at end of file
+7.1.2
diff --git a/WORKSPACE b/WORKSPACE
index 35df7da..5abe502 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -6,23 +6,19 @@
 # MPACT-RiscV repo
 http_archive(
     name = "com_google_mpact-riscv",
-    sha256 = "7c2ddf3c1980d138f4b9af539fba97e7aa8d5a812a9e15d62e40ccbbdae71a75",
-    strip_prefix = "mpact-riscv-40bc408eda29dbb5ebf023d455bd841b2dae73c4",
-    url = "https://github.com/google/mpact-riscv/archive/40bc408eda29dbb5ebf023d455bd841b2dae73c4.tar.gz",
+    integrity = "sha256-1UtiuOMLKJK5f1mXiWGfb4Lc1n1kWmSQNNZb80XiLY4=",
+    strip_prefix = "mpact-riscv-3ed17ec6c5d9cf5fa35ea7100bfa9ae7799fa0d6",
+    url = "https://github.com/google/mpact-riscv/archive/3ed17ec6c5d9cf5fa35ea7100bfa9ae7799fa0d6.tar.gz",
 )
 
-# MPACT-Sim repo
-http_archive(
-    name = "com_google_mpact-sim",
-    sha256 = "8bad24dffe9996762a4db6e074e38ba454ec2ae113c3cb849aa7d8250827d37b",
-    strip_prefix = "mpact-sim-fc14a25478d2b8a15cc74451798471fe5d8ae5d2",
-    url = "https://github.com/google/mpact-sim/archive/fc14a25478d2b8a15cc74451798471fe5d8ae5d2.tar.gz",
-)
+load("@com_google_mpact-riscv//:repos.bzl", "mpact_riscv_repos")
+mpact_riscv_repos()
 
 load("@com_google_mpact-sim//:repos.bzl", "mpact_sim_repos")
-
 mpact_sim_repos()
 
 load("@com_google_mpact-sim//:deps.bzl", "mpact_sim_deps")
-
 mpact_sim_deps()
+
+load("@com_google_mpact-sim//:protobuf_deps.bzl", "mpact_sim_protobuf_deps")
+mpact_sim_protobuf_deps()
diff --git a/sim/BUILD b/sim/BUILD
index 4722ff7..7acb134 100644
--- a/sim/BUILD
+++ b/sim/BUILD
@@ -80,11 +80,13 @@
         "kelvin_memory.isa",
         "kelvin_mul.isa",
         "kelvin_shift.isa",
+        "@com_google_mpact-riscv//riscv:riscv32zb.isa",
     ],
     isa_name = "Kelvin",
     deps = [
         ":kelvin_instructions",
         "@com_google_absl//absl/functional:bind_front",
+        "@com_google_mpact-riscv//riscv:riscv_bitmanip_instructions",
         "@com_google_mpact-riscv//riscv:riscv_g",
     ],
 )
@@ -101,6 +103,7 @@
         "kelvin_memory.bin_fmt",
         "kelvin_mul.bin_fmt",
         "kelvin_shift.bin_fmt",
+        "@com_google_mpact-riscv//riscv:riscv32zb.bin_fmt",
     ],
     deps = [
         ":kelvin_isa",
@@ -140,9 +143,11 @@
 cc_library(
     name = "kelvin_top",
     srcs = [
+        "kelvin_action_point_memory_interface.cc",
         "kelvin_top.cc",
     ],
     hdrs = [
+        "kelvin_action_point_memory_interface.h",
         "kelvin_top.h",
     ],
     copts = ["-O3"],
@@ -154,6 +159,7 @@
         "//sim/renode:kelvin_renode_memory",
         "@com_google_absl//absl/container:flat_hash_map",
         "@com_google_absl//absl/flags:flag",
+        "@com_google_absl//absl/functional:any_invocable",
         "@com_google_absl//absl/functional:bind_front",
         "@com_google_absl//absl/log",
         "@com_google_absl//absl/log:check",
@@ -161,9 +167,11 @@
         "@com_google_absl//absl/status:statusor",
         "@com_google_absl//absl/strings",
         "@com_google_absl//absl/synchronization",
+        "@com_google_mpact-riscv//riscv:riscv_action_point_memory_interface",
         "@com_google_mpact-riscv//riscv:riscv_arm_semihost",
-        "@com_google_mpact-riscv//riscv:riscv_breakpoint",
+        "@com_google_mpact-riscv//riscv:riscv_fp_state",
         "@com_google_mpact-riscv//riscv:riscv_state",
+        "@com_google_mpact-sim//mpact/sim/generic:action_points",
         "@com_google_mpact-sim//mpact/sim/generic:arch_state",
         "@com_google_mpact-sim//mpact/sim/generic:component",
         "@com_google_mpact-sim//mpact/sim/generic:core",
@@ -198,6 +206,7 @@
         "@com_google_absl//absl/time",
         "@com_google_mpact-riscv//riscv:debug_command_shell",
         "@com_google_mpact-riscv//riscv:riscv_state",
+        "@com_google_mpact-sim//mpact/sim/generic:core_debug_interface",
         "@com_google_mpact-sim//mpact/sim/util/program_loader:elf_loader",
         "@com_googlesource_code_re2//:re2",
     ],
diff --git a/sim/decoder.h b/sim/decoder.h
index 49b6fc2..731169f 100644
--- a/sim/decoder.h
+++ b/sim/decoder.h
@@ -17,6 +17,7 @@
 #ifndef SIM_DECODER_H_
 #define SIM_DECODER_H_
 
+#include <cstdint>
 #include <memory>
 
 #include "sim/kelvin_decoder.h"
@@ -60,6 +61,15 @@
   mpact::sim::generic::Instruction *DecodeInstruction(
       uint64_t address) override;
 
+  // Return the number of opcodes supported by this decoder.
+  int GetNumOpcodes() const override {
+    return static_cast<int>(OpcodeEnum::kPastMaxValue);
+  }
+  // Return the name of the opcode at the given index.
+  const char *GetOpcodeName(int index) const override {
+    return isa32::kOpcodeNames[index];
+  }
+
   // Getter.
   isa32::KelvinEncoding *kelvin_encoding() const { return kelvin_encoding_; }
 
diff --git a/sim/kelvin.bin_fmt b/sim/kelvin.bin_fmt
index c6e7d98..e8f0cce 100644
--- a/sim/kelvin.bin_fmt
+++ b/sim/kelvin.bin_fmt
@@ -11,6 +11,8 @@
   KelvinVectorMemoryInst;
   KelvinVectorMulInst;
   KelvinVectorShiftInst;
+  RiscVZbbInst32;
+  RiscVZbbInst32Only;
 };
 
 #include "sim/kelvin_format.bin_fmt"
@@ -20,3 +22,4 @@
 #include "sim/kelvin_memory.bin_fmt"
 #include "sim/kelvin_mul.bin_fmt"
 #include "sim/kelvin_shift.bin_fmt"
+#include "external/com_google_mpact-riscv/riscv/riscv32zb.bin_fmt"
diff --git a/sim/kelvin.isa b/sim/kelvin.isa
index 0b046da..0467dda 100644
--- a/sim/kelvin.isa
+++ b/sim/kelvin.isa
@@ -16,15 +16,23 @@
 #include "sim/kelvin_shift.isa"
 #include "sim/kelvin_memory.isa"
 #include "sim/kelvin_mul.isa"
+#include "external/com_google_mpact-riscv/riscv/riscv32zb.isa"
 
 // Combining all kelvin instruction sets.
 slot kelvin : riscv32i, riscv32m, zicsr, zfencei, privileged, kelvin_arith,
     kelvin_conv, kelvin_log, kelvin_memory, kelvin_mul, kelvin_shift,
-    kelvin_vector_memory {
+    kelvin_vector_memory, riscv32_zbb {
   includes {
     #include "sim/kelvin_instructions.h"
   }
   default opcode =
     disasm: "Illegal instruction at 0x%(@:08x)",
     semfunc: "&KelvinIllegalInstruction";
+
+  opcodes {
+    ror = delete;
+    rol = delete;
+    orcb = delete;
+    rev8 = delete;
+  }
 }
diff --git a/sim/kelvin_action_point_memory_interface.cc b/sim/kelvin_action_point_memory_interface.cc
new file mode 100644
index 0000000..d754a78
--- /dev/null
+++ b/sim/kelvin_action_point_memory_interface.cc
@@ -0,0 +1,86 @@
+// Copyright 2024 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "sim/kelvin_action_point_memory_interface.h"
+
+#include <cstdint>
+#include <utility>
+
+#include "absl/status/status.h"
+#include "absl/strings/str_cat.h"
+
+namespace kelvin::sim {
+
+KelvinActionPointMemoryInterface::KelvinActionPointMemoryInterface(
+    MemoryInterface *memory, InvalidateFcn invalidate_fcn)
+    : memory_(memory), invalidate_fcn_(std::move(invalidate_fcn)) {
+  // Allocate two data buffers (32 and 16 bit) once, so we don't have to
+  // do it every time we access breakpoint instructions.
+  db4_ = db_factory_.Allocate<uint32_t>(1);
+}
+
+KelvinActionPointMemoryInterface::~KelvinActionPointMemoryInterface() {
+  if (db4_ != nullptr) db4_->DecRef();
+  for (auto &[unused, inst_info_ptr] : instruction_map_) {
+    delete inst_info_ptr;
+  }
+  instruction_map_.clear();
+}
+
+absl::Status KelvinActionPointMemoryInterface::WriteOriginalInstruction(
+    uint64_t address) {
+  auto it = instruction_map_.find(address);
+  if (it == instruction_map_.end()) {
+    return absl::NotFoundError(absl::StrCat(
+        "No instruction information exist for address: ", absl::Hex(address)));
+  }
+  db4_->Set<uint32_t>(0, it->second->og_instruction_word);
+  memory_->Store(address, db4_);
+  // Invalidate the instruction decode for this address.
+  invalidate_fcn_(address);
+  return absl::OkStatus();
+}
+
+absl::Status KelvinActionPointMemoryInterface::WriteBreakpointInstruction(
+    uint64_t address) {
+  auto it = instruction_map_.find(address);
+  if (it == instruction_map_.end()) {
+    // This is a new breakpoint. First find the instruction size, then save
+    // the original instruction.
+    memory_->Load(address, db4_, nullptr, nullptr);
+    uint32_t instruction_word = db4_->Get<uint32_t>(0);
+    int size = GetInstructionSize(instruction_word);
+    if (size == 0) {
+      return absl::InvalidArgumentError(absl::StrCat(
+          "Invalid instruction size: ", size, " at ", absl::Hex(address)));
+    }
+    auto *inst_info = new InstructionInfo;
+    inst_info->og_instruction_word = instruction_word;
+    inst_info->size = size;
+    it = instruction_map_.insert(std::make_pair(address, inst_info)).first;
+  }
+  // Write the breakpoint instruction to memory.
+  db4_->Set<uint32_t>(0, kEBreak32);
+  memory_->Store(address, db4_);
+  invalidate_fcn_(address);
+  // Invalidate the instruction decode for this address.
+  return absl::OkStatus();
+}
+
+int KelvinActionPointMemoryInterface::GetInstructionSize(
+    uint32_t instruction_word) const {
+  return 4;
+}
+
+}  // namespace kelvin::sim
diff --git a/sim/kelvin_action_point_memory_interface.h b/sim/kelvin_action_point_memory_interface.h
new file mode 100644
index 0000000..ea88e52
--- /dev/null
+++ b/sim/kelvin_action_point_memory_interface.h
@@ -0,0 +1,83 @@
+// Copyright 2024 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SIM_KELVIN_ACTION_POINT_MEMORY_INTERFACE_H_
+#define SIM_KELVIN_ACTION_POINT_MEMORY_INTERFACE_H_
+
+#include <cstdint>
+
+#include "absl/container/flat_hash_map.h"
+#include "absl/functional/any_invocable.h"
+#include "absl/status/status.h"
+#include "mpact/sim/generic/action_point_manager_base.h"
+#include "mpact/sim/generic/data_buffer.h"
+#include "mpact/sim/util/memory/memory_interface.h"
+
+namespace kelvin::sim {
+
+using ::mpact::sim::generic::ActionPointMemoryInterface;
+using ::mpact::sim::generic::DataBuffer;
+using ::mpact::sim::generic::DataBufferFactory;
+using ::mpact::sim::util::MemoryInterface;
+
+// This file defines the KelvinActionPointMemoryInterface class which provides
+// the low level memory functionality required to implement breakpoint and other
+// 'actions' that need to be performed when an instruction executes. It uses
+// the Kelvin ebreak instruction to stop execution.
+
+class KelvinActionPointMemoryInterface : public ActionPointMemoryInterface {
+ public:
+  // 32 bit software breakpoint instructions.
+  static constexpr uint32_t kEBreak32 = 0b000000000001'00000'000'00000'1110011;
+  // Callback type for function to invalidate the decoding of an instruction.
+  using InvalidateFcn = absl::AnyInvocable<void(uint64_t address)>;
+  // The constructor takes a pointer to the memory interface through which
+  // instructions can be read and written,and a function to invalidate the
+  // decoding of an instruction.
+  KelvinActionPointMemoryInterface(MemoryInterface *memory,
+                                   InvalidateFcn invalidate_fcn);
+  ~KelvinActionPointMemoryInterface() override;
+
+  // This restores the original instruction in memory, and allows it to be
+  // decoded and executed, provided the address is an action point. If not,
+  // no action is taken.
+  absl::Status WriteOriginalInstruction(uint64_t address) override;
+  // Store breakpoint instruction, provided the address is an action point.
+  // Otherwise no action is taken.
+  absl::Status WriteBreakpointInstruction(uint64_t address) override;
+
+ private:
+  struct InstructionInfo {
+    int size;
+    uint32_t og_instruction_word;
+  };
+
+  // Returns the size of the instruction at the given address, or 0 if unknown.
+  int GetInstructionSize(uint32_t instruction_word) const;
+
+  // Data buffer factory and two data buffer pointers to use for reading and
+  // writing instructions.
+  DataBufferFactory db_factory_;
+  DataBuffer *db4_ = nullptr;
+  // Maps from address to information about the instruction.
+  absl::flat_hash_map<uint64_t, InstructionInfo *> instruction_map_;
+  // Interface to program memory.
+  MemoryInterface *memory_;
+  // Function to be called to invalidate any stored decoding of an instruction.
+  InvalidateFcn invalidate_fcn_;
+};
+
+}  // namespace kelvin::sim
+
+#endif  // SIM_KELVIN_ACTION_POINT_MEMORY_INTERFACE_H_
diff --git a/sim/kelvin_arith.bin_fmt b/sim/kelvin_arith.bin_fmt
index b679386..4f5ec36 100644
--- a/sim/kelvin_arith.bin_fmt
+++ b/sim/kelvin_arith.bin_fmt
@@ -1,602 +1,602 @@
 instruction group KelvinVectorArithInst[32] : KelvinV2ArgsType {
   // Kelvin Arithmetic Vector instructions (func1 000/100/001).
   // vadd
-  vadd_b_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vadd_b_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vadd_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vadd_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vadd_h_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vadd_h_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vadd_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vadd_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vadd_w_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vadd_w_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vadd_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vadd_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vadd_b_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vadd_b_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vadd_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vadd_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vadd_h_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vadd_h_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vadd_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vadd_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vadd_w_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vadd_w_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vadd_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vadd_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vsub
-  vsub_b_vv     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vsub_b_vx     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vsub_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vsub_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vsub_h_vv     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vsub_h_vx     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vsub_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vsub_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vsub_w_vv     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vsub_w_vx     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vsub_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vsub_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vsub_b_vv     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vsub_b_vx     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vsub_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vsub_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vsub_h_vv     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vsub_h_vx     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vsub_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vsub_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vsub_w_vv     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vsub_w_vx     : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vsub_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vsub_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'001, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vrsub
-  vrsub_b_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vrsub_b_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vrsub_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vrsub_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vrsub_h_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vrsub_h_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vrsub_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vrsub_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vrsub_w_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vrsub_w_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vrsub_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vrsub_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vrsub_b_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vrsub_b_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vrsub_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vrsub_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vrsub_h_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vrsub_h_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vrsub_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vrsub_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vrsub_w_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vrsub_w_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vrsub_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vrsub_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // veq
-  veq_b_vv       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  veq_b_vx       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  veq_b_vv_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  veq_b_vx_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  veq_h_vv       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  veq_h_vx       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  veq_h_vv_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  veq_h_vx_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  veq_w_vv       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  veq_w_vx       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  veq_w_vv_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  veq_w_vx_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  veq_b_vv       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  veq_b_vx       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  veq_b_vv_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  veq_b_vx_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  veq_h_vv       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  veq_h_vx       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  veq_h_vv_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  veq_h_vx_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  veq_w_vv       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  veq_w_vx       : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  veq_w_vv_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  veq_w_vx_m     : KelvinV2ArgsType : func2 == 0b000'110, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vne
-  vne_b_vv      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vne_b_vx      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vne_b_vv_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vne_b_vx_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vne_h_vv      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vne_h_vx      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vne_h_vv_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vne_h_vx_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vne_w_vv      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vne_w_vx      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vne_w_vv_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vne_w_vx_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vne_b_vv      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vne_b_vx      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vne_b_vv_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vne_b_vx_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vne_h_vv      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vne_h_vx      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vne_h_vv_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vne_h_vx_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vne_w_vv      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vne_w_vx      : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vne_w_vv_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vne_w_vx_m    : KelvinV2ArgsType : func2 == 0b000'111, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vlt
-  vlt_b_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vlt_b_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vlt_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vlt_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vlt_h_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vlt_h_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vlt_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vlt_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vlt_w_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vlt_w_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vlt_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vlt_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vlt_b_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vlt_b_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vlt_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vlt_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vlt_h_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vlt_h_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vlt_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vlt_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vlt_w_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vlt_w_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vlt_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vlt_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vltu
-  vlt_u_b_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vlt_u_b_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vlt_u_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vlt_u_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vlt_u_h_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vlt_u_h_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vlt_u_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vlt_u_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vlt_u_w_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vlt_u_w_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vlt_u_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vlt_u_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vlt_u_b_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vlt_u_b_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vlt_u_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vlt_u_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vlt_u_h_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vlt_u_h_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vlt_u_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vlt_u_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vlt_u_w_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vlt_u_w_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vlt_u_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vlt_u_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vle
-  vle_b_vv       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vle_b_vx       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vle_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vle_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vle_h_vv       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vle_h_vx       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vle_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vle_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vle_w_vv       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vle_w_vx       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vle_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vle_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vle_b_vv       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vle_b_vx       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vle_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vle_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vle_h_vv       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vle_h_vx       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vle_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vle_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vle_w_vv       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vle_w_vx       : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vle_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vle_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vleu
-  vle_u_b_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vle_u_b_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vle_u_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vle_u_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vle_u_h_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vle_u_h_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vle_u_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vle_u_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vle_u_w_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vle_u_w_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vle_u_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vle_u_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vle_u_b_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vle_u_b_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vle_u_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vle_u_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vle_u_h_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vle_u_h_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vle_u_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vle_u_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vle_u_w_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vle_u_w_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vle_u_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vle_u_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vgt
-  vgt_b_vv       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vgt_b_vx       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vgt_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vgt_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vgt_h_vv       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vgt_h_vx       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vgt_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vgt_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vgt_w_vv       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vgt_w_vx       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vgt_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vgt_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vgt_b_vv       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vgt_b_vx       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vgt_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vgt_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vgt_h_vv       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vgt_h_vx       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vgt_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vgt_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vgt_w_vv       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vgt_w_vx       : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vgt_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vgt_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vgtu
-  vgt_u_b_vv     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vgt_u_b_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vgt_u_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vgt_u_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vgt_u_h_vv     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vgt_u_h_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vgt_u_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vgt_u_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vgt_u_w_vv     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vgt_u_w_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vgt_u_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vgt_u_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vgt_u_b_vv     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vgt_u_b_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vgt_u_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vgt_u_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vgt_u_h_vv     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vgt_u_h_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vgt_u_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vgt_u_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vgt_u_w_vv     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vgt_u_w_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vgt_u_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vgt_u_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vge
-  vge_b_vv       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vge_b_vx       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vge_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vge_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vge_h_vv       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vge_h_vx       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vge_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vge_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vge_w_vv       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vge_w_vx       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vge_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vge_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vge_b_vv       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vge_b_vx       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vge_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vge_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vge_h_vv       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vge_h_vx       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vge_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vge_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vge_w_vv       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vge_w_vx       : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vge_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vge_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vgeu
-  vge_u_b_vv       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vge_u_b_vx       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vge_u_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vge_u_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vge_u_h_vv       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vge_u_h_vx       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vge_u_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vge_u_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vge_u_w_vv       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vge_u_w_vx       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vge_u_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vge_u_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vge_u_b_vv       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vge_u_b_vx       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vge_u_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vge_u_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vge_u_h_vv       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vge_u_h_vx       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vge_u_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vge_u_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vge_u_w_vv       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vge_u_w_vx       : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vge_u_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vge_u_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vabsd
-  vabsd_b_vv       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vabsd_b_vx       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vabsd_b_vv_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vabsd_b_vx_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vabsd_h_vv       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vabsd_h_vx       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vabsd_h_vv_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vabsd_h_vx_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vabsd_w_vv       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vabsd_w_vx       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vabsd_w_vv_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vabsd_w_vx_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vabsd_b_vv       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vabsd_b_vx       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vabsd_b_vv_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vabsd_b_vx_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vabsd_h_vv       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vabsd_h_vx       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vabsd_h_vv_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vabsd_h_vx_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vabsd_w_vv       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vabsd_w_vx       : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vabsd_w_vv_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vabsd_w_vx_m     : KelvinV2ArgsType : func2 == 0b0'10000, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vabsdu
-  vabsd_u_b_vv    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vabsd_u_b_vx    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vabsd_u_b_vv_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vabsd_u_b_vx_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vabsd_u_h_vv    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vabsd_u_h_vx    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vabsd_u_h_vv_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vabsd_u_h_vx_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vabsd_u_w_vv    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vabsd_u_w_vx    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vabsd_u_w_vv_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vabsd_u_w_vx_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vabsd_u_b_vv    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vabsd_u_b_vx    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vabsd_u_b_vv_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vabsd_u_b_vx_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vabsd_u_h_vv    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vabsd_u_h_vx    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vabsd_u_h_vv_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vabsd_u_h_vx_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vabsd_u_w_vv    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vabsd_u_w_vx    : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vabsd_u_w_vv_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vabsd_u_w_vx_m  : KelvinV2ArgsType : func2 == 0b0'10001, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vmax
-  vmax_b_vv       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vmax_b_vx       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vmax_b_vv_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vmax_b_vx_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vmax_h_vv       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vmax_h_vx       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vmax_h_vv_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vmax_h_vx_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vmax_w_vv       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vmax_w_vx       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vmax_w_vv_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vmax_w_vx_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vmax_b_vv       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vmax_b_vx       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vmax_b_vv_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vmax_b_vx_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vmax_h_vv       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vmax_h_vx       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vmax_h_vv_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vmax_h_vx_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vmax_w_vv       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vmax_w_vx       : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vmax_w_vv_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vmax_w_vx_m     : KelvinV2ArgsType : func2 == 0b0'10010, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vmaxu
-  vmax_u_b_vv    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vmax_u_b_vx    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vmax_u_b_vv_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vmax_u_b_vx_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vmax_u_h_vv    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vmax_u_h_vx    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vmax_u_h_vv_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vmax_u_h_vx_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vmax_u_w_vv    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vmax_u_w_vx    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vmax_u_w_vv_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vmax_u_w_vx_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vmax_u_b_vv    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vmax_u_b_vx    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vmax_u_b_vv_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vmax_u_b_vx_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vmax_u_h_vv    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vmax_u_h_vx    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vmax_u_h_vv_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vmax_u_h_vx_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vmax_u_w_vv    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vmax_u_w_vx    : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vmax_u_w_vv_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vmax_u_w_vx_m  : KelvinV2ArgsType : func2 == 0b0'10011, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vmin
-  vmin_b_vv       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vmin_b_vx       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vmin_b_vv_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vmin_b_vx_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vmin_h_vv       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vmin_h_vx       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vmin_h_vv_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vmin_h_vx_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vmin_w_vv       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vmin_w_vx       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vmin_w_vv_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vmin_w_vx_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vmin_b_vv       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vmin_b_vx       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vmin_b_vv_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vmin_b_vx_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vmin_h_vv       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vmin_h_vx       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vmin_h_vv_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vmin_h_vx_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vmin_w_vv       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vmin_w_vx       : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vmin_w_vv_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vmin_w_vx_m     : KelvinV2ArgsType : func2 == 0b0'10100, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vminu
-  vmin_u_b_vv    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vmin_u_b_vx    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vmin_u_b_vv_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vmin_u_b_vx_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vmin_u_h_vv    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vmin_u_h_vx    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vmin_u_h_vv_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vmin_u_h_vx_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vmin_u_w_vv    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vmin_u_w_vx    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vmin_u_w_vv_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vmin_u_w_vx_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vmin_u_b_vv    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vmin_u_b_vx    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vmin_u_b_vv_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vmin_u_b_vx_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vmin_u_h_vv    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vmin_u_h_vx    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vmin_u_h_vv_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vmin_u_h_vx_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vmin_u_w_vv    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vmin_u_w_vx    : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vmin_u_w_vv_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vmin_u_w_vx_m  : KelvinV2ArgsType : func2 == 0b0'10101, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   // vadd3
-  vadd3_b_vv       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b00;
-  vadd3_b_vx       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b00, m == 0b00, func1 == 0b000, form == 0b10;
-  vadd3_b_vv_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b00;
-  vadd3_b_vx_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b00, m == 0b01, func1 == 0b000, form == 0b10;
-  vadd3_h_vv       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b00;
-  vadd3_h_vx       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b01, m == 0b00, func1 == 0b000, form == 0b10;
-  vadd3_h_vv_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b00;
-  vadd3_h_vx_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b01, m == 0b01, func1 == 0b000, form == 0b10;
-  vadd3_w_vv       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b00;
-  vadd3_w_vx       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b10, m == 0b00, func1 == 0b000, form == 0b10;
-  vadd3_w_vv_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b00;
-  vadd3_w_vx_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b10, m == 0b01, func1 == 0b000, form == 0b10;
+  vadd3_b_vv       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b00;
+  vadd3_b_vx       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b00, m == 0b0, func1 == 0b000, form == 0b10;
+  vadd3_b_vv_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b00;
+  vadd3_b_vx_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b00, m == 0b1, func1 == 0b000, form == 0b10;
+  vadd3_h_vv       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b00;
+  vadd3_h_vx       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b01, m == 0b0, func1 == 0b000, form == 0b10;
+  vadd3_h_vv_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b00;
+  vadd3_h_vx_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b01, m == 0b1, func1 == 0b000, form == 0b10;
+  vadd3_w_vv       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b00;
+  vadd3_w_vx       : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b10, m == 0b0, func1 == 0b000, form == 0b10;
+  vadd3_w_vv_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b00;
+  vadd3_w_vx_m     : KelvinV2ArgsType : func2 == 0b0'11000, sz == 0b10, m == 0b1, func1 == 0b000, form == 0b10;
 
   //vadds
-  vadds_b_vv     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vadds_b_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vadds_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vadds_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vadds_h_vv     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vadds_h_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vadds_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vadds_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vadds_w_vv     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vadds_w_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vadds_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vadds_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vadds_b_vv     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vadds_b_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vadds_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vadds_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vadds_h_vv     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vadds_h_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vadds_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vadds_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vadds_w_vv     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vadds_w_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vadds_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vadds_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   // vaddsu
-  vadds_u_b_vv   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vadds_u_b_vx   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vadds_u_b_vv_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vadds_u_b_vx_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vadds_u_h_vv   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vadds_u_h_vx   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vadds_u_h_vv_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vadds_u_h_vx_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vadds_u_w_vv   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vadds_u_w_vx   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vadds_u_w_vv_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vadds_u_w_vx_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vadds_u_b_vv   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vadds_u_b_vx   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vadds_u_b_vv_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vadds_u_b_vx_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vadds_u_h_vv   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vadds_u_h_vx   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vadds_u_h_vv_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vadds_u_h_vx_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vadds_u_w_vv   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vadds_u_w_vx   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vadds_u_w_vv_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vadds_u_w_vx_m : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
  //vsubs
-  vsubs_b_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubs_b_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubs_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubs_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vsubs_h_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubs_h_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubs_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubs_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vsubs_w_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubs_w_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubs_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubs_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vsubs_b_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubs_b_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubs_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubs_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vsubs_h_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubs_h_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubs_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubs_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vsubs_w_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubs_w_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubs_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubs_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   // vsubsu
-  vsubs_u_b_vv   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubs_u_b_vx   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubs_u_b_vv_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubs_u_b_vx_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vsubs_u_h_vv   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubs_u_h_vx   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubs_u_h_vv_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubs_u_h_vx_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vsubs_u_w_vv   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubs_u_w_vx   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubs_u_w_vv_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubs_u_w_vx_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vsubs_u_b_vv   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubs_u_b_vx   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubs_u_b_vv_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubs_u_b_vx_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vsubs_u_h_vv   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubs_u_h_vx   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubs_u_h_vv_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubs_u_h_vx_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vsubs_u_w_vv   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubs_u_w_vx   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubs_u_w_vv_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubs_u_w_vx_m : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vaddw
-  vaddw_h_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vaddw_h_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vaddw_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vaddw_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vaddw_w_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vaddw_w_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vaddw_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vaddw_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vaddw_h_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vaddw_h_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vaddw_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vaddw_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vaddw_w_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vaddw_w_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vaddw_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vaddw_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vaddwu
-  vaddw_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vaddw_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vaddw_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vaddw_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vaddw_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vaddw_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vaddw_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vaddw_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vaddw_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vaddw_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vaddw_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vaddw_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vaddw_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vaddw_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vaddw_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vaddw_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vsubw
-  vsubw_h_vv     : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubw_h_vx     : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubw_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubw_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vsubw_w_vv     : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubw_w_vx     : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubw_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubw_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vsubw_h_vv     : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubw_h_vx     : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubw_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubw_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vsubw_w_vv     : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubw_w_vx     : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubw_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubw_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vsubwu
-  vsubw_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubw_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubw_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubw_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vsubw_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vsubw_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vsubw_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vsubw_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vsubw_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubw_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubw_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubw_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vsubw_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vsubw_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vsubw_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vsubw_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vacc
-  vacc_h_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vacc_h_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vacc_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vacc_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vacc_w_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vacc_w_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vacc_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vacc_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vacc_h_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vacc_h_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vacc_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vacc_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vacc_w_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vacc_w_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vacc_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vacc_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vaccu
-  vacc_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vacc_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vacc_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vacc_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vacc_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vacc_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vacc_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vacc_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vacc_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vacc_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vacc_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vacc_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vacc_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vacc_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vacc_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vacc_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vpadd
-  vpadd_h_v     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vpadd_h_v_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vpadd_w_v     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vpadd_w_v_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vpadd_h_v     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vpadd_h_v_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vpadd_w_v     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vpadd_w_v_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vpaddu
-  vpadd_h_u_v     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 == 0, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vpadd_h_u_v_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 == 0, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vpadd_w_u_v     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 == 0, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vpadd_w_u_v_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 == 0, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vpadd_h_u_v     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 == 0, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vpadd_h_u_v_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 == 0, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vpadd_w_u_v     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 == 0, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vpadd_w_u_v_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 == 0, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vpsub
-  vpsub_h_v     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 == 0, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vpsub_h_v_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 == 0, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vpsub_w_v     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 == 0, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vpsub_w_v_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 == 0, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vpsub_h_v     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 == 0, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vpsub_h_v_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 == 0, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vpsub_w_v     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 == 0, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vpsub_w_v_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 == 0, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vpsubu
-  vpsub_h_u_v     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 == 0, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vpsub_h_u_v_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 == 0, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vpsub_w_u_v     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 == 0, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vpsub_w_u_v_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 == 0, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vpsub_h_u_v     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 == 0, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vpsub_h_u_v_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 == 0, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vpsub_w_u_v     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 == 0, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vpsub_w_u_v_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 == 0, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vhadd
-  vhadd_b_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_b_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vhadd_h_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_h_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vhadd_w_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_w_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vhadd_b_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_b_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vhadd_h_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_h_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vhadd_w_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_w_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vhadd.r
-  vhadd_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vhadd_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vhadd_w_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_w_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vhadd_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vhadd_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vhadd_w_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_w_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vhadd.u
-  vhadd_b_u_vv     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_b_u_vx     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_b_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_b_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vhadd_h_u_vv     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_h_u_vx     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vhadd_w_u_vv     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_w_u_vx     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vhadd_b_u_vv     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_b_u_vx     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_b_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_b_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vhadd_h_u_vv     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_h_u_vx     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vhadd_w_u_vv     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_w_u_vx     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vhadd.ur
-  vhadd_b_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_b_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_b_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_b_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vhadd_h_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_h_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_h_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_h_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vhadd_w_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vhadd_w_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vhadd_w_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vhadd_w_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vhadd_b_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_b_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_b_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_b_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vhadd_h_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_h_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_h_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_h_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vhadd_w_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vhadd_w_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vhadd_w_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vhadd_w_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vhsub
-  vhsub_b_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_b_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vhsub_h_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_h_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vhsub_w_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_w_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vhsub_b_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_b_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vhsub_h_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_h_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vhsub_w_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_w_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vhsub.r
-  vhsub_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vhsub_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vhsub_w_r_vv     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_w_r_vx     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vhsub_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vhsub_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vhsub_w_r_vv     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_w_r_vx     : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0110, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vhsub.u
-  vhsub_b_u_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_b_u_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_b_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_b_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vhsub_h_u_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_h_u_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vhsub_w_u_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_w_u_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vhsub_b_u_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_b_u_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_b_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_b_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vhsub_h_u_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_h_u_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vhsub_w_u_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_w_u_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vhsub.ur
-  vhsub_b_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_b_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b00, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_b_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_b_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b00, m == 0b01, func1 == 0b100, form == 0b10;
-  vhsub_h_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_h_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b01, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_h_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_h_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b01, m == 0b01, func1 == 0b100, form == 0b10;
-  vhsub_w_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b00;
-  vhsub_w_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b10, m == 0b00, func1 == 0b100, form == 0b10;
-  vhsub_w_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b00;
-  vhsub_w_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b10, m == 0b01, func1 == 0b100, form == 0b10;
+  vhsub_b_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_b_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b00, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_b_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_b_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b00, m == 0b1, func1 == 0b100, form == 0b10;
+  vhsub_h_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_h_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b01, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_h_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_h_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b01, m == 0b1, func1 == 0b100, form == 0b10;
+  vhsub_w_ur_vv     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b00;
+  vhsub_w_ur_vx     : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b10, m == 0b0, func1 == 0b100, form == 0b10;
+  vhsub_w_ur_vv_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b00;
+  vhsub_w_ur_vx_m   : KelvinV2ArgsType : func2 == 0b01'0111, sz == 0b10, m == 0b1, func1 == 0b100, form == 0b10;
 
   //vand
-  vand_vv       : KelvinV2ArgsType : func2 == 0b00'0000, m == 0b00, func1 == 0b001, form == 0b00;
-  vand_vv_m     : KelvinV2ArgsType : func2 == 0b00'0000, m == 0b01, func1 == 0b001, form == 0b00;
-  vand_b_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b00, func1 == 0b001, form == 0b10;
-  vand_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b01, func1 == 0b001, form == 0b10;
-  vand_h_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b00, func1 == 0b001, form == 0b10;
-  vand_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b01, func1 == 0b001, form == 0b10;
-  vand_w_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b00, func1 == 0b001, form == 0b10;
-  vand_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b01, func1 == 0b001, form == 0b10;
+  vand_vv       : KelvinV2ArgsType : func2 == 0b00'0000, m == 0b0, func1 == 0b001, form == 0b00;
+  vand_vv_m     : KelvinV2ArgsType : func2 == 0b00'0000, m == 0b1, func1 == 0b001, form == 0b00;
+  vand_b_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b0, func1 == 0b001, form == 0b10;
+  vand_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b1, func1 == 0b001, form == 0b10;
+  vand_h_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b0, func1 == 0b001, form == 0b10;
+  vand_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b1, func1 == 0b001, form == 0b10;
+  vand_w_vx     : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b0, func1 == 0b001, form == 0b10;
+  vand_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vor
-  vor_vv        : KelvinV2ArgsType : func2 == 0b00'0001, m == 0b00, func1 == 0b001, form == 0b00;
-  vor_vv_m      : KelvinV2ArgsType : func2 == 0b00'0001, m == 0b01, func1 == 0b001, form == 0b00;
-  vor_b_vx      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b00, func1 == 0b001, form == 0b10;
-  vor_b_vx_m    : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b01, func1 == 0b001, form == 0b10;
-  vor_h_vx      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b00, func1 == 0b001, form == 0b10;
-  vor_h_vx_m    : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b01, func1 == 0b001, form == 0b10;
-  vor_w_vx      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b00, func1 == 0b001, form == 0b10;
-  vor_w_vx_m    : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b01, func1 == 0b001, form == 0b10;
+  vor_vv        : KelvinV2ArgsType : func2 == 0b00'0001, m == 0b0, func1 == 0b001, form == 0b00;
+  vor_vv_m      : KelvinV2ArgsType : func2 == 0b00'0001, m == 0b1, func1 == 0b001, form == 0b00;
+  vor_b_vx      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b0, func1 == 0b001, form == 0b10;
+  vor_b_vx_m    : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b1, func1 == 0b001, form == 0b10;
+  vor_h_vx      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b0, func1 == 0b001, form == 0b10;
+  vor_h_vx_m    : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b1, func1 == 0b001, form == 0b10;
+  vor_w_vx      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b0, func1 == 0b001, form == 0b10;
+  vor_w_vx_m    : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vxor
-  vxor_vv       : KelvinV2ArgsType : func2 == 0b00'0010, m == 0b00, func1 == 0b001, form == 0b00;
-  vxor_vv_m     : KelvinV2ArgsType : func2 == 0b00'0010, m == 0b01, func1 == 0b001, form == 0b00;
-  vxor_b_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b00, func1 == 0b001, form == 0b10;
-  vxor_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b01, func1 == 0b001, form == 0b10;
-  vxor_h_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b00, func1 == 0b001, form == 0b10;
-  vxor_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b01, func1 == 0b001, form == 0b10;
-  vxor_w_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b00, func1 == 0b001, form == 0b10;
-  vxor_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b01, func1 == 0b001, form == 0b10;
+  vxor_vv       : KelvinV2ArgsType : func2 == 0b00'0010, m == 0b0, func1 == 0b001, form == 0b00;
+  vxor_vv_m     : KelvinV2ArgsType : func2 == 0b00'0010, m == 0b1, func1 == 0b001, form == 0b00;
+  vxor_b_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b0, func1 == 0b001, form == 0b10;
+  vxor_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b1, func1 == 0b001, form == 0b10;
+  vxor_h_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b0, func1 == 0b001, form == 0b10;
+  vxor_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b1, func1 == 0b001, form == 0b10;
+  vxor_w_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b0, func1 == 0b001, form == 0b10;
+  vxor_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vrev
-  vrev_b_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b00, func1 == 0b001, form == 0b00;
-  vrev_b_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b00, func1 == 0b001, form == 0b10;
-  vrev_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b01, func1 == 0b001, form == 0b00;
-  vrev_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b01, func1 == 0b001, form == 0b10;
-  vrev_h_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b00, func1 == 0b001, form == 0b00;
-  vrev_h_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b00, func1 == 0b001, form == 0b10;
-  vrev_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b01, func1 == 0b001, form == 0b00;
-  vrev_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b01, func1 == 0b001, form == 0b10;
-  vrev_w_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b00, func1 == 0b001, form == 0b00;
-  vrev_w_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b00, func1 == 0b001, form == 0b10;
-  vrev_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b01, func1 == 0b001, form == 0b00;
-  vrev_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b01, func1 == 0b001, form == 0b10;
+  vrev_b_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b0, func1 == 0b001, form == 0b00;
+  vrev_b_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b0, func1 == 0b001, form == 0b10;
+  vrev_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b1, func1 == 0b001, form == 0b00;
+  vrev_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b1, func1 == 0b001, form == 0b10;
+  vrev_h_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b0, func1 == 0b001, form == 0b00;
+  vrev_h_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b0, func1 == 0b001, form == 0b10;
+  vrev_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b1, func1 == 0b001, form == 0b00;
+  vrev_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b1, func1 == 0b001, form == 0b10;
+  vrev_w_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b0, func1 == 0b001, form == 0b00;
+  vrev_w_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b0, func1 == 0b001, form == 0b10;
+  vrev_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b1, func1 == 0b001, form == 0b00;
+  vrev_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vror
-  vror_b_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b00, func1 == 0b001, form == 0b00;
-  vror_b_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b00, func1 == 0b001, form == 0b10;
-  vror_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b01, func1 == 0b001, form == 0b00;
-  vror_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b01, func1 == 0b001, form == 0b10;
-  vror_h_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b00, func1 == 0b001, form == 0b00;
-  vror_h_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b00, func1 == 0b001, form == 0b10;
-  vror_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b01, func1 == 0b001, form == 0b00;
-  vror_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b01, func1 == 0b001, form == 0b10;
-  vror_w_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b00, func1 == 0b001, form == 0b00;
-  vror_w_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b00, func1 == 0b001, form == 0b10;
-  vror_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b01, func1 == 0b001, form == 0b00;
-  vror_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b01, func1 == 0b001, form == 0b10;
+  vror_b_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b0, func1 == 0b001, form == 0b00;
+  vror_b_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b0, func1 == 0b001, form == 0b10;
+  vror_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b1, func1 == 0b001, form == 0b00;
+  vror_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b1, func1 == 0b001, form == 0b10;
+  vror_h_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b0, func1 == 0b001, form == 0b00;
+  vror_h_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b0, func1 == 0b001, form == 0b10;
+  vror_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b1, func1 == 0b001, form == 0b00;
+  vror_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b1, func1 == 0b001, form == 0b10;
+  vror_w_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b0, func1 == 0b001, form == 0b00;
+  vror_w_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b0, func1 == 0b001, form == 0b10;
+  vror_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b1, func1 == 0b001, form == 0b00;
+  vror_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vmvp
-  vmvp_vv       : KelvinV2ArgsType : func2 == 0b00'1101, m == 0b00, func1 == 0b001, form == 0b00;
-  vmvp_vv_m     : KelvinV2ArgsType : func2 == 0b00'1101, m == 0b01, func1 == 0b001, form == 0b00;
-  vmvp_b_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b00, func1 == 0b001, form == 0b10;
-  vmvp_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b01, func1 == 0b001, form == 0b10;
-  vmvp_h_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b00, func1 == 0b001, form == 0b10;
-  vmvp_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b01, func1 == 0b001, form == 0b10;
-  vmvp_w_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b00, func1 == 0b001, form == 0b10;
-  vmvp_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b01, func1 == 0b001, form == 0b10;
+  vmvp_vv       : KelvinV2ArgsType : func2 == 0b00'1101, m == 0b0, func1 == 0b001, form == 0b00;
+  vmvp_vv_m     : KelvinV2ArgsType : func2 == 0b00'1101, m == 0b1, func1 == 0b001, form == 0b00;
+  vmvp_b_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b0, func1 == 0b001, form == 0b10;
+  vmvp_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b1, func1 == 0b001, form == 0b10;
+  vmvp_h_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b0, func1 == 0b001, form == 0b10;
+  vmvp_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b1, func1 == 0b001, form == 0b10;
+  vmvp_w_vx     : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b0, func1 == 0b001, form == 0b10;
+  vmvp_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b1, func1 == 0b001, form == 0b10;
 };
diff --git a/sim/kelvin_base.isa b/sim/kelvin_base.isa
index 518fd78..38a19f3 100644
--- a/sim/kelvin_base.isa
+++ b/sim/kelvin_base.isa
@@ -7,7 +7,7 @@
 // Basic integer ALU instructions, part of the RiscV 32i subset.
 slot riscv32i {
   includes {
-    #include "riscv/riscv_i_instructions.h"
+    #include "external/com_google_mpact-riscv/riscv/riscv_i_instructions.h"
   }
   default size = 4;
   default latency = global_latency;
@@ -203,7 +203,7 @@
 // RiscV32 multiply/divide instructions.
 slot riscv32m {
   includes {
-    #include "riscv/riscv_m_instructions.h"
+    #include "external/com_google_mpact-riscv/riscv/riscv_m_instructions.h"
   }
   default size = 4;
   default latency = global_latency;
@@ -247,7 +247,7 @@
 // RiscV32 CSR manipulation instructions.
 slot zicsr {
   includes {
-    #include "riscv/riscv_zicsr_instructions.h"
+    #include "external/com_google_mpact-riscv/riscv/riscv_zicsr_instructions.h"
   }
   default size = 4;
   default latency = global_latency;
@@ -322,7 +322,7 @@
 // Instruction fence.
 slot zfencei {
   includes {
-    #include "riscv/riscv_zfencei_instructions.h"
+    #include "external/com_google_mpact-riscv/riscv/riscv_zfencei_instructions.h"
   }
   default size = 4;
   default latency = global_latency;
@@ -336,7 +336,7 @@
 // Privileged instructions.
 slot privileged {
   includes {
-    #include "riscv/riscv_priv_instructions.h"
+    #include "external/com_google_mpact-riscv/riscv/riscv_priv_instructions.h"
     #include "sim/kelvin_instructions.h"
   }
   default size = 4;
diff --git a/sim/kelvin_encoding.cc b/sim/kelvin_encoding.cc
index 6fcf863..1fd63ea 100644
--- a/sim/kelvin_encoding.cc
+++ b/sim/kelvin_encoding.cc
@@ -358,6 +358,8 @@
   decode_functions.push_back(encoding::DecodeKelvinVectorMemoryInst);
   decode_functions.push_back(encoding::DecodeKelvinVectorMulInst);
   decode_functions.push_back(encoding::DecodeKelvinVectorShiftInst);
+  decode_functions.push_back(encoding::DecodeRiscVZbbInst32);
+  decode_functions.push_back(encoding::DecodeRiscVZbbInst32Only);
   for (auto &function : decode_functions) {
     opcode_ = function(inst_word_);
     if (opcode_ != OpcodeEnum::kNone) break;
diff --git a/sim/kelvin_instructions.h b/sim/kelvin_instructions.h
index be0f77c..700e2e7 100644
--- a/sim/kelvin_instructions.h
+++ b/sim/kelvin_instructions.h
@@ -19,6 +19,11 @@
 
 #include "mpact/sim/generic/instruction.h"
 
+// We define this empty namespace and using it so that kelvin_encoder
+// can successfully resolve definitions for generic RiscV semfuncs.
+namespace mpact::sim::riscv {}
+using namespace mpact::sim::riscv;  // NOLINT
+
 namespace kelvin::sim {
 
 void KelvinIllegalInstruction(mpact::sim::generic::Instruction *inst);
diff --git a/sim/kelvin_memory.bin_fmt b/sim/kelvin_memory.bin_fmt
index 0e5530d..90a75fa 100644
--- a/sim/kelvin_memory.bin_fmt
+++ b/sim/kelvin_memory.bin_fmt
@@ -2,124 +2,124 @@
   // Kelvin Memory Vector instructions (Load / Store).
 
   //vld
-  vld_b_x       : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_h_x       : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_w_x       : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_b_p_x     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_h_p_x     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_w_p_x     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_b_x_m     : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_h_x_m     : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_w_x_m     : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_b_p_x_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_h_p_x_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_w_p_x_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_b_p_xx     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_h_p_xx     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_w_p_xx     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_b_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_h_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_w_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_b_l_xx      : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_h_l_xx      : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_w_l_xx      : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_b_lp_xx     : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_h_lp_xx     : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_w_lp_xx     : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_b_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_h_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_w_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_b_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_h_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_w_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_b_s_xx      : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_h_s_xx      : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_w_s_xx      : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_b_sp_xx     : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_h_sp_xx     : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_w_sp_xx     : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_b_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_h_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_w_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_b_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_h_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_w_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_b_tp_xx     : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_h_tp_xx     : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_w_tp_xx     : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vld_b_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_h_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vld_w_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
+  vld_b_x       : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_h_x       : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_w_x       : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_b_p_x     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_h_p_x     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_w_p_x     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_b_x_m     : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_h_x_m     : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_w_x_m     : KelvinV2ArgsType : func2 == 0b00'0000, vs2 == 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_b_p_x_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_h_p_x_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_w_p_x_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 == 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_b_p_xx     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_h_p_xx     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_w_p_xx     : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_b_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_h_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_w_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'0100, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_b_l_xx      : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_h_l_xx      : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_w_l_xx      : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_b_lp_xx     : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_h_lp_xx     : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_w_lp_xx     : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_b_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_h_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_w_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'0001, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_b_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_h_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_w_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0101, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_b_s_xx      : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_h_s_xx      : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_w_s_xx      : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_b_sp_xx     : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_h_sp_xx     : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_w_sp_xx     : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_b_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_h_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_w_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'0010, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_b_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_h_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_w_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0110, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_b_tp_xx     : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_h_tp_xx     : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_w_tp_xx     : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vld_b_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_h_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vld_w_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'0111, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
 
   // vst, note the `vs2`s below are actually xs2, and `vd` is actually the source vector register.
-  vst_b_x       : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_h_x       : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_w_x       : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_b_p_x     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_h_p_x     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_w_p_x     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_b_x_m     : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_h_x_m     : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_w_x_m     : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_b_p_x_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_h_p_x_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_w_p_x_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_b_p_xx     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_h_p_xx     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_w_p_xx     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_b_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_h_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_w_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_b_l_xx      : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_h_l_xx      : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_w_l_xx      : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_b_lp_xx     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_h_lp_xx     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_w_lp_xx     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_b_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_h_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_w_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_b_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_h_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_w_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_b_s_xx      : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_h_s_xx      : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_w_s_xx      : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_b_sp_xx     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_h_sp_xx     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_w_sp_xx     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_b_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_h_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_w_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_b_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_h_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_w_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_b_tp_xx     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_h_tp_xx     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_w_tp_xx     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vst_b_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_h_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vst_w_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vstq_b_s_xx     : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vstq_h_s_xx     : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vstq_w_s_xx     : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vstq_b_sp_xx    : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vstq_h_sp_xx    : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vstq_w_sp_xx    : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vstq_b_s_xx_m   : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vstq_h_s_xx_m   : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vstq_w_s_xx_m   : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
-  vstq_b_sp_xx_m  : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vstq_h_sp_xx_m  : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vstq_w_sp_xx_m  : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
+  vst_b_x       : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_h_x       : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_w_x       : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_b_p_x     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_h_p_x     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_w_p_x     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_b_x_m     : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_h_x_m     : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_w_x_m     : KelvinV2ArgsType : func2 == 0b00'1000, vs2 == 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_b_p_x_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_h_p_x_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_w_p_x_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_b_p_xx     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_h_p_xx     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_w_p_xx     : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_b_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_h_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_w_p_xx_m   : KelvinV2ArgsType : func2 == 0b00'1100, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_b_l_xx      : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_h_l_xx      : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_w_l_xx      : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_b_lp_xx     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_h_lp_xx     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_w_lp_xx     : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_b_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_h_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_w_l_xx_m    : KelvinV2ArgsType : func2 == 0b00'1001, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_b_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_h_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_w_lp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1101, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_b_s_xx      : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_h_s_xx      : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_w_s_xx      : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_b_sp_xx     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_h_sp_xx     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_w_sp_xx     : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_b_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_h_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_w_s_xx_m    : KelvinV2ArgsType : func2 == 0b00'1010, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_b_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_h_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_w_sp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1110, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_b_tp_xx     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_h_tp_xx     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_w_tp_xx     : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vst_b_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_h_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vst_w_tp_xx_m   : KelvinV2ArgsType : func2 == 0b00'1111, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vstq_b_s_xx     : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vstq_h_s_xx     : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vstq_w_s_xx     : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vstq_b_sp_xx    : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vstq_h_sp_xx    : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vstq_w_sp_xx    : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vstq_b_s_xx_m   : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vstq_h_s_xx_m   : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vstq_w_s_xx_m   : KelvinV2ArgsType : func2 == 0b01'1010, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
+  vstq_b_sp_xx_m  : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vstq_h_sp_xx_m  : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vstq_w_sp_xx_m  : KelvinV2ArgsType : func2 == 0b01'1110, vs2 != 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
 
   // vdup
-  vdup_b_x    : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b00, m == 0b00, func1 == 0b111, form == 0b11;
-  vdup_h_x    : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b01, m == 0b00, func1 == 0b111, form == 0b11;
-  vdup_w_x    : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b10, m == 0b00, func1 == 0b111, form == 0b11;
-  vdup_b_x_m  : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b00, m == 0b01, func1 == 0b111, form == 0b11;
-  vdup_h_x_m  : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b01, m == 0b01, func1 == 0b111, form == 0b11;
-  vdup_w_x_m  : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b10, m == 0b01, func1 == 0b111, form == 0b11;
+  vdup_b_x    : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b00, m == 0b0, func1 == 0b111, form == 0b11;
+  vdup_h_x    : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b01, m == 0b0, func1 == 0b111, form == 0b11;
+  vdup_w_x    : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b10, m == 0b0, func1 == 0b111, form == 0b11;
+  vdup_b_x_m  : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b00, m == 0b1, func1 == 0b111, form == 0b11;
+  vdup_h_x_m  : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b01, m == 0b1, func1 == 0b111, form == 0b11;
+  vdup_w_x_m  : KelvinV2ArgsType : func2 == 0b01'0000, vs1 == 0, sz == 0b10, m == 0b1, func1 == 0b111, form == 0b11;
 
   // vcget
   vcget           : KelvinV2ArgsType : func2 == 0b01'0100, vs2 == 0, vs1 == 0, vd == 48, func1 == 0b111, form == 0b11;
diff --git a/sim/kelvin_mul.bin_fmt b/sim/kelvin_mul.bin_fmt
index a23a2c5..7eeb504 100644
--- a/sim/kelvin_mul.bin_fmt
+++ b/sim/kelvin_mul.bin_fmt
@@ -2,190 +2,190 @@
   // Kelvin Vector Mul/Div instructions (func1 011).
 
   //vmul
-  vmul_b_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmul_b_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmul_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmul_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmul_h_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmul_h_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmul_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmul_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmul_w_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmul_w_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmul_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmul_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmul_b_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmul_b_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmul_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmul_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmul_h_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmul_h_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmul_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmul_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmul_w_vv     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmul_w_vx     : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmul_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmul_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'000, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmuls
-  vmuls_b_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmuls_b_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmuls_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmuls_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmuls_h_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmuls_h_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmuls_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmuls_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmuls_w_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmuls_w_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmuls_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmuls_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmuls_b_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmuls_b_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmuls_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmuls_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmuls_h_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmuls_h_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmuls_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmuls_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmuls_w_vv     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmuls_w_vx     : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmuls_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmuls_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'010, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmulsu
-  vmulsu_b_vv     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulsu_b_vx     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulsu_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulsu_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulsu_h_vv     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulsu_h_vx     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulsu_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulsu_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulsu_w_vv     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulsu_w_vx     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulsu_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulsu_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmulsu_b_vv     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulsu_b_vx     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulsu_b_vv_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulsu_b_vx_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulsu_h_vv     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulsu_h_vx     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulsu_h_vv_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulsu_h_vx_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulsu_w_vv     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulsu_w_vx     : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulsu_w_vv_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulsu_w_vx_m   : KelvinV2ArgsType : func2 == 0b000'011, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmulw
-  vmulw_h_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulw_h_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulw_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulw_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulw_w_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulw_w_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulw_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulw_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmulw_h_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulw_h_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulw_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulw_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulw_w_vv     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulw_w_vx     : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulw_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulw_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmulwu
-  vmulw_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulw_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulw_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulw_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulw_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulw_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulw_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulw_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmulw_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulw_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulw_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulw_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulw_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulw_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulw_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulw_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmulh
-  vmulh_b_vv     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_b_vx     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulh_h_vv     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_h_vx     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulh_w_vv     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_w_vx     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmulh_b_vv     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_b_vx     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulh_h_vv     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_h_vx     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulh_w_vv     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_w_vx     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmulh.r
-  vmulh_b_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_b_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulh_h_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_h_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulh_w_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_w_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmulh_b_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_b_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulh_h_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_h_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulh_w_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_w_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmulh.u
-  vmulh_b_u_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_b_u_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_b_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_b_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulh_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulh_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmulh_b_u_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_b_u_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_b_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_b_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulh_h_u_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_h_u_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_h_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_h_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulh_w_u_vv     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_w_u_vx     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_w_u_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_w_u_vx_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmulh.ur
-  vmulh_b_ur_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_b_ur_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_b_ur_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_b_ur_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulh_h_ur_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_h_ur_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_h_ur_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_h_ur_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmulh_w_ur_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmulh_w_ur_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmulh_w_ur_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmulh_w_ur_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmulh_b_ur_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_b_ur_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_b_ur_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_b_ur_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulh_h_ur_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_h_ur_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_h_ur_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_h_ur_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmulh_w_ur_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmulh_w_ur_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmulh_w_ur_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmulh_w_ur_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vdmulh
-  vdmulh_b_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_b_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vdmulh_h_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_h_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vdmulh_w_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_w_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vdmulh_b_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_b_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vdmulh_h_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_h_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vdmulh_w_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_w_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vdmulh.r
-  vdmulh_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vdmulh_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vdmulh_w_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_w_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vdmulh_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vdmulh_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vdmulh_w_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_w_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vdmulh.rn
-  vdmulh_b_rn_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_b_rn_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_b_rn_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_b_rn_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vdmulh_h_rn_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_h_rn_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_h_rn_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_h_rn_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vdmulh_w_rn_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vdmulh_w_rn_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vdmulh_w_rn_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vdmulh_w_rn_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vdmulh_b_rn_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_b_rn_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_b_rn_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_b_rn_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vdmulh_h_rn_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_h_rn_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_h_rn_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_h_rn_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vdmulh_w_rn_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vdmulh_w_rn_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vdmulh_w_rn_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vdmulh_w_rn_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmacc
-  vmacc_b_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmacc_b_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmacc_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmacc_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmacc_h_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmacc_h_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmacc_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmacc_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmacc_w_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmacc_w_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmacc_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmacc_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmacc_b_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmacc_b_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmacc_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmacc_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmacc_h_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmacc_h_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmacc_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmacc_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmacc_w_vv     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmacc_w_vx     : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmacc_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmacc_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0100, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 
   //vmadd
-  vmadd_b_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b00;
-  vmadd_b_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b00, func1 == 0b011, form == 0b10;
-  vmadd_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b00;
-  vmadd_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b01, func1 == 0b011, form == 0b10;
-  vmadd_h_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b00;
-  vmadd_h_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b00, func1 == 0b011, form == 0b10;
-  vmadd_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b00;
-  vmadd_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b01, func1 == 0b011, form == 0b10;
-  vmadd_w_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b00;
-  vmadd_w_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b00, func1 == 0b011, form == 0b10;
-  vmadd_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b00;
-  vmadd_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b01, func1 == 0b011, form == 0b10;
+  vmadd_b_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b00;
+  vmadd_b_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b0, func1 == 0b011, form == 0b10;
+  vmadd_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b00;
+  vmadd_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b00, m == 0b1, func1 == 0b011, form == 0b10;
+  vmadd_h_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b00;
+  vmadd_h_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b0, func1 == 0b011, form == 0b10;
+  vmadd_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b00;
+  vmadd_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b01, m == 0b1, func1 == 0b011, form == 0b10;
+  vmadd_w_vv     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b00;
+  vmadd_w_vx     : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b0, func1 == 0b011, form == 0b10;
+  vmadd_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b00;
+  vmadd_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0101, sz == 0b10, m == 0b1, func1 == 0b011, form == 0b10;
 };
diff --git a/sim/kelvin_shift.bin_fmt b/sim/kelvin_shift.bin_fmt
index ba2f37f..b6d6a03 100644
--- a/sim/kelvin_shift.bin_fmt
+++ b/sim/kelvin_shift.bin_fmt
@@ -2,334 +2,334 @@
   // Kelvin Vector Shift / Shuffle instructions (func1 010/110).
 
   //vsll
-  vsll_b_vv     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsll_b_vx     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsll_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsll_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsll_h_vv     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsll_h_vx     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsll_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsll_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vsll_w_vv     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b00;
-  vsll_w_vx     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b10;
-  vsll_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b00;
-  vsll_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b10;
+  vsll_b_vv     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsll_b_vx     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsll_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsll_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsll_h_vv     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsll_h_vx     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsll_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsll_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vsll_w_vv     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b00;
+  vsll_w_vx     : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b10;
+  vsll_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b00;
+  vsll_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vsra
-  vsra_b_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsra_b_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsra_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsra_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsra_h_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsra_h_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsra_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsra_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vsra_w_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b00;
-  vsra_w_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b10;
-  vsra_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b00;
-  vsra_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b10;
+  vsra_b_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsra_b_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsra_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsra_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsra_h_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsra_h_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsra_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsra_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vsra_w_vv     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b00;
+  vsra_w_vx     : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b10;
+  vsra_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b00;
+  vsra_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vsrl
-  vsrl_b_vv     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsrl_b_vx     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsrl_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsrl_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsrl_h_vv     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsrl_h_vx     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsrl_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsrl_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vsrl_w_vv     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b00;
-  vsrl_w_vx     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b10;
-  vsrl_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b00;
-  vsrl_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b10;
+  vsrl_b_vv     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsrl_b_vx     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsrl_b_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsrl_b_vx_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsrl_h_vv     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsrl_h_vx     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsrl_h_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsrl_h_vx_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vsrl_w_vv     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b00;
+  vsrl_w_vx     : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b10;
+  vsrl_w_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b00;
+  vsrl_w_vx_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vsha
-  vsha_b_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsha_b_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsha_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsha_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsha_h_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsha_h_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsha_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsha_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vsha_w_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b00;
-  vsha_w_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b10;
-  vsha_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b00;
-  vsha_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b10;
-  vsha_b_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsha_b_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsha_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsha_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsha_h_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsha_h_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsha_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsha_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vsha_w_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b00;
-  vsha_w_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b10;
-  vsha_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b00;
-  vsha_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b10;
+  vsha_b_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsha_b_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsha_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsha_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsha_h_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsha_h_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsha_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsha_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vsha_w_vv       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b00;
+  vsha_w_vx       : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b10;
+  vsha_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b00;
+  vsha_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b10;
+  vsha_b_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsha_b_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsha_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsha_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsha_h_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsha_h_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsha_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsha_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vsha_w_r_vv     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b00;
+  vsha_w_r_vx     : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b10;
+  vsha_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b00;
+  vsha_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vshl
-  vshl_b_vv       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vshl_b_vx       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vshl_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vshl_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vshl_h_vv       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vshl_h_vx       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vshl_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vshl_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vshl_w_vv       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b00;
-  vshl_w_vx       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b10;
-  vshl_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b00;
-  vshl_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b10;
-  vshl_b_r_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vshl_b_r_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vshl_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vshl_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vshl_h_r_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vshl_h_r_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vshl_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vshl_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vshl_w_r_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b00;
-  vshl_w_r_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b010, form == 0b10;
-  vshl_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b00;
-  vshl_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b010, form == 0b10;
+  vshl_b_vv       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vshl_b_vx       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vshl_b_vv_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vshl_b_vx_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vshl_h_vv       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vshl_h_vx       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vshl_h_vv_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vshl_h_vx_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vshl_w_vv       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b00;
+  vshl_w_vx       : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b10;
+  vshl_w_vv_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b00;
+  vshl_w_vx_m     : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b10;
+  vshl_b_r_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vshl_b_r_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vshl_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vshl_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vshl_h_r_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vshl_h_r_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vshl_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vshl_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vshl_w_r_vv     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b00;
+  vshl_w_r_vx     : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b010, form == 0b10;
+  vshl_w_r_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b00;
+  vshl_w_r_vx_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vnot
-  vnot_v          : KelvinV2ArgsType : func2 == 0b00'0011, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vnot_v_m        : KelvinV2ArgsType : func2 == 0b00'0011, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
+  vnot_v          : KelvinV2ArgsType : func2 == 0b00'0011, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vnot_v_m        : KelvinV2ArgsType : func2 == 0b00'0011, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vclb
-  vclb_b_v        : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vclb_b_v_m      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
-  vclb_h_v        : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vclb_h_v_m      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
-  vclb_w_v        : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vclb_w_v_m      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
+  vclb_b_v        : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vclb_b_v_m      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
+  vclb_h_v        : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vclb_h_v_m      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
+  vclb_w_v        : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vclb_w_v_m      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vclz
-  vclz_b_v        : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vclz_b_v_m      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
-  vclz_h_v        : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vclz_h_v_m      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
-  vclz_w_v        : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vclz_w_v_m      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
+  vclz_b_v        : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vclz_b_v_m      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
+  vclz_h_v        : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vclz_h_v_m      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
+  vclz_w_v        : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vclz_w_v_m      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vcpop
-  vcpop_b_v        : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vcpop_b_v_m      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
-  vcpop_h_v        : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vcpop_h_v_m      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
-  vcpop_w_v        : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vcpop_w_v_m      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
+  vcpop_b_v        : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vcpop_b_v_m      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
+  vcpop_h_v        : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vcpop_h_v_m      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
+  vcpop_w_v        : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vcpop_w_v_m      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vmv
-  vmv_v          : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, m == 0b00, func1 == 0b001, form == 0b10;
-  vmv_v_m        : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, m == 0b01, func1 == 0b001, form == 0b10;
+  vmv_v          : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, m == 0b0, func1 == 0b001, form == 0b10;
+  vmv_v_m        : KelvinV2ArgsType : func2 == 0b00'1100, vs2 == 0, m == 0b1, func1 == 0b001, form == 0b10;
 
   //vsrans
-  vsrans_b_vv       : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsrans_b_vx       : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsrans_b_vv_m     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsrans_b_vx_m     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsrans_h_vv       : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsrans_h_vx       : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsrans_h_vv_m     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsrans_h_vx_m     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vsrans_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsrans_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsrans_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsrans_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsrans_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsrans_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsrans_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsrans_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
+  vsrans_b_vv       : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsrans_b_vx       : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsrans_b_vv_m     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsrans_b_vx_m     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsrans_h_vv       : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsrans_h_vx       : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsrans_h_vv_m     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsrans_h_vx_m     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vsrans_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsrans_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsrans_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsrans_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsrans_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsrans_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsrans_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsrans_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0010, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vsransu
-  vsransu_b_vv       : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsransu_b_vx       : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsransu_b_vv_m     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsransu_b_vx_m     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsransu_h_vv       : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsransu_h_vx       : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsransu_h_vv_m     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsransu_h_vx_m     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
-  vsransu_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsransu_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsransu_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsransu_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsransu_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b00;
-  vsransu_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b00, func1 == 0b010, form == 0b10;
-  vsransu_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b00;
-  vsransu_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b01, func1 == 0b010, form == 0b10;
+  vsransu_b_vv       : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsransu_b_vx       : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsransu_b_vv_m     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsransu_b_vx_m     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsransu_h_vv       : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsransu_h_vx       : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsransu_h_vv_m     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsransu_h_vx_m     : KelvinV2ArgsType : func2 == 0b01'0001, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
+  vsransu_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsransu_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsransu_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsransu_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsransu_h_r_vv     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b00;
+  vsransu_h_r_vx     : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b0, func1 == 0b010, form == 0b10;
+  vsransu_h_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b00;
+  vsransu_h_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'0011, sz == 0b01, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vsraqs
-  vsraqs_b_vv       : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsraqs_b_vx       : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsraqs_b_vv_m     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsraqs_b_vx_m     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsraqs_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsraqs_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsraqs_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsraqs_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
+  vsraqs_b_vv       : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsraqs_b_vx       : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsraqs_b_vv_m     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsraqs_b_vx_m     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsraqs_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsraqs_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsraqs_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsraqs_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vsraqsu
-  vsraqsu_b_vv       : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsraqsu_b_vx       : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsraqsu_b_vv_m     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsraqsu_b_vx_m     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
-  vsraqsu_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'1011, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b00;
-  vsraqsu_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'1011, sz == 0b00, m == 0b00, func1 == 0b010, form == 0b10;
-  vsraqsu_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'1011, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b00;
-  vsraqsu_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'1011, sz == 0b00, m == 0b01, func1 == 0b010, form == 0b10;
+  vsraqsu_b_vv       : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsraqsu_b_vx       : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsraqsu_b_vv_m     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsraqsu_b_vx_m     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
+  vsraqsu_b_r_vv     : KelvinV2ArgsType : func2 == 0b01'1011, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b00;
+  vsraqsu_b_r_vx     : KelvinV2ArgsType : func2 == 0b01'1011, sz == 0b00, m == 0b0, func1 == 0b010, form == 0b10;
+  vsraqsu_b_r_vv_m   : KelvinV2ArgsType : func2 == 0b01'1011, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b00;
+  vsraqsu_b_r_vx_m   : KelvinV2ArgsType : func2 == 0b01'1011, sz == 0b00, m == 0b1, func1 == 0b010, form == 0b10;
 
   //vslidevn
-  vsliden_b_1_vv      : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_b_2_vv      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_b_3_vv      : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_b_4_vv      : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_h_1_vv      : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_h_2_vv      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_h_3_vv      : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_h_4_vv      : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_w_1_vv      : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_w_2_vv      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_w_3_vv      : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vsliden_w_4_vv      : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidevn_b_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_b_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_b_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_b_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_h_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_h_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_h_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_h_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_w_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_w_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_w_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevn_w_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
+  vsliden_b_1_vv      : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_b_2_vv      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_b_3_vv      : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_b_4_vv      : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_h_1_vv      : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_h_2_vv      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_h_3_vv      : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_h_4_vv      : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_w_1_vv      : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_w_2_vv      : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_w_3_vv      : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vsliden_w_4_vv      : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidevn_b_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_b_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_b_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_b_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_h_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_h_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_h_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_h_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_w_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0000, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_w_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0001, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_w_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0010, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevn_w_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0011, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
 
   //vslidehn
-  vslidehn_b_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_b_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_b_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_b_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_h_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_h_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_h_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_h_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_w_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_w_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_w_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehn_w_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
+  vslidehn_b_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_b_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_b_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_b_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_h_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_h_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_h_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_h_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_w_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'0100, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_w_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'0101, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_w_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'0110, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehn_w_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'0111, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
 
   //vslidevp
-  vslidep_b_1_vv      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_b_2_vv      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_b_3_vv      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_b_4_vv      : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_h_1_vv      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_h_2_vv      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_h_3_vv      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_h_4_vv      : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_w_1_vv      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_w_2_vv      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_w_3_vv      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidep_w_4_vv      : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vslidevp_b_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_b_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_b_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_b_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_h_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_h_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_h_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_h_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_w_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_w_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_w_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidevp_w_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
+  vslidep_b_1_vv      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_b_2_vv      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_b_3_vv      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_b_4_vv      : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_h_1_vv      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_h_2_vv      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_h_3_vv      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_h_4_vv      : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_w_1_vv      : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_w_2_vv      : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_w_3_vv      : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidep_w_4_vv      : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vslidevp_b_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_b_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_b_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_b_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_h_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_h_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_h_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_h_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_w_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1000, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_w_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1001, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_w_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1010, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidevp_w_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1011, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
 
   //vslidehp
-  vslidehp_b_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_b_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_b_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_b_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_h_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_h_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_h_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_h_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_w_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_w_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_w_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vslidehp_w_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
+  vslidehp_b_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_b_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_b_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_b_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_h_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_h_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_h_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_h_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_w_1_vv_m   : KelvinV2ArgsType : func2 == 0b00'1100, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_w_2_vv_m   : KelvinV2ArgsType : func2 == 0b00'1101, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_w_3_vv_m   : KelvinV2ArgsType : func2 == 0b00'1110, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vslidehp_w_4_vv_m   : KelvinV2ArgsType : func2 == 0b00'1111, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
 
   //vsel
-  vsel_b_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vsel_b_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b10;
-  vsel_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vsel_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b10;
-  vsel_h_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vsel_h_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b10;
-  vsel_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vsel_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b10;
-  vsel_w_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vsel_w_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b10;
-  vsel_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vsel_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b10;
+  vsel_b_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vsel_b_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b10;
+  vsel_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vsel_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b10;
+  vsel_h_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vsel_h_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b10;
+  vsel_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vsel_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b10;
+  vsel_w_vv     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vsel_w_vx     : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b10;
+  vsel_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vsel_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'0000, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b10;
 
   //vevn
-  vevn_b_vv     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vevn_b_vx     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b10;
-  vevn_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vevn_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b10;
-  vevn_h_vv     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vevn_h_vx     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b10;
-  vevn_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vevn_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b10;
-  vevn_w_vv     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vevn_w_vx     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b10;
-  vevn_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vevn_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b10;
+  vevn_b_vv     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vevn_b_vx     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b10;
+  vevn_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vevn_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b10;
+  vevn_h_vv     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vevn_h_vx     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b10;
+  vevn_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vevn_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b10;
+  vevn_w_vv     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vevn_w_vx     : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b10;
+  vevn_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vevn_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'1000, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b10;
 
   //vodd
-  vodd_b_vv     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vodd_b_vx     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b10;
-  vodd_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vodd_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b10;
-  vodd_h_vv     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vodd_h_vx     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b10;
-  vodd_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vodd_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b10;
-  vodd_w_vv     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vodd_w_vx     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b10;
-  vodd_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vodd_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b10;
+  vodd_b_vv     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vodd_b_vx     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b10;
+  vodd_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vodd_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b10;
+  vodd_h_vv     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vodd_h_vx     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b10;
+  vodd_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vodd_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b10;
+  vodd_w_vv     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vodd_w_vx     : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b10;
+  vodd_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vodd_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'1001, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b10;
 
   //vevnodd
-  vevnodd_b_vv     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vevnodd_b_vx     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b10;
-  vevnodd_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vevnodd_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b10;
-  vevnodd_h_vv     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vevnodd_h_vx     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b10;
-  vevnodd_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vevnodd_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b10;
-  vevnodd_w_vv     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vevnodd_w_vx     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b10;
-  vevnodd_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vevnodd_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b10;
+  vevnodd_b_vv     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vevnodd_b_vx     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b10;
+  vevnodd_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vevnodd_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b10;
+  vevnodd_h_vv     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vevnodd_h_vx     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b10;
+  vevnodd_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vevnodd_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b10;
+  vevnodd_w_vv     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vevnodd_w_vx     : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b10;
+  vevnodd_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vevnodd_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'1010, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b10;
 
   //vzip
-  vzip_b_vv     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b00;
-  vzip_b_vx     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b00, m == 0b00, func1 == 0b110, form == 0b10;
-  vzip_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b00;
-  vzip_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b00, m == 0b01, func1 == 0b110, form == 0b10;
-  vzip_h_vv     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b00;
-  vzip_h_vx     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b01, m == 0b00, func1 == 0b110, form == 0b10;
-  vzip_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b00;
-  vzip_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b01, m == 0b01, func1 == 0b110, form == 0b10;
-  vzip_w_vv     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b00;
-  vzip_w_vx     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b10, m == 0b00, func1 == 0b110, form == 0b10;
-  vzip_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b00;
-  vzip_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b10, m == 0b01, func1 == 0b110, form == 0b10;
+  vzip_b_vv     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b00;
+  vzip_b_vx     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b00, m == 0b0, func1 == 0b110, form == 0b10;
+  vzip_b_vv_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b00;
+  vzip_b_vx_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b00, m == 0b1, func1 == 0b110, form == 0b10;
+  vzip_h_vv     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b00;
+  vzip_h_vx     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b01, m == 0b0, func1 == 0b110, form == 0b10;
+  vzip_h_vv_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b00;
+  vzip_h_vx_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b01, m == 0b1, func1 == 0b110, form == 0b10;
+  vzip_w_vv     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b00;
+  vzip_w_vx     : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b10, m == 0b0, func1 == 0b110, form == 0b10;
+  vzip_w_vv_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b00;
+  vzip_w_vx_m   : KelvinV2ArgsType : func2 == 0b01'1100, sz == 0b10, m == 0b1, func1 == 0b110, form == 0b10;
 };
diff --git a/sim/kelvin_sim.cc b/sim/kelvin_sim.cc
index 38f268b..ca5717a 100644
--- a/sim/kelvin_sim.cc
+++ b/sim/kelvin_sim.cc
@@ -213,8 +213,8 @@
 
   // Determine if this is being run interactively or as a batch job.
   if (interactive) {
-    mpact::sim::riscv::DebugCommandShell cmd_shell(
-        {{&kelvin_top, &elf_loader}});
+    mpact::sim::riscv::DebugCommandShell cmd_shell;
+    cmd_shell.AddCore({&kelvin_top, [&elf_loader]() { return &elf_loader; }});
     // Add custom commands to interactive debug command shell.
     cmd_shell.AddCommand(
         "    reg info                       - print all scalar regs",
diff --git a/sim/kelvin_state.cc b/sim/kelvin_state.cc
index d6aeaa2..36b06b6 100644
--- a/sim/kelvin_state.cc
+++ b/sim/kelvin_state.cc
@@ -17,7 +17,6 @@
 #include <any>
 #include <cstdint>
 #include <iostream>
-#include <ostream>
 #include <string>
 
 #include "absl/log/check.h"
@@ -47,11 +46,17 @@
     mpact::sim::util::MemoryInterface *memory,
     mpact::sim::util::AtomicMemoryOpInterface *atomic_memory)
     : mpact::sim::riscv::RiscVState(id, xlen, memory, atomic_memory),
-      kisa_("kisa", static_cast<RiscVCsrEnum>(KelvinCsrEnum::kKIsa), this),
-      mcycle_("mcycle", RiscVCsrEnum::kMCycle, this),
-      mcycleh_("mcycleh", RiscVCsrEnum::kMCycleH, this),
-      minstret_("minstret", RiscVCsrEnum::kMInstret, this),
-      minstreth_("minstreth", RiscVCsrEnum::kMInstretH, this) {
+      kisa_("kisa", static_cast<RiscVCsrEnum>(KelvinCsrEnum::kKIsa), this) {
+  auto res = csr_set()->GetCsr("minstret");
+  if (!res.ok()) {
+    LOG(FATAL) << "Failed to get minstret";
+  }
+  minstret_ = res.value();
+  res = csr_set()->GetCsr("minstreth");
+  if (!res.ok()) {
+    LOG(FATAL) << "Failed to get minstret";
+  }
+  minstreth_ = res.value();
   set_vector_register_width(kVectorRegisterWidth);
   for (int i = 0; i < acc_register_.size(); ++i) {
     acc_register_[i].fill(0);
@@ -66,19 +71,6 @@
   }
   auto *misa = *result;
   misa->Set(kKelvinMisaVal);
-
-  if (!csr_set()->AddCsr(&mcycle_).ok()) {
-    LOG(FATAL) << "Failed to register mcycle";
-  }
-  if (!csr_set()->AddCsr(&mcycleh_).ok()) {
-    LOG(FATAL) << "Failed to register mcycleh";
-  }
-  if (!csr_set()->AddCsr(&minstret_).ok()) {
-    LOG(FATAL) << "Failed to register minstret";
-  }
-  if (!csr_set()->AddCsr(&minstreth_).ok()) {
-    LOG(FATAL) << "Failed to register minstreth";
-  }
 }
 
 KelvinState::KelvinState(absl::string_view id,
@@ -86,10 +78,6 @@
                          mpact::sim::util::MemoryInterface *memory)
     : KelvinState(id, xlen, memory, nullptr) {}
 
-KelvinState::KelvinState(absl::string_view id,
-                         mpact::sim::riscv::RiscVXlen xlen)
-    : KelvinState(id, xlen, nullptr, nullptr) {}
-
 void KelvinState::MPause(const Instruction *inst) {
   for (auto &handler : on_mpause_) {
     bool res = handler(inst);
@@ -146,18 +134,4 @@
   log_args_.clear();
 }
 
-void KelvinState::IncrementMCycle(uint64_t value) {
-  uint64_t new_cycle =
-      (mcycle_.GetUint64() | (mcycleh_.GetUint64() << 32)) + value;
-  mcycle_.Set(new_cycle & 0xFFFFFFFF);
-  mcycleh_.Set(new_cycle >> 32);
-}
-
-void KelvinState::IncrementMInstret(uint64_t value) {
-  uint64_t new_instret =
-      (minstret_.GetUint64() | (minstreth_.GetUint64() << 32)) + value;
-  minstret_.Set(new_instret & 0xFFFFFFFF);
-  minstreth_.Set(new_instret >> 32);
-}
-
 }  // namespace kelvin::sim
diff --git a/sim/kelvin_state.h b/sim/kelvin_state.h
index 7788fb1..c9fe51d 100644
--- a/sim/kelvin_state.h
+++ b/sim/kelvin_state.h
@@ -65,7 +65,6 @@
               mpact::sim::util::AtomicMemoryOpInterface *atomic_memory);
   KelvinState(absl::string_view id, mpact::sim::riscv::RiscVXlen xlen,
               mpact::sim::util::MemoryInterface *memory);
-  KelvinState(absl::string_view id, mpact::sim::riscv::RiscVXlen xlen);
   ~KelvinState() override = default;
 
   // Deleted Constructors and operators.
@@ -97,9 +96,6 @@
     on_mpause_.emplace_back(std::move(handler));
   }
 
-  void IncrementMCycle(uint64_t value);
-  void IncrementMInstret(uint64_t value);
-
  private:
   uint32_t vector_length_{kVectorLengthInBits};
 
@@ -118,11 +114,9 @@
   // Kelvin-specific CSR, contains information about the Kelvin ISA version.
   mpact::sim::riscv::RiscV32SimpleCsr kisa_;
 
-  // mcycle/mcycleh CSR.
-  mpact::sim::riscv::RiscV32SimpleCsr mcycle_;
-  mpact::sim::riscv::RiscV32SimpleCsr mcycleh_;
-  mpact::sim::riscv::RiscV32SimpleCsr minstret_;
-  mpact::sim::riscv::RiscV32SimpleCsr minstreth_;
+  // minstret CSR.
+  mpact::sim::riscv::RiscVCsrInterface *minstret_;
+  mpact::sim::riscv::RiscVCsrInterface *minstreth_;
 };
 
 }  // namespace kelvin::sim
diff --git a/sim/kelvin_top.cc b/sim/kelvin_top.cc
index 5bb2395..6cf7eba 100644
--- a/sim/kelvin_top.cc
+++ b/sim/kelvin_top.cc
@@ -29,6 +29,7 @@
 #include <utility>
 
 #include "sim/decoder.h"
+#include "sim/kelvin_action_point_memory_interface.h"
 #include "sim/kelvin_enums.h"
 #include "sim/kelvin_state.h"
 #include "sim/proto/kelvin_trace.pb.h"
@@ -41,11 +42,13 @@
 #include "absl/strings/str_cat.h"
 #include "absl/synchronization/notification.h"
 #include "riscv/riscv_arm_semihost.h"
-#include "riscv/riscv_breakpoint.h"
+#include "riscv/riscv_counter_csr.h"
 #include "riscv/riscv_fp_state.h"
 #include "riscv/riscv_register.h"
 #include "riscv/riscv_register_aliases.h"
 #include "riscv/riscv_state.h"
+#include "mpact/sim/generic/action_point_manager_base.h"
+#include "mpact/sim/generic/breakpoint_manager.h"
 #include "mpact/sim/generic/component.h"
 #include "mpact/sim/generic/core_debug_interface.h"
 #include "mpact/sim/generic/data_buffer.h"
@@ -65,6 +68,11 @@
 
 namespace kelvin::sim {
 
+using ::mpact::sim::generic::ActionPointManagerBase;
+using ::mpact::sim::generic::BreakpointManager;
+using ::mpact::sim::generic::DecodeCache;
+using ::mpact::sim::riscv::RiscVCounterCsr;
+using ::mpact::sim::riscv::RiscVCounterCsrHigh;
 using ::mpact::sim::generic::operator*;  // NOLINT: clang-tidy false positive.
 
 constexpr char kKelvinName[] = "Kelvin";
@@ -112,7 +120,9 @@
     delete run_halted_;
   }
 
-  delete rv_bp_manager_;
+  delete bp_manager_;
+  delete ap_manager_;
+  delete kelvin_ap_memory_interface_;
   delete decode_cache_;
   delete kelvin_decoder_;
   delete state_;
@@ -127,7 +137,7 @@
   state_ = new sim::KelvinState(kKelvinName, mpact::sim::riscv::RiscVXlen::RV32,
                                 memory_);
   state_->set_max_physical_address(kKelvinMaxMemoryAddress);
-  fp_state_ = new mpact::sim::riscv::RiscVFPState(state_);
+  fp_state_ = new mpact::sim::riscv::RiscVFPState(state_->csr_set(), state_);
   state_->set_rv_fp(fp_state_);
   pc_ = state_->registers()->at(sim::KelvinState::kPcName);
   // Set up the decoder and decode cache.
@@ -144,12 +154,15 @@
   CHECK_OK(AddCounter(&counter_num_instructions_))
       << "Failed to register counter";
 
-  // Always return 4-byte breakpoint instruction size
-  rv_bp_manager_ = new mpact::sim::riscv::RiscVBreakpointManager(
-      memory_,
-      absl::bind_front(&mpact::sim::generic::DecodeCache::Invalidate,
-                       decode_cache_),
-      [](uint64_t, uint32_t) -> int { return 4; });
+  // Set up break and action points.
+  kelvin_ap_memory_interface_ = new KelvinActionPointMemoryInterface(
+      state_->memory(),
+      absl::bind_front(&DecodeCache::Invalidate, decode_cache_));
+  ap_manager_ = new ActionPointManagerBase(kelvin_ap_memory_interface_);
+  bp_manager_ = new BreakpointManager(ap_manager_, [this]() {
+    RequestHalt(HaltReason::kSoftwareBreakpoint, nullptr);
+  });
+
   // Make sure the architectural and abi register aliases are added.
   std::string reg_name;
   for (int i = 0; i < 32; i++) {
@@ -168,9 +181,10 @@
           if (absl::GetFlag(FLAGS_use_semihost) &&
               semihost_->IsSemihostingCall(inst)) {
             semihost_->OnEBreak(inst);
-          } else if (rv_bp_manager_->HasBreakpoint(
-                         inst->address())) {  // Software breakpoint.
-            RequestHalt(HaltReason::kSoftwareBreakpoint, inst);
+          } else if (ap_manager_->IsActionPointActive(inst->address())) {
+            // Possible software breakpoint.
+            RequestHalt(HaltReason::kActionPoint, inst);
+            ap_manager_->PerformActions(inst->address());
           } else {  // The default Kelvin simulation mode.
             std::cout << "Program exits with fault" << '\n';
             RequestHalt(kHaltAbort, inst);
@@ -220,6 +234,29 @@
     return result;
   });
 
+  // Connect counters to instret(h) and mcycle(h) CSRs.
+  auto csr_res = state_->csr_set()->GetCsr("minstret");
+  // Minstret/minstreth.
+  auto *minstret = reinterpret_cast<RiscVCounterCsr<uint32_t, KelvinState> *>(
+      csr_res.value());
+  minstret->set_counter(&counter_num_instructions_);
+  csr_res = state_->csr_set()->GetCsr("minstreth");
+  CHECK_OK(csr_res.status()) << "Failed to get minstret CSR";
+  auto *minstreth =
+      reinterpret_cast<RiscVCounterCsrHigh<KelvinState> *>(csr_res.value());
+  minstreth->set_counter(&counter_num_instructions_);
+  // Mcycle/mcycleh.
+  csr_res = state_->csr_set()->GetCsr("mcycle");
+  CHECK_OK(csr_res.status()) << "Failed to get mcycle CSR";
+  auto *mcycle = reinterpret_cast<RiscVCounterCsr<uint32_t, KelvinState> *>(
+      csr_res.value());
+  mcycle->set_counter(&counter_num_cycles_);
+  csr_res = state_->csr_set()->GetCsr("mcycleh");
+  CHECK_OK(csr_res.status()) << "Failed to get mcycleh CSR";
+  auto *mcycleh =
+      reinterpret_cast<RiscVCounterCsrHigh<KelvinState> *>(csr_res.value());
+  mcycleh->set_counter(&counter_num_cycles_);
+
   semihost_->set_exit_callback(
       [this]() { RequestHalt(HaltReason::kSemihostHaltRequest, nullptr); });
 }
@@ -239,11 +276,20 @@
   return absl::OkStatus();
 }
 
+absl::Status KelvinTop::Halt(HaltReason halt_reason) {
+  RequestHalt(halt_reason, nullptr);
+  return absl::OkStatus();
+}
+
+absl::Status KelvinTop::Halt(HaltReasonValueType halt_reason) {
+  RequestHalt(halt_reason, nullptr);
+  return absl::OkStatus();
+}
+
 absl::Status KelvinTop::StepPastBreakpoint() {
   uint64_t pc = state_->pc_operand()->AsUint64(0);
-  uint64_t bpt_pc = pc;
   // Disable the breakpoint. Status will show error if there is no breakpoint.
-  auto status = rv_bp_manager_->DisableBreakpoint(pc);
+  (void)ap_manager_->ap_memory_interface()->WriteOriginalInstruction(pc);
   // Execute the real instruction.
   auto real_inst = decode_cache_->GetDecodedInstruction(pc);
   real_inst->IncRef();
@@ -260,10 +306,7 @@
   IncrementInstructionCount(1);
   real_inst->DecRef();
   // Re-enable the breakpoint.
-  if (status.ok()) {
-    status = rv_bp_manager_->EnableBreakpoint(bpt_pc);
-    if (!status.ok()) return status;
-  }
+  (void)ap_manager_->ap_memory_interface()->WriteBreakpointInstruction(pc);
   return absl::OkStatus();
 }
 
@@ -281,8 +324,8 @@
   halted_ = false;
   // First check to see if the previous halt was due to a breakpoint. If so,
   // need to step over the breakpoint.
-  if (halt_reason_ == *HaltReason::kSoftwareBreakpoint) {
-    halt_reason_ = *HaltReason::kNone;
+  if (need_to_step_over_) {
+    need_to_step_over_ = false;
     auto status = StepPastBreakpoint();
     if (!status.ok()) return status;
     count++;
@@ -318,6 +361,18 @@
     IncrementInstructionCount(1);
     // Get the next pc value.
     next_pc = pc_operand->AsUint64(0);
+    if (!halted_) continue;
+    // If it's an action point, just step over and continue.
+    if (halt_reason_ == *HaltReason::kActionPoint) {
+      auto status = StepPastBreakpoint();
+      if (!status.ok()) return status;
+      // Reset the halt reason and continue;
+      halted_ = false;
+      halt_reason_ = *HaltReason::kNone;
+      need_to_step_over_ = false;
+      continue;
+    }
+    break;
   }
   // Update the pc register, now that it can be read.
   if (halt_reason_ == *HaltReason::kSoftwareBreakpoint) {
@@ -343,8 +398,8 @@
   }
   // First check to see if the previous halt was due to a breakpoint. If so,
   // need to step over the breakpoint.
-  if (halt_reason_ == *HaltReason::kSoftwareBreakpoint) {
-    halt_reason_ = *HaltReason::kNone;
+  if (need_to_step_over_) {
+    need_to_step_over_ = false;
     auto status = StepPastBreakpoint();
     if (!status.ok()) return status;
   }
@@ -414,6 +469,22 @@
       IncrementInstructionCount(1);
       // Get the next pc value.
       next_pc = pc_operand->AsUint64(0);
+      if (!halted_) continue;
+      // If it's an action point, just step over and continue executing, as
+      // this is not a full breakpoint.
+      if (halt_reason_ == *HaltReason::kActionPoint) {
+        auto status = StepPastBreakpoint();
+        if (!status.ok()) {
+          // If there is an error, signal a simulator error.
+          halt_reason_ = *HaltReason::kSimulatorError;
+          break;
+        };
+        // Reset the halt reason and continue;
+        halted_ = false;
+        halt_reason_ = *HaltReason::kNone;
+        continue;
+      }
+      break;
     }
     // Update the pc register, now that it can be read (since we are not
     // running).
@@ -595,7 +666,7 @@
 }
 
 bool KelvinTop::HasBreakpoint(uint64_t address) {
-  return rv_bp_manager_->HasBreakpoint(address);
+  return bp_manager_->HasBreakpoint(address);
 }
 
 absl::Status KelvinTop::SetSwBreakpoint(uint64_t address) {
@@ -605,11 +676,11 @@
         "SetSwBreakpoint: Core must be halted");
   }
   // If there is no breakpoint manager, return an error.
-  if (rv_bp_manager_ == nullptr) {
+  if (bp_manager_ == nullptr) {
     return absl::InternalError("Breakpoints are not enabled");
   }
   // Try setting the breakpoint.
-  return rv_bp_manager_->SetBreakpoint(address);
+  return bp_manager_->SetBreakpoint(address);
 }
 
 absl::Status KelvinTop::ClearSwBreakpoint(uint64_t address) {
@@ -618,10 +689,10 @@
     return absl::FailedPreconditionError(
         "ClearSwBreakpoing: Core must be halted");
   }
-  if (rv_bp_manager_ == nullptr) {
+  if (bp_manager_ == nullptr) {
     return absl::InternalError("Breakpoints are not enabled");
   }
-  return rv_bp_manager_->ClearBreakpoint(address);
+  return bp_manager_->ClearBreakpoint(address);
 }
 
 absl::Status KelvinTop::ClearAllSwBreakpoints() {
@@ -630,10 +701,10 @@
     return absl::FailedPreconditionError(
         "ClearAllSwBreakpoints: Core must be halted");
   }
-  if (rv_bp_manager_ == nullptr) {
+  if (bp_manager_ == nullptr) {
     return absl::InternalError("Breakpoints are not enabled");
   }
-  rv_bp_manager_->ClearAllBreakpoints();
+  bp_manager_->ClearAllBreakpoints();
   return absl::OkStatus();
 }
 
@@ -652,17 +723,17 @@
   mpact::sim::generic::Instruction *inst = nullptr;
   // If requesting the disassembly for an instruction at a breakpoint, return
   // that of the original instruction instead.
-  if (rv_bp_manager_->IsBreakpoint(address)) {
-    auto bp_pc = address;
-    // Disable the breakpoint.
-    auto status = rv_bp_manager_->DisableBreakpoint(bp_pc);
-    if (!status.ok()) return status;
+  // If requesting the disassembly for an instruction at an action point, return
+  // that of the original instruction instead.
+  if (ap_manager_->IsActionPointActive(address)) {
+    // Write the original instruction back to memory.
+    (void)ap_manager_->ap_memory_interface()->WriteOriginalInstruction(address);
     // Get the real instruction.
-    inst = decode_cache_->GetDecodedInstruction(bp_pc);
+    inst = decode_cache_->GetDecodedInstruction(address);
     auto disasm = inst != nullptr ? inst->AsString() : "Invalid instruction";
-    // Re-enable the breakpoint.
-    status = rv_bp_manager_->EnableBreakpoint(bp_pc);
-    if (!status.ok()) return status;
+    // Restore the breakpoint instruction.
+    (void)ap_manager_->ap_memory_interface()->WriteBreakpointInstruction(
+        address);
     return disasm;
   }
 
@@ -706,16 +777,20 @@
 
 void KelvinTop::RequestHalt(HaltReasonValueType halt_reason,
                             const mpact::sim::generic::Instruction *inst) {
-  // First set the halt_reason_, then the half flag.
+  // First set the halt_reason_, then the halt flag.
   halt_reason_ = halt_reason;
   halted_ = true;
+  // If the halt reason is either sw breakpoint or action point, set
+  // need_to_step_over to true.
+  if ((halt_reason_ == *HaltReason::kSoftwareBreakpoint) ||
+      (halt_reason_ == *HaltReason::kActionPoint)) {
+    need_to_step_over_ = true;
+  }
 }
 
 void KelvinTop::RequestHalt(HaltReason halt_reason,
                             const mpact::sim::generic::Instruction *inst) {
-  // First set the halt_reason_, then the half flag.
-  halt_reason_ = static_cast<HaltReasonValueType>(halt_reason);
-  halted_ = true;
+  RequestHalt(*halt_reason, inst);
 }
 
 void KelvinTop::SetPc(uint64_t value) {
@@ -728,12 +803,10 @@
 
 void KelvinTop::IncrementCycleCount(uint64_t value) {
   counter_num_cycles_.Increment(value);
-  state_->IncrementMCycle(value);
 }
 
 void KelvinTop::IncrementInstructionCount(uint64_t value) {
   counter_num_instructions_.Increment(value);
-  state_->IncrementMInstret(value);
 }
 
 }  // namespace kelvin::sim
diff --git a/sim/kelvin_top.h b/sim/kelvin_top.h
index 9b48889..8721e08 100644
--- a/sim/kelvin_top.h
+++ b/sim/kelvin_top.h
@@ -21,6 +21,7 @@
 #include <cstdint>
 #include <string>
 
+#include "sim/kelvin_action_point_memory_interface.h"
 #include "sim/kelvin_enums.h"
 #include "sim/kelvin_state.h"
 #include "absl/container/flat_hash_map.h"
@@ -29,8 +30,9 @@
 #include "absl/status/statusor.h"
 #include "absl/synchronization/notification.h"
 #include "riscv/riscv_arm_semihost.h"
-#include "riscv/riscv_breakpoint.h"
 #include "riscv/riscv_fp_state.h"
+#include "mpact/sim/generic/action_point_manager_base.h"
+#include "mpact/sim/generic/breakpoint_manager.h"
 #include "mpact/sim/generic/component.h"
 #include "mpact/sim/generic/core_debug_interface.h"
 #include "mpact/sim/generic/counters.h"
@@ -38,6 +40,7 @@
 #include "mpact/sim/generic/decode_cache.h"
 #include "mpact/sim/generic/decoder_interface.h"
 #include "mpact/sim/generic/register.h"
+#include "mpact/sim/generic/type_helpers.h"
 #include "mpact/sim/util/memory/memory_interface.h"
 #include "mpact/sim/util/memory/memory_watcher.h"
 
@@ -45,6 +48,10 @@
 
 namespace kelvin::sim {
 
+using ::mpact::sim::generic::operator*;  // NOLINT: is used below (clang error).
+
+using ::mpact::sim::generic::ActionPointManagerBase;
+using ::mpact::sim::generic::BreakpointManager;
 using ::mpact::sim::generic::DataBuffer;
 using HaltReason = mpact::sim::generic::CoreDebugInterface::HaltReason;
 using HaltReasonValueType =
@@ -69,6 +76,8 @@
 
   // Methods inherited from CoreDebugInterface.
   absl::Status Halt() override;
+  absl::Status Halt(HaltReason halt_reason) override;
+  absl::Status Halt(HaltReasonValueType halt_reason) override;
   absl::StatusOr<int> Step(int num) override;
   absl::Status Run() override;
   absl::Status Wait() override;
@@ -137,8 +146,15 @@
   // The local Kelvin state.
   sim::KelvinState *state_;
   mpact::sim::riscv::RiscVFPState *fp_state_;
+  // Memory interface used by action point manager.
+  KelvinActionPointMemoryInterface *kelvin_ap_memory_interface_ = nullptr;
+  // Action point manager.
+  ActionPointManagerBase *ap_manager_ = nullptr;
   // Breakpoint manager.
-  mpact::sim::riscv::RiscVBreakpointManager *rv_bp_manager_ = nullptr;
+  BreakpointManager *bp_manager_ = nullptr;
+  // Flat to indicate that the current instruction is a break/action point that
+  // needs to be stepped over.
+  bool need_to_step_over_ = false;
   // The pc register instance.
   mpact::sim::generic::RegisterBase *pc_;
   // Kelvin decoder decoder instance.
diff --git a/sim/proto/kelvin_trace.proto b/sim/proto/kelvin_trace.proto
index 92aa5a8..02e0c88 100644
--- a/sim/proto/kelvin_trace.proto
+++ b/sim/proto/kelvin_trace.proto
@@ -12,16 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-syntax = "proto2";
+edition = "2023";
 
 package kelvin.sim.proto;
 
+option features.utf8_validation = NONE;
 option java_multiple_files = true;
 
 message TraceEntry {
-  optional uint32 address = 1;
-  optional uint32 opcode = 2;
-  optional string disasm = 3;
+  uint32 address = 1;
+  uint32 opcode = 2;
+  string disasm = 3;
 }
 
 message TraceData {
diff --git a/sim/renode/kelvin_renode.cc b/sim/renode/kelvin_renode.cc
index adef63e..ffb5a8f 100644
--- a/sim/renode/kelvin_renode.cc
+++ b/sim/renode/kelvin_renode.cc
@@ -65,6 +65,12 @@
 KelvinRenode::~KelvinRenode() { delete kelvin_top_; }
 
 absl::Status KelvinRenode::Halt() { return kelvin_top_->Halt(); }
+absl::Status KelvinRenode::Halt(HaltReason halt_reason) {
+  return kelvin_top_->Halt(halt_reason);
+}
+absl::Status KelvinRenode::Halt(HaltReasonValueType halt_reason) {
+  return kelvin_top_->Halt(halt_reason);
+}
 absl::StatusOr<int> KelvinRenode::Step(int num_steps) {
   return kelvin_top_->Step(num_steps);
 }
diff --git a/sim/renode/kelvin_renode.h b/sim/renode/kelvin_renode.h
index 43f4ed1..809651e 100644
--- a/sim/renode/kelvin_renode.h
+++ b/sim/renode/kelvin_renode.h
@@ -56,6 +56,8 @@
 
   // Request that core stop running override;
   absl::Status Halt() override;
+  absl::Status Halt(HaltReason halt_reason) override;
+  absl::Status Halt(HaltReasonValueType halt_reason) override;
   // Step the core by num instructions.
   absl::StatusOr<int> Step(int num) override;
   // Allow the core to free-run. The loop to run the instructions should be
diff --git a/sim/test/BUILD b/sim/test/BUILD
index e5d1b57..efcca3b 100644
--- a/sim/test/BUILD
+++ b/sim/test/BUILD
@@ -43,6 +43,7 @@
         "@com_google_googletest//:gtest_main",
         "@com_google_mpact-riscv//riscv:riscv_state",
         "@com_google_mpact-sim//mpact/sim/generic:arch_state",
+        "@com_google_mpact-sim//mpact/sim/util/memory",
     ],
 )
 
@@ -97,6 +98,7 @@
         "@com_google_absl//absl/strings",
         "@com_google_googletest//:gtest_main",
         "@com_google_mpact-sim//mpact/sim/generic:core",
+        "@com_google_mpact-sim//mpact/sim/generic:core_debug_interface",
         "@com_google_mpact-sim//mpact/sim/util/memory",
         "@com_google_mpact-sim//mpact/sim/util/program_loader:elf_loader",
     ],
diff --git a/sim/test/kelvin_decoder_test.cc b/sim/test/kelvin_decoder_test.cc
index dae78c7..d719f8b 100644
--- a/sim/test/kelvin_decoder_test.cc
+++ b/sim/test/kelvin_decoder_test.cc
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <cstdint>
 #include <ios>
 #include <string>
 
@@ -44,8 +45,9 @@
 class KelvinDecoderTest : public testing::Test {
  protected:
   KelvinDecoderTest()
-      : state_("kelvin_decoder_test", RiscVXlen::RV32),
-        memory_(0),
+      : memory_(0),
+        state_("kelvin_decoder_test", RiscVXlen::RV32, &memory_),
+
         loader_(&memory_),
         decoder_(&state_, &memory_) {
     const std::string input_file =
@@ -61,8 +63,8 @@
   ~KelvinDecoderTest() override { delete symbol_accessor_; }
 
   ELFIO::elfio elf_reader_;
-  kelvin::sim::KelvinState state_;
   mpact::sim::util::FlatDemandMemory memory_;
+  kelvin::sim::KelvinState state_;
   mpact::sim::util::ElfProgramLoader loader_;
   kelvin::sim::KelvinDecoder decoder_;
   SymbolAccessor *symbol_accessor_;
diff --git a/sim/test/kelvin_encoding_test.cc b/sim/test/kelvin_encoding_test.cc
index 8ebd7ca..5d1a38f 100644
--- a/sim/test/kelvin_encoding_test.cc
+++ b/sim/test/kelvin_encoding_test.cc
@@ -24,11 +24,13 @@
 #include "riscv/riscv_register.h"
 #include "riscv/riscv_state.h"
 #include "mpact/sim/generic/register.h"
+#include "mpact/sim/util/memory/flat_demand_memory.h"
 
 namespace {
 
 using kelvin::sim::KelvinState;
 using kelvin::sim::isa32::KelvinEncoding;
+using mpact::sim::util::FlatDemandMemory;
 using SlotEnum = kelvin::sim::isa32::SlotEnum;
 using OpcodeEnum = kelvin::sim::isa32::OpcodeEnum;
 using SourceOpEnum = kelvin::sim::isa32::SourceOpEnum;
@@ -120,11 +122,14 @@
 class KelvinEncodingTest : public testing::Test {
  protected:
   KelvinEncodingTest() {
-    state_ = new KelvinState("test", mpact::sim::riscv::RiscVXlen::RV32);
+    memory_ = new FlatDemandMemory();
+    state_ =
+        new KelvinState("test", mpact::sim::riscv::RiscVXlen::RV32, memory_);
     enc_ = new KelvinEncoding(state_);
   }
   ~KelvinEncodingTest() override {
     delete enc_;
+    delete memory_;
     delete state_;
   }
 
@@ -144,6 +149,7 @@
     return reinterpret_cast<T *>(dest);
   }
 
+  FlatDemandMemory *memory_;
   KelvinState *state_;
   KelvinEncoding *enc_;
 };
diff --git a/sim/test/kelvin_vector_instructions_test_base.h b/sim/test/kelvin_vector_instructions_test_base.h
index 1e874c3..ceb9c3f 100644
--- a/sim/test/kelvin_vector_instructions_test_base.h
+++ b/sim/test/kelvin_vector_instructions_test_base.h
@@ -433,8 +433,8 @@
   // Creates source and destination scalar register operands for the registers
   // named in the two vectors and appends them to the given instruction.
   void AppendRegisterOperands(Instruction *inst,
-                              const std::vector<std::string> &sources,
-                              const std::vector<std::string> &destinations) {
+                              absl::Span<const std::string> sources,
+                              absl::Span<const std::string> destinations) {
     for (auto &reg_name : sources) {
       auto *reg = state_->GetRegister<RV32Register>(reg_name).first;
       inst->AppendSource(reg->CreateSourceOperand());