test_cases:
  -
    input:
      bytes: [ 0xf7, 0xbf, 0x20, 0x04 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "movprfx z23, z31"

  -
    input:
      bytes: [ 0xb7, 0xc9, 0x88, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z23.s, z13.h, z0.h[1]"

  -
    input:
      bytes: [ 0x00, 0xc8, 0x80, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z0.s, z0.h, z0.h[0]"

  -
    input:
      bytes: [ 0x55, 0xc9, 0x95, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z21.s, z10.h, z5.h[2]"

  -
    input:
      bytes: [ 0xb7, 0xc9, 0x88, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z23.s, z13.h, z0.h[1]"

  -
    input:
      bytes: [ 0xff, 0xcb, 0x9f, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z31.s, z31.h, z7.h[3]"

  -
    input:
      bytes: [ 0xf7, 0xbf, 0x20, 0x04 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "movprfx z23, z31"

  -
    input:
      bytes: [ 0xb7, 0xc9, 0x08, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z23.s, z13.h, z8.h"

  -
    input:
      bytes: [ 0x00, 0xc8, 0x00, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z0.s, z0.h, z0.h"

  -
    input:
      bytes: [ 0x55, 0xc9, 0x15, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z21.s, z10.h, z21.h"

  -
    input:
      bytes: [ 0xb7, 0xc9, 0x08, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z23.s, z13.h, z8.h"

  -
    input:
      bytes: [ 0xff, 0xcb, 0x1f, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sme2" ]
    expected:
      insns:
        -
          asm_text: "sdot z31.s, z31.h, z31.h"

  -
    input:
      bytes: [ 0xf7, 0xbf, 0x20, 0x04 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "movprfx z23, z31"

  -
    input:
      bytes: [ 0xb7, 0xc9, 0x88, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z23.s, z13.h, z0.h[1]"

  -
    input:
      bytes: [ 0x00, 0xc8, 0x80, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z0.s, z0.h, z0.h[0]"

  -
    input:
      bytes: [ 0x55, 0xc9, 0x95, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z21.s, z10.h, z5.h[2]"

  -
    input:
      bytes: [ 0xb7, 0xc9, 0x88, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z23.s, z13.h, z0.h[1]"

  -
    input:
      bytes: [ 0xff, 0xcb, 0x9f, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z31.s, z31.h, z7.h[3]"

  -
    input:
      bytes: [ 0xf7, 0xbf, 0x20, 0x04 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "movprfx z23, z31"

  -
    input:
      bytes: [ 0xb7, 0xc9, 0x08, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z23.s, z13.h, z8.h"

  -
    input:
      bytes: [ 0x00, 0xc8, 0x00, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z0.s, z0.h, z0.h"

  -
    input:
      bytes: [ 0x55, 0xc9, 0x15, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z21.s, z10.h, z21.h"

  -
    input:
      bytes: [ 0xb7, 0xc9, 0x08, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z23.s, z13.h, z8.h"

  -
    input:
      bytes: [ 0xff, 0xcb, 0x1f, 0x44 ]
      arch: "CS_ARCH_AARCH64"
      options: [ "CS_OPT_NO_BRANCH_OFFSET", "aarch64", "sve2p1" ]
    expected:
      insns:
        -
          asm_text: "sdot z31.s, z31.h, z31.h"
