gen-zam: generate descriptions of macros, akin to those already generated for operations

This commit is contained in:
Vern Paxson 2025-01-02 15:30:40 -08:00 committed by Tim Wojtulewicz
parent 12bb2a04eb
commit 53591cf205
2 changed files with 24 additions and 3 deletions

View file

@ -980,7 +980,7 @@ void ZAM_OpTemplate::GenDesc(const string& op_code, const string& oc_str, const
void ZAM_OpTemplate::StartDesc(const string& op_code, const string& oc_str) void ZAM_OpTemplate::StartDesc(const string& op_code, const string& oc_str)
{ {
EmitTo(Desc); EmitTo(OpDesc);
Emit("{ " + op_code + ","); Emit("{ " + op_code + ",");
BeginBlock(); BeginBlock();
Emit("\"" + oc_str + "\","); Emit("\"" + oc_str + "\",");
@ -2476,10 +2476,27 @@ void ZAMGen::GenMacros()
{ {
auto ms = m[i]; auto ms = m[i];
if ( i == 0 ) if ( i == 0 )
{
auto name = regex_replace(ms, regex("[( ].*\n"), "");
Emit(MacroDesc, "{ \"" + name + "\",");
ms = "#define " + ms; ms = "#define " + ms;
}
auto desc = ms;
desc.erase(desc.find('\n'));
desc = regex_replace(desc, regex("\\\\"), "\\\\");
desc = regex_replace(desc, regex("\""), "\\\"");
if ( i < m.size() - 1 ) if ( i < m.size() - 1 )
{
ms = regex_replace(ms, regex("\n"), " \\\n"); ms = regex_replace(ms, regex("\n"), " \\\n");
desc.append(" \\\\\\n");
}
Emit(MacroDesc, " \"" + desc + "\"");
if ( i == m.size() - 1 )
Emit(MacroDesc, "},");
Emit(EvalMacros, ms); Emit(EvalMacros, ms);
} }
@ -2580,14 +2597,15 @@ void ZAMGen::InitEmitTargets()
{C2FieldDef, "ZAM-GenFieldsDefsC2.h"}, {C2FieldDef, "ZAM-GenFieldsDefsC2.h"},
{C3Def, "ZAM-GenExprsDefsC3.h"}, {C3Def, "ZAM-GenExprsDefsC3.h"},
{Cond, "ZAM-Conds.h"}, {Cond, "ZAM-Conds.h"},
{Desc, "ZAM-Desc.h"},
{DirectDef, "ZAM-DirectDefs.h"}, {DirectDef, "ZAM-DirectDefs.h"},
{Eval, "ZAM-EvalDefs.h"}, {Eval, "ZAM-EvalDefs.h"},
{EvalMacros, "ZAM-EvalMacros.h"}, {EvalMacros, "ZAM-EvalMacros.h"},
{MacroDesc, "ZAM-MacroDesc.h"},
{MethodDecl, "ZAM-MethodDecls.h"}, {MethodDecl, "ZAM-MethodDecls.h"},
{MethodDef, "ZAM-MethodDefs.h"}, {MethodDef, "ZAM-MethodDefs.h"},
{Op1Flavor, "ZAM-Op1FlavorsDefs.h"}, {Op1Flavor, "ZAM-Op1FlavorsDefs.h"},
{OpDef, "ZAM-OpsDefs.h"}, {OpDef, "ZAM-OpsDefs.h"},
{OpDesc, "ZAM-OpDesc.h"},
{OpName, "ZAM-OpsNamesDefs.h"}, {OpName, "ZAM-OpsNamesDefs.h"},
{OpSideEffects, "ZAM-OpSideEffects.h"}, {OpSideEffects, "ZAM-OpSideEffects.h"},
{VDef, "ZAM-GenExprsDefsV.h"}, {VDef, "ZAM-GenExprsDefsV.h"},

View file

@ -144,7 +144,10 @@ enum EmitTarget
Cond, Cond,
// Descriptions of final ZAM operations, used for validation. // Descriptions of final ZAM operations, used for validation.
Desc, OpDesc,
// The same, for macros.
MacroDesc,
// Switch cases that provide the C++ code for executing specific // Switch cases that provide the C++ code for executing specific
// individual ZAM instructions. // individual ZAM instructions.