Browse Source

Implement Zvflqdot8f

pull/2092/head
Andrew Waterman 10 months ago
parent
commit
3232ce1b76
  1. 2
      disasm/isa_parser.cc
  2. 17
      riscv/insns/vfqldot_alt_vv.h
  3. 17
      riscv/insns/vfqldot_vv.h
  4. 1
      riscv/isa_parser.h
  5. 2
      riscv/riscv.mk.in
  6. 2
      riscv/vector_unit.cc

2
disasm/isa_parser.cc

@ -340,6 +340,8 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
extension_table[EXT_ZVQLDOT8I] = true;
} else if (ext_str == "zvqldot16i") {
extension_table[EXT_ZVQLDOT16I] = true;
} else if (ext_str == "zvfqldot8f") {
extension_table[EXT_ZVFQLDOT8F] = true;
} else if (ext_str == "zvfwldot16bf") {
extension_table[EXT_ZVFWLDOT16BF] = true;
} else if (ext_str == "zvkt") {

17
riscv/insns/vfqldot_alt_vv.h

@ -0,0 +1,17 @@
VI_VFP_BASE;
ZVLDOT_INIT(4);
#define COMMA ,
switch (P.VU.vsew) {
case 8: {
require_extension(EXT_ZVFQLDOT8F);
if (P.VU.altfmt) {
ZVLDOT_LOOP(uint8_t, uint8_t, float32_t, zvfqbdot8f_dot_acc<ofp8_e5m2 COMMA ofp8_e5m2>);
} else {
ZVLDOT_LOOP(uint8_t, uint8_t, float32_t, zvfqbdot8f_dot_acc<ofp8_e4m3 COMMA ofp8_e5m2>);
}
break;
}
default: require(false);
}

17
riscv/insns/vfqldot_vv.h

@ -0,0 +1,17 @@
VI_VFP_BASE;
ZVLDOT_INIT(4);
#define COMMA ,
switch (P.VU.vsew) {
case 8: {
require_extension(EXT_ZVFQLDOT8F);
if (P.VU.altfmt) {
ZVLDOT_LOOP(uint8_t, uint8_t, float32_t, zvfqbdot8f_dot_acc<ofp8_e5m2 COMMA ofp8_e4m3>);
} else {
ZVLDOT_LOOP(uint8_t, uint8_t, float32_t, zvfqbdot8f_dot_acc<ofp8_e4m3 COMMA ofp8_e4m3>);
}
break;
}
default: require(false);
}

1
riscv/isa_parser.h

@ -75,6 +75,7 @@ typedef enum {
EXT_ZVFBDOT32F,
EXT_ZVQLDOT8I,
EXT_ZVQLDOT16I,
EXT_ZVFQLDOT8F,
EXT_ZVFWLDOT16BF,
EXT_SSTC,
EXT_ZAAMO,

2
riscv/riscv.mk.in

@ -1086,6 +1086,8 @@ riscv_insn_ext_zvldot = \
vqldotu_vv \
vqldots_vv \
vfwldot_vv \
vfqldot_vv \
vfqldot_alt_vv \
riscv_insn_ext_zimop = \
mop_r_N \

2
riscv/vector_unit.cc

@ -54,6 +54,8 @@ reg_t vectorUnit_t::vectorUnit_t::set_vl(int rd, int rs1, reg_t reqVL, reg_t new
ill_altfmt = false;
else if (p->extension_enabled(EXT_ZVQLDOT16I) && vsew == 16)
ill_altfmt = false;
else if (p->extension_enabled(EXT_ZVFQLDOT8F) && vsew == 8)
ill_altfmt = false;
else if (p->extension_enabled(EXT_ZVFWLDOT16BF) && vsew == 16)
ill_altfmt = false;
}

Loading…
Cancel
Save