diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 6f861c8..7228f18 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -37,7 +37,7 @@ jobs: - name: Install Toolchain if: steps.cache-spike.outputs.cache-hit != 'true' run: | - wget -O- -q https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.07.07/riscv64-elf-ubuntu-22.04-gcc-nightly-2023.07.07-nightly.tar.gz | tar -xzf - + wget -O- -q https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2024.04.12/riscv64-elf-ubuntu-22.04-gcc-nightly-2024.04.12-nightly.tar.gz | tar -xzf - - name: Build Spike if: steps.cache-spike.outputs.cache-hit != 'true' diff --git a/Makefile b/Makefile index 7eda33c..76d65bf 100644 --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ CONFIGS = configs/ SPIKE = spike PATCHER_SPIKE = build/pspike -MARCH = rv${XLEN}gcv +MARCH = rv${XLEN}gcv_zvbb MABI = lp64d ifeq ($(XLEN), 32) diff --git a/Makefrag b/Makefrag index dcc0096..8245abf 100644 --- a/Makefrag +++ b/Makefrag @@ -122,6 +122,17 @@ tests = \ vand.vx-5 \ vand.vx-6 \ vand.vx-7 \ + vandn.vv-0 \ + vandn.vv-1 \ + vandn.vv-2 \ + vandn.vx-0 \ + vandn.vx-1 \ + vandn.vx-2 \ + vandn.vx-3 \ + vandn.vx-4 \ + vandn.vx-5 \ + vandn.vx-6 \ + vandn.vx-7 \ vasub.vv-0 \ vasub.vv-1 \ vasub.vv-2 \ @@ -202,8 +213,13 @@ tests = \ vasubu.vx-7 \ vasubu.vx-8 \ vasubu.vx-9 \ + vbrev.v-0 \ + vbrev8.v-0 \ + vclz.v-0 \ vcompress.vm-0 \ vcpop.m-0 \ + vcpop.v-0 \ + vctz.v-0 \ vdiv.vv-0 \ vdiv.vv-1 \ vdiv.vv-2 \ @@ -1123,6 +1139,7 @@ tests = \ vremu.vx-6 \ vremu.vx-7 \ vremu.vx-8 \ + vrev8.v-0 \ vrgather.vi-0 \ vrgather.vi-1 \ vrgather.vi-2 \ @@ -1142,6 +1159,33 @@ tests = \ vrgatherei16.vv-0 \ vrgatherei16.vv-1 \ vrgatherei16.vv-2 \ + vrol.vv-0 \ + vrol.vv-1 \ + vrol.vv-2 \ + vrol.vx-0 \ + vrol.vx-1 \ + vrol.vx-2 \ + vrol.vx-3 \ + vrol.vx-4 \ + vrol.vx-5 \ + vrol.vx-6 \ + vrol.vx-7 \ + vror.vi-0 \ + vror.vi-1 \ + vror.vi-2 \ + vror.vi-3 \ + vror.vi-4 \ + vror.vv-0 \ + vror.vv-1 \ + vror.vv-2 \ + vror.vx-0 \ + vror.vx-1 \ + vror.vx-2 \ + vror.vx-3 \ + vror.vx-4 \ + vror.vx-5 \ + vror.vx-6 \ + vror.vx-7 \ vrsub.vi-0 \ vrsub.vi-1 \ vrsub.vi-2 \ @@ -1782,6 +1826,17 @@ tests = \ vwredsum.vs-1 \ vwredsumu.vs-0 \ vwredsumu.vs-1 \ + vwsll.vi-0 \ + vwsll.vi-1 \ + vwsll.vi-2 \ + vwsll.vi-3 \ + vwsll.vv-0 \ + vwsll.vv-1 \ + vwsll.vx-0 \ + vwsll.vx-1 \ + vwsll.vx-2 \ + vwsll.vx-3 \ + vwsll.vx-4 \ vwsub.vv-0 \ vwsub.vv-1 \ vwsub.vx-0 \ diff --git a/configs/vandn.vv.toml b/configs/vandn.vv.toml new file mode 100644 index 0000000..f16eb81 --- /dev/null +++ b/configs/vandn.vv.toml @@ -0,0 +1,48 @@ +name = "vandn.vv" +format = "vd,vs2,vs1,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0xf8, 0x00], + [0xf8, 0x08], + [0x7f, 0x00], + [0x7f, 0x07], + [0x7f, 0x01], + [0xff, 0x00], + [0xff, 0xff] +] +sew16 = [ + [0xfff8, 0x0000], + [0xff80, 0xfff8], + [0x7fff, 0x0000], + [0x7fff, 0x07ff], + [0x7fff, 0x0001], + [0xffff, 0x0000], + [0xffff, 0xffff] +] +sew32 = [ + [0xfffffff8, 0x00000000], + [0xffffff80, 0xfffffff8], + [0x00007fff, 0x00000000], + [0x00007fff, 0x000007ff], + [0x00007fff, 0x00000001], + [0xffffffff, 0x00000000], + [0xffffffff, 0xffffffff] +] +sew64 = [ + ["0xffffffffffff8000", "0x0000000000000000"], + ["0xffffffff80000000", "0x0000000000000000"], + ["0xffffffff80000000", "0xffffffffffff8000"], + ["0x0000000000007fff", "0x0000000000000000"], + ["0x000000007fffffff", "0x0000000000007fff"], + ["0xffffffff80000000", "0x0000000000007fff"], + ["0x000000007fffffff", "0xffffffffffff8000"], + ["0xffffffffffffffff", "0x0000000000000001"], + ["0xffffffffffffffff", "0x0000000000000000"], + ["0xffffffffffffffff", "0xffffffffffffffff"] +] diff --git a/configs/vandn.vx.toml b/configs/vandn.vx.toml new file mode 100644 index 0000000..7556cd3 --- /dev/null +++ b/configs/vandn.vx.toml @@ -0,0 +1,48 @@ +name = "vandn.vx" +format = "vd,vs2,rs1,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0xf8, 0x00], + [0xf8, 0x08], + [0x7f, 0x00], + [0x7f, 0x07], + [0x7f, 0x01], + [0xff, 0x00], + [0xff, 0xff] +] +sew16 = [ + [0xfff8, 0x0000], + [0xff80, 0xfff8], + [0x7fff, 0x0000], + [0x7fff, 0x07ff], + [0x7fff, 0x0001], + [0xffff, 0x0000], + [0xffff, 0xffff] +] +sew32 = [ + [0xfffffff8, 0x00000000], + [0xffffff80, 0xfffffff8], + [0x00007fff, 0x00000000], + [0x00007fff, 0x000007ff], + [0x00007fff, 0x00000001], + [0xffffffff, 0x00000000], + [0xffffffff, 0xffffffff] +] +sew64 = [ + ["0xffffffffffff8000", "0x0000000000000000"], + ["0xffffffff80000000", "0x0000000000000000"], + ["0xffffffff80000000", "0xffffffffffff8000"], + ["0x0000000000007fff", "0x0000000000000000"], + ["0x000000007fffffff", "0x0000000000007fff"], + ["0xffffffff80000000", "0x0000000000007fff"], + ["0x000000007fffffff", "0xffffffffffff8000"], + ["0xffffffffffffffff", "0x0000000000000001"], + ["0xffffffffffffffff", "0x0000000000000000"], + ["0xffffffffffffffff", "0xffffffffffffffff"] +] diff --git a/configs/vbrev.v.toml b/configs/vbrev.v.toml new file mode 100644 index 0000000..20da760 --- /dev/null +++ b/configs/vbrev.v.toml @@ -0,0 +1,47 @@ +name = "vbrev.v" +format = "vd,vs2,vm" + +[tests] +base = [ + [0x0], + [0x1], + [0x2], + [0x3], + [0xf] +] +sew8 = [ + [0x00], + [0xf8], + [0x08], + [0x7f], + [0x07], + [0x01], + [0xff] +] +sew16 = [ + [0x0000], + [0xfff8], + [0xff80], + [0x7fff], + [0x07ff], + [0x0001], + [0xffff] +] +sew32 = [ + [0x00000000], + [0xfffffff8], + [0x7fffff80], + [0x00007fff], + [0x000007ff], + [0x00000001], + [0xffffffff] +] +sew64 = [ + ["0x0000000000000000"], + ["0xffffffffffff8000"], + ["0xffffffff80000000"], + ["0x0000000000007fff"], + ["0x000000007fffffff"], + ["0x0000000000000001"], + ["0xffffffffffffffff"] +] diff --git a/configs/vbrev8.v.toml b/configs/vbrev8.v.toml new file mode 100644 index 0000000..99d22d2 --- /dev/null +++ b/configs/vbrev8.v.toml @@ -0,0 +1,47 @@ +name = "vbrev8.v" +format = "vd,vs2,vm" + +[tests] +base = [ + [0x0], + [0x1], + [0x2], + [0x3], + [0xf] +] +sew8 = [ + [0x00], + [0xf8], + [0x08], + [0x7f], + [0x07], + [0x01], + [0xff] +] +sew16 = [ + [0x0000], + [0xfff8], + [0xff80], + [0x7fff], + [0x07ff], + [0x0001], + [0xffff] +] +sew32 = [ + [0x00000000], + [0xfffffff8], + [0x7fffff80], + [0x00007fff], + [0x000007ff], + [0x00000001], + [0xffffffff] +] +sew64 = [ + ["0x0000000000000000"], + ["0xffffffffffff8000"], + ["0xffffffff80000000"], + ["0x0000000000007fff"], + ["0x000000007fffffff"], + ["0x0000000000000001"], + ["0xffffffffffffffff"] +] diff --git a/configs/vclz.v.toml b/configs/vclz.v.toml new file mode 100644 index 0000000..2914b9f --- /dev/null +++ b/configs/vclz.v.toml @@ -0,0 +1,47 @@ +name = "vclz.v" +format = "vd,vs2,vm" + +[tests] +base = [ + [0x0], + [0x1], + [0x2], + [0x3], + [0xf] +] +sew8 = [ + [0x00], + [0xf8], + [0x08], + [0x7f], + [0x07], + [0x01], + [0xff] +] +sew16 = [ + [0x0000], + [0xfff8], + [0xff80], + [0x7fff], + [0x07ff], + [0x0001], + [0xffff] +] +sew32 = [ + [0x00000000], + [0xfffffff8], + [0x7fffff80], + [0x00007fff], + [0x000007ff], + [0x00000001], + [0xffffffff] +] +sew64 = [ + ["0x0000000000000000"], + ["0xffffffffffff8000"], + ["0xffffffff80000000"], + ["0x0000000000007fff"], + ["0x000000007fffffff"], + ["0x0000000000000001"], + ["0xffffffffffffffff"] +] diff --git a/configs/vcpop.v.toml b/configs/vcpop.v.toml new file mode 100644 index 0000000..ac6f672 --- /dev/null +++ b/configs/vcpop.v.toml @@ -0,0 +1,47 @@ +name = "vcpop.v" +format = "vd,vs2,vm" + +[tests] +base = [ + [0x0], + [0x1], + [0x2], + [0x3], + [0xf] +] +sew8 = [ + [0x00], + [0xf8], + [0x08], + [0x7f], + [0x07], + [0x01], + [0xff] +] +sew16 = [ + [0x0000], + [0xfff8], + [0xff80], + [0x7fff], + [0x07ff], + [0x0001], + [0xffff] +] +sew32 = [ + [0x00000000], + [0xfffffff8], + [0x7fffff80], + [0x00007fff], + [0x000007ff], + [0x00000001], + [0xffffffff] +] +sew64 = [ + ["0x0000000000000000"], + ["0xffffffffffff8000"], + ["0xffffffff80000000"], + ["0x0000000000007fff"], + ["0x000000007fffffff"], + ["0x0000000000000001"], + ["0xffffffffffffffff"] +] diff --git a/configs/vctz.v.toml b/configs/vctz.v.toml new file mode 100644 index 0000000..33ea263 --- /dev/null +++ b/configs/vctz.v.toml @@ -0,0 +1,47 @@ +name = "vctz.v" +format = "vd,vs2,vm" + +[tests] +base = [ + [0x0], + [0x1], + [0x2], + [0x3], + [0xf] +] +sew8 = [ + [0x00], + [0xf8], + [0x08], + [0x7f], + [0x07], + [0x01], + [0xff] +] +sew16 = [ + [0x0000], + [0xfff8], + [0xff80], + [0x7fff], + [0x07ff], + [0x0001], + [0xffff] +] +sew32 = [ + [0x00000000], + [0xfffffff8], + [0x7fffff80], + [0x00007fff], + [0x000007ff], + [0x00000001], + [0xffffffff] +] +sew64 = [ + ["0x0000000000000000"], + ["0xffffffffffff8000"], + ["0xffffffff80000000"], + ["0x0000000000007fff"], + ["0x000000007fffffff"], + ["0x0000000000000001"], + ["0xffffffffffffffff"] +] diff --git a/configs/vrev8.v.toml b/configs/vrev8.v.toml new file mode 100644 index 0000000..b1184ed --- /dev/null +++ b/configs/vrev8.v.toml @@ -0,0 +1,47 @@ +name = "vrev8.v" +format = "vd,vs2,vm" + +[tests] +base = [ + [0x0], + [0x1], + [0x2], + [0x3], + [0xf] +] +sew8 = [ + [0x00], + [0xf8], + [0x08], + [0x7f], + [0x07], + [0x01], + [0xff] +] +sew16 = [ + [0x0000], + [0xfff8], + [0xff80], + [0x7fff], + [0x07ff], + [0x0001], + [0xffff] +] +sew32 = [ + [0x00000000], + [0xfffffff8], + [0x7fffff80], + [0x00007fff], + [0x000007ff], + [0x00000001], + [0xffffffff] +] +sew64 = [ + ["0x0000000000000000"], + ["0xffffffffffff8000"], + ["0xffffffff80000000"], + ["0x0000000000007fff"], + ["0x000000007fffffff"], + ["0x0000000000000001"], + ["0xffffffffffffffff"] +] diff --git a/configs/vrol.vv.toml b/configs/vrol.vv.toml new file mode 100644 index 0000000..a892b81 --- /dev/null +++ b/configs/vrol.vv.toml @@ -0,0 +1,48 @@ +name = "vrol.vv" +format = "vd,vs2,vs1,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0xf8, 0x00], + [0xf8, 0x08], + [0x7f, 0x00], + [0x7f, 0x07], + [0x7f, 0x01], + [0xff, 0x00], + [0xff, 0xff] +] +sew16 = [ + [0xfff8, 0x0000], + [0xff80, 0xfff8], + [0x7fff, 0x0000], + [0x7fff, 0x07ff], + [0x7fff, 0x0001], + [0xffff, 0x0000], + [0xffff, 0xffff] +] +sew32 = [ + [0xfffffff8, 0x00000000], + [0xffffff80, 0xfffffff8], + [0x00007fff, 0x00000000], + [0x00007fff, 0x000007ff], + [0x00007fff, 0x00000001], + [0xffffffff, 0x00000000], + [0xffffffff, 0xffffffff] +] +sew64 = [ + ["0xffffffffffff8000", "0x0000000000000000"], + ["0xffffffff80000000", "0x0000000000000000"], + ["0xffffffff80000000", "0xffffffffffff8000"], + ["0x0000000000007fff", "0x0000000000000000"], + ["0x000000007fffffff", "0x0000000000007fff"], + ["0xffffffff80000000", "0x0000000000007fff"], + ["0x000000007fffffff", "0xffffffffffff8000"], + ["0xffffffffffffffff", "0x0000000000000001"], + ["0xffffffffffffffff", "0x0000000000000000"], + ["0xffffffffffffffff", "0xffffffffffffffff"] +] diff --git a/configs/vrol.vx.toml b/configs/vrol.vx.toml new file mode 100644 index 0000000..a2e5a47 --- /dev/null +++ b/configs/vrol.vx.toml @@ -0,0 +1,48 @@ +name = "vrol.vx" +format = "vd,vs2,rs1,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0xf8, 0x00], + [0xf8, 0x08], + [0x7f, 0x00], + [0x7f, 0x07], + [0x7f, 0x01], + [0xff, 0x00], + [0xff, 0xff] +] +sew16 = [ + [0xfff8, 0x0000], + [0xff80, 0xfff8], + [0x7fff, 0x0000], + [0x7fff, 0x07ff], + [0x7fff, 0x0001], + [0xffff, 0x0000], + [0xffff, 0xffff] +] +sew32 = [ + [0xfffffff8, 0x00000000], + [0xffffff80, 0xfffffff8], + [0x00007fff, 0x00000000], + [0x00007fff, 0x000007ff], + [0x00007fff, 0x00000001], + [0xffffffff, 0x00000000], + [0xffffffff, 0xffffffff] +] +sew64 = [ + ["0xffffffffffff8000", "0x0000000000000000"], + ["0xffffffff80000000", "0x0000000000000000"], + ["0xffffffff80000000", "0xffffffffffff8000"], + ["0x0000000000007fff", "0x0000000000000000"], + ["0x000000007fffffff", "0x0000000000007fff"], + ["0xffffffff80000000", "0x0000000000007fff"], + ["0x000000007fffffff", "0xffffffffffff8000"], + ["0xffffffffffffffff", "0x0000000000000001"], + ["0xffffffffffffffff", "0x0000000000000000"], + ["0xffffffffffffffff", "0xffffffffffffffff"] +] diff --git a/configs/vror.vi.toml b/configs/vror.vi.toml new file mode 100644 index 0000000..2566116 --- /dev/null +++ b/configs/vror.vi.toml @@ -0,0 +1,33 @@ +name = "vror.vi" +format = "vd,vs2,uimm,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0x1f, 0x00], + [0x1, 0xff], + [0x1, 0x7f], + [0x1f, 0xff] +] +sew16 = [ + [0x1f, 0x0000], + [0x1, 0xffff], + [0x1, 0x7fff], + [0x1f, 0xffff] +] +sew32 = [ + [0x1f, 0x00000000], + [0x1, 0xffffffff], + [0x1, 0x7fffffff], + [0x1f, 0xffffffff] +] +sew64 = [ + ["0x1f", "0x0000000000000000"], + ["0x1", "0xffffffffffffffff"], + ["0x1", "0x7fffffffffffffff"], + ["0x1f", "0xffffffffffffffff"] +] diff --git a/configs/vror.vv.toml b/configs/vror.vv.toml new file mode 100644 index 0000000..ac296d4 --- /dev/null +++ b/configs/vror.vv.toml @@ -0,0 +1,48 @@ +name = "vror.vv" +format = "vd,vs2,vs1,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0xf8, 0x00], + [0xf8, 0x08], + [0x7f, 0x00], + [0x7f, 0x07], + [0x7f, 0x01], + [0xff, 0x00], + [0xff, 0xff] +] +sew16 = [ + [0xfff8, 0x0000], + [0xff80, 0xfff8], + [0x7fff, 0x0000], + [0x7fff, 0x07ff], + [0x7fff, 0x0001], + [0xffff, 0x0000], + [0xffff, 0xffff] +] +sew32 = [ + [0xfffffff8, 0x00000000], + [0xffffff80, 0xfffffff8], + [0x00007fff, 0x00000000], + [0x00007fff, 0x000007ff], + [0x00007fff, 0x00000001], + [0xffffffff, 0x00000000], + [0xffffffff, 0xffffffff] +] +sew64 = [ + ["0xffffffffffff8000", "0x0000000000000000"], + ["0xffffffff80000000", "0x0000000000000000"], + ["0xffffffff80000000", "0xffffffffffff8000"], + ["0x0000000000007fff", "0x0000000000000000"], + ["0x000000007fffffff", "0x0000000000007fff"], + ["0xffffffff80000000", "0x0000000000007fff"], + ["0x000000007fffffff", "0xffffffffffff8000"], + ["0xffffffffffffffff", "0x0000000000000001"], + ["0xffffffffffffffff", "0x0000000000000000"], + ["0xffffffffffffffff", "0xffffffffffffffff"] +] diff --git a/configs/vror.vx.toml b/configs/vror.vx.toml new file mode 100644 index 0000000..b2ca3ed --- /dev/null +++ b/configs/vror.vx.toml @@ -0,0 +1,48 @@ +name = "vror.vx" +format = "vd,vs2,rs1,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0xf8, 0x00], + [0xf8, 0x08], + [0x7f, 0x00], + [0x7f, 0x07], + [0x7f, 0x01], + [0xff, 0x00], + [0xff, 0xff] +] +sew16 = [ + [0xfff8, 0x0000], + [0xff80, 0xfff8], + [0x7fff, 0x0000], + [0x7fff, 0x07ff], + [0x7fff, 0x0001], + [0xffff, 0x0000], + [0xffff, 0xffff] +] +sew32 = [ + [0xfffffff8, 0x00000000], + [0xffffff80, 0xfffffff8], + [0x00007fff, 0x00000000], + [0x00007fff, 0x000007ff], + [0x00007fff, 0x00000001], + [0xffffffff, 0x00000000], + [0xffffffff, 0xffffffff] +] +sew64 = [ + ["0xffffffffffff8000", "0x0000000000000000"], + ["0xffffffff80000000", "0x0000000000000000"], + ["0xffffffff80000000", "0xffffffffffff8000"], + ["0x0000000000007fff", "0x0000000000000000"], + ["0x000000007fffffff", "0x0000000000007fff"], + ["0xffffffff80000000", "0x0000000000007fff"], + ["0x000000007fffffff", "0xffffffffffff8000"], + ["0xffffffffffffffff", "0x0000000000000001"], + ["0xffffffffffffffff", "0x0000000000000000"], + ["0xffffffffffffffff", "0xffffffffffffffff"] +] diff --git a/configs/vwsll.vi.toml b/configs/vwsll.vi.toml new file mode 100644 index 0000000..5a7e2da --- /dev/null +++ b/configs/vwsll.vi.toml @@ -0,0 +1,28 @@ +name = "vwsll.vi" +format = "vd,vs2,uimm,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0x1f, 0x00], + [0x1, 0xff], + [0x1, 0x7f], + [0x1f, 0xff] +] +sew16 = [ + [0x1f, 0x0000], + [0x1, 0xffff], + [0x1, 0x7fff], + [0x1f, 0xffff] +] +sew32 = [ + [0x1f, 0x00000000], + [0x1, 0xffffffff], + [0x1, 0x7fffffff], + [0x1f, 0xffffffff] +] + diff --git a/configs/vwsll.vv.toml b/configs/vwsll.vv.toml new file mode 100644 index 0000000..93c1d30 --- /dev/null +++ b/configs/vwsll.vv.toml @@ -0,0 +1,48 @@ +name = "vwsll.vv" +format = "vd,vs2,vs1,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0xf8, 0x00], + [0xf8, 0x08], + [0x7f, 0x00], + [0x7f, 0x07], + [0x7f, 0x01], + [0xff, 0x00], + [0xff, 0xff] +] +sew16 = [ + [0xfff8, 0x0000], + [0xff80, 0xfff8], + [0x7fff, 0x0000], + [0x7fff, 0x07ff], + [0x7fff, 0x0001], + [0xffff, 0x0000], + [0xffff, 0xffff] +] +sew32 = [ + [0xfffffff8, 0x00000000], + [0xffffff80, 0xfffffff8], + [0x00007fff, 0x00000000], + [0x00007fff, 0x000007ff], + [0x00007fff, 0x00000001], + [0xffffffff, 0x00000000], + [0xffffffff, 0xffffffff] +] +sew64 = [ + ["0xffffffffffff8000", "0x0000000000000000"], + ["0xffffffff80000000", "0x0000000000000000"], + ["0xffffffff80000000", "0xffffffffffff8000"], + ["0x0000000000007fff", "0x0000000000000000"], + ["0x000000007fffffff", "0x0000000000007fff"], + ["0xffffffff80000000", "0x0000000000007fff"], + ["0x000000007fffffff", "0xffffffffffff8000"], + ["0xffffffffffffffff", "0x0000000000000001"], + ["0xffffffffffffffff", "0x0000000000000000"], + ["0xffffffffffffffff", "0xffffffffffffffff"] +] diff --git a/configs/vwsll.vx.toml b/configs/vwsll.vx.toml new file mode 100644 index 0000000..ea93135 --- /dev/null +++ b/configs/vwsll.vx.toml @@ -0,0 +1,48 @@ +name = "vwsll.vx" +format = "vd,vs2,rs1,vm" + +[tests] +base = [ + [0x0, 0x0], + [0x1, 0x2], + [0x3, 0xf] +] +sew8 = [ + [0xf8, 0x00], + [0xf8, 0x08], + [0x7f, 0x00], + [0x7f, 0x07], + [0x7f, 0x01], + [0xff, 0x00], + [0xff, 0xff] +] +sew16 = [ + [0xfff8, 0x0000], + [0xff80, 0xfff8], + [0x7fff, 0x0000], + [0x7fff, 0x07ff], + [0x7fff, 0x0001], + [0xffff, 0x0000], + [0xffff, 0xffff] +] +sew32 = [ + [0xfffffff8, 0x00000000], + [0xffffff80, 0xfffffff8], + [0x00007fff, 0x00000000], + [0x00007fff, 0x000007ff], + [0x00007fff, 0x00000001], + [0xffffffff, 0x00000000], + [0xffffffff, 0xffffffff] +] +sew64 = [ + ["0xffffffffffff8000", "0x0000000000000000"], + ["0xffffffff80000000", "0x0000000000000000"], + ["0xffffffff80000000", "0xffffffffffff8000"], + ["0x0000000000007fff", "0x0000000000000000"], + ["0x000000007fffffff", "0x0000000000007fff"], + ["0xffffffff80000000", "0x0000000000007fff"], + ["0x000000007fffffff", "0xffffffffffff8000"], + ["0xffffffffffffffff", "0x0000000000000001"], + ["0xffffffffffffffff", "0x0000000000000000"], + ["0xffffffffffffffff", "0xffffffffffffffff"] +] diff --git a/generator/insn_vdvs2uimmvm.go b/generator/insn_vdvs2uimmvm.go index e8b41fd..aef931e 100644 --- a/generator/insn_vdvs2uimmvm.go +++ b/generator/insn_vdvs2uimmvm.go @@ -7,12 +7,14 @@ import ( ) func (i *Insn) genCodeVdVs2UimmVm(pos int) []string { + vdWidening := strings.HasPrefix(i.Name, "vw") vs2Widening := strings.HasSuffix(i.Name, ".wi") sews := iff(vs2Widening, allSEWs[:len(allSEWs)-2], allSEWs[:len(allSEWs)-1]) vs2Size := iff(vs2Widening, 2, 1) + vdSize := iff(vdWidening, 2, 1) combinations := i.combinations( - iff(vs2Widening, wideningMULs, allLMULs), + iff(vdWidening || vs2Widening, wideningMULs, allLMULs), sews, []bool{false, true}, i.vxrms(), @@ -26,11 +28,18 @@ func (i *Insn) genCodeVdVs2UimmVm(pos int) []string { builder.WriteString(i.gWriteRandomData(LMUL(1))) builder.WriteString(i.gLoadDataIntoRegisterGroup(0, LMUL(1), SEW(32))) + vdEMUL1 := LMUL(math.Max(float64(int(c.LMUL)*vdSize), 1)) vs2EMUL1 := LMUL(math.Max(float64(int(c.LMUL)*vs2Size), 1)) + vdEEW := c.SEW * SEW(vdSize) vs2EEW := c.SEW * SEW(vs2Size) + if vdEEW > SEW(i.Option.XLEN) || vs2EEW > SEW(i.Option.XLEN) { + res = append(res, "") + continue + } + + vd := int(vdEMUL1) + vs2 := vd * 2 - vd := int(c.LMUL1) - vs2 := 2*int(c.LMUL1) + int(vs2EMUL1) builder.WriteString(i.gWriteRandomData(c.LMUL1)) builder.WriteString(i.gLoadDataIntoRegisterGroup(vd, c.LMUL1, SEW(8)))