mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
simd128: handle both sse2 and simd128 enabled by Emscripten
https://github.com/recp/cglm/pull/286#issuecomment-1492985403
This commit is contained in:
@@ -125,15 +125,15 @@ glm_mat4_ucopy(mat4 mat, mat4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_mat4_copy(mat4 mat, mat4 dest) {
|
||||
#ifdef __AVX__
|
||||
glmm_store256(dest[0], glmm_load256(mat[0]));
|
||||
glmm_store256(dest[2], glmm_load256(mat[2]));
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glmm_store(dest[0], glmm_load(mat[0]));
|
||||
glmm_store(dest[1], glmm_load(mat[1]));
|
||||
glmm_store(dest[2], glmm_load(mat[2]));
|
||||
glmm_store(dest[3], glmm_load(mat[3]));
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
#elif defined(__AVX__)
|
||||
glmm_store256(dest[0], glmm_load256(mat[0]));
|
||||
glmm_store256(dest[2], glmm_load256(mat[2]));
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glmm_store(dest[0], glmm_load(mat[0]));
|
||||
glmm_store(dest[1], glmm_load(mat[1]));
|
||||
glmm_store(dest[2], glmm_load(mat[2]));
|
||||
@@ -196,7 +196,14 @@ glm_mat4_identity_array(mat4 * __restrict mat, size_t count) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_mat4_zero(mat4 mat) {
|
||||
#ifdef __AVX__
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glmm_128 x0;
|
||||
x0 = wasm_f32x4_const(0.f, 0.f, 0.f, 0.f);
|
||||
glmm_store(mat[0], x0);
|
||||
glmm_store(mat[1], x0);
|
||||
glmm_store(mat[2], x0);
|
||||
glmm_store(mat[3], x0);
|
||||
#elif defined(__AVX__)
|
||||
__m256 y0;
|
||||
y0 = _mm256_setzero_ps();
|
||||
glmm_store256(mat[0], y0);
|
||||
@@ -208,13 +215,6 @@ glm_mat4_zero(mat4 mat) {
|
||||
glmm_store(mat[1], x0);
|
||||
glmm_store(mat[2], x0);
|
||||
glmm_store(mat[3], x0);
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glmm_128 x0;
|
||||
x0 = wasm_f32x4_const(0.f, 0.f, 0.f, 0.f);
|
||||
glmm_store(mat[0], x0);
|
||||
glmm_store(mat[1], x0);
|
||||
glmm_store(mat[2], x0);
|
||||
glmm_store(mat[3], x0);
|
||||
#elif defined(CGLM_NEON_FP)
|
||||
glmm_128 x0;
|
||||
x0 = vdupq_n_f32(0.0f);
|
||||
@@ -313,12 +313,12 @@ glm_mat4_ins3(mat3 mat, mat4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) {
|
||||
#ifdef __AVX__
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glm_mat4_mul_wasm(m1, m2, dest);
|
||||
#elif defined(__AVX__)
|
||||
glm_mat4_mul_avx(m1, m2, dest);
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_mul_sse2(m1, m2, dest);
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glm_mat4_mul_wasm(m1, m2, dest);
|
||||
#elif defined(CGLM_NEON_FP)
|
||||
glm_mat4_mul_neon(m1, m2, dest);
|
||||
#else
|
||||
@@ -395,10 +395,10 @@ glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) {
|
||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_mulv_sse2(m, v, dest);
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glm_mat4_mulv_wasm(m, v, dest);
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_mulv_sse2(m, v, dest);
|
||||
#elif defined(CGLM_NEON_FP)
|
||||
glm_mat4_mulv_neon(m, v, dest);
|
||||
#else
|
||||
@@ -517,10 +517,10 @@ glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_mat4_transpose_to(mat4 m, mat4 dest) {
|
||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_transp_sse2(m, dest);
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glm_mat4_transp_wasm(m, dest);
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_transp_sse2(m, dest);
|
||||
#elif defined(CGLM_NEON_FP)
|
||||
glm_mat4_transp_neon(m, dest);
|
||||
#else
|
||||
@@ -543,10 +543,10 @@ glm_mat4_transpose_to(mat4 m, mat4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_mat4_transpose(mat4 m) {
|
||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_transp_sse2(m, m);
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glm_mat4_transp_wasm(m, m);
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_transp_sse2(m, m);
|
||||
#elif defined(CGLM_NEON_FP)
|
||||
glm_mat4_transp_neon(m, m);
|
||||
#else
|
||||
@@ -584,12 +584,12 @@ glm_mat4_scale_p(mat4 m, float s) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_mat4_scale(mat4 m, float s) {
|
||||
#ifdef __AVX__
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glm_mat4_scale_wasm(m, s);
|
||||
#elif defined(__AVX__)
|
||||
glm_mat4_scale_avx(m, s);
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_scale_sse2(m, s);
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glm_mat4_scale_wasm(m, s);
|
||||
#elif defined(CGLM_NEON_FP)
|
||||
glm_mat4_scale_neon(m, s);
|
||||
#else
|
||||
@@ -607,10 +607,10 @@ glm_mat4_scale(mat4 m, float s) {
|
||||
CGLM_INLINE
|
||||
float
|
||||
glm_mat4_det(mat4 mat) {
|
||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||
return glm_mat4_det_sse2(mat);
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
return glm_mat4_det_wasm(mat);
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
return glm_mat4_det_sse2(mat);
|
||||
#elif defined(CGLM_NEON_FP)
|
||||
return glm_mat4_det_neon(mat);
|
||||
#else
|
||||
@@ -707,10 +707,10 @@ glm_mat4_inv(mat4 mat, mat4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_mat4_inv_fast(mat4 mat, mat4 dest) {
|
||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_inv_fast_sse2(mat, dest);
|
||||
#elif defined(__wasm__) && defined(__wasm_simd128__)
|
||||
#if defined(__wasm__) && defined(__wasm_simd128__)
|
||||
glm_mat4_inv_fast_wasm(mat, dest);
|
||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||
glm_mat4_inv_fast_sse2(mat, dest);
|
||||
#else
|
||||
glm_mat4_inv(mat, dest);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user