// 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 ); }
// Obtain the name of the RegMask for an InstructForm const char *ArchDesc::reg_mask(InstructForm &inForm) { const char *result = inForm.reduce_result(); assert( result, "Did not find result operand or RegMask for this instruction"); // 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]; assert( form, "Result operand must be defined"); OperandForm *oper = form->is_operand(); assert( oper, "Result must be an OperandForm"); return reg_mask( *oper ); }