Browse Source

Zicond: implement Zicond (conditional integer operations)

This implements the Zicond (conditional integer operations) extension,
as of version 1.0-draft-20230120.

The Zicond extension acts as a building block for branchless sequences
including conditional-arithmetic, conditional-logic and
conditional-select/move.
The following instructions constitute Zicond:
 - czero.eqz rd, rs1, rs2  =>  rd = (rs2 == 0) ? 0 : rs1
 - czero.nez rd, rs1, rs2  =>  rd = (rs2 != 0) ? 0 : rs1

See
  https://github.com/riscv/riscv-zicond/releases/download/v1.0-draft-20230120/riscv-zicond_1.0-draft-20230120.pdf
for the proposed specification and usage details.
pull/1241/head
Philipp Tomsich 4 years ago
committed by Andrew Waterman
parent
commit
e69b206456
  1. 2
      riscv/insns/czero_eqz.h
  2. 2
      riscv/insns/czero_nez.h
  3. 2
      riscv/isa_parser.cc
  4. 1
      riscv/isa_parser.h
  5. 5
      riscv/riscv.mk.in

2
riscv/insns/czero_eqz.h

@ -0,0 +1,2 @@
require_extension(EXT_ZICOND);
WRITE_RD(RS2 == 0 ? 0 : RS1);

2
riscv/insns/czero_nez.h

@ -0,0 +1,2 @@
require_extension(EXT_ZICOND);
WRITE_RD(RS2 != 0 ? 0 : RS1);

2
riscv/isa_parser.cc

@ -220,6 +220,8 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
extension_table[EXT_ZICBOZ] = true;
} else if (ext_str == "zicbop") {
} else if (ext_str == "zicntr") {
} else if (ext_str == "zicond") {
extension_table[EXT_ZICOND] = true;
} else if (ext_str == "zihpm") {
} else if (ext_str == "sstc") {
extension_table[EXT_SSTC] = true;

1
riscv/isa_parser.h

@ -53,6 +53,7 @@ typedef enum {
EXT_ZICBOM,
EXT_ZICBOZ,
EXT_ZICNTR,
EXT_ZICOND,
EXT_ZIHPM,
EXT_XZBP,
EXT_XZBS,

5
riscv/riscv.mk.in

@ -1305,6 +1305,10 @@ riscv_insn_ext_cmo = \
cbo_inval \
cbo_zero \
riscv_insn_ext_zicond = \
czero_eqz \
czero_nez \
riscv_insn_list = \
$(riscv_insn_ext_a) \
$(riscv_insn_ext_c) \
@ -1323,6 +1327,7 @@ riscv_insn_list = \
$(riscv_insn_priv) \
$(riscv_insn_svinval) \
$(riscv_insn_ext_cmo) \
$(riscv_insn_ext_zicond) \
riscv_gen_srcs = $(addsuffix .cc,$(riscv_insn_list))

Loading…
Cancel
Save