[simd] Fix some portability issues

Use [u]int64_t instead of long, and fix some incorrect attribute usage
(I had misread the gcc docs at the time).
This commit is contained in:
Bill Currie 2021-03-27 20:04:10 +09:00
parent 99f0cde080
commit 8309e1852a
3 changed files with 7 additions and 4 deletions

View file

@ -28,6 +28,8 @@
#ifndef __QF_simd_types_h
#define __QF_simd_types_h
#include <stdint.h>
#define VEC_TYPE(t,n) typedef t n __attribute__ ((vector_size (4*sizeof (t))))
/** Three element vector type for interfacing with compact data.
@ -51,7 +53,7 @@ VEC_TYPE (double, vec4d_t);
/** Used mostly for __builtin_shuffle.
*/
VEC_TYPE (long, vec4l_t);
VEC_TYPE (int64_t, vec4l_t);
#endif
/** Three element vector type for interfacing with compact data.

View file

@ -258,7 +258,8 @@ VISIBLE
vec4d_t
qconjd (vec4d_t q)
{
const vec4l_t neg = { 1lu << 63, 1lu << 63, 1lu << 63, 0 };
const uint64_t sign = UINT64_C(1) << 63;
const vec4l_t neg = { sign, sign, sign, 0 };
return _mm256_xor_pd (q, (__m256d) neg);
}

View file

@ -91,8 +91,8 @@ GNU89INLINE inline vec4f_t qrotf (vec4f_t a, vec4f_t b) __attribute__((const));
* That is, [-x, -y, -z, w].
*/
GNU89INLINE inline vec4f_t qconjf (vec4f_t q) __attribute__((const));
GNU89INLINE inline vec4f_t loadvec3f (const float v3[3]) __attribute__((pure, access(read_only, 1)));
GNU89INLINE inline void storevec3f (float v3[3], vec4f_t v4) __attribute__((access (write_only, 1)));
GNU89INLINE inline vec4f_t loadvec3f (const float *v3) __attribute__((pure));
GNU89INLINE inline void storevec3f (float *v3, vec4f_t v4);
GNU89INLINE inline vec4f_t normalf (vec4f_t v) __attribute__((pure));
GNU89INLINE inline vec4f_t magnitudef (vec4f_t v) __attribute__((pure));
GNU89INLINE inline vec4f_t magnitude3f (vec4f_t v) __attribute__((pure));