public static void Ld_C(ShaderIrBlock Block, long OpCode) { int Type = (int)(OpCode >> 48) & 7; if (Type > 5) { throw new InvalidOperationException(); } int Count = Type == 5 ? 2 : 1; for (int Index = 0; Index < Count; Index++) { ShaderIrOperCbuf OperA = GetOperCbuf36(OpCode); ShaderIrOperGpr OperD = GetOperGpr0(OpCode); OperA.Pos += Index; OperD.Index += Index; ShaderIrNode Node = OperA; if (Type < 4) { //This is a 8 or 16 bits type. bool Signed = (Type & 1) != 0; int Size = 8 << (Type >> 1); Node = ExtendTo32(Node, Signed, Size); } Block.AddNode(GetPredNode(new ShaderIrAsg(OperD, Node), OpCode)); } }
public static void Ld_C(ShaderIrBlock Block, long OpCode, long Position) { int CbufPos = (int)(OpCode >> 22) & 0x3fff; int CbufIndex = (int)(OpCode >> 36) & 0x1f; int Type = (int)(OpCode >> 48) & 7; if (Type > 5) { throw new InvalidOperationException(); } ShaderIrOperGpr Temp = ShaderIrOperGpr.MakeTemporary(); Block.AddNode(new ShaderIrAsg(Temp, GetOperGpr8(OpCode))); int Count = Type == 5 ? 2 : 1; for (int Index = 0; Index < Count; Index++) { ShaderIrOperCbuf OperA = new ShaderIrOperCbuf(CbufIndex, CbufPos, Temp); ShaderIrOperGpr OperD = GetOperGpr0(OpCode); OperA.Pos += Index; OperD.Index += Index; if (!OperD.IsValidRegister) { break; } ShaderIrNode Node = OperA; if (Type < 4) { //This is a 8 or 16 bits type. bool Signed = (Type & 1) != 0; int Size = 8 << (Type >> 1); Node = ExtendTo32(Node, Signed, Size); } Block.AddNode(GetPredNode(new ShaderIrAsg(OperD, Node), OpCode)); } }
public static void Ld_C(ShaderIrBlock block, long opCode, int position) { int cbufPos = opCode.Read(22, 0x3fff); int cbufIndex = opCode.Read(36, 0x1f); int type = opCode.Read(48, 7); if (type > 5) { throw new InvalidOperationException(); } ShaderIrOperGpr temp = ShaderIrOperGpr.MakeTemporary(); block.AddNode(new ShaderIrAsg(temp, opCode.Gpr8())); int count = type == 5 ? 2 : 1; for (int index = 0; index < count; index++) { ShaderIrOperCbuf operA = new ShaderIrOperCbuf(cbufIndex, cbufPos, temp); ShaderIrOperGpr operD = opCode.Gpr0(); operA.Pos += index; operD.Index += index; if (!operD.IsValidRegister) { break; } ShaderIrNode node = operA; if (type < 4) { //This is a 8 or 16 bits type. bool signed = (type & 1) != 0; int size = 8 << (type >> 1); node = ExtendTo32(node, signed, size); } block.AddNode(opCode.PredNode(new ShaderIrAsg(operD, node))); } }
public static void Mov_C(ShaderIrBlock Block, long OpCode, long Position) { ShaderIrOperCbuf Cbuf = GetOperCbuf34(OpCode); Block.AddNode(GetPredNode(new ShaderIrAsg(GetOperGpr0(OpCode), Cbuf), OpCode)); }
public static void Mov_C(ShaderIrBlock block, long opCode, int position) { ShaderIrOperCbuf cbuf = opCode.Cbuf34(); block.AddNode(opCode.PredNode(new ShaderIrAsg(opCode.Gpr0(), cbuf))); }
public static void Mov_C(ShaderIrBlock Block, long OpCode, int Position) { ShaderIrOperCbuf Cbuf = OpCode.Cbuf34(); Block.AddNode(OpCode.PredNode(new ShaderIrAsg(OpCode.Gpr0(), Cbuf))); }