Skip to content

Commit 1de1894

Browse files
RISC-V: add support for the Zfinx, Zhinx, Zfinx, Zfhmin and Zhinxmin ISA extensions.
1 parent a4580aa commit 1de1894

File tree

4 files changed

+274
-52
lines changed

4 files changed

+274
-52
lines changed

doc/langref_riscv.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,9 +322,14 @@ Dynasm-rs currently supports the following ratified RISC-V instruction set exten
322322
- `Zcmop`: compressed may-be-operations
323323
- `Zcmp`: microcoded push/pop operations
324324
- `Zcmt`: table jumps
325+
- `Zdinx`: double floating point integer registers.
325326
- `Zfa`: additional floating point instructions
326327
- `Zfbfmin`: scalar convert to/from BF16
327328
- `Zfh`: half floating point support
329+
- `Zfhmin`: half floating point support: conversion only
330+
- `Zfinx`: floating point in integer registers
331+
- `Zhinx`: half floating point in integer registers
332+
- `Zhinxmin`: half floating point in integer registers: conversion only
328333
- `Zicbom`: cache block operations: management
329334
- `Zicbop`: cache block operations: prefetching
330335
- `Zicboz`: cache block operations: zero
@@ -334,7 +339,7 @@ Dynasm-rs currently supports the following ratified RISC-V instruction set exten
334339
- `Zicond`: integer conditional operations
335340
- `Zicsr`: control and status registers
336341
- `Zifencei`: data to instruction cache fence
337-
- `Zihintntl`: non temporal load hints
342+
- `Zihintntl`: non temporal locality hints
338343
- `Zihintpause`: pause hint
339344
- `Zimop`: may-be-operations
340345
- `Zk`: Scalar cryptography

plugin/src/arch/riscv/mod.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,16 @@ fn parse_features(features: &[syn::Ident]) -> riscvdata::ExtensionFlags {
270270
split.insert("zifencei");
271271
}
272272

273+
// expand b to Zba_Zbb_Zbs
274+
if split.remove(&"b") {
275+
split.insert("zba");
276+
split.insert("zbb");
277+
split.insert("zbs");
278+
}
279+
280+
// remove Ztso as it doesn't add instructions
281+
split.remove(&"ztso");
282+
273283
// many extensions
274284
for s in split.into_iter() {
275285
let flag = match s {
@@ -294,9 +304,14 @@ fn parse_features(features: &[syn::Ident]) -> riscvdata::ExtensionFlags {
294304
"zcmop" => riscvdata::ExtensionFlags::Ex_Zcmop,
295305
"zcmp" => riscvdata::ExtensionFlags::Ex_Zcmp,
296306
"zcmt" => riscvdata::ExtensionFlags::Ex_Zcmt,
307+
"zdinx" => riscvdata::ExtensionFlags::Ex_Zdinx,
297308
"zfa" => riscvdata::ExtensionFlags::Ex_Zfa,
298309
"zfbfmin" => riscvdata::ExtensionFlags::Ex_Zfbfmin,
299310
"zfh" => riscvdata::ExtensionFlags::Ex_Zfh,
311+
"zfhmin" => riscvdata::ExtensionFlags::Ex_Zfhmin,
312+
"zfinx" => riscvdata::ExtensionFlags::Ex_Zfinx,
313+
"zhinx" => riscvdata::ExtensionFlags::Ex_Zhinx,
314+
"zhinxmin" => riscvdata::ExtensionFlags::Ex_Zhinxmin,
300315
"zicbom" => riscvdata::ExtensionFlags::Ex_Zicbom,
301316
"zicbop" => riscvdata::ExtensionFlags::Ex_Zicbop,
302317
"zicboz" => riscvdata::ExtensionFlags::Ex_Zicboz,

0 commit comments

Comments
 (0)