コード例 #1
0
ファイル: brw_wm_pass0.c プロジェクト: ChillyWillyGuru/RSXGL
/***********************************************************************
 * PASS 0
 *
 * Work forwards to give each calculated value a unique number.  Where
 * an instruction produces duplicate values (eg DP3), all are given
 * the same number.
 *
 * Translate away swizzling and eliminate non-saturating moves.
 */
void brw_wm_pass0( struct brw_wm_compile *c )
{
   GLuint insn;

   c->nr_vreg = 0;
   c->nr_insns = 0;

   pass0_init_undef(c);
   pass0_init_payload(c);

   for (insn = 0; insn < c->nr_fp_insns; insn++) {
      const struct prog_instruction *inst = &c->prog_instructions[insn];

      /* Optimize away moves, otherwise emit translated instruction:
       */      
      switch (inst->Opcode) {
      case OPCODE_MOV: 
      case OPCODE_SWZ: 
	 if (!inst->SaturateMode) {
	    pass0_precalc_mov(c, inst);
	 }
	 else {
	    translate_insn(c, inst);
	 }
	 break;
      default:
	 translate_insn(c, inst);
	 break;
      }
   }
 
   if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
      brw_wm_print_program(c, "pass0");
   }
}
コード例 #2
0
ファイル: main.c プロジェクト: bengheng/Expose
int main()
{
	unsigned char insn[] = { 0xf7, 0xd0 };

	/*
	Rex r;
	r.ToIR( insn, (unsigned int)0x8000 );
	*/

	
	translate_init();
	IRSB *bb = translate_insn( VexArchX86, insn, (unsigned int)0x8000000);
	
	printf("stmts_size: %d\n", bb->stmts_size);
	printf("stmts_used: %d\n", bb->stmts_used);

	IRStmt **stmts = bb->stmts;
	printf("stmts->tag: %08x\n", (*stmts)->tag );
	printf("stmts->IMark->addr: %08x\n", (*stmts)->Ist.IMark.addr);
	printf("stmts->IMark->len: %d\n", (*stmts)->Ist.IMark.len);
}