I tried to extract the fmul type instructions and display them in the
format:
[image: image.png]
I have these functions in execute.cc

        // Cod adaugat
        std::string disassembledInst =
inst->staticInst->disassemble(inst->pc->instAddr(),
&loader::debugSymbolTable);
        if(inst->staticInst->opClass()==FloatMultOp){
            if (disassembledInst.find("fmul") != std::string::npos) {

                // Instruction details
                DPRINTF(MinorExecuteOp, "Exec inst: %s\n", *inst);

                // Op Class
                DPRINTF(MinorExecuteOp, "  Op Class inst: %s\n",
enums::OpClassStrings[inst->staticInst->opClass()]);


                // Op Dissasembled
                DPRINTF(MinorExecuteOp, "Dissasembled: %s\n",
inst->staticInst->disassemble(inst->pc->instAddr(),
&loader::debugSymbolTable));

                // Cast from StaticInstPtr to StaticInst
                StaticInst* leInst = inst->staticInst.get();


                // Print source register values
                for (int i = 0; i < leInst->numSrcRegs(); i++) {
                    RegId regId = leInst->srcRegIdx(i);
                    float regValue;
                    context.getFloatRegOperand(leInst, i, &regValue);
                    DPRINTF(MinorExecuteOp, "  SrcReg%d=%d (%s)\n",/*i,
regValue,*/ printRegName(regId));
                }


                // Print destination register values
                for (int i = 0; i < leInst->numDestRegs(); i++) {
                    RegId regId = leInst->destRegIdx(i);
                    float regValue;
                    context.getFloatRegOperand(leInst, i, &regValue);
                    DPRINTF(MinorExecuteOp, "  DestReg%d=%d (%s)\n", /*i,
regValue,*/ printRegName(regId));

                }
            }
        }

        fault = inst->staticInst->execute(&context,
            inst->traceData);

        /*Set the predicate for tracing and dump*/
        if(inst->traceData){
            inst->traceData->setPredicate(context.readPredicate());
        }

        // Cod adaugat
        // Print destination register values
        if(inst->staticInst->opClass()==FloatMultOp){
            if (disassembledInst.find("fmul") != std::string::npos) {

                // Cast from StaticInstPtr to StaticInst
                StaticInst* leInst = inst->staticInst.get();


                for (int i = 0; i < leInst->numDestRegs(); i++) {
                    RegId regId = leInst->destRegIdx(i);
                    float regValue;
                    context.getFloatRegOperand(leInst, i, &regValue);
                    DPRINTF(MinorExecuteOp, "  DestReg%d=%d (%s)\n", /*i,
regValue,*/ printRegName(regId));

                }
            }
        }
        // Cod adaugat
and the getFloatRegOperand looks like this
[image: image.png]
has anyone tried to do this before and can help me?
Thank you very much! Have a nice day!
_______________________________________________
gem5-users mailing list -- gem5-us...@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org

Reply via email to