udb 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.data/cfgs/example_rv64_with_overlay.yaml +5 -6
- data/.data/cfgs/mc100-32-full-example.yaml +2 -2
- data/.data/cfgs/qc_iu.yaml +2 -2
- data/.data/cfgs/rv32-riscv-tests.yaml +4 -4
- data/.data/cfgs/rv32-vector.yaml +4 -4
- data/.data/cfgs/rv64-riscv-tests.yaml +4 -4
- data/.data/cfgs/rv64-vector.yaml +4 -4
- data/.data/spec/schemas/README.adoc +3 -0
- data/.data/spec/schemas/schema_defs.json +3 -3
- data/.data/spec/std/isa/csr/H/hcounteren.layout +3 -3
- data/.data/spec/std/isa/csr/H/hcounteren.yaml +31 -31
- data/.data/spec/std/isa/csr/H/htinst.yaml +3 -3
- data/.data/spec/std/isa/csr/H/htval.yaml +3 -3
- data/.data/spec/std/isa/csr/H/mtinst.yaml +1 -1
- data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfg.yaml +1 -1
- data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfgh.yaml +1 -1
- data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfg.yaml +1 -1
- data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfgh.yaml +1 -1
- data/.data/spec/std/isa/csr/Sscofpmf/scountovf.layout +1 -1
- data/.data/spec/std/isa/csr/Sscofpmf/scountovf.yaml +29 -29
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounterN.layout +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounterNh.layout +1 -1
- data/.data/spec/std/isa/csr/hstatus.yaml +1 -1
- data/.data/spec/std/isa/csr/mcycle.yaml +6 -6
- data/.data/spec/std/isa/csr/minstret.yaml +3 -3
- data/.data/spec/std/isa/csr/minstreth.yaml +1 -1
- data/.data/spec/std/isa/csr/mstatus.yaml +13 -19
- data/.data/spec/std/isa/csr/mtvec.yaml +16 -57
- data/.data/spec/std/isa/csr/sie.yaml +30 -4
- data/.data/spec/std/isa/csr/sip.yaml +16 -2
- data/.data/spec/std/isa/csr/stvec.yaml +11 -12
- data/.data/spec/std/isa/csr/vstval.yaml +1 -1
- data/.data/spec/std/isa/csr/vstvec.yaml +14 -15
- data/.data/spec/std/isa/ext/Q.yaml +1 -1
- data/.data/spec/std/isa/ext/Shlcofideleg.yaml +24 -0
- data/.data/spec/std/isa/ext/Shvstvecd.yaml +2 -2
- data/.data/spec/std/isa/ext/Sspm.yaml +5 -0
- data/.data/spec/std/isa/ext/Sstvecd.yaml +2 -2
- data/.data/spec/std/isa/ext/Sstvecv.yaml +2 -2
- data/.data/spec/std/isa/ext/Supm.yaml +17 -0
- data/.data/spec/std/isa/ext/Zcb.yaml +3 -0
- data/.data/spec/std/isa/ext/Zfbfmin.yaml +3 -5
- data/.data/spec/std/isa/ext/Ziccid.yaml +29 -0
- data/.data/spec/std/isa/ext/Zicfilp.yaml +5 -1
- data/.data/spec/std/isa/ext/Zicfiss.yaml +20 -1
- data/.data/spec/std/isa/ext/Zihpm.yaml +3 -0
- data/.data/spec/std/isa/ext/Zilx.yaml +58 -0
- data/.data/spec/std/isa/ext/Zkt.yaml +33 -1
- data/.data/spec/std/isa/ext/Zvabd.yaml +21 -0
- data/.data/spec/std/isa/ext/Zvbc.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvkb.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvkg.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvkned.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvknha.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvknhb.yaml +4 -2
- data/.data/spec/std/isa/ext/Zvksed.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvksh.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvkt.yaml +3 -0
- data/.data/spec/std/isa/inst/C/c.add.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addw.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.and.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.lui.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.mv.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.nop.yaml +13 -2
- data/.data/spec/std/isa/inst/C/c.or.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.slli.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.srai.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.srli.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.sub.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.subw.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.xor.yaml +1 -0
- data/.data/spec/std/isa/inst/D/fld.yaml +1 -0
- data/.data/spec/std/isa/inst/D/fsd.yaml +1 -0
- data/.data/spec/std/isa/inst/F/fadd.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fdiv.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/feq.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fle.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fleq.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/flt.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fltq.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/flw.yaml +2 -1
- data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmax.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmin.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmul.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsw.yaml +2 -1
- data/.data/spec/std/isa/inst/I/sd.yaml +1 -1
- data/.data/spec/std/isa/inst/Q/fadd.q.yaml +2 -2
- data/.data/spec/std/isa/inst/Q/fclass.q.yaml +5 -5
- data/.data/spec/std/isa/inst/Q/fleq.q.yaml +0 -1
- data/.data/spec/std/isa/inst/Q/fli.q.yaml +1 -1
- data/.data/spec/std/isa/inst/Q/flq.yaml +1 -0
- data/.data/spec/std/isa/inst/Q/fltq.q.yaml +0 -1
- data/.data/spec/std/isa/inst/Q/fmaxm.q.yaml +0 -1
- data/.data/spec/std/isa/inst/Q/fminm.q.yaml +0 -1
- data/.data/spec/std/isa/inst/Q/fmvp.q.x.yaml +1 -1
- data/.data/spec/std/isa/inst/Q/fsq.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +1 -0
- data/.data/spec/std/isa/inst/Zcb/c.mul.yaml +1 -0
- data/.data/spec/std/isa/inst/Zcb/c.not.yaml +1 -0
- data/.data/spec/std/isa/inst/Zcb/c.zext.b.yaml +2 -7
- data/.data/spec/std/isa/inst/Zcb/c.zext.w.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmop/c.mop.1.yaml +2 -0
- data/.data/spec/std/isa/inst/Zcmop/c.mop.5.yaml +2 -0
- data/.data/spec/std/isa/inst/Zcmop/c.mop.N.layout +7 -0
- data/.data/spec/std/isa/inst/Zfa/fli.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfa/fmaxm.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfa/fminm.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfa/froundnx.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/flh.yaml +5 -2
- data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +3 -1
- data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +3 -1
- data/.data/spec/std/isa/inst/Zfh/fsh.yaml +4 -1
- data/.data/spec/std/isa/inst/Zicfiss/c.sspopchk.yaml +30 -0
- data/.data/spec/std/isa/inst/Zicfiss/c.sspush.yaml +29 -0
- data/.data/spec/std/isa/inst/Zicond/czero.eqz.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicond/czero.nez.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +12 -0
- data/.data/spec/std/isa/inst/Zilx/lxd.yaml +38 -0
- data/.data/spec/std/isa/inst/Zilx/lxh.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxhu.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxsb.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsbu.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsd.yaml +38 -0
- data/.data/spec/std/isa/inst/Zilx/lxsh.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxshu.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwb.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwbu.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwd.yaml +39 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwh.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwhu.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuww.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwwu.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsw.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxswu.yaml +39 -0
- data/.data/spec/std/isa/inst/Zilx/lxw.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxwu.yaml +39 -0
- data/.data/spec/std/isa/inst/Zvabd/vabd.vv.yaml +67 -0
- data/.data/spec/std/isa/inst/Zvabd/vabdu.vv.yaml +67 -0
- data/.data/spec/std/isa/inst/Zvabd/vabs.v.yaml +61 -0
- data/.data/spec/std/isa/inst/Zvabd/vwabda.vv.yaml +72 -0
- data/.data/spec/std/isa/inst/Zvabd/vwabdau.vv.yaml +72 -0
- data/.data/spec/std/isa/isa/fp.idl +42 -18
- data/.data/spec/std/isa/param/CACHE_BLOCK_SIZE.yaml +70 -6
- data/.data/spec/std/isa/param/ELEN.yaml +27 -5
- data/.data/spec/std/isa/param/HCOUNTENABLE_EN.yaml +13 -0
- data/.data/spec/std/isa/param/HPM_COUNTER_EN.yaml +13 -3
- data/.data/spec/std/isa/param/HPM_EVENTS.yaml +0 -3
- data/.data/spec/std/isa/param/MCOUNTENABLE_EN.yaml +8 -0
- data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_DIRECT.yaml +71 -65
- data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_VECTORED.yaml +71 -65
- data/.data/spec/std/isa/param/STVAL_WIDTH.yaml +3 -2
- data/.data/spec/std/isa/param/STVEC_BASE_ALIGNMENT_VECTORED.yaml +100 -0
- data/.data/spec/std/isa/param/STVEC_MODES.yaml +31 -0
- data/.data/spec/std/isa/param/SV32_VSMODE_TRANSLATION.yaml +1 -1
- data/.data/spec/std/isa/param/SXLEN.yaml +2 -2
- data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_INSTRUCTION_GUEST_PAGE_FAULT.yaml +1 -1
- data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_LOAD_GUEST_PAGE_FAULT.yaml +1 -1
- data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT.yaml +1 -1
- data/.data/spec/std/isa/param/TINST_VALUE_ON_LOAD_ADDRESS_MISALIGNED.yaml +1 -1
- data/.data/spec/std/isa/param/TINST_VALUE_ON_STORE_AMO_ADDRESS_MISALIGNED.yaml +1 -1
- data/.data/spec/std/isa/param/UXLEN.yaml +1 -1
- data/.data/spec/std/isa/param/VLEN.yaml +16 -7
- data/.data/spec/std/isa/param/VSTVEC_MODES.yaml +31 -0
- data/lib/udb/Z3_VERSION +1 -1
- data/lib/udb/obj/csr.rb +1 -1
- data/lib/udb/obj/csr_field.rb +1 -1
- data/lib/udb/obj/extension.rb +1 -1
- data/lib/udb/version.rb +1 -1
- data/lib/udb/version_spec.rb +1 -1
- data/lib/udb/z3.rb +29 -7
- metadata +37 -8
- data/.data/spec/std/isa/param/STVEC_MODE_DIRECT.yaml +0 -21
- data/.data/spec/std/isa/param/STVEC_MODE_VECTORED.yaml +0 -19
- data/.data/spec/std/isa/param/VSTVEC_MODE_DIRECT.yaml +0 -21
- data/.data/spec/std/isa/param/VSTVEC_MODE_VECTORED.yaml +0 -21
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsh
|
|
9
|
+
long_name: Load scaled indexed halfword
|
|
10
|
+
description: |
|
|
11
|
+
Load 16 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (X[xs1] << 1)`, where `xs2` is the base and `xs1` is the index.
|
|
13
|
+
Sign extend the result to XLEN.
|
|
14
|
+
definedBy:
|
|
15
|
+
extension:
|
|
16
|
+
name: Zilx
|
|
17
|
+
assembly: xd, (xs2), xs1
|
|
18
|
+
encoding:
|
|
19
|
+
match: 1101000----------001-----0101111
|
|
20
|
+
variables:
|
|
21
|
+
- name: xs2
|
|
22
|
+
location: 24-20
|
|
23
|
+
- name: xs1
|
|
24
|
+
location: 19-15
|
|
25
|
+
- name: xd
|
|
26
|
+
location: 11-7
|
|
27
|
+
access:
|
|
28
|
+
s: always
|
|
29
|
+
u: always
|
|
30
|
+
vs: always
|
|
31
|
+
vu: always
|
|
32
|
+
operation(): |
|
|
33
|
+
XReg virtual_address = X[xs2] + (X[xs1] `<< 1);
|
|
34
|
+
|
|
35
|
+
X[xd] = sext(read_memory(16, virtual_address, $encoding), 16);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxshu
|
|
9
|
+
long_name: Load scaled indexed halfword unsigned
|
|
10
|
+
description: |
|
|
11
|
+
Load 16 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (X[xs1] << 1)`, where `xs2` is the base and `xs1` is the index.
|
|
13
|
+
Zero extend the result to XLEN.
|
|
14
|
+
definedBy:
|
|
15
|
+
extension:
|
|
16
|
+
name: Zilx
|
|
17
|
+
assembly: xd, (xs2), xs1
|
|
18
|
+
encoding:
|
|
19
|
+
match: 1101000----------101-----0101111
|
|
20
|
+
variables:
|
|
21
|
+
- name: xs2
|
|
22
|
+
location: 24-20
|
|
23
|
+
- name: xs1
|
|
24
|
+
location: 19-15
|
|
25
|
+
- name: xd
|
|
26
|
+
location: 11-7
|
|
27
|
+
access:
|
|
28
|
+
s: always
|
|
29
|
+
u: always
|
|
30
|
+
vs: always
|
|
31
|
+
vu: always
|
|
32
|
+
operation(): |
|
|
33
|
+
XReg virtual_address = X[xs2] + (X[xs1] `<< 1);
|
|
34
|
+
|
|
35
|
+
X[xd] = read_memory(16, virtual_address, $encoding);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsuwb
|
|
9
|
+
long_name: Load scaled indexed byte with unsigned word index
|
|
10
|
+
description: |
|
|
11
|
+
Load 8 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + zext32(X[xs1])`, where `xs2` is the base and `xs1` is the index.
|
|
13
|
+
The index is zero-extended from `X[xs1][31:0]` before forming the address.
|
|
14
|
+
Sign extend the loaded byte to 64 bits.
|
|
15
|
+
|
|
16
|
+
This instruction is defined only for RV64.
|
|
17
|
+
definedBy:
|
|
18
|
+
allOf:
|
|
19
|
+
- xlen: 64
|
|
20
|
+
- extension:
|
|
21
|
+
name: Zilx
|
|
22
|
+
assembly: xd, (xs2), xs1
|
|
23
|
+
encoding:
|
|
24
|
+
match: 1111000----------000-----0101111
|
|
25
|
+
variables:
|
|
26
|
+
- name: xs2
|
|
27
|
+
location: 24-20
|
|
28
|
+
- name: xs1
|
|
29
|
+
location: 19-15
|
|
30
|
+
- name: xd
|
|
31
|
+
location: 11-7
|
|
32
|
+
access:
|
|
33
|
+
s: always
|
|
34
|
+
u: always
|
|
35
|
+
vs: always
|
|
36
|
+
vu: always
|
|
37
|
+
operation(): |
|
|
38
|
+
XReg virtual_address = X[xs2] + X[xs1][31:0];
|
|
39
|
+
|
|
40
|
+
X[xd] = sext(read_memory(8, virtual_address, $encoding), 8);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsuwbu
|
|
9
|
+
long_name: Load scaled indexed byte unsigned with unsigned word index
|
|
10
|
+
description: |
|
|
11
|
+
Load 8 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + zext32(X[xs1])`, where `xs2` is the base and `xs1` is the index.
|
|
13
|
+
The index is zero-extended from `X[xs1][31:0]` before forming the address.
|
|
14
|
+
Zero extend the loaded byte to 64 bits.
|
|
15
|
+
|
|
16
|
+
This instruction is defined only for RV64.
|
|
17
|
+
definedBy:
|
|
18
|
+
allOf:
|
|
19
|
+
- xlen: 64
|
|
20
|
+
- extension:
|
|
21
|
+
name: Zilx
|
|
22
|
+
assembly: xd, (xs2), xs1
|
|
23
|
+
encoding:
|
|
24
|
+
match: 1111000----------100-----0101111
|
|
25
|
+
variables:
|
|
26
|
+
- name: xs2
|
|
27
|
+
location: 24-20
|
|
28
|
+
- name: xs1
|
|
29
|
+
location: 19-15
|
|
30
|
+
- name: xd
|
|
31
|
+
location: 11-7
|
|
32
|
+
access:
|
|
33
|
+
s: always
|
|
34
|
+
u: always
|
|
35
|
+
vs: always
|
|
36
|
+
vu: always
|
|
37
|
+
operation(): |
|
|
38
|
+
XReg virtual_address = X[xs2] + X[xs1][31:0];
|
|
39
|
+
|
|
40
|
+
X[xd] = read_memory(8, virtual_address, $encoding);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsuwd
|
|
9
|
+
long_name: Load scaled indexed doubleword with unsigned word index
|
|
10
|
+
description: |
|
|
11
|
+
Load 64 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (zext32(X[xs1]) << 3)`, where `xs2` is the base and `xs1` is the
|
|
13
|
+
index. The index is zero-extended from `X[xs1][31:0]` before scaling.
|
|
14
|
+
|
|
15
|
+
This instruction is defined only for RV64.
|
|
16
|
+
definedBy:
|
|
17
|
+
allOf:
|
|
18
|
+
- xlen: 64
|
|
19
|
+
- extension:
|
|
20
|
+
name: Zilx
|
|
21
|
+
assembly: xd, (xs2), xs1
|
|
22
|
+
encoding:
|
|
23
|
+
match: 1111000----------011-----0101111
|
|
24
|
+
variables:
|
|
25
|
+
- name: xs2
|
|
26
|
+
location: 24-20
|
|
27
|
+
- name: xs1
|
|
28
|
+
location: 19-15
|
|
29
|
+
- name: xd
|
|
30
|
+
location: 11-7
|
|
31
|
+
access:
|
|
32
|
+
s: always
|
|
33
|
+
u: always
|
|
34
|
+
vs: always
|
|
35
|
+
vu: always
|
|
36
|
+
operation(): |
|
|
37
|
+
XReg virtual_address = X[xs2] + (X[xs1][31:0] `<< 3);
|
|
38
|
+
|
|
39
|
+
X[xd] = read_memory(64, virtual_address, $encoding);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsuwh
|
|
9
|
+
long_name: Load scaled indexed halfword with unsigned word index
|
|
10
|
+
description: |
|
|
11
|
+
Load 16 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (zext32(X[xs1]) << 1)`, where `xs2` is the base and `xs1` is the
|
|
13
|
+
index. The index is zero-extended from `X[xs1][31:0]` before scaling.
|
|
14
|
+
Sign extend the loaded halfword to 64 bits.
|
|
15
|
+
|
|
16
|
+
This instruction is defined only for RV64.
|
|
17
|
+
definedBy:
|
|
18
|
+
allOf:
|
|
19
|
+
- xlen: 64
|
|
20
|
+
- extension:
|
|
21
|
+
name: Zilx
|
|
22
|
+
assembly: xd, (xs2), xs1
|
|
23
|
+
encoding:
|
|
24
|
+
match: 1111000----------001-----0101111
|
|
25
|
+
variables:
|
|
26
|
+
- name: xs2
|
|
27
|
+
location: 24-20
|
|
28
|
+
- name: xs1
|
|
29
|
+
location: 19-15
|
|
30
|
+
- name: xd
|
|
31
|
+
location: 11-7
|
|
32
|
+
access:
|
|
33
|
+
s: always
|
|
34
|
+
u: always
|
|
35
|
+
vs: always
|
|
36
|
+
vu: always
|
|
37
|
+
operation(): |
|
|
38
|
+
XReg virtual_address = X[xs2] + (X[xs1][31:0] `<< 1);
|
|
39
|
+
|
|
40
|
+
X[xd] = sext(read_memory(16, virtual_address, $encoding), 16);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsuwhu
|
|
9
|
+
long_name: Load scaled indexed halfword unsigned with unsigned word index
|
|
10
|
+
description: |
|
|
11
|
+
Load 16 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (zext32(X[xs1]) << 1)`, where `xs2` is the base and `xs1` is the
|
|
13
|
+
index. The index is zero-extended from `X[xs1][31:0]` before scaling.
|
|
14
|
+
Zero extend the loaded halfword to 64 bits.
|
|
15
|
+
|
|
16
|
+
This instruction is defined only for RV64.
|
|
17
|
+
definedBy:
|
|
18
|
+
allOf:
|
|
19
|
+
- xlen: 64
|
|
20
|
+
- extension:
|
|
21
|
+
name: Zilx
|
|
22
|
+
assembly: xd, (xs2), xs1
|
|
23
|
+
encoding:
|
|
24
|
+
match: 1111000----------101-----0101111
|
|
25
|
+
variables:
|
|
26
|
+
- name: xs2
|
|
27
|
+
location: 24-20
|
|
28
|
+
- name: xs1
|
|
29
|
+
location: 19-15
|
|
30
|
+
- name: xd
|
|
31
|
+
location: 11-7
|
|
32
|
+
access:
|
|
33
|
+
s: always
|
|
34
|
+
u: always
|
|
35
|
+
vs: always
|
|
36
|
+
vu: always
|
|
37
|
+
operation(): |
|
|
38
|
+
XReg virtual_address = X[xs2] + (X[xs1][31:0] `<< 1);
|
|
39
|
+
|
|
40
|
+
X[xd] = read_memory(16, virtual_address, $encoding);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsuww
|
|
9
|
+
long_name: Load scaled indexed word with unsigned word index
|
|
10
|
+
description: |
|
|
11
|
+
Load 32 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (zext32(X[xs1]) << 2)`, where `xs2` is the base and `xs1` is the
|
|
13
|
+
index. The index is zero-extended from `X[xs1][31:0]` before scaling.
|
|
14
|
+
Sign extend the loaded word to 64 bits.
|
|
15
|
+
|
|
16
|
+
This instruction is defined only for RV64.
|
|
17
|
+
definedBy:
|
|
18
|
+
allOf:
|
|
19
|
+
- xlen: 64
|
|
20
|
+
- extension:
|
|
21
|
+
name: Zilx
|
|
22
|
+
assembly: xd, (xs2), xs1
|
|
23
|
+
encoding:
|
|
24
|
+
match: 1111000----------010-----0101111
|
|
25
|
+
variables:
|
|
26
|
+
- name: xs2
|
|
27
|
+
location: 24-20
|
|
28
|
+
- name: xs1
|
|
29
|
+
location: 19-15
|
|
30
|
+
- name: xd
|
|
31
|
+
location: 11-7
|
|
32
|
+
access:
|
|
33
|
+
s: always
|
|
34
|
+
u: always
|
|
35
|
+
vs: always
|
|
36
|
+
vu: always
|
|
37
|
+
operation(): |
|
|
38
|
+
XReg virtual_address = X[xs2] + (X[xs1][31:0] `<< 2);
|
|
39
|
+
|
|
40
|
+
X[xd] = sext(read_memory(32, virtual_address, $encoding), 32);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsuwwu
|
|
9
|
+
long_name: Load scaled indexed word unsigned with unsigned word index
|
|
10
|
+
description: |
|
|
11
|
+
Load 32 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (zext32(X[xs1]) << 2)`, where `xs2` is the base and `xs1` is the
|
|
13
|
+
index. The index is zero-extended from `X[xs1][31:0]` before scaling.
|
|
14
|
+
Zero extend the loaded word to 64 bits.
|
|
15
|
+
|
|
16
|
+
This instruction is defined only for RV64.
|
|
17
|
+
definedBy:
|
|
18
|
+
allOf:
|
|
19
|
+
- xlen: 64
|
|
20
|
+
- extension:
|
|
21
|
+
name: Zilx
|
|
22
|
+
assembly: xd, (xs2), xs1
|
|
23
|
+
encoding:
|
|
24
|
+
match: 1111000----------110-----0101111
|
|
25
|
+
variables:
|
|
26
|
+
- name: xs2
|
|
27
|
+
location: 24-20
|
|
28
|
+
- name: xs1
|
|
29
|
+
location: 19-15
|
|
30
|
+
- name: xd
|
|
31
|
+
location: 11-7
|
|
32
|
+
access:
|
|
33
|
+
s: always
|
|
34
|
+
u: always
|
|
35
|
+
vs: always
|
|
36
|
+
vu: always
|
|
37
|
+
operation(): |
|
|
38
|
+
XReg virtual_address = X[xs2] + (X[xs1][31:0] `<< 2);
|
|
39
|
+
|
|
40
|
+
X[xd] = read_memory(32, virtual_address, $encoding);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxsw
|
|
9
|
+
long_name: Load scaled indexed word
|
|
10
|
+
description: |
|
|
11
|
+
Load 32 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (X[xs1] << 2)`, where `xs2` is the base and `xs1` is the index.
|
|
13
|
+
On RV64, the loaded word is sign-extended to 64 bits.
|
|
14
|
+
definedBy:
|
|
15
|
+
extension:
|
|
16
|
+
name: Zilx
|
|
17
|
+
assembly: xd, (xs2), xs1
|
|
18
|
+
encoding:
|
|
19
|
+
match: 1101000----------010-----0101111
|
|
20
|
+
variables:
|
|
21
|
+
- name: xs2
|
|
22
|
+
location: 24-20
|
|
23
|
+
- name: xs1
|
|
24
|
+
location: 19-15
|
|
25
|
+
- name: xd
|
|
26
|
+
location: 11-7
|
|
27
|
+
access:
|
|
28
|
+
s: always
|
|
29
|
+
u: always
|
|
30
|
+
vs: always
|
|
31
|
+
vu: always
|
|
32
|
+
operation(): |
|
|
33
|
+
XReg virtual_address = X[xs2] + (X[xs1] `<< 2);
|
|
34
|
+
|
|
35
|
+
X[xd] = sext(read_memory(32, virtual_address, $encoding), 32);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxswu
|
|
9
|
+
long_name: Load scaled indexed word unsigned
|
|
10
|
+
description: |
|
|
11
|
+
Load 32 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + (X[xs1] << 2)`, where `xs2` is the base and `xs1` is the index.
|
|
13
|
+
Zero extend the result to 64 bits.
|
|
14
|
+
|
|
15
|
+
This instruction is defined only for RV64.
|
|
16
|
+
definedBy:
|
|
17
|
+
allOf:
|
|
18
|
+
- xlen: 64
|
|
19
|
+
- extension:
|
|
20
|
+
name: Zilx
|
|
21
|
+
assembly: xd, (xs2), xs1
|
|
22
|
+
encoding:
|
|
23
|
+
match: 1101000----------110-----0101111
|
|
24
|
+
variables:
|
|
25
|
+
- name: xs2
|
|
26
|
+
location: 24-20
|
|
27
|
+
- name: xs1
|
|
28
|
+
location: 19-15
|
|
29
|
+
- name: xd
|
|
30
|
+
location: 11-7
|
|
31
|
+
access:
|
|
32
|
+
s: always
|
|
33
|
+
u: always
|
|
34
|
+
vs: always
|
|
35
|
+
vu: always
|
|
36
|
+
operation(): |
|
|
37
|
+
XReg virtual_address = X[xs2] + (X[xs1] `<< 2);
|
|
38
|
+
|
|
39
|
+
X[xd] = read_memory(32, virtual_address, $encoding);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxw
|
|
9
|
+
long_name: Load indexed word
|
|
10
|
+
description: |
|
|
11
|
+
Load 32 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + X[xs1]`, where `xs2` is the base and `xs1` is the index.
|
|
13
|
+
On RV64, the loaded word is sign-extended to 64 bits.
|
|
14
|
+
definedBy:
|
|
15
|
+
extension:
|
|
16
|
+
name: Zilx
|
|
17
|
+
assembly: xd, (xs2), xs1
|
|
18
|
+
encoding:
|
|
19
|
+
match: 1001000----------010-----0101111
|
|
20
|
+
variables:
|
|
21
|
+
- name: xs2
|
|
22
|
+
location: 24-20
|
|
23
|
+
- name: xs1
|
|
24
|
+
location: 19-15
|
|
25
|
+
- name: xd
|
|
26
|
+
location: 11-7
|
|
27
|
+
access:
|
|
28
|
+
s: always
|
|
29
|
+
u: always
|
|
30
|
+
vs: always
|
|
31
|
+
vu: always
|
|
32
|
+
operation(): |
|
|
33
|
+
XReg virtual_address = X[xs2] + X[xs1];
|
|
34
|
+
|
|
35
|
+
X[xd] = sext(read_memory(32, virtual_address, $encoding), 32);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: lxwu
|
|
9
|
+
long_name: Load indexed word unsigned
|
|
10
|
+
description: |
|
|
11
|
+
Load 32 bits of data into register `xd` from the effective address
|
|
12
|
+
`X[xs2] + X[xs1]`, where `xs2` is the base and `xs1` is the index.
|
|
13
|
+
Zero extend the result to 64 bits.
|
|
14
|
+
|
|
15
|
+
This instruction is defined only for RV64.
|
|
16
|
+
definedBy:
|
|
17
|
+
allOf:
|
|
18
|
+
- xlen: 64
|
|
19
|
+
- extension:
|
|
20
|
+
name: Zilx
|
|
21
|
+
assembly: xd, (xs2), xs1
|
|
22
|
+
encoding:
|
|
23
|
+
match: 1001000----------110-----0101111
|
|
24
|
+
variables:
|
|
25
|
+
- name: xs2
|
|
26
|
+
location: 24-20
|
|
27
|
+
- name: xs1
|
|
28
|
+
location: 19-15
|
|
29
|
+
- name: xd
|
|
30
|
+
location: 11-7
|
|
31
|
+
access:
|
|
32
|
+
s: always
|
|
33
|
+
u: always
|
|
34
|
+
vs: always
|
|
35
|
+
vu: always
|
|
36
|
+
operation(): |
|
|
37
|
+
XReg virtual_address = X[xs2] + X[xs1];
|
|
38
|
+
|
|
39
|
+
X[xd] = read_memory(32, virtual_address, $encoding);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Copyright (c) Alibaba Damo Academy
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: vabd.vv
|
|
9
|
+
long_name: Vector Single-Width Signed Integer Absolute Difference
|
|
10
|
+
description: |
|
|
11
|
+
Computes the element-wise absolute difference of two signed integer SEW-bit
|
|
12
|
+
source operands vs1 and vs2 and writes the result to vd according to mask vm.
|
|
13
|
+
|
|
14
|
+
Reserved when SEW is neither 8 nor 16.
|
|
15
|
+
definedBy:
|
|
16
|
+
extension:
|
|
17
|
+
name: Zvabd
|
|
18
|
+
assembly: vd, vs2, vs1, vm
|
|
19
|
+
encoding:
|
|
20
|
+
match: 010001-----------010-----1010111
|
|
21
|
+
variables:
|
|
22
|
+
- name: vm
|
|
23
|
+
location: 25
|
|
24
|
+
- name: vs2
|
|
25
|
+
location: 24-20
|
|
26
|
+
- name: vs1
|
|
27
|
+
location: 19-15
|
|
28
|
+
- name: vd
|
|
29
|
+
location: 11-7
|
|
30
|
+
access:
|
|
31
|
+
s: always
|
|
32
|
+
u: always
|
|
33
|
+
vs: always
|
|
34
|
+
vu: always
|
|
35
|
+
operation(): |
|
|
36
|
+
VectorState state = vector_state();
|
|
37
|
+
|
|
38
|
+
if (state.sew != 8 && state.sew != 16) {
|
|
39
|
+
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
VectorLmulType lmul_type = state.lmul_type;
|
|
43
|
+
|
|
44
|
+
XReg vlen = VLEN;
|
|
45
|
+
XReg vlmax;
|
|
46
|
+
if (lmul_type == VectorLmulType::Multiply) {
|
|
47
|
+
vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
|
|
48
|
+
} else {
|
|
49
|
+
vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
|
|
53
|
+
U32 start_bit_pos = i * state.sew;
|
|
54
|
+
U32 end_bit_pos = start_bit_pos + state.sew - 1;
|
|
55
|
+
if (vm == 1'b1 || V[0][i:i] == 1'b1) {
|
|
56
|
+
# active element
|
|
57
|
+
if ($signed(V[vs2][end_bit_pos:start_bit_pos]) >= $signed(V[vs1][end_bit_pos:start_bit_pos])) {
|
|
58
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs2][end_bit_pos:start_bit_pos] - V[vs1][end_bit_pos:start_bit_pos];
|
|
59
|
+
} else {
|
|
60
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs1][end_bit_pos:start_bit_pos] - V[vs2][end_bit_pos:start_bit_pos];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
# inactive element: handled according to vtype.VMA policy
|
|
64
|
+
}
|
|
65
|
+
# tail elements (i >= vl): handled according to vtype.VTA policy
|
|
66
|
+
|
|
67
|
+
CSR[vstart].VALUE = 0;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Copyright (c) Alibaba Damo Academy
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: vabdu.vv
|
|
9
|
+
long_name: Vector Single-Width Unsigned Integer Absolute Difference
|
|
10
|
+
description: |
|
|
11
|
+
Computes the element-wise absolute difference of two unsigned integer SEW-bit
|
|
12
|
+
source operands vs1 and vs2 and writes the result to vd according to mask vm.
|
|
13
|
+
|
|
14
|
+
Reserved when SEW is neither 8 nor 16.
|
|
15
|
+
definedBy:
|
|
16
|
+
extension:
|
|
17
|
+
name: Zvabd
|
|
18
|
+
assembly: vd, vs2, vs1, vm
|
|
19
|
+
encoding:
|
|
20
|
+
match: 010011-----------010-----1010111
|
|
21
|
+
variables:
|
|
22
|
+
- name: vm
|
|
23
|
+
location: 25
|
|
24
|
+
- name: vs2
|
|
25
|
+
location: 24-20
|
|
26
|
+
- name: vs1
|
|
27
|
+
location: 19-15
|
|
28
|
+
- name: vd
|
|
29
|
+
location: 11-7
|
|
30
|
+
access:
|
|
31
|
+
s: always
|
|
32
|
+
u: always
|
|
33
|
+
vs: always
|
|
34
|
+
vu: always
|
|
35
|
+
operation(): |
|
|
36
|
+
VectorState state = vector_state();
|
|
37
|
+
|
|
38
|
+
if (state.sew != 8 && state.sew != 16) {
|
|
39
|
+
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
VectorLmulType lmul_type = state.lmul_type;
|
|
43
|
+
|
|
44
|
+
XReg vlen = VLEN;
|
|
45
|
+
XReg vlmax;
|
|
46
|
+
if (lmul_type == VectorLmulType::Multiply) {
|
|
47
|
+
vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
|
|
48
|
+
} else {
|
|
49
|
+
vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
|
|
53
|
+
U32 start_bit_pos = i * state.sew;
|
|
54
|
+
U32 end_bit_pos = start_bit_pos + state.sew - 1;
|
|
55
|
+
if (vm == 1'b1 || V[0][i:i] == 1'b1) {
|
|
56
|
+
# active element
|
|
57
|
+
if (V[vs2][end_bit_pos:start_bit_pos] >= V[vs1][end_bit_pos:start_bit_pos]) {
|
|
58
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs2][end_bit_pos:start_bit_pos] - V[vs1][end_bit_pos:start_bit_pos];
|
|
59
|
+
} else {
|
|
60
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs1][end_bit_pos:start_bit_pos] - V[vs2][end_bit_pos:start_bit_pos];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
# inactive element: handled according to vtype.VMA policy
|
|
64
|
+
}
|
|
65
|
+
# tail elements (i >= vl): handled according to vtype.VTA policy
|
|
66
|
+
|
|
67
|
+
CSR[vstart].VALUE = 0;
|