// Obtain the name of the RegMask for an InstructForm const char *ArchDesc::reg_mask(InstructForm &inForm) { const char *result = inForm.reduce_result(); if (result == NULL) { syntax_err(inForm._linenum, "Did not find result operand or RegMask" " for this instruction: %s", inForm._ident); abort(); } // Instructions producing 'Universe' use RegMask::Empty if( strcmp(result,"Universe")==0 ) { return "RegMask::Empty"; } // Lookup this result operand and get its register class Form *form = (Form*)_globalNames[result]; if (form == NULL) { syntax_err(inForm._linenum, "Did not find result operand for result: %s", result); abort(); } OperandForm *oper = form->is_operand(); if (oper == NULL) { syntax_err(inForm._linenum, "Form is not an OperandForm:"); form->dump(); abort(); } return reg_mask( *oper ); }
void dump() { reset(); Form *cur; for(; (cur = iter()) != NULL; ) { cur->dump(); }; }