Example #1
0
dis_handler_return SPARCFPop3( dis_handle *h, void *d, dis_dec_ins *ins )
{
    sparc_ins   code;

    code.full = _SparcIns( ins->opcode );
    ins->op[ 0 ].type = DO_REG;
    ins->op[ 0 ].base = _SparcFReg( code.op3opf.rs1 );
    ins->op[ 1 ].type = DO_REG;
    ins->op[ 1 ].base = _SparcFReg( code.op3opf.rs2 );
    ins->op[ 2 ].type = DO_REG;
    ins->op[ 2 ].base = _SparcFReg( code.op3opf.rd );
    ins->num_ops = 3;
    return( DHR_DONE );
}
Example #2
0
dis_handler_return SPARCFPop2( dis_handle *h, void *d, dis_dec_ins *ins )
{
    sparc_ins   code;

    code.full = _SparcIns( ins->opcode );
    if( code.op3opf.opcode_3 == 0x35 ) {
        // fcmp
        ins->op[ 0 ].type = DO_REG;
        ins->op[ 0 ].base = _SparcFReg( code.op3opf.rs1 );
        ins->op[ 1 ].type = DO_REG;
        ins->op[ 1 ].base = _SparcFReg( code.op3opf.rs2 );
    } else {
        ins->op[ 0 ].type = DO_REG;
        ins->op[ 0 ].base = _SparcFReg( code.op3opf.rs2 );
        ins->op[ 1 ].type = DO_REG;
        ins->op[ 1 ].base = _SparcFReg( code.op3opf.rd );
    }
    ins->num_ops = 2;
    return( DHR_DONE );
}
Example #3
0
dis_handler_return SPARCMemF( dis_handle *h, void *d, dis_dec_ins *ins )
{
    sparc_ins   code;
    int         mem_op;
    int         reg_op;

    code.full = _SparcIns( ins->opcode );
    getOpIndices( code, &mem_op, &reg_op );
    ins->op[ reg_op ].type = DO_REG;
    ins->op[ reg_op ].base = _SparcFReg( code.op3.rd );
    ins->op[ mem_op ].ref_type = floatRefTypes[ code.op3.opcode_3 & 0x03 ];
    doSparcMem( h, d, &ins->op[ mem_op ], code );
    if( code.op3.opcode_3 == 0x21 || code.op3.opcode_3 == 0x25 ) {
        // special case for ldfsr/stfsr instructions
        ins->op[ reg_op ].base = DR_SPARC_fsr;
    }
    if( code.op3.opcode_3 == 0x26 ) {
        // another special case - stdfq instruction
        ins->op[ reg_op ].base = DR_SPARC_fq;
    }
    ins->num_ops = 2;
    return( DHR_DONE );
}