From 474df05e8adccad063c4dbe47396b3eb9e19e1ea Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Mon, 12 Jan 2026 10:51:14 +1300 Subject: [PATCH] symfpu: Configurable eb and sb --- passes/cmds/symfpu.cc | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/passes/cmds/symfpu.cc b/passes/cmds/symfpu.cc index 2b7664b33..f4640fbf0 100644 --- a/passes/cmds/symfpu.cc +++ b/passes/cmds/symfpu.cc @@ -364,38 +364,45 @@ struct SymFpuPass : public Pass { { auto *help = PrettyHelp::get_current(); help->set_group("formal"); - return false; - } - void help() override - { - // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| - log("\n"); - log(" symfpu [options] [selection]\n"); - log("\n"); - log("TODO\n"); - log("\n"); + + auto content_root = help->get_root(); + + content_root->usage("symfpu [options]"); + content_root->paragraph("TODO"); + + content_root->option("-eb ", "use bits for exponent; default=8"); + content_root->option("-sb ", "use bits for significand, including hidden bit; default=24"); + + return true; } void execute(std::vector args, RTLIL::Design *design) override { - + int eb = 8, sb = 24; log_header(design, "Executing SYMFPU pass.\n"); size_t argidx; for (argidx = 1; argidx < args.size(); argidx++) { - + if (args[argidx] == "-eb" && argidx+1 < args.size()) { + eb = atoi(args[++argidx].c_str()); + continue; + } + if (args[argidx] == "-sb" && argidx+1 < args.size()) { + sb = atoi(args[++argidx].c_str()); + continue; + } break; } extra_args(args, argidx, design); - fpt format(8, 24); + fpt format(eb, sb); auto mod = design->addModule(ID(symfpu)); symfpu_mod = mod; - uf a = symfpu::unpack(format, input_ubv(ID(a), 32)); - uf b = symfpu::unpack(format, input_ubv(ID(b), 32)); + uf a = symfpu::unpack(format, input_ubv(ID(a), eb+sb)); + uf b = symfpu::unpack(format, input_ubv(ID(b), eb+sb)); uf added(symfpu::add(format, rtlil_traits::RNE(), a, b, prop(true))); uf multiplied(symfpu::multiply(format, rtlil_traits::RNE(), a, b));