// File: /workspace/github_c_makefile_star2_O1/QwazyWabbitWOS[P]lmctf60/p_view.c
// Function: SV_CalcGunOffset
void SV_CalcGunOffset (edict_t *ent)
{
	int		i;
	float	delta;

	// gun angles from bobbing
	ent->client->ps.gunangles[ROLL] = xyspeed * bobfracsin * 0.005;
	ent->client->ps.gunangles[YAW] = xyspeed * bobfracsin * 0.01;
	if (bobcycle & 1)
	{
		ent->client->ps.gunangles[ROLL] = -ent->client->ps.gunangles[ROLL];
		ent->client->ps.gunangles[YAW] = -ent->client->ps.gunangles[YAW];
	}

	ent->client->ps.gunangles[PITCH] = xyspeed * bobfracsin * 0.005;

	// gun angles from delta movement
	for (i=0 ; i<3 ; i++)
	{
		delta = ent->client->oldviewangles[i] - ent->client->ps.viewangles[i];
		if (delta > 180)
			delta -= 360;
		if (delta < -180)
			delta += 360;
		if (delta > 45)
			delta = 45;
		if (delta < -45)
			delta = -45;
		if (i == YAW)
			ent->client->ps.gunangles[ROLL] += 0.1*delta;
		ent->client->ps.gunangles[i] += 0.2 * delta;
	}

	// gun height
	VectorClear (ent->client->ps.gunoffset);
//	ent->ps->gunorigin[2] += bob;

	// gun_x / gun_y / gun_z are development tools
	for (i=0 ; i<3 ; i++)
	{
		ent->client->ps.gunoffset[i] += forward[i]*(gun_y->value);
		ent->client->ps.gunoffset[i] += right[i]*gun_x->value;
		ent->client->ps.gunoffset[i] += up[i]* (-gun_z->value);
	}
}

// Assembly:
movq 0x1efb4(%rip), %rax     # 0x69f48
movss (%rax), %xmm0
movq 0x1ecd9(%rip), %rax     # 0x69c78
mulss (%rax), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x108e9(%rip), %xmm0    # 0x5b898
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq 0x58(%rdi), %rax
movss %xmm0, 0x48(%rax)
mulsd 0x108c0(%rip), %xmm1    # 0x5b888
cvtsd2ss %xmm1, %xmm1
movss %xmm1, 0x44(%rax)
movq 0x1ebb8(%rip), %rcx     # 0x69b90
testb $0x1, (%rcx)
je 0x4aff7
movaps 0xbc2c(%rip), %xmm2     # 0x56c10
movaps %xmm0, %xmm3
xorps %xmm2, %xmm3
movss %xmm3, 0x48(%rax)
xorps %xmm2, %xmm1
movss %xmm1, 0x44(%rax)
movss %xmm0, 0x40(%rax)
xorl %ecx, %ecx
movss 0xf4fe(%rip), %xmm0     # 0x5a504
movss 0xf4f2(%rip), %xmm1     # 0x5a500
movss 0x9d0e(%rip), %xmm2     # 0x54d24
movss 0xf4de(%rip), %xmm3     # 0x5a4fc
movss 0xf4e2(%rip), %xmm4     # 0x5a508
movss 0x1089e(%rip), %xmm5    # 0x5b8cc
movsd 0x9be2(%rip), %xmm6     # 0x54c18
movsd 0xbb6a(%rip), %xmm7     # 0x56ba8
movss 0xecc(%rax,%rcx,4), %xmm8
subss 0x1c(%rax,%rcx,4), %xmm8
movaps %xmm8, %xmm9
addss %xmm0, %xmm9
movaps %xmm1, %xmm10
cmpltss %xmm8, %xmm10
andps %xmm10, %xmm9
andnps %xmm8, %xmm10
orps %xmm9, %xmm10
movaps %xmm10, %xmm8
addss %xmm2, %xmm8
movaps %xmm10, %xmm9
cmpltss %xmm3, %xmm9
andps %xmm9, %xmm8
andnps %xmm10, %xmm9
orps %xmm8, %xmm9
movaps %xmm4, %xmm8
minss %xmm9, %xmm8
movaps %xmm5, %xmm9
maxss %xmm8, %xmm9
xorps %xmm8, %xmm8
cvtss2sd %xmm9, %xmm8
cmpq $0x1, %rcx
jne 0x4b0d5
xorps %xmm9, %xmm9
cvtss2sd 0x48(%rax), %xmm9
movaps %xmm8, %xmm10
mulsd %xmm6, %xmm10
addsd %xmm9, %xmm10
xorps %xmm9, %xmm9
cvtsd2ss %xmm10, %xmm9
movss %xmm9, 0x48(%rax)
xorps %xmm9, %xmm9
cvtss2sd 0x40(%rax,%rcx,4), %xmm9
mulsd %xmm7, %xmm8
addsd %xmm9, %xmm8
cvtsd2ss %xmm8, %xmm8
movss %xmm8, 0x40(%rax,%rcx,4)
incq %rcx
cmpq $0x3, %rcx
jne 0x4b03e
movl $0x0, 0x54(%rax)
movq $0x0, 0x4c(%rax)
movq 0x1e2ef(%rip), %rcx     # 0x69408
movq (%rcx), %rcx
movq 0x1e95d(%rip), %rdx     # 0x69a80
movq (%rdx), %rdx
movq 0x1e96b(%rip), %rsi     # 0x69a98
movq (%rsi), %rsi
xorl %edi, %edi
leaq 0x4ef1f(%rip), %r8      # 0x9a058
leaq 0x4ef08(%rip), %r9      # 0x9a048
leaq 0x4ef29(%rip), %r10     # 0x9a070
movss (%rdi,%r8), %xmm0
mulss 0x20(%rcx), %xmm0
addss 0x4c(%rax,%rdi), %xmm0
movss %xmm0, 0x4c(%rax,%rdi)
movss (%rdi,%r9), %xmm1
mulss 0x20(%rdx), %xmm1
addss %xmm0, %xmm1
movss %xmm1, 0x4c(%rax,%rdi)
movss (%rdi,%r10), %xmm0
mulss 0x20(%rsi), %xmm0
subss %xmm0, %xmm1
movss %xmm1, 0x4c(%rax,%rdi)
addq $0x4, %rdi
cmpq $0xc, %rdi
jne 0x4b147
retq