コード例 #1
0
ファイル: fdct.c プロジェクト: JERUKA9/ffdshow-tryouts
void fdct_int32( short *const In )
{
  short *pIn;
  int i;

  pIn = In;
  for(i=8; i>0; --i)
  {
    int mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, Spill;

      // even

    LOAD_BUTF(mm1,mm6, 1, 6, mm0, pIn);
    LOAD_BUTF(mm2,mm5, 2, 5, mm0, pIn);
    LOAD_BUTF(mm3,mm4, 3, 4, mm0, pIn);
    LOAD_BUTF(mm0,mm7, 0, 7, Spill, pIn);

    BUTF(mm1, mm2, Spill);
    BUTF(mm0, mm3, Spill);

    ROTATE(mm3, mm2, ROT6_C, ROT6_SmC, -ROT6_SpC, Spill, FIX-FPASS, HALF(FIX-FPASS));
    pIn[2] = mm3;
    pIn[6] = mm2;

    BUTF(mm0, mm1, Spill);
    pIn[0] = SHIFTL(mm0, FPASS);
    pIn[4] = SHIFTL(mm1, FPASS);


      // odd

    mm3 = mm5 + mm7;
    mm2 = mm4 + mm6;
    ROTATE(mm2, mm3,  ROT17_C, -ROT17_SpC, -ROT17_SmC, mm0, FIX-FPASS, HALF(FIX-FPASS));
    ROTATE(mm4, mm7, -ROT37_C,  ROT37_SpC,  ROT37_SmC, mm0, FIX-FPASS, HALF(FIX-FPASS));
    mm7 += mm3;
    mm4 += mm2;
    pIn[1] = mm7;
    pIn[7] = mm4;

    ROTATE(mm5, mm6, -ROT13_C,  ROT13_SmC,  ROT13_SpC, mm0, FIX-FPASS, HALF(FIX-FPASS));
    mm5 += mm3;
    mm6 += mm2;
    pIn[3] = mm6;
    pIn[5] = mm5;

    pIn  += 8;
  }

  pIn = In;
  for(i=8; i>0; --i)
  {
    int mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, Spill;

      // even

    LOAD_BUTF(mm1,mm6, 1*8, 6*8, mm0, pIn);
    LOAD_BUTF(mm2,mm5, 2*8, 5*8, mm0, pIn);
    BUTF(mm1, mm2, mm0);

    LOAD_BUTF(mm3,mm4, 3*8, 4*8, mm0, pIn);
    LOAD_BUTF(mm0,mm7, 0*8, 7*8, Spill, pIn);
    BUTF(mm0, mm3, Spill);

    ROTATE(mm3, mm2, ROT6_C, ROT6_SmC, -ROT6_SpC, Spill, 0,  HALF(FIX+FPASS+3));
    pIn[2*8] = (int16_t)SHIFTR(mm3,FIX+FPASS+3);
    pIn[6*8] = (int16_t)SHIFTR(mm2,FIX+FPASS+3);

    mm0 += HALF(FPASS+3) - 1;
    BUTF(mm0, mm1, Spill);
    pIn[0*8] = (int16_t)SHIFTR(mm0, FPASS+3);
    pIn[4*8] = (int16_t)SHIFTR(mm1, FPASS+3);

      // odd

    mm3 = mm5 + mm7;
    mm2 = mm4 + mm6;

    ROTATE(mm2, mm3,  ROT17_C, -ROT17_SpC, -ROT17_SmC, mm0, 0, HALF(FIX+FPASS+3));
    ROTATE2(mm4, mm7, -ROT37_C,  ROT37_SpC,  ROT37_SmC, mm0);
    mm7 += mm3;
    mm4 += mm2;
    pIn[7*8] = (int16_t)SHIFTR(mm4,FIX+FPASS+3);
    pIn[1*8] = (int16_t)SHIFTR(mm7,FIX+FPASS+3);

    ROTATE2(mm5, mm6, -ROT13_C,  ROT13_SmC,  ROT13_SpC, mm0);
    mm5 += mm3;
    mm6 += mm2;
    pIn[5*8] = (int16_t)SHIFTR(mm5,FIX+FPASS+3);
    pIn[3*8] = (int16_t)SHIFTR(mm6,FIX+FPASS+3);

    pIn++;
  }
}
コード例 #2
0
//
// Initialization of the info structure per instruction
//
void microblazeGenInstructionInfo (microblazeInstructionInfoP info, Uns64 instruction) {
    info->opcode = opcode[info->type];
    switch (info->type) {
        case MICROBLAZE_IT_ADD_TYPEA1:
        case MICROBLAZE_IT_ADDC_TYPEA1:
        case MICROBLAZE_IT_ADDK_TYPEA1:
        case MICROBLAZE_IT_ADDKC_TYPEA1:
        case MICROBLAZE_IT_AND_TYPEA1:
        case MICROBLAZE_IT_ANDN_TYPEA1:
        case MICROBLAZE_IT_FADD_TYPEA1:
        case MICROBLAZE_IT_FCMPEQ_TYPEA1:
        case MICROBLAZE_IT_FCMPGE_TYPEA1:
        case MICROBLAZE_IT_FCMPGT_TYPEA1:
        case MICROBLAZE_IT_FCMPLE_TYPEA1:
        case MICROBLAZE_IT_FCMPLT_TYPEA1:
        case MICROBLAZE_IT_FCMPNE_TYPEA1:
        case MICROBLAZE_IT_FCMPUN_TYPEA1:
        case MICROBLAZE_IT_FDIV_TYPEA1:
        case MICROBLAZE_IT_FMUL_TYPEA1:
        case MICROBLAZE_IT_FRSUB_TYPEA1:
        case MICROBLAZE_IT_LWX_TYPEA1:
        case MICROBLAZE_IT_MUL_TYPEA1:
        case MICROBLAZE_IT_MULH_TYPEA1:
        case MICROBLAZE_IT_MULHSU_TYPEA1:
        case MICROBLAZE_IT_MULHU_TYPEA1:
        case MICROBLAZE_IT_OR_TYPEA1:
        case MICROBLAZE_IT_PCMPBF_TYPEA1:
        case MICROBLAZE_IT_PCMPEQ_TYPEA1:
        case MICROBLAZE_IT_PCMPNE_TYPEA1:
        case MICROBLAZE_IT_RSUB_TYPEA1:
        case MICROBLAZE_IT_RSUBC_TYPEA1:
        case MICROBLAZE_IT_RSUBK_TYPEA1:
        case MICROBLAZE_IT_RSUBKC_TYPEA1:
        case MICROBLAZE_IT_SWX_TYPEA1:
        case MICROBLAZE_IT_XOR_TYPEA1:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_BEQ_TYPEA2:
        case MICROBLAZE_IT_BEQD_TYPEA2:
        case MICROBLAZE_IT_BGE_TYPEA2:
        case MICROBLAZE_IT_BGED_TYPEA2:
        case MICROBLAZE_IT_BGT_TYPEA2:
        case MICROBLAZE_IT_BGTD_TYPEA2:
        case MICROBLAZE_IT_BLE_TYPEA2:
        case MICROBLAZE_IT_BLED_TYPEA2:
        case MICROBLAZE_IT_BLT_TYPEA2:
        case MICROBLAZE_IT_BLTD_TYPEA2:
        case MICROBLAZE_IT_BNE_TYPEA2:
        case MICROBLAZE_IT_BNED_TYPEA2:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            break;

        case MICROBLAZE_IT_BR_TYPEA3:
        case MICROBLAZE_IT_BRA_TYPEA3:
        case MICROBLAZE_IT_BRAD_TYPEA3:
        case MICROBLAZE_IT_BRD_TYPEA3:
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_BRALD_TYPEA4:
        case MICROBLAZE_IT_BRLD_TYPEA4:
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_BRK_TYPEA5:
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_BSLL_TYPEA6:
        case MICROBLAZE_IT_BSRA_TYPEA6:
        case MICROBLAZE_IT_BSRL_TYPEA6:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_CMP_TYPEA7:
        case MICROBLAZE_IT_CMPU_TYPEA7:
        case MICROBLAZE_IT_IDIV_TYPEA7:
        case MICROBLAZE_IT_IDIVU_TYPEA7:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_LBU_TYPEA8:
        case MICROBLAZE_IT_LBUR_TYPEA8:
        case MICROBLAZE_IT_LHU_TYPEA8:
        case MICROBLAZE_IT_LHUR_TYPEA8:
        case MICROBLAZE_IT_LW_TYPEA8:
        case MICROBLAZE_IT_LWR_TYPEA8:
        case MICROBLAZE_IT_SB_TYPEA8:
        case MICROBLAZE_IT_SBR_TYPEA8:
        case MICROBLAZE_IT_SH_TYPEA8:
        case MICROBLAZE_IT_SHR_TYPEA8:
        case MICROBLAZE_IT_SW_TYPEA8:
        case MICROBLAZE_IT_SWR_TYPEA8:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_MFS_TYPEA9:
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            info->rS = VECINDEX(instruction,13,0,0); // 13:0
            break;

        case MICROBLAZE_IT_MTS_TYPEAA:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rS = VECINDEX(instruction,13,0,0); // 13:0
            break;

        case MICROBLAZE_IT_CLZ_TYPEAB:
        case MICROBLAZE_IT_FINT_TYPEAB:
        case MICROBLAZE_IT_FLT_TYPEAB:
        case MICROBLAZE_IT_FSQRT_TYPEAB:
        case MICROBLAZE_IT_SEXT16_TYPEAB:
        case MICROBLAZE_IT_SEXT8_TYPEAB:
        case MICROBLAZE_IT_SRA_TYPEAB:
        case MICROBLAZE_IT_SRC_TYPEAB:
        case MICROBLAZE_IT_SRL_TYPEAB:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_WDC_TYPEAC:
        case MICROBLAZE_IT_WDCCLR_TYPEAC:
        case MICROBLAZE_IT_WDCFL_TYPEAC:
        case MICROBLAZE_IT_WIC_TYPEAC:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            break;

        case MICROBLAZE_IT_ADDI_TYPEB1:
        case MICROBLAZE_IT_ADDIC_TYPEB1:
        case MICROBLAZE_IT_ADDIK_TYPEB1:
        case MICROBLAZE_IT_ADDIKC_TYPEB1:
        case MICROBLAZE_IT_ANDI_TYPEB1:
        case MICROBLAZE_IT_ANDNI_TYPEB1:
        case MICROBLAZE_IT_LBUI_TYPEB1:
        case MICROBLAZE_IT_LHUI_TYPEB1:
        case MICROBLAZE_IT_LWI_TYPEB1:
        case MICROBLAZE_IT_MULI_TYPEB1:
        case MICROBLAZE_IT_ORI_TYPEB1:
        case MICROBLAZE_IT_RSUBI_TYPEB1:
        case MICROBLAZE_IT_RSUBIC_TYPEB1:
        case MICROBLAZE_IT_RSUBIK_TYPEB1:
        case MICROBLAZE_IT_RSUBIKC_TYPEB1:
        case MICROBLAZE_IT_SBI_TYPEB1:
        case MICROBLAZE_IT_SHI_TYPEB1:
        case MICROBLAZE_IT_SWI_TYPEB1:
        case MICROBLAZE_IT_XORI_TYPEB1:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            info->simm = VECINDEX(instruction,15,0,0); // 15:0
            info->simm = SEXTEND(info->simm,15);
            break;

        case MICROBLAZE_IT_BEQI_TYPEB2:
        case MICROBLAZE_IT_BEQID_TYPEB2:
        case MICROBLAZE_IT_BGEI_TYPEB2:
        case MICROBLAZE_IT_BGEID_TYPEB2:
        case MICROBLAZE_IT_BGTI_TYPEB2:
        case MICROBLAZE_IT_BGTID_TYPEB2:
        case MICROBLAZE_IT_BLEI_TYPEB2:
        case MICROBLAZE_IT_BLEID_TYPEB2:
        case MICROBLAZE_IT_BLTI_TYPEB2:
        case MICROBLAZE_IT_BLTID_TYPEB2:
        case MICROBLAZE_IT_BNEI_TYPEB2:
        case MICROBLAZE_IT_BNEID_TYPEB2:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->simm = VECINDEX(instruction,15,0,0); // 15:0
            info->simm = SEXTEND(info->simm,15);
            break;

        case MICROBLAZE_IT_BRAI_TYPEB3:
        case MICROBLAZE_IT_BRAID_TYPEB3:
        case MICROBLAZE_IT_BRI_TYPEB3:
        case MICROBLAZE_IT_BRID_TYPEB3:
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            info->simm = VECINDEX(instruction,15,0,0); // 15:0
            info->simm = SEXTEND(info->simm,15);
            break;

        case MICROBLAZE_IT_BRALID_TYPEB4:
        case MICROBLAZE_IT_BRLID_TYPEB4:
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            info->simm = VECINDEX(instruction,15,0,0); // 15:0
            info->simm = SEXTEND(info->simm,15);
            break;

        case MICROBLAZE_IT_BRKI_TYPEB5:
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            info->simm = VECINDEX(instruction,15,0,0); // 15:0
            info->simm = SEXTEND(info->simm,15);
            break;

        case MICROBLAZE_IT_BSLLI_TYPEB6:
        case MICROBLAZE_IT_BSRAI_TYPEB6:
        case MICROBLAZE_IT_BSRLI_TYPEB6:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            info->uimm = VECINDEX(instruction,4,0,0); // 4:0
            break;

        case MICROBLAZE_IT_MBAR_TYPEB8:
            info->simm = VECINDEX(instruction,25,21,0); // 25:21
            info->simm = SEXTEND(info->simm,4);
            break;

        case MICROBLAZE_IT_MSRCLR_TYPEB9:
        case MICROBLAZE_IT_MSRSET_TYPEB9:
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            info->uimm = VECINDEX(instruction,14,0,0); // 14:0
            break;

        case MICROBLAZE_IT_RTBD_TYPEBA:
        case MICROBLAZE_IT_RTED_TYPEBA:
        case MICROBLAZE_IT_RTID_TYPEBA:
        case MICROBLAZE_IT_RTSD_TYPEBA:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->simm = VECINDEX(instruction,15,0,0); // 15:0
            info->simm = SEXTEND(info->simm,15);
            break;

        case MICROBLAZE_IT_AGET_TYPEC1:
        case MICROBLAZE_IT_CAGET_TYPEC1:
        case MICROBLAZE_IT_CGET_TYPEC1:
        case MICROBLAZE_IT_EAGET_TYPEC1:
        case MICROBLAZE_IT_ECAGET_TYPEC1:
        case MICROBLAZE_IT_ECGET_TYPEC1:
        case MICROBLAZE_IT_EGET_TYPEC1:
        case MICROBLAZE_IT_GET_TYPEC1:
        case MICROBLAZE_IT_NAGET_TYPEC1:
        case MICROBLAZE_IT_NCAGET_TYPEC1:
        case MICROBLAZE_IT_NCGET_TYPEC1:
        case MICROBLAZE_IT_NEAGET_TYPEC1:
        case MICROBLAZE_IT_NECAGET_TYPEC1:
        case MICROBLAZE_IT_NECGET_TYPEC1:
        case MICROBLAZE_IT_NEGET_TYPEC1:
        case MICROBLAZE_IT_NGET_TYPEC1:
        case MICROBLAZE_IT_TAGET_TYPEC1:
        case MICROBLAZE_IT_TCAGET_TYPEC1:
        case MICROBLAZE_IT_TCGET_TYPEC1:
        case MICROBLAZE_IT_TEAGET_TYPEC1:
        case MICROBLAZE_IT_TECAGET_TYPEC1:
        case MICROBLAZE_IT_TECGET_TYPEC1:
        case MICROBLAZE_IT_TEGET_TYPEC1:
        case MICROBLAZE_IT_TGET_TYPEC1:
        case MICROBLAZE_IT_TNAGET_TYPEC1:
        case MICROBLAZE_IT_TNCAGET_TYPEC1:
        case MICROBLAZE_IT_TNCGET_TYPEC1:
        case MICROBLAZE_IT_TNEAGET_TYPEC1:
        case MICROBLAZE_IT_TNECAGET_TYPEC1:
        case MICROBLAZE_IT_TNECGET_TYPEC1:
        case MICROBLAZE_IT_TNEGET_TYPEC1:
        case MICROBLAZE_IT_TNGET_TYPEC1:
            info->FSLx = VECINDEX(instruction,3,0,0); // 3:0
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_AGETD_TYPEC2:
        case MICROBLAZE_IT_CAGETD_TYPEC2:
        case MICROBLAZE_IT_CGETD_TYPEC2:
        case MICROBLAZE_IT_EAGETD_TYPEC2:
        case MICROBLAZE_IT_ECAGETD_TYPEC2:
        case MICROBLAZE_IT_ECGETD_TYPEC2:
        case MICROBLAZE_IT_EGETD_TYPEC2:
        case MICROBLAZE_IT_GETD_TYPEC2:
        case MICROBLAZE_IT_NAGETD_TYPEC2:
        case MICROBLAZE_IT_NCAGETD_TYPEC2:
        case MICROBLAZE_IT_NCGETD_TYPEC2:
        case MICROBLAZE_IT_NEAGETD_TYPEC2:
        case MICROBLAZE_IT_NECAGETD_TYPEC2:
        case MICROBLAZE_IT_NECGETD_TYPEC2:
        case MICROBLAZE_IT_NEGETD_TYPEC2:
        case MICROBLAZE_IT_NGETD_TYPEC2:
        case MICROBLAZE_IT_TAGETD_TYPEC2:
        case MICROBLAZE_IT_TCAGETD_TYPEC2:
        case MICROBLAZE_IT_TCGETD_TYPEC2:
        case MICROBLAZE_IT_TEAGETD_TYPEC2:
        case MICROBLAZE_IT_TECAGETD_TYPEC2:
        case MICROBLAZE_IT_TECGETD_TYPEC2:
        case MICROBLAZE_IT_TEGETD_TYPEC2:
        case MICROBLAZE_IT_TGETD_TYPEC2:
        case MICROBLAZE_IT_TNAGETD_TYPEC2:
        case MICROBLAZE_IT_TNCAGETD_TYPEC2:
        case MICROBLAZE_IT_TNCGETD_TYPEC2:
        case MICROBLAZE_IT_TNEAGETD_TYPEC2:
        case MICROBLAZE_IT_TNECAGETD_TYPEC2:
        case MICROBLAZE_IT_TNECGETD_TYPEC2:
        case MICROBLAZE_IT_TNEGETD_TYPEC2:
        case MICROBLAZE_IT_TNGETD_TYPEC2:
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            break;

        case MICROBLAZE_IT_APUT_TYPEC3:
        case MICROBLAZE_IT_CAPUT_TYPEC3:
        case MICROBLAZE_IT_CPUT_TYPEC3:
        case MICROBLAZE_IT_NAPUT_TYPEC3:
        case MICROBLAZE_IT_NCAPUT_TYPEC3:
        case MICROBLAZE_IT_NCPUT_TYPEC3:
        case MICROBLAZE_IT_NPUT_TYPEC3:
        case MICROBLAZE_IT_PUT_TYPEC3:
            info->FSLx = VECINDEX(instruction,3,0,0); // 3:0
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            break;

        case MICROBLAZE_IT_APUTD_TYPEC3D:
        case MICROBLAZE_IT_CAPUTD_TYPEC3D:
        case MICROBLAZE_IT_CPUTD_TYPEC3D:
        case MICROBLAZE_IT_NAPUTD_TYPEC3D:
        case MICROBLAZE_IT_NCAPUTD_TYPEC3D:
        case MICROBLAZE_IT_NCPUTD_TYPEC3D:
        case MICROBLAZE_IT_NPUTD_TYPEC3D:
        case MICROBLAZE_IT_PUTD_TYPEC3D:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            break;

        case MICROBLAZE_IT_TAPUT_TYPEC4:
        case MICROBLAZE_IT_TCAPUT_TYPEC4:
        case MICROBLAZE_IT_TCPUT_TYPEC4:
        case MICROBLAZE_IT_TNAPUT_TYPEC4:
        case MICROBLAZE_IT_TNCAPUT_TYPEC4:
        case MICROBLAZE_IT_TNCPUT_TYPEC4:
        case MICROBLAZE_IT_TNPUT_TYPEC4:
        case MICROBLAZE_IT_TPUT_TYPEC4:
            info->FSLx = VECINDEX(instruction,3,0,0); // 3:0
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            break;

        case MICROBLAZE_IT_TAPUTD_TYPEC4D:
        case MICROBLAZE_IT_TCAPUTD_TYPEC4D:
        case MICROBLAZE_IT_TCPUTD_TYPEC4D:
        case MICROBLAZE_IT_TNAPUTD_TYPEC4D:
        case MICROBLAZE_IT_TNCAPUTD_TYPEC4D:
        case MICROBLAZE_IT_TNCPUTD_TYPEC4D:
        case MICROBLAZE_IT_TNPUTD_TYPEC4D:
        case MICROBLAZE_IT_TPUTD_TYPEC4D:
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            break;

        case MICROBLAZE_IT_IMM_TYPEI1:
            info->simmhi = VECINDEX(instruction,15,0,0); // 15:0
            info->simmhi = SHIFTL(info->simmhi,16);
            info->simmhi = SEXTEND(info->simmhi,31);
            break;

        case MICROBLAZE_IT_NOP_TYPEX:
            break;

        case MICROBLAZE_IT_INSTR32:
        case MICROBLAZE_IT_LAST:
            // Default to get the indices
            info->rA = VECINDEX(instruction,20,16,0); // 20:16
            info->rB = VECINDEX(instruction,15,11,0); // 15:11
            info->rD = VECINDEX(instruction,25,21,0); // 25:21
            info->simm = VECINDEX(instruction,15,0,0); // 15:0
            info->simm = SEXTEND(info->simm,15);
            break;
    }
    return;
}
コード例 #3
0
ファイル: AutomateXWin.C プロジェクト: ulyssesrr/carmen_lcad
// ######################################################################
Image<PixRGB<byte> > AutomateXWin::getImage()
{


  DeleteImage();
#ifdef USE_SHM
  if(!itsImage)
  {
    itsImage = XShmCreateImage(itsDisplay, itsVInfo.visual,
        itsDepth,
        ZPixmap,
        NULL,
        &itsShminfo,
        itsWidth,
        itsHeight);
    if(!itsImage)
    {
      LERROR("XShmCreateImage");
      return Image<PixRGB<byte> >();
    }

    itsShminfo.shmid = shmget(IPC_PRIVATE,
        itsImage->bytes_per_line * itsImage->height,
        IPC_CREAT | 0777);
    if(itsShminfo.shmid < 0)
    {
      LERROR("shmget");
      XDestroyImage(itsImage);
      itsImage=NULL;
      return Image<PixRGB<byte> >();
    }
    itsShminfo.shmaddr = (char *) shmat(itsShminfo.shmid, 0, 0);
    if(itsShminfo.shmaddr == (char *)-1)
    {
      LERROR("shmat");
      XDestroyImage(itsImage);
      return Image<PixRGB<byte> >();
    }
    shmctl(itsShminfo.shmid, IPC_RMID, 0),
      itsImage->data = itsShminfo.shmaddr;
    itsShminfo.readOnly = False;
    XShmAttach(itsDisplay, &itsShminfo);

    XSync(itsDisplay, False);
  }
#endif
  /* If SHM failed or was disabled, try non-SHM way */
  if(!itsImage)
  {
    itsImage = XGetImage(itsDisplay, itsWindow,
        0, 0,
        itsWidth,
        itsHeight,
        AllPlanes,
        XYPixmap);
    if(!itsImage)
      LERROR("XGetImage\n");
  }
#ifdef USE_SHM
  if(!XShmGetImage(itsDisplay, itsWindow, itsImage,
        0, 0,
        AllPlanes))
    LERROR("XSHMGetImage");
#endif

  Image<PixRGB<byte> > img(itsWidth,itsHeight,NO_INIT);
  int rshift = 7 - getHighBitIndex (itsImage->red_mask);
  int gshift = 7 - getHighBitIndex (itsImage->green_mask);
  int bshift = 7 - getHighBitIndex (itsImage->blue_mask);

  for (int y=0; y<itsImage->height; y++) {
    for (int x=0; x<itsImage->width; x++) {
      unsigned long pixel = XGetPixel (itsImage,x,y);
      PixRGB<byte> pixVal(
       SHIFTL(pixel & itsImage->red_mask,rshift),
       SHIFTL(pixel & itsImage->green_mask,gshift),
       SHIFTL(pixel & itsImage->blue_mask,bshift)
      );
      img.setVal(x,y, pixVal);
    }
  }

  return img;

}