#include "dsl/ir/codegen/operand.hpp"
GEMMSTONE_NAMESPACE_START
namespace dsl {
namespace ir {
static std::string to_string(ngen::DataType type) {
switch (type) {
#define CASE(name) \
case ngen::DataType::name: return #name
CASE(ud);
CASE(d);
CASE(uw);
CASE(w);
CASE(ub);
CASE(b);
CASE(df);
CASE(f);
CASE(uq);
CASE(q);
CASE(hf);
CASE(bf);
CASE(uv);
CASE(v);
CASE(vf);
CASE(bf8);
CASE(hf8);
CASE(tf32);
CASE(u4);
CASE(s4);
CASE(u2);
CASE(s2);
#undef CASE
default: return "unknown";
}
}
std::string ngen_operand_t::str() const {
if (!is_reg_buf_data()) return "ngen_operand";
auto &rbd = reg_buf_data();
auto &rb = rbd.reg_buf();
ostringstream_t oss;
if (rbd.type() != ngen::DataType::invalid) {
dsl_assert(rb.blocks() == 1);
dsl_assert(!rb.with_permute());
oss << "r" << rbd.base() << ".";
oss << rbd.offset() << ":";
oss << to_string(rbd.type());
} else {
oss << rb.str();
}
return oss.str();
}
} } GEMMSTONE_NAMESPACE_END