// File: mlugo2[P]SunshineGPU/src/gpu.cpp
// Function: gpu::projection(__u128*)
void gpu::projection(u128 *VOB)
{
	// Project V1
	VOB[0].x = ( ( ( VOB[0].x/4 ) + 1 ) / 2 ) * SCREEN_WIDTH;
	VOB[0].y = ( ( ( (-VOB[0].y)/4 ) + 1 ) / 2 ) * SCREEN_HEIGHT;
	VOB[0].z = ( ( ( VOB[0].z/4 ) + 1 ) / 2 ) * SCREEN_DEPTH;

	// Project V2
	VOB[1].x = ( ( ( VOB[1].x/4 ) + 1 ) / 2 ) * SCREEN_WIDTH;
	VOB[1].y = ( ( ( (-VOB[1].y)/4 ) + 1 ) / 2 ) * SCREEN_HEIGHT;
	VOB[1].z = ( ( ( VOB[1].z/4 ) + 1 ) / 2 ) * SCREEN_DEPTH;

	// Project V3
	VOB[2].x = ( ( ( VOB[2].x/4 ) + 1 ) / 2 ) * SCREEN_WIDTH;
	VOB[2].y = ( ( ( (-VOB[2].y)/4 ) + 1 ) / 2 ) * SCREEN_HEIGHT;
	VOB[2].z = ( ( ( VOB[2].z/4 ) + 1 ) / 2 ) * SCREEN_DEPTH;
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq %rsi, -0x10(%rsp)
movq -0x10(%rsp), %rax
movss 0xc(%rax), %xmm0
movss 0x20f4(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x20d0(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x20d8(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x20d8(%rip), %xmm1     # 0x15328
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0xc(%rax)
movq -0x10(%rsp), %rax
movss 0x8(%rax), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss 0x20a3(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x207f(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x2087(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x2083(%rip), %xmm1     # 0x15324
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0x8(%rax)
movq -0x10(%rsp), %rax
movss 0x4(%rax), %xmm0
movss 0x205f(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x203b(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x2043(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x2033(%rip), %xmm1     # 0x15318
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0x4(%rax)
movq -0x10(%rsp), %rax
movss 0x1c(%rax), %xmm0
movss 0x201b(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x1ff7(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x1fff(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x1fff(%rip), %xmm1     # 0x15328
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0x1c(%rax)
movq -0x10(%rsp), %rax
movss 0x18(%rax), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss 0x1fca(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x1fa6(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x1fae(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x1faa(%rip), %xmm1     # 0x15324
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0x18(%rax)
movq -0x10(%rsp), %rax
movss 0x14(%rax), %xmm0
movss 0x1f86(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x1f62(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x1f6a(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x1f5a(%rip), %xmm1     # 0x15318
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0x14(%rax)
movq -0x10(%rsp), %rax
movss 0x2c(%rax), %xmm0
movss 0x1f42(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x1f1e(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x1f26(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x1f26(%rip), %xmm1     # 0x15328
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0x2c(%rax)
movq -0x10(%rsp), %rax
movss 0x28(%rax), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss 0x1ef1(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x1ecd(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x1ed5(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x1ed1(%rip), %xmm1     # 0x15324
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0x28(%rax)
movq -0x10(%rsp), %rax
movss 0x24(%rax), %xmm0
movss 0x1ead(%rip), %xmm1     # 0x15320
divss %xmm1, %xmm0
movss 0x1e89(%rip), %xmm1     # 0x15308
addss %xmm1, %xmm0
movss 0x1e91(%rip), %xmm1     # 0x1531c
divss %xmm1, %xmm0
movss 0x1e81(%rip), %xmm1     # 0x15318
mulss %xmm1, %xmm0
movq -0x10(%rsp), %rax
movss %xmm0, 0x24(%rax)
retq
nopw %cs:(%rax,%rax)