#pragma once #include #include "imm.hpp" namespace dsp { template struct ins_t { /* virtual uint32_t bits() const; uint32_t render() const { return T::code() | bits(); } */ static bool pred(uint32_t ins) { return (ins & T::mask()) == T::code(); } }; template struct ins_imm_t : ins_t { ins_imm_t(uimm_t imm) : imm(imm) {} const uimm_t imm; uint32_t render(visitor_t * visitor) { num_t value = imm.normalize(imm.expr->accept(visitor)); if (imm.in_range(value)) return render() | value; else throw imm_out_of_range(imm, value); } }; }