diff --git a/arch/ext/Zhinx.yaml b/arch/ext/Zhinx.yaml new file mode 100644 index 0000000000..22c969d932 --- /dev/null +++ b/arch/ext/Zhinx.yaml @@ -0,0 +1,20 @@ +# yaml-language-server: $schema=../../schemas/ext_schema.json + +$schema: "ext_schema.json#" +kind: extension +name: Zhinx +long_name: Half-precision floating-point instructions using integer registers +description: | + The Zhinx extension provides analogous half-precision floating-point instructions. The Zhinx extension + depends upon the Zfinx extension. + The Zhinx extension adds all of the instructions that the Zfh extension adds, except for the transfer + instructions FLH, FSH, FMV.H.X, and FMV.X.H. + The Zhinx variants of these Zfh-extension instructions have the same semantics, except that whenever + such an instruction would have accessed an f register, it instead accesses the x register with the same + number. + +type: unprivileged +versions: + - version: "1.0.0" + state: ratified + ratification_date: 2021-11 diff --git a/arch/inst/D/fcvtmod.w.d.yaml b/arch/inst/D/fcvtmod.w.d.yaml index efd9414d18..3f51f95ebe 100644 --- a/arch/inst/D/fcvtmod.w.d.yaml +++ b/arch/inst/D/fcvtmod.w.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1 encoding: match: 110000101000-----001-----1010011 diff --git a/arch/inst/D/fleq.d.yaml b/arch/inst/D/fleq.d.yaml index f83760edd7..717a079186 100644 --- a/arch/inst/D/fleq.d.yaml +++ b/arch/inst/D/fleq.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1, xs2 encoding: match: 1010001----------100-----1010011 diff --git a/arch/inst/D/fli.d.yaml b/arch/inst/D/fli.d.yaml index 9e226b79d1..ba6443965a 100644 --- a/arch/inst/D/fli.d.yaml +++ b/arch/inst/D/fli.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1 encoding: match: 111100100001-----000-----1010011 diff --git a/arch/inst/D/fltq.d.yaml b/arch/inst/D/fltq.d.yaml index 2e662b2602..36e6842769 100644 --- a/arch/inst/D/fltq.d.yaml +++ b/arch/inst/D/fltq.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1, xs2 encoding: match: 1010001----------101-----1010011 diff --git a/arch/inst/D/fmaxm.d.yaml b/arch/inst/D/fmaxm.d.yaml index 0cce65dfaf..eb9c93bda4 100644 --- a/arch/inst/D/fmaxm.d.yaml +++ b/arch/inst/D/fmaxm.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1, xs2 encoding: match: 0010101----------011-----1010011 diff --git a/arch/inst/D/fminm.d.yaml b/arch/inst/D/fminm.d.yaml index 7dc713939d..fd1b814470 100644 --- a/arch/inst/D/fminm.d.yaml +++ b/arch/inst/D/fminm.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1, xs2 encoding: match: 0010101----------010-----1010011 diff --git a/arch/inst/D/fmvh.x.d.yaml b/arch/inst/D/fmvh.x.d.yaml index 20ec6fa419..996d13b4e5 100644 --- a/arch/inst/D/fmvh.x.d.yaml +++ b/arch/inst/D/fmvh.x.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1 encoding: match: 111000100001-----000-----1010011 diff --git a/arch/inst/D/fmvp.d.x.yaml b/arch/inst/D/fmvp.d.x.yaml index 6755e561c7..0fb5c1680e 100644 --- a/arch/inst/D/fmvp.d.x.yaml +++ b/arch/inst/D/fmvp.d.x.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1, xs2 encoding: match: 1011001----------000-----1010011 diff --git a/arch/inst/D/fround.d.yaml b/arch/inst/D/fround.d.yaml index c9cc9d890d..bac051ab9b 100644 --- a/arch/inst/D/fround.d.yaml +++ b/arch/inst/D/fround.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1, rm encoding: match: 010000100100-------------1010011 diff --git a/arch/inst/D/froundnx.d.yaml b/arch/inst/D/froundnx.d.yaml index e20c585e8f..1661fc0a50 100644 --- a/arch/inst/D/froundnx.d.yaml +++ b/arch/inst/D/froundnx.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfa] + allOf: [D, Zfa] assembly: xd, xs1, rm encoding: match: 010000100101-------------1010011 diff --git a/arch/inst/Q/fcvt.h.q.yaml b/arch/inst/Q/fcvt.h.q.yaml index 8c56e8f78f..67c5f4c783 100644 --- a/arch/inst/Q/fcvt.h.q.yaml +++ b/arch/inst/Q/fcvt.h.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfh] + allOf: [Q, Zfh] assembly: xd, qs1, rm encoding: match: 010001000011-------------1010011 diff --git a/arch/inst/Q/fcvt.q.h.yaml b/arch/inst/Q/fcvt.q.h.yaml index 2b7e7fe09d..ca15a82be3 100644 --- a/arch/inst/Q/fcvt.q.h.yaml +++ b/arch/inst/Q/fcvt.q.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfh] + allOf: [Q, Zfh] assembly: hd, qs1, rm encoding: match: 010001100010-------------1010011 diff --git a/arch/inst/Q/fleq.q.yaml b/arch/inst/Q/fleq.q.yaml index cd6ed983ab..5b3d20602c 100644 --- a/arch/inst/Q/fleq.q.yaml +++ b/arch/inst/Q/fleq.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] assembly: xd, qs1, qs2 encoding: match: 1010011----------100-----1010011 diff --git a/arch/inst/Q/fli.q.yaml b/arch/inst/Q/fli.q.yaml index 5d8005c9b3..54eb0f9127 100644 --- a/arch/inst/Q/fli.q.yaml +++ b/arch/inst/Q/fli.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] assembly: fd, qs1 encoding: match: 111101100001-----000-----1010011 diff --git a/arch/inst/Q/fltq.q.yaml b/arch/inst/Q/fltq.q.yaml index d5a341ff17..ed38253c2c 100644 --- a/arch/inst/Q/fltq.q.yaml +++ b/arch/inst/Q/fltq.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] assembly: qd, qs1, qs2 encoding: match: 1010011----------101-----1010011 diff --git a/arch/inst/Q/fmaxm.q.yaml b/arch/inst/Q/fmaxm.q.yaml index 2cf6296744..c8de8c8d77 100644 --- a/arch/inst/Q/fmaxm.q.yaml +++ b/arch/inst/Q/fmaxm.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] assembly: qd, qs1, qs2 encoding: match: 0010111----------011-----1010011 diff --git a/arch/inst/Q/fminm.q.yaml b/arch/inst/Q/fminm.q.yaml index 750626e148..737826cc6e 100644 --- a/arch/inst/Q/fminm.q.yaml +++ b/arch/inst/Q/fminm.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] assembly: qd, qs1, qs2 encoding: match: 0010111----------010-----1010011 diff --git a/arch/inst/Q/fmvh.x.q.yaml b/arch/inst/Q/fmvh.x.q.yaml index 4e22012a29..a688c0e22a 100644 --- a/arch/inst/Q/fmvh.x.q.yaml +++ b/arch/inst/Q/fmvh.x.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] base: 64 assembly: xd, qs1 encoding: diff --git a/arch/inst/Q/fmvp.q.x.yaml b/arch/inst/Q/fmvp.q.x.yaml index e05d063683..efc92b6087 100644 --- a/arch/inst/Q/fmvp.q.x.yaml +++ b/arch/inst/Q/fmvp.q.x.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] base: 64 assembly: qd, xs1, xs2 encoding: diff --git a/arch/inst/Q/fround.q.yaml b/arch/inst/Q/fround.q.yaml index a430445f30..7f3125b3ff 100644 --- a/arch/inst/Q/fround.q.yaml +++ b/arch/inst/Q/fround.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] assembly: qd, qs1, rm encoding: match: 010001100100-------------1010011 diff --git a/arch/inst/Q/froundnx.q.yaml b/arch/inst/Q/froundnx.q.yaml index 360bc9fc25..0de4f8c84a 100644 --- a/arch/inst/Q/froundnx.q.yaml +++ b/arch/inst/Q/froundnx.q.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Q, Zfa] + allOf: [Q, Zfa] assembly: qd, qs1, rm encoding: match: 010001100101-------------1010011 diff --git a/arch/inst/Zfh/fcvt.d.h.yaml b/arch/inst/Zfh/fcvt.d.h.yaml index dc02cc5a64..9e9938971a 100644 --- a/arch/inst/Zfh/fcvt.d.h.yaml +++ b/arch/inst/Zfh/fcvt.d.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfh] + allOf: [D, Zfh] assembly: xd, xs1, rm encoding: match: 010000100010-------------1010011 diff --git a/arch/inst/Zfh/fcvt.h.d.yaml b/arch/inst/Zfh/fcvt.h.d.yaml index 82db22c0e9..92c5ae14bc 100644 --- a/arch/inst/Zfh/fcvt.h.d.yaml +++ b/arch/inst/Zfh/fcvt.h.d.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [D, Zfh] + allOf: [D, Zfh] assembly: xd, xs1, rm encoding: match: 010001000001-------------1010011 diff --git a/arch/inst/Zfh/fcvt.h.s.yaml b/arch/inst/Zfh/fcvt.h.s.yaml index 8526b9e4a5..4601b28c49 100644 --- a/arch/inst/Zfh/fcvt.h.s.yaml +++ b/arch/inst/Zfh/fcvt.h.s.yaml @@ -5,7 +5,7 @@ kind: instruction name: fcvt.h.s long_name: Convert half-precision float to a single-precision float definedBy: - anyOf: [Zfh, Zfhmin] + allOf: [Zfh, Zfhmin] assembly: fd, xs1 description: | Converts a half-precision number in floating-point register _fs1_ into a single-precision floating-point number in diff --git a/arch/inst/Zfh/fcvt.s.h.yaml b/arch/inst/Zfh/fcvt.s.h.yaml index eac044ed32..2b5645699b 100644 --- a/arch/inst/Zfh/fcvt.s.h.yaml +++ b/arch/inst/Zfh/fcvt.s.h.yaml @@ -5,7 +5,7 @@ kind: instruction name: fcvt.s.h long_name: Convert single-precision float to a half-precision float definedBy: - anyOf: [Zfh, Zfhmin] + allOf: [Zfh, Zfhmin] assembly: fd, xs1 description: | Converts a single-precision number in floating-point register _fs1_ into a half-precision floating-point number in diff --git a/arch/inst/Zfh/fleq.h.yaml b/arch/inst/Zfh/fleq.h.yaml index deb371268b..65625e4f3e 100644 --- a/arch/inst/Zfh/fleq.h.yaml +++ b/arch/inst/Zfh/fleq.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Zfa, Zfh] + allOf: [Zfa, Zfh] assembly: xd, xs1, xs2 encoding: match: 1010010----------100-----1010011 diff --git a/arch/inst/Zfh/flh.yaml b/arch/inst/Zfh/flh.yaml index 7810342f06..687d10a408 100644 --- a/arch/inst/Zfh/flh.yaml +++ b/arch/inst/Zfh/flh.yaml @@ -12,7 +12,7 @@ description: | `flh` is only guaranteed to execute atomically if the effective address is naturally aligned. definedBy: - anyOf: [Zfh, Zfhmin] + anyOf: [Zfh, Zfhmin, Zhinx] assembly: fd, imm(xs1) encoding: match: -----------------001-----0000111 diff --git a/arch/inst/Zfh/fli.h.yaml b/arch/inst/Zfh/fli.h.yaml index 1a73648c91..a5f7772246 100644 --- a/arch/inst/Zfh/fli.h.yaml +++ b/arch/inst/Zfh/fli.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Zfa, Zfh] + allOf: [Zfa, Zfh] assembly: xd, xs1 encoding: match: 111101000001-----000-----1010011 diff --git a/arch/inst/Zfh/fltq.h.yaml b/arch/inst/Zfh/fltq.h.yaml index 852f53de15..140e5f7ec7 100644 --- a/arch/inst/Zfh/fltq.h.yaml +++ b/arch/inst/Zfh/fltq.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Zfa, Zfh] + allOf: [Zfa, Zfh] assembly: xd, xs1, xs2 encoding: match: 1010010----------101-----1010011 diff --git a/arch/inst/Zfh/fmaxm.h.yaml b/arch/inst/Zfh/fmaxm.h.yaml index c0939a70e6..33de726dac 100644 --- a/arch/inst/Zfh/fmaxm.h.yaml +++ b/arch/inst/Zfh/fmaxm.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Zfa, Zfh] + allOf: [Zfa, Zfh] assembly: xd, xs1, xs2 encoding: match: 0010110----------011-----1010011 diff --git a/arch/inst/Zfh/fminm.h.yaml b/arch/inst/Zfh/fminm.h.yaml index 72a365d06a..750a81d596 100644 --- a/arch/inst/Zfh/fminm.h.yaml +++ b/arch/inst/Zfh/fminm.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Zfa, Zfh] + allOf: [Zfa, Zfh] assembly: xd, xs1, xs2 encoding: match: 0010110----------010-----1010011 diff --git a/arch/inst/Zfh/fmv.x.h.yaml b/arch/inst/Zfh/fmv.x.h.yaml index e0afcbcaa1..51db5f6236 100644 --- a/arch/inst/Zfh/fmv.x.h.yaml +++ b/arch/inst/Zfh/fmv.x.h.yaml @@ -5,7 +5,7 @@ kind: instruction name: fmv.x.h long_name: Move half-precision value from floating-point to integer register definedBy: - anyOf: [Zfh, Zfhmin] + anyOf: [Zfh, Zfhmin, Zhinx] assembly: rd, fs1 description: | Moves the half-precision value in floating-point register rs1 represented in IEEE 754-2008 diff --git a/arch/inst/Zfh/fround.h.yaml b/arch/inst/Zfh/fround.h.yaml index 0cea38f953..279a7e4ed5 100644 --- a/arch/inst/Zfh/fround.h.yaml +++ b/arch/inst/Zfh/fround.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Zfa, Zfh] + allOf: [Zfa, Zfh] assembly: xd, xs1, rm encoding: match: 010001000100-------------1010011 diff --git a/arch/inst/Zfh/froundnx.h.yaml b/arch/inst/Zfh/froundnx.h.yaml index 10babc702f..1273b62ef8 100644 --- a/arch/inst/Zfh/froundnx.h.yaml +++ b/arch/inst/Zfh/froundnx.h.yaml @@ -7,7 +7,7 @@ long_name: No synopsis available. description: | No description available. definedBy: - anyOf: [Zfa, Zfh] + allOf: [Zfa, Zfh] assembly: xd, xs1, rm encoding: match: 010001000101-------------1010011 diff --git a/arch/inst/Zfh/fsh.yaml b/arch/inst/Zfh/fsh.yaml index 40cc00979e..7139992fcf 100644 --- a/arch/inst/Zfh/fsh.yaml +++ b/arch/inst/Zfh/fsh.yaml @@ -15,7 +15,7 @@ description: | `fsh` is only guaranteed to execute atomically if the effective address is naturally aligned. definedBy: - anyOf: [Zfh, Zfhmin] + anyOf: [Zfh, Zfhmin, Zhinx] assembly: fs2, imm(xs1) encoding: match: -----------------001-----0100111