| 
				
			 | 
			
			 | 
			@@ -2729,6 +2729,133 @@ GLboolean assemble_EX2(r700_AssemblerBase *pAsm) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return assemble_math_function(pAsm, SQ_OP2_INST_EXP_IEEE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			GLboolean assemble_EXP(r700_AssemblerBase *pAsm) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    BITS tmp; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    checkop1(pAsm); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    tmp = gethelpr(pAsm); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // FLOOR   tmp.x,    a.x | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // EX2     dst.x     tmp.x | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (pAsm->pILInst->DstReg.WriteMask & 0x1) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.opcode = SQ_OP2_INST_FLOOR; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.rtype  = DST_REG_TEMPORARY; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.reg    = tmp; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.writex = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == assemble_src(pAsm, 0, -1) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == next_ins(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.opcode = SQ_OP2_INST_EXP_IEEE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.math = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == assemble_dst(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.writey = pAsm->D.dst.writez = pAsm->D.dst.writew = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->S[0].src.rtype = DST_REG_TEMPORARY; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->S[0].src.reg   = tmp; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_X); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        noneg_PVSSRC(&(pAsm->S[0].src)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == next_ins(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // FRACT   dst.y     a.x | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if ((pAsm->pILInst->DstReg.WriteMask >> 1) & 0x1) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.opcode = SQ_OP2_INST_FRACT; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == assemble_dst(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == assemble_src(pAsm, 0, -1) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.writex = pAsm->D.dst.writez = pAsm->D.dst.writew = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == next_ins(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // EX2     dst.z,    a.x | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if ((pAsm->pILInst->DstReg.WriteMask >> 2) & 0x1) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.opcode = SQ_OP2_INST_EXP_IEEE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.math = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == assemble_dst(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == assemble_src(pAsm, 0, -1) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.writex = pAsm->D.dst.writey = pAsm->D.dst.writew = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == next_ins(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // MOV     dst.w     1.0 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if ((pAsm->pILInst->DstReg.WriteMask >> 3) & 0x1) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.opcode = SQ_OP2_INST_MOV; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == assemble_dst(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->D.dst.writex = pAsm->D.dst.writey = pAsm->D.dst.writez = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->S[0].src.rtype = SRC_REG_TEMPORARY; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pAsm->S[0].src.reg   = tmp; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        noneg_PVSSRC(&(pAsm->S[0].src)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if( GL_FALSE == next_ins(pAsm) ) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return GL_TRUE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			GLboolean assemble_FLR(r700_AssemblerBase *pAsm) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
	
		
			
			| 
				
			 | 
			
			 | 
			@@ -4004,10 +4131,9 @@ GLboolean AssembleInstr(GLuint uiNumberInsts, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            break;   | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case OPCODE_EXP:  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            radeon_error("Not yet implemented instruction OPCODE_EXP \n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            //if ( GL_FALSE == assemble_BAD("EXP") )  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if ( GL_FALSE == assemble_EXP(pR700AsmCode) )  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                return GL_FALSE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            break; // approx of EX2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case OPCODE_FLR:      | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if ( GL_FALSE == assemble_FLR(pR700AsmCode) )  |