r600: add ABS support for source regs to assembler

use it in tex cube instruction sequence
This commit is contained in:
Andre Maasikas 2009-12-07 11:51:36 +02:00
parent 50ab51101e
commit 17e212e263
2 changed files with 9 additions and 25 deletions

View File

@ -2350,8 +2350,8 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm)
{
alu_instruction_ptr->m_Word1_OP2.f6.alu_inst = pAsm->D.dst.opcode;
alu_instruction_ptr->m_Word1_OP2.f6.src0_abs = 0x0;
alu_instruction_ptr->m_Word1_OP2.f6.src1_abs = 0x0;
alu_instruction_ptr->m_Word1_OP2.f6.src0_abs = pAsm->S[0].src.abs;
alu_instruction_ptr->m_Word1_OP2.f6.src1_abs = pAsm->S[1].src.abs;
//alu_instruction_ptr->m_Word1_OP2.f6.update_execute_mask = 0x0;
//alu_instruction_ptr->m_Word1_OP2.f6.update_pred = 0x0;
@ -2379,8 +2379,8 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm)
{
alu_instruction_ptr->m_Word1_OP2.f.alu_inst = pAsm->D.dst.opcode;
alu_instruction_ptr->m_Word1_OP2.f.src0_abs = 0x0;
alu_instruction_ptr->m_Word1_OP2.f.src1_abs = 0x0;
alu_instruction_ptr->m_Word1_OP2.f.src0_abs = pAsm->S[0].src.abs;
alu_instruction_ptr->m_Word1_OP2.f.src1_abs = pAsm->S[1].src.abs;
//alu_instruction_ptr->m_Word1_OP2.f.update_execute_mask = 0x0;
//alu_instruction_ptr->m_Word1_OP2.f.update_pred = 0x0;
@ -4721,24 +4721,6 @@ GLboolean assemble_TEX(r700_AssemblerBase *pAsm)
return GL_FALSE;
}
/* tmp1.z = ABS(tmp1.z) dont have abs support in assembler currently
* have to do explicit instruction
*/
pAsm->D.dst.opcode = SQ_OP2_INST_MAX;
setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE);
pAsm->D.dst.rtype = DST_REG_TEMPORARY;
pAsm->D.dst.reg = tmp1;
pAsm->D.dst.writez = 1;
setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE);
pAsm->S[0].src.rtype = SRC_REG_TEMPORARY;
pAsm->S[0].src.reg = tmp1;
noswizzle_PVSSRC(&(pAsm->S[0].src));
pAsm->S[1].bits = pAsm->S[0].bits;
flipneg_PVSSRC(&(pAsm->S[1].src));
next_ins(pAsm);
/* tmp1.z = RCP_e(|tmp1.z|) */
pAsm->D.dst.opcode = SQ_OP2_INST_RECIP_IEEE;
pAsm->D.dst.math = 1;
@ -4751,6 +4733,7 @@ GLboolean assemble_TEX(r700_AssemblerBase *pAsm)
pAsm->S[0].src.rtype = SRC_REG_TEMPORARY;
pAsm->S[0].src.reg = tmp1;
pAsm->S[0].src.swizzlex = SQ_SEL_Z;
pAsm->S[0].src.abs = 1;
next_ins(pAsm);

View File

@ -120,14 +120,15 @@ typedef struct PVSINSTtag
typedef struct PVSSRCtag
{
BITS rtype:4;
BITS rtype:3;
BITS addrmode0:1;
BITS reg:10; //15 (8)
BITS reg:10; //14 (8)
BITS swizzlex:3;
BITS swizzley:3;
BITS swizzlez:3;
BITS swizzlew:3; //27
BITS swizzlew:3; //26
BITS abs:1;
BITS negx:1;
BITS negy:1;
BITS negz:1;