public RayTracing(Memory insMem, Memory triangleMem, Memory dataMem) { ScalarRegisterFile = new RegisterFile <Scalar>(33); VectorRegisterFile = new RegisterFile <Vector4>(16); InstructionMemory = insMem; DataMemory = dataMem; IC = new IntersectionCore(triangleMem); cache = new Dictionary <int, RTInstruction>(insMem.Mem.Length / 4); decoder = new Decoder(File.OpenText("RT.isa"), 6); }
public RayTracing(Memory insMem, FileInfo triangle, Memory dataMem, FileStream constant) { ScalarRegisterFile = new RegisterFile <Scalar>(33); VectorRegisterFile = new RegisterFile <Vector4>(16); dataMem.LoadToMemory(constant, true); InstructionMemory = insMem; DataMemory = dataMem; IC = new IntersectionCore(triangle.OpenText()); cache = new Dictionary <int, RTInstruction>(insMem.Mem.Length / 4); decoder = new Decoder(File.OpenText("RT.isa"), 6); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { sRF[29] = sRF[29] + 4; var bytes = BitConverter.GetBytes(sRF[r0]); mem.Write(sRF[29] + sRF[28], bytes); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { sRF[r0] = (int)(sRF[r0].i & 0xffff0000 | (uint)imm); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { uint shift = (uint)imm << 16; sRF[r0] = (int)((uint)sRF[r0].i & 0x0000ffff | shift); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { var result = ic.Process(vRF[14], vRF[15]); vRF[14] = result.point; vRF[15] = result.normal; }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { vRF[r0] = Vector4.Add(vRF[r1], vRF[r2]); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { if (sRF[29] == 0) { Console.Write("Tried to pop from empty stack!!!"); return; } Vector4 vec = new Vector4(MemoryMarshal.Read <float>(mem.Read(sRF[29] + sRF[28] - 12)), MemoryMarshal.Read <float>(mem.Read(sRF[29] + sRF[28] - 8)), MemoryMarshal.Read <float>(mem.Read(sRF[29] + sRF[28] - 4)), MemoryMarshal.Read <float>(mem.Read(sRF[29] + sRF[28]))); sRF[29] = sRF[29] - 16; vRF[r0] = vec; }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { double x2 = Math.Pow(vRF[r1].X, 2); double y2 = Math.Pow(vRF[r1].Y, 2); double z2 = Math.Pow(vRF[r1].Z, 2); sRF[r0] = (float)Math.Sqrt(x2 + y2 + z2); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { Vector4 vec = new Vector4(sRF[r2].f, sRF[r2].f, sRF[r2].f, sRF[r2].f); vRF[r0] = Vector4.Divide(vRF[r1], vec); }
internal abstract void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore IC);
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { if (sRF[r1] >= 0x20000000) { Vector4 vec = new Vector4(MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm, true)), MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 4, true)), MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 8, true)), MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 12, true))); vRF[r0] = vec; } else { Vector4 vec = new Vector4(MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm)), MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 4)), MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 8)), MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 12))); vRF[r0] = vec; } }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { if (sRF[r1] >= 0x20000000) { sRF[r0] = MemoryMarshal.Read <int>(mem.Read(sRF[r1].i + imm, true)); } else { sRF[r0] = MemoryMarshal.Read <int>(mem.Read(sRF[r1].i + imm)); } }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { sRF[r0] = MathF.Sqrt(sRF[r1]); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { if (sRF[32] == 1) { sRF[31] = sRF[31] + imm; } }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { if (sRF[29] == 0) { Console.Write("Tried to pop from empty stack!!!"); return; } sRF[r0] = MemoryMarshal.Read <int>(mem.Read(sRF[29] + sRF[28])); sRF[29] = sRF[29] - 4; }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { sRF[29] = sRF[29] + 4; mem.Write(sRF[29] + sRF[28], BitConverter.GetBytes(vRF[r0].X)); sRF[29] = sRF[29] + 4; mem.Write(sRF[29] + sRF[28], BitConverter.GetBytes(vRF[r0].Y)); sRF[29] = sRF[29] + 4; mem.Write(sRF[29] + sRF[28], BitConverter.GetBytes(vRF[r0].Z)); sRF[29] = sRF[29] + 4; mem.Write(sRF[29] + sRF[28], BitConverter.GetBytes(vRF[r0].W)); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { mem.Write(sRF[r1].i + imm, BitConverter.GetBytes(vRF[r0].X)); mem.Write(sRF[r1].i + imm + 4, BitConverter.GetBytes(vRF[r0].Y)); mem.Write(sRF[r1].i + imm + 8, BitConverter.GetBytes(vRF[r0].Z)); mem.Write(sRF[r1].i + imm + 12, BitConverter.GetBytes(vRF[r0].W)); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { sRF[r0] = sRF[r1].i - imm; }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { // flag register represented by 33rd register in scalar reg file // only for simulator representation if (Vector4.Equals(vRF[r0], vRF[r1])) { sRF[32] = 0; // 0 if equal } else { sRF[32] = 3; // anything else if not equal } }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { var bytes = BitConverter.GetBytes(sRF[r0].i); mem.Write(sRF[r1].i + imm, bytes); }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { // flag register represented by 33rd register in scalar reg file // only for simulator representation if (sRF[r0].f == sRF[r1].f) { sRF[32] = 0; } else if (sRF[r0].f < sRF[r1].f) { sRF[32] = 1; } else if (sRF[r0].f > sRF[r1].f) { sRF[32] = 2; } }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { if (index == 0) { sRF[r0] = vRF[r1].X; } else if (index == 1) { sRF[r0] = vRF[r1].Y; } else if (index == 2) { sRF[r0] = vRF[r1].Z; } else if (index == 3) { sRF[r0] = vRF[r1].W; } }
internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic) { if (index == 0) { vRF[r0] = new Vector4(sRF[r1].f, vRF[r0].Y, vRF[r0].Z, vRF[r0].W); } else if (index == 1) { vRF[r0] = new Vector4(vRF[r0].X, sRF[r1].f, vRF[r0].Z, vRF[r0].W); } else if (index == 2) { vRF[r0] = new Vector4(vRF[r0].X, vRF[r0].Y, sRF[r1].f, vRF[r0].W); } else if (index == 3) { vRF[r0] = new Vector4(vRF[r0].X, vRF[r0].Y, vRF[r0].Z, sRF[r1].f); } }