# For Licence details look at https://gitlab.com/incoresemi/riscv-compliance/riscv_ctg/-/blob/master/LICENSE.incore

add32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      add32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

radd32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      radd32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

uradd32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      uradd32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

kadd32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kadd32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

ukadd32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      ukadd32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

sub32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      sub32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

rsub32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      rsub32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0


ursub32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      ursub32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

ksub32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      ksub32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

uksub32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      uksub32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

cras32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      cras32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

rcras32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      rcras32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

urcras32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      urcras32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

kcras32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kcras32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

ukcras32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      ukcras32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

crsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      crsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

rcrsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      rcrsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

urcrsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      urcrsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

kcrsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kcrsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

ukcrsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      ukcrsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

stas32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      stas32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

rstas32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      rstas32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

urstas32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      urstas32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

kstas32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kstas32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

ukstas32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      ukstas32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

stsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      stsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

rstsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      rstsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

urstsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      urstsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

kstsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kstsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

ukstsa32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      ukstsa32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

sra32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      sra32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'walking_ones("rs2_val", ceil(log(32, 2)), False)': 0
        'walking_zeros("rs2_val", ceil(log(32, 2)), False)': 0
        'alternate("rs2_val", ceil(log(32, 2)), False)': 0

srai32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      srai32: 0
    rs1: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *ifmt_op_comb
    val_comb:
      abstract_comb: 
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_imm_val("imm_val", 5)': 0

sra32.u:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      sra32.u: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'walking_ones("rs2_val", ceil(log(32, 2)), False)': 0
        'walking_zeros("rs2_val", ceil(log(32, 2)), False)': 0
        'alternate("rs2_val", ceil(log(32, 2)), False)': 0

srai32.u:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      srai32.u: 0
    rs1: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *ifmt_op_comb
    val_comb:
      abstract_comb: 
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_imm_val("imm_val", 5)': 0

srl32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      srl32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'walking_ones("rs2_val", ceil(log(32, 2)), False)': 0
        'walking_zeros("rs2_val", ceil(log(32, 2)), False)': 0
        'alternate("rs2_val", ceil(log(32, 2)), False)': 0

srli32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      srli32: 0
    rs1: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *ifmt_op_comb
    val_comb:
      abstract_comb: 
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_imm_val("imm_val", 5)': 0

srl32.u:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      srl32.u: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'walking_ones("rs2_val", ceil(log(32, 2)), False)': 0
        'walking_zeros("rs2_val", ceil(log(32, 2)), False)': 0
        'alternate("rs2_val", ceil(log(32, 2)), False)': 0

srli32.u:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      srli32.u: 0
    rs1: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *ifmt_op_comb
    val_comb:
      abstract_comb: 
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_imm_val("imm_val", 5)': 0

sll32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      sll32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'walking_ones("rs2_val", ceil(log(32, 2)), False)': 0
        'walking_zeros("rs2_val", ceil(log(32, 2)), False)': 0
        'alternate("rs2_val", ceil(log(32, 2)), False)': 0

slli32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      slli32: 0
    rs1: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *ifmt_op_comb
    val_comb:
      abstract_comb: 
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_imm_val("imm_val", 5)': 0
        
ksll32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      ksll32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'walking_ones("rs2_val", ceil(log(32, 2)), False)': 0
        'walking_zeros("rs2_val", ceil(log(32, 2)), False)': 0
        'alternate("rs2_val", ceil(log(32, 2)), False)': 0

kslli32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      kslli32: 0
    rs1: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *ifmt_op_comb
    val_comb:
      abstract_comb: 
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_imm_val("imm_val", 5)': 0

kslra32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      kslra32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'walking_ones("rs2_val", xlen, True)': 0
        'walking_zeros("rs2_val", xlen, True)': 0
        'alternate("rs2_val", xlen, True)': 0

kslra32.u:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      kslra32.u: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'walking_ones("rs2_val", xlen, True)': 0
        'walking_zeros("rs2_val", xlen, True)': 0
        'alternate("rs2_val", xlen, True)': 0

smin32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      smin32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

umin32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      umin32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

smax32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      smax32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

umax32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      umax32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

kabs32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      kabs32: 0
    rs1: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0

khmbb16:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      khmbb16: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

khmbt16:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      khmbt16: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

khmtt16:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      khmtt16: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

kdmbb16:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kdmbb16: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

kdmbt16:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kdmbt16: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

kdmtt16:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kdmtt16: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

kdmabb16:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kdmabb16: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

kdmabt16:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kdmabt16: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

kdmatt16:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kdmatt16: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=True)': 0
        'simd_base_val("rs2", xlen, 16, signed=True)': 0
        'simd_val_comb(xlen, 16, signed=True)': 0

# alias of mulsr64
# smbb32:
#     config:
#       - check ISA:=regex(.*I.*P.*Zicsr.*)
#     mnemonics:
#       smbb32: 0
#     rs1:
#       <<: *all_regs
#     rs2:
#       <<: *all_regs
#     rd:
#       <<: *all_regs
#     op_comb:
#       <<: *rfmt_op_comb
#     val_comb:
#       abstract_comb:
#         'simd_base_val("rs1", xlen, 32, signed=True)': 0
#         'simd_base_val("rs2", xlen, 32, signed=True)': 0
#         'simd_val_comb(xlen, 32, signed=True)': 0

smbt32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      smbt32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

smtt32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      smtt32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmabb32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmabb32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmabt32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmabt32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmatt32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmatt32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmda32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmda32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmxda32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmxda32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

# alias of kmar64
# kmada32:
#     config:
#       - check ISA:=regex(.*I.*P.*Zicsr.*)
#     mnemonics:
#       kmada32: 0
#     rs1:
#       <<: *all_regs
#     rs2:
#       <<: *all_regs
#     rd:
#       <<: *all_regs
#     op_comb:
#       <<: *rfmt_op_comb
#     val_comb:
#       abstract_comb:
#         'simd_base_val("rs1", xlen, 32, signed=True)': 0
#         'simd_base_val("rs2", xlen, 32, signed=True)': 0
#         'simd_val_comb(xlen, 32, signed=True)': 0

kmaxda32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmaxda32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmads32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmads32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmadrs32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmadrs32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmaxds32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmaxds32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmsda32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmsda32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

kmsxda32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      kmsxda32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

smds32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      smds32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

smdrs32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      smdrs32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

smxds32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      smxds32: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_base_val("rs2", xlen, 32, signed=True)': 0
        'simd_val_comb(xlen, 32, signed=True)': 0

sraiw.u:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      sraiw.u: 0
    rs1: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *ifmt_op_comb
    val_comb:
      abstract_comb: 
        'simd_base_val("rs1", xlen, 32, signed=True)': 0
        'simd_imm_val("imm_val", 5)': 0

# instructions overlapping with those in the B extension in RV64 configuration (Zbpbo)
# pkbb32:
#     config: 
#       - check ISA:=regex(.*I.*P.*Zicsr.*)
#     mnemonics: 
#       pkbb32: 0
#     rs1: 
#       <<: *all_regs
#     rs2: 
#       <<: *all_regs
#     rd: 
#       <<: *all_regs
#     op_comb: 
#       <<: *rfmt_op_comb
#     val_comb:
#       abstract_comb:
#         'simd_base_val("rs1", xlen, 32, signed=False)': 0
#         'simd_base_val("rs2", xlen, 32, signed=False)': 0
#         'simd_val_comb(xlen, 32, signed=False)': 0

pkbt32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      pkbt32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

pktb32:
    config: 
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics: 
      pktb32: 0
    rs1: 
      <<: *all_regs
    rs2: 
      <<: *all_regs
    rd: 
      <<: *all_regs
    op_comb: 
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0
        'simd_base_val("rs2", xlen, 32, signed=False)': 0
        'simd_val_comb(xlen, 32, signed=False)': 0

# instructions overlapping with those in the B extension in RV64 configuration (Zbpbo)
# pktt32:
#     config: 
#       - check ISA:=regex(.*I.*P.*Zicsr.*)
#     mnemonics: 
#       pktt32: 0
#     rs1: 
#       <<: *all_regs
#     rs2: 
#       <<: *all_regs
#     rd: 
#       <<: *all_regs
#     op_comb: 
#       <<: *rfmt_op_comb
#     val_comb:
#       abstract_comb:
#         'simd_base_val("rs1", xlen, 32, signed=False)': 0
#         'simd_base_val("rs2", xlen, 32, signed=False)': 0
#         'simd_val_comb(xlen, 32, signed=False)': 0

# instructions overlapping with those in the B extension in RV32 configuration (Zbpbo)
clz32:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      clz32: 0
    rs1:
      <<: *all_regs
    rd:
      <<: *all_regs
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 32, signed=False)': 0

pkbb16:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      pkbb16: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=False)': 0
        'simd_base_val("rs2", xlen, 16, signed=False)': 0
        'simd_val_comb(xlen, 16, signed=False)': 0

pktt16:
    config:
      - check ISA:=regex(.*I.*P.*Zicsr.*)
    mnemonics:
      pktt16: 0
    rs1:
      <<: *all_regs
    rs2:
      <<: *all_regs
    rd:
      <<: *all_regs
    op_comb:
      <<: *rfmt_op_comb
    val_comb:
      abstract_comb:
        'simd_base_val("rs1", xlen, 16, signed=False)': 0
        'simd_base_val("rs2", xlen, 16, signed=False)': 0
        'simd_val_comb(xlen, 16, signed=False)': 0
