[V1] RISC-V: Add mininal support for zabha extension.
Checks
Commit Message
From: yulong <shiyulong@iscas.ac.cn>
This patch add the mininal support for zabha extension.
The doc url as follow: https://github.com/riscv/riscv-zabha/blob/v1.0-rc1/zabha.adoc
There are have no amocas.[b|h] instructions, because the zacas extension is not merged.
gcc/ChangeLog:
* common/config/riscv/riscv-common.cc: Add zabha extension name.
* config/riscv/riscv.md (amo_addqi3): New mode.
(amo_addhi3): Ditto.
(amo_minqi3): Ditto.
(amo_minuqi3): Ditto.
(amo_minhi3): Ditto.
(amo_minuhi3): Ditto.
(amo_maxqi3): Ditto.
(amo_maxuqi3): Ditto.
(amo_maxhi3): Ditto.
(amo_maxuhi3): Ditto.
(amo_andqi3): Ditto.
(amo_andhi3): Ditto.
(amo_orqi3): Ditto.
(amo_orhi3): Ditto.
(amo_xorqi3): Ditto.
(amo_xorhi3): Ditto.
(amo_swapqi3): Ditto.
(amo_swaphi3): Ditto.
* config/riscv/riscv.opt: Add zabha extension.
---
gcc/common/config/riscv/riscv-common.cc | 2 +
gcc/config/riscv/riscv.md | 167 ++++++++++++++++++++++++
gcc/config/riscv/riscv.opt | 2 +
3 files changed, 171 insertions(+)
Comments
I am not sure it's worth adding a dedicated instruction pattern for
those instructions? In theory those instructions should just be used
by those atomic builin when zabha has enabled, but I think that would
be kinda of a bigger work item.
On Tue, Feb 6, 2024 at 5:18 PM <shiyulong@iscas.ac.cn> wrote:
>
> From: yulong <shiyulong@iscas.ac.cn>
>
> This patch add the mininal support for zabha extension.
> The doc url as follow: https://github.com/riscv/riscv-zabha/blob/v1.0-rc1/zabha.adoc
> There are have no amocas.[b|h] instructions, because the zacas extension is not merged.
>
> gcc/ChangeLog:
>
> * common/config/riscv/riscv-common.cc: Add zabha extension name.
> * config/riscv/riscv.md (amo_addqi3): New mode.
> (amo_addhi3): Ditto.
> (amo_minqi3): Ditto.
> (amo_minuqi3): Ditto.
> (amo_minhi3): Ditto.
> (amo_minuhi3): Ditto.
> (amo_maxqi3): Ditto.
> (amo_maxuqi3): Ditto.
> (amo_maxhi3): Ditto.
> (amo_maxuhi3): Ditto.
> (amo_andqi3): Ditto.
> (amo_andhi3): Ditto.
> (amo_orqi3): Ditto.
> (amo_orhi3): Ditto.
> (amo_xorqi3): Ditto.
> (amo_xorhi3): Ditto.
> (amo_swapqi3): Ditto.
> (amo_swaphi3): Ditto.
> * config/riscv/riscv.opt: Add zabha extension.
>
> ---
> gcc/common/config/riscv/riscv-common.cc | 2 +
> gcc/config/riscv/riscv.md | 167 ++++++++++++++++++++++++
> gcc/config/riscv/riscv.opt | 2 +
> 3 files changed, 171 insertions(+)
>
> diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc
> index 631ce8309a0..9c3be0d7651 100644
> --- a/gcc/common/config/riscv/riscv-common.cc
> +++ b/gcc/common/config/riscv/riscv-common.cc
> @@ -250,6 +250,7 @@ static const struct riscv_ext_version riscv_ext_version_table[] =
> {"za64rs", ISA_SPEC_CLASS_NONE, 1, 0},
> {"za128rs", ISA_SPEC_CLASS_NONE, 1, 0},
> {"zawrs", ISA_SPEC_CLASS_NONE, 1, 0},
> + {"zabha", ISA_SPEC_CLASS_NONE, 1, 0},
>
> {"zba", ISA_SPEC_CLASS_NONE, 1, 0},
> {"zbb", ISA_SPEC_CLASS_NONE, 1, 0},
> @@ -1504,6 +1505,7 @@ static const riscv_ext_flag_table_t riscv_ext_flag_table[] =
> {"za64rs", &gcc_options::x_riscv_za_subext, MASK_ZA64RS},
> {"za128rs", &gcc_options::x_riscv_za_subext, MASK_ZA128RS},
> {"zawrs", &gcc_options::x_riscv_za_subext, MASK_ZAWRS},
> + {"zabha", &gcc_options::x_riscv_za_subext, MASK_ZABHA},
>
> {"zba", &gcc_options::x_riscv_zb_subext, MASK_ZBA},
> {"zbb", &gcc_options::x_riscv_zb_subext, MASK_ZBB},
> diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md
> index 39b29795cd6..058b63ac7f0 100644
> --- a/gcc/config/riscv/riscv.md
> +++ b/gcc/config/riscv/riscv.md
> @@ -134,6 +134,9 @@
> ;; XTheadInt unspec
> UNSPECV_XTHEADINT_PUSH
> UNSPECV_XTHEADINT_POP
> +
> + ;; Zabha instructions.
> + UNSPEC_AMO_SWAP
> ])
>
> (define_constants
> @@ -849,6 +852,24 @@
> [(set_attr "type" "arith")
> (set_attr "mode" "SI")])
>
> +(define_insn "amo_addqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r,r")
> + (plus:QI (match_operand:QI 1 "register_operand" " r,r")
> + (match_operand:QI 2 "arith_operand" " r,r")))]
> + "TARGET_ZABHA"
> + "amoadd.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_addhi3"
> + [(set (match_operand:HI 0 "register_operand" "=r,r")
> + (plus:HI (match_operand:HI 1 "register_operand" " r,r")
> + (match_operand:HI 2 "arith_operand" " r,r")))]
> + "TARGET_ZABHA"
> + "amoadd.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> ;;
> ;; ....................
> ;;
> @@ -1645,6 +1666,78 @@
> [(set_attr "type" "fmove")
> (set_attr "mode" "<UNITMODE>")])
>
> +(define_insn "amo_minqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r")
> + (smin:QI (match_operand:QI 1 "register_operand" " r")
> + (match_operand:QI 2 "register_operand" " r")))]
> + "TARGET_ZABHA"
> + "amomin.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_minuqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r")
> + (umin:QI (match_operand:QI 1 "register_operand" " r")
> + (match_operand:QI 2 "register_operand" " r")))]
> + "TARGET_ZABHA"
> + "amominu.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_minhi3"
> + [(set (match_operand:HI 0 "register_operand" "=r")
> + (smin:HI (match_operand:HI 1 "register_operand" " r")
> + (match_operand:HI 2 "register_operand" " r")))]
> + "TARGET_ZABHA"
> + "amomin.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> +(define_insn "amo_minuhi3"
> + [(set (match_operand:HI 0 "register_operand" "=r")
> + (umin:HI (match_operand:HI 1 "register_operand" " r")
> + (match_operand:HI 2 "register_operand" " r")))]
> + "TARGET_ZABHA"
> + "amominu.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> +(define_insn "amo_maxqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r")
> + (smax:QI (match_operand:QI 1 "register_operand" " r")
> + (match_operand:QI 2 "register_operand" " r")))]
> + "TARGET_ZABHA"
> + "amomax.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_maxuqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r")
> + (umax:QI (match_operand:QI 1 "register_operand" " r")
> + (match_operand:QI 2 "register_operand" " r")))]
> + "TARGET_ZABHA"
> + "amomaxu.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_maxhi3"
> + [(set (match_operand:HI 0 "register_operand" "=r")
> + (smax:HI (match_operand:HI 1 "register_operand" " r")
> + (match_operand:HI 2 "register_operand" " r")))]
> + "TARGET_ZABHA"
> + "amomax.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> +(define_insn "amo_maxuhi3"
> + [(set (match_operand:HI 0 "register_operand" "=r")
> + (umax:HI (match_operand:HI 1 "register_operand" " r")
> + (match_operand:HI 2 "register_operand" " r")))]
> + "TARGET_ZABHA"
> + "amomaxu.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> ;;
> ;; ....................
> ;;
> @@ -1690,6 +1783,24 @@
> [(set_attr "type" "logical")
> (set_attr "mode" "<MODE>")])
>
> +(define_insn "amo_andqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r,r")
> + (and:QI (match_operand:QI 1 "register_operand" "r,r")
> + (match_operand:QI 2 "arith_operand" " r,r")))]
> + "TARGET_ZABHA"
> + "amoand.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_andhi3"
> + [(set (match_operand:HI 0 "register_operand" "=r,r")
> + (and:HI (match_operand:HI 1 "register_operand" "r,r")
> + (match_operand:HI 2 "arith_operand" " r,r")))]
> + "TARGET_ZABHA"
> + "amoand.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> (define_insn "<optab><mode>3"
> [(set (match_operand:X 0 "register_operand" "=r,r")
> (any_or:X (match_operand:X 1 "register_operand" "%r,r")
> @@ -1724,6 +1835,42 @@
> [(set_attr "type" "logical")
> (set_attr "mode" "SI")])
>
> +(define_insn "amo_orqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r,r")
> + (ior:QI (match_operand:QI 1 "register_operand" " r,r")
> + (match_operand:QI 2 "arith_operand" " r,r")))]
> + "TARGET_ZABHA"
> + "amoor.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_orhi3"
> + [(set (match_operand:HI 0 "register_operand" "=r,r")
> + (ior:HI (match_operand:HI 1 "register_operand" " r,r")
> + (match_operand:HI 2 "arith_operand" " r,r")))]
> + "TARGET_ZABHA"
> + "amoor.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> +(define_insn "amo_xorqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r,r")
> + (xor:QI (match_operand:QI 1 "register_operand" " r,r")
> + (match_operand:QI 2 "arith_operand" " r,r")))]
> + "TARGET_ZABHA"
> + "amoxor.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_xorhi3"
> + [(set (match_operand:HI 0 "register_operand" "=r,r")
> + (xor:HI (match_operand:HI 1 "register_operand" " r,r")
> + (match_operand:HI 2 "arith_operand" " r,r")))]
> + "TARGET_ZABHA"
> + "amoxor.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> ;;
> ;; ....................
> ;;
> @@ -3841,6 +3988,26 @@
> [(set_attr "type" "load")
> (set (attr "length") (const_int 8))])
>
> +(define_insn "amo_swapqi3"
> + [(set (match_operand:QI 0 "register_operand" "=r")
> + (unspec:QI [(match_operand:QI 1 "register_operand" "r")
> + (match_operand:QI 2 "register_operand" "r")]
> + UNSPEC_AMO_SWAP))]
> + "TARGET_ZABHA"
> + "amoswap.b\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "QI")])
> +
> +(define_insn "amo_swaphi3"
> + [(set (match_operand:HI 0 "register_operand" "=r")
> + (unspec:HI [(match_operand:HI 1 "register_operand" "r")
> + (match_operand:HI 2 "register_operand" "r")]
> + UNSPEC_AMO_SWAP))]
> + "TARGET_ZABHA"
> + "amoswap.h\t%0,%1,%2"
> + [(set_attr "type" "atomic")
> + (set_attr "mode" "HI")])
> +
> (include "bitmanip.md")
> (include "crypto.md")
> (include "sync.md")
> diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
> index f6ff70b2b30..1136a5301ea 100644
> --- a/gcc/config/riscv/riscv.opt
> +++ b/gcc/config/riscv/riscv.opt
> @@ -244,6 +244,8 @@ Mask(ZA64RS) Var(riscv_za_subext)
>
> Mask(ZA128RS) Var(riscv_za_subext)
>
> +Mask(ZABHA) Var(riscv_za_subext)
> +
> TargetVariable
> int riscv_zb_subext
>
> --
> 2.34.1
>
@@ -250,6 +250,7 @@ static const struct riscv_ext_version riscv_ext_version_table[] =
{"za64rs", ISA_SPEC_CLASS_NONE, 1, 0},
{"za128rs", ISA_SPEC_CLASS_NONE, 1, 0},
{"zawrs", ISA_SPEC_CLASS_NONE, 1, 0},
+ {"zabha", ISA_SPEC_CLASS_NONE, 1, 0},
{"zba", ISA_SPEC_CLASS_NONE, 1, 0},
{"zbb", ISA_SPEC_CLASS_NONE, 1, 0},
@@ -1504,6 +1505,7 @@ static const riscv_ext_flag_table_t riscv_ext_flag_table[] =
{"za64rs", &gcc_options::x_riscv_za_subext, MASK_ZA64RS},
{"za128rs", &gcc_options::x_riscv_za_subext, MASK_ZA128RS},
{"zawrs", &gcc_options::x_riscv_za_subext, MASK_ZAWRS},
+ {"zabha", &gcc_options::x_riscv_za_subext, MASK_ZABHA},
{"zba", &gcc_options::x_riscv_zb_subext, MASK_ZBA},
{"zbb", &gcc_options::x_riscv_zb_subext, MASK_ZBB},
@@ -134,6 +134,9 @@
;; XTheadInt unspec
UNSPECV_XTHEADINT_PUSH
UNSPECV_XTHEADINT_POP
+
+ ;; Zabha instructions.
+ UNSPEC_AMO_SWAP
])
(define_constants
@@ -849,6 +852,24 @@
[(set_attr "type" "arith")
(set_attr "mode" "SI")])
+(define_insn "amo_addqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r,r")
+ (plus:QI (match_operand:QI 1 "register_operand" " r,r")
+ (match_operand:QI 2 "arith_operand" " r,r")))]
+ "TARGET_ZABHA"
+ "amoadd.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_addhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r,r")
+ (plus:HI (match_operand:HI 1 "register_operand" " r,r")
+ (match_operand:HI 2 "arith_operand" " r,r")))]
+ "TARGET_ZABHA"
+ "amoadd.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
;;
;; ....................
;;
@@ -1645,6 +1666,78 @@
[(set_attr "type" "fmove")
(set_attr "mode" "<UNITMODE>")])
+(define_insn "amo_minqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (smin:QI (match_operand:QI 1 "register_operand" " r")
+ (match_operand:QI 2 "register_operand" " r")))]
+ "TARGET_ZABHA"
+ "amomin.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_minuqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (umin:QI (match_operand:QI 1 "register_operand" " r")
+ (match_operand:QI 2 "register_operand" " r")))]
+ "TARGET_ZABHA"
+ "amominu.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_minhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (smin:HI (match_operand:HI 1 "register_operand" " r")
+ (match_operand:HI 2 "register_operand" " r")))]
+ "TARGET_ZABHA"
+ "amomin.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
+(define_insn "amo_minuhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (umin:HI (match_operand:HI 1 "register_operand" " r")
+ (match_operand:HI 2 "register_operand" " r")))]
+ "TARGET_ZABHA"
+ "amominu.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
+(define_insn "amo_maxqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (smax:QI (match_operand:QI 1 "register_operand" " r")
+ (match_operand:QI 2 "register_operand" " r")))]
+ "TARGET_ZABHA"
+ "amomax.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_maxuqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (umax:QI (match_operand:QI 1 "register_operand" " r")
+ (match_operand:QI 2 "register_operand" " r")))]
+ "TARGET_ZABHA"
+ "amomaxu.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_maxhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (smax:HI (match_operand:HI 1 "register_operand" " r")
+ (match_operand:HI 2 "register_operand" " r")))]
+ "TARGET_ZABHA"
+ "amomax.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
+(define_insn "amo_maxuhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (umax:HI (match_operand:HI 1 "register_operand" " r")
+ (match_operand:HI 2 "register_operand" " r")))]
+ "TARGET_ZABHA"
+ "amomaxu.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
;;
;; ....................
;;
@@ -1690,6 +1783,24 @@
[(set_attr "type" "logical")
(set_attr "mode" "<MODE>")])
+(define_insn "amo_andqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r,r")
+ (and:QI (match_operand:QI 1 "register_operand" "r,r")
+ (match_operand:QI 2 "arith_operand" " r,r")))]
+ "TARGET_ZABHA"
+ "amoand.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_andhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r,r")
+ (and:HI (match_operand:HI 1 "register_operand" "r,r")
+ (match_operand:HI 2 "arith_operand" " r,r")))]
+ "TARGET_ZABHA"
+ "amoand.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
(define_insn "<optab><mode>3"
[(set (match_operand:X 0 "register_operand" "=r,r")
(any_or:X (match_operand:X 1 "register_operand" "%r,r")
@@ -1724,6 +1835,42 @@
[(set_attr "type" "logical")
(set_attr "mode" "SI")])
+(define_insn "amo_orqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r,r")
+ (ior:QI (match_operand:QI 1 "register_operand" " r,r")
+ (match_operand:QI 2 "arith_operand" " r,r")))]
+ "TARGET_ZABHA"
+ "amoor.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_orhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r,r")
+ (ior:HI (match_operand:HI 1 "register_operand" " r,r")
+ (match_operand:HI 2 "arith_operand" " r,r")))]
+ "TARGET_ZABHA"
+ "amoor.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
+(define_insn "amo_xorqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r,r")
+ (xor:QI (match_operand:QI 1 "register_operand" " r,r")
+ (match_operand:QI 2 "arith_operand" " r,r")))]
+ "TARGET_ZABHA"
+ "amoxor.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_xorhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r,r")
+ (xor:HI (match_operand:HI 1 "register_operand" " r,r")
+ (match_operand:HI 2 "arith_operand" " r,r")))]
+ "TARGET_ZABHA"
+ "amoxor.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
;;
;; ....................
;;
@@ -3841,6 +3988,26 @@
[(set_attr "type" "load")
(set (attr "length") (const_int 8))])
+(define_insn "amo_swapqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (unspec:QI [(match_operand:QI 1 "register_operand" "r")
+ (match_operand:QI 2 "register_operand" "r")]
+ UNSPEC_AMO_SWAP))]
+ "TARGET_ZABHA"
+ "amoswap.b\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "QI")])
+
+(define_insn "amo_swaphi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (unspec:HI [(match_operand:HI 1 "register_operand" "r")
+ (match_operand:HI 2 "register_operand" "r")]
+ UNSPEC_AMO_SWAP))]
+ "TARGET_ZABHA"
+ "amoswap.h\t%0,%1,%2"
+ [(set_attr "type" "atomic")
+ (set_attr "mode" "HI")])
+
(include "bitmanip.md")
(include "crypto.md")
(include "sync.md")
@@ -244,6 +244,8 @@ Mask(ZA64RS) Var(riscv_za_subext)
Mask(ZA128RS) Var(riscv_za_subext)
+Mask(ZABHA) Var(riscv_za_subext)
+
TargetVariable
int riscv_zb_subext