From feb680a4eb2eeec44f7cef84ffdeb598116e3568 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 13 Mar 2017 13:17:15 +0100 Subject: [PATCH] - Removed the RSQRTSS code from GLSeg::Normal. If we have to write compiler specific code for micro-optimizations I am out. The Posix compatible version nullified most the advantage on MSVC by writing out the XMM register to memory and then reading back the float. That's not worth the hassle for an optimization that brings a few microseconds at best. --- src/gl/scene/gl_wall.h | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/gl/scene/gl_wall.h b/src/gl/scene/gl_wall.h index 508d07bfb..1c52e3c30 100644 --- a/src/gl/scene/gl_wall.h +++ b/src/gl/scene/gl_wall.h @@ -9,9 +9,6 @@ #include "r_data/renderstyle.h" #include "textures/textures.h" #include "gl/renderer/gl_colormap.h" -#if defined(__amd64__) || defined(_M_X64) -#include -#endif // x64 struct GLHorizonInfo; struct F3DFloor; @@ -71,16 +68,8 @@ struct GLSeg // we do not use the vector math inlines here because they are not optimized for speed but accuracy in the playsim and this is called quite frequently. float x = y2 - y1; float y = x1 - x2; -#if defined(__amd64__) || defined(_M_X64) - __m128 v = _mm_set_ss(x*x + y*y); - v = _mm_rsqrt_ss(v); - float ilength; - _mm_store_ss(&ilength, v); - return FVector3(x * ilength, 0, y * ilength); -#else - float length = sqrtf(x*x + y*y); - return FVector3(x / length, 0, y / length); -#endif + float ilength = 1.f / sqrtf(x*x + y*y); + return FVector3(x * ilength, 0, y * ilength); } };