38 #ifndef GLM_GTX_simd_vec4 
   39 #define GLM_GTX_simd_vec4 GLM_VERSION 
   44 #if(GLM_ARCH != GLM_ARCH_PURE) 
   46 #if(GLM_ARCH & GLM_ARCH_SSE2) 
   47 #       include "../core/intrinsic_common.hpp" 
   48 #       include "../core/intrinsic_geometric.hpp" 
   50 #       error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics" 
   53 #if(defined(GLM_MESSAGES) && !defined(glm_ext)) 
   54 #       pragma message("GLM: GLM_GTX_simd_vec4 extension included") 
   62         GLM_ALIGNED_STRUCT(16) fvec4SIMD
 
   65                 typedef __m128 value_type;
 
   66                 typedef std::size_t size_type;
 
   67                 static size_type value_size();
 
   69                 typedef fvec4SIMD type;
 
   70                 typedef tvec4<bool> bool_type;
 
   78                 fvec4SIMD(__m128 
const & Data);
 
   79                 fvec4SIMD(fvec4SIMD 
const & v);
 
   94                         tvec4<float> 
const & v);
 
   99                 fvec4SIMD(
vec2 const & v, 
float const & s1, 
float const & s2);
 
  100                 fvec4SIMD(
float const & s1, 
vec2 const & v, 
float const & s2);
 
  101                 fvec4SIMD(
float const & s1, 
float const & s2, 
vec2 const & v);
 
  102                 fvec4SIMD(
vec3 const & v, 
float const & s);
 
  103                 fvec4SIMD(
float const & s, 
vec3 const & v);
 
  104                 fvec4SIMD(
vec2 const & v1, 
vec2 const & v2);
 
  110                 fvec4SIMD& operator= (fvec4SIMD 
const & v);
 
  111                 fvec4SIMD& operator+=(fvec4SIMD 
const & v);
 
  112                 fvec4SIMD& operator-=(fvec4SIMD 
const & v);
 
  113                 fvec4SIMD& operator*=(fvec4SIMD 
const & v);
 
  114                 fvec4SIMD& operator/=(fvec4SIMD 
const & v);
 
  116                 fvec4SIMD& operator+=(
float const & s);
 
  117                 fvec4SIMD& operator-=(
float const & s);
 
  118                 fvec4SIMD& operator*=(
float const & s);
 
  119                 fvec4SIMD& operator/=(
float const & s);
 
  121                 fvec4SIMD& operator++();
 
  122                 fvec4SIMD& operator--();
 
  127                 template <comp X, comp Y, comp Z, comp W>
 
  128                 fvec4SIMD& swizzle();
 
  129                 template <comp X, comp Y, comp Z, comp W>
 
  130                 fvec4SIMD swizzle() 
const;
 
  131                 template <comp X, comp Y, comp Z>
 
  132                 fvec4SIMD swizzle() 
const;
 
  133                 template <comp X, comp Y>
 
  134                 fvec4SIMD swizzle() 
const;
 
  136                 fvec4SIMD swizzle() 
const;
 
  140         typedef glm::detail::fvec4SIMD simdVec4;
 
  147         detail::tvec4<float> vec4_cast(
 
  148                 detail::fvec4SIMD 
const & x);
 
  152         detail::fvec4SIMD 
abs(detail::fvec4SIMD 
const & x);
 
  156         detail::fvec4SIMD 
sign(detail::fvec4SIMD 
const & x);
 
  160         detail::fvec4SIMD 
floor(detail::fvec4SIMD 
const & x);
 
  165         detail::fvec4SIMD 
trunc(detail::fvec4SIMD 
const & x);
 
  173         detail::fvec4SIMD 
round(detail::fvec4SIMD 
const & x);
 
  184         detail::fvec4SIMD 
ceil(detail::fvec4SIMD 
const & x);
 
  188         detail::fvec4SIMD 
fract(detail::fvec4SIMD 
const & x);
 
  193         detail::fvec4SIMD 
mod(
 
  194                 detail::fvec4SIMD 
const & x, 
 
  195                 detail::fvec4SIMD 
const & y);
 
  200         detail::fvec4SIMD 
mod(
 
  201                 detail::fvec4SIMD 
const & x, 
 
  215         detail::fvec4SIMD 
min(
 
  216                 detail::fvec4SIMD 
const & x, 
 
  217                 detail::fvec4SIMD 
const & y);
 
  219         detail::fvec4SIMD 
min(
 
  220                 detail::fvec4SIMD 
const & x, 
 
  225         detail::fvec4SIMD 
max(
 
  226                 detail::fvec4SIMD 
const & x, 
 
  227                 detail::fvec4SIMD 
const & y);
 
  229         detail::fvec4SIMD 
max(
 
  230                 detail::fvec4SIMD 
const & x, 
 
  236         detail::fvec4SIMD 
clamp(
 
  237                 detail::fvec4SIMD 
const & x, 
 
  238                 detail::fvec4SIMD 
const & minVal, 
 
  239                 detail::fvec4SIMD 
const & maxVal); 
 
  241         detail::fvec4SIMD 
clamp(
 
  242                 detail::fvec4SIMD 
const & x, 
 
  243                 float const & minVal, 
 
  244                 float const & maxVal); 
 
  271         detail::fvec4SIMD 
mix(
 
  272                 detail::fvec4SIMD 
const & x, 
 
  273                 detail::fvec4SIMD 
const & y, 
 
  274                 detail::fvec4SIMD 
const & a);
 
  278         detail::fvec4SIMD 
step(
 
  279                 detail::fvec4SIMD 
const & edge, 
 
  280                 detail::fvec4SIMD 
const & x);
 
  282         detail::fvec4SIMD 
step(
 
  284                 detail::fvec4SIMD 
const & x);
 
  297                 detail::fvec4SIMD 
const & edge0, 
 
  298                 detail::fvec4SIMD 
const & edge1, 
 
  299                 detail::fvec4SIMD 
const & x);
 
  304                 detail::fvec4SIMD 
const & x);
 
  338         detail::fvec4SIMD 
fma(
 
  339                 detail::fvec4SIMD 
const & a, 
 
  340                 detail::fvec4SIMD 
const & b, 
 
  341                 detail::fvec4SIMD 
const & c);
 
  365                 detail::fvec4SIMD 
const & x);
 
  371                 detail::fvec4SIMD 
const & x);
 
  377                 detail::fvec4SIMD 
const & x);
 
  381         detail::fvec4SIMD length4(
 
  382                 detail::fvec4SIMD 
const & x);
 
  387         detail::fvec4SIMD fastLength4(
 
  388                 detail::fvec4SIMD 
const & x);
 
  393         detail::fvec4SIMD niceLength4(
 
  394                 detail::fvec4SIMD 
const & x);
 
  399                 detail::fvec4SIMD 
const & p0,
 
  400                 detail::fvec4SIMD 
const & p1);
 
  404         detail::fvec4SIMD distance4(
 
  405                 detail::fvec4SIMD 
const & p0,
 
  406                 detail::fvec4SIMD 
const & p1);
 
  411                 detail::fvec4SIMD 
const & x,
 
  412                 detail::fvec4SIMD 
const & y);
 
  416         detail::fvec4SIMD dot4(
 
  417                 detail::fvec4SIMD 
const & x,
 
  418                 detail::fvec4SIMD 
const & y);
 
  422         detail::fvec4SIMD 
cross(
 
  423                 detail::fvec4SIMD 
const & x,
 
  424                 detail::fvec4SIMD 
const & y);
 
  429                 detail::fvec4SIMD 
const & x);
 
  435                 detail::fvec4SIMD 
const & x);
 
  439         detail::fvec4SIMD simdFaceforward(
 
  440                 detail::fvec4SIMD 
const & N,
 
  441                 detail::fvec4SIMD 
const & I,
 
  442                 detail::fvec4SIMD 
const & Nref);
 
  448                 detail::fvec4SIMD 
const & I,
 
  449                 detail::fvec4SIMD 
const & N);
 
  456                 detail::fvec4SIMD 
const & I,
 
  457                 detail::fvec4SIMD 
const & N,
 
  462         detail::fvec4SIMD 
sqrt(
 
  463                 detail::fvec4SIMD 
const & x);
 
  468         detail::fvec4SIMD niceSqrt(
 
  469                 detail::fvec4SIMD 
const & x);
 
  475                 detail::fvec4SIMD 
const & x);
 
  480                 detail::fvec4SIMD 
const & x);
 
  485         detail::fvec4SIMD fastInversesqrt(
 
  486                 detail::fvec4SIMD 
const & x);
 
  491 #include "simd_vec4.inl" 
  493 #endif//(GLM_ARCH != GLM_ARCH_PURE) 
  495 #endif//GLM_GTX_simd_vec4