mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
4 Commits
v0.7.8
...
neon-updat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e34601f578 | ||
|
|
fa01a3077b | ||
|
|
54f805a62d | ||
|
|
a05b282fad |
@@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.8.2)
|
cmake_minimum_required(VERSION 3.8.2)
|
||||||
project(cglm VERSION 0.7.8 LANGUAGES C)
|
project(cglm VERSION 0.7.9 LANGUAGES C)
|
||||||
|
|
||||||
set(CMAKE_C_STANDARD 11)
|
set(CMAKE_C_STANDARD 11)
|
||||||
set(CMAKE_C_STANDARD_REQUIRED YES)
|
set(CMAKE_C_STANDARD_REQUIRED YES)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
|
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
AC_INIT([cglm], [0.7.8], [info@recp.me])
|
AC_INIT([cglm], [0.7.9], [info@recp.me])
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests])
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests])
|
||||||
|
|
||||||
# Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am.
|
# Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am.
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ author = u'Recep Aslantas'
|
|||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = u'0.7.8'
|
version = u'0.7.9'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = u'0.7.8'
|
release = u'0.7.9'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|||||||
@@ -358,6 +358,8 @@ void
|
|||||||
glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) {
|
glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_mulv_sse2(m, v, dest);
|
glm_mat4_mulv_sse2(m, v, dest);
|
||||||
|
#elif defined(CGLM_NEON_FP)
|
||||||
|
glm_mat4_mulv_neon(m, v, dest);
|
||||||
#else
|
#else
|
||||||
vec4 res;
|
vec4 res;
|
||||||
res[0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3];
|
res[0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3];
|
||||||
@@ -476,6 +478,8 @@ void
|
|||||||
glm_mat4_transpose_to(mat4 m, mat4 dest) {
|
glm_mat4_transpose_to(mat4 m, mat4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_transp_sse2(m, dest);
|
glm_mat4_transp_sse2(m, dest);
|
||||||
|
#elif defined(CGLM_NEON_FP)
|
||||||
|
glm_mat4_transp_neon(m, dest);
|
||||||
#else
|
#else
|
||||||
dest[0][0] = m[0][0]; dest[1][0] = m[0][1];
|
dest[0][0] = m[0][0]; dest[1][0] = m[0][1];
|
||||||
dest[0][1] = m[1][0]; dest[1][1] = m[1][1];
|
dest[0][1] = m[1][0]; dest[1][1] = m[1][1];
|
||||||
@@ -498,6 +502,8 @@ void
|
|||||||
glm_mat4_transpose(mat4 m) {
|
glm_mat4_transpose(mat4 m) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_transp_sse2(m, m);
|
glm_mat4_transp_sse2(m, m);
|
||||||
|
#elif defined(CGLM_NEON_FP)
|
||||||
|
glm_mat4_transp_neon(m, m);
|
||||||
#else
|
#else
|
||||||
mat4 d;
|
mat4 d;
|
||||||
glm_mat4_transpose_to(m, d);
|
glm_mat4_transpose_to(m, d);
|
||||||
@@ -536,12 +542,7 @@ glm_mat4_scale(mat4 m, float s) {
|
|||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_scale_sse2(m, s);
|
glm_mat4_scale_sse2(m, s);
|
||||||
#elif defined(CGLM_NEON_FP)
|
#elif defined(CGLM_NEON_FP)
|
||||||
float32x4_t v0;
|
glm_mat4_scale_neon(m, s);
|
||||||
v0 = vdupq_n_f32(s);
|
|
||||||
vst1q_f32(m[0], vmulq_f32(vld1q_f32(m[0]), v0));
|
|
||||||
vst1q_f32(m[1], vmulq_f32(vld1q_f32(m[1]), v0));
|
|
||||||
vst1q_f32(m[2], vmulq_f32(vld1q_f32(m[2]), v0));
|
|
||||||
vst1q_f32(m[3], vmulq_f32(vld1q_f32(m[3]), v0));
|
|
||||||
#else
|
#else
|
||||||
glm_mat4_scale_p(m, s);
|
glm_mat4_scale_p(m, s);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -12,6 +12,32 @@
|
|||||||
#include "../../common.h"
|
#include "../../common.h"
|
||||||
#include "../intrin.h"
|
#include "../intrin.h"
|
||||||
|
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_mat4_scale_neon(mat4 m, float s) {
|
||||||
|
float32x4_t v0;
|
||||||
|
|
||||||
|
v0 = vdupq_n_f32(s);
|
||||||
|
|
||||||
|
vst1q_f32(m[0], vmulq_f32(vld1q_f32(m[0]), v0));
|
||||||
|
vst1q_f32(m[1], vmulq_f32(vld1q_f32(m[1]), v0));
|
||||||
|
vst1q_f32(m[2], vmulq_f32(vld1q_f32(m[2]), v0));
|
||||||
|
vst1q_f32(m[3], vmulq_f32(vld1q_f32(m[3]), v0));
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_mat4_transp_neon(mat4 m, mat4 dest) {
|
||||||
|
float32x4x4_t vmat;
|
||||||
|
|
||||||
|
vmat = vld4q_f32(m[0]);
|
||||||
|
|
||||||
|
vst1q_f32(dest[0], vmat.val[0]);
|
||||||
|
vst1q_f32(dest[1], vmat.val[1]);
|
||||||
|
vst1q_f32(dest[2], vmat.val[2]);
|
||||||
|
vst1q_f32(dest[3], vmat.val[3]);
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mul_neon(mat4 m1, mat4 m2, mat4 dest) {
|
glm_mat4_mul_neon(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
@@ -53,5 +79,27 @@ glm_mat4_mul_neon(mat4 m1, mat4 m2, mat4 dest) {
|
|||||||
vst1q_f32(dest[3], d3);
|
vst1q_f32(dest[3], d3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_mat4_mulv_neon(mat4 m, vec4 v, vec4 dest) {
|
||||||
|
float32x4_t l0, l1, l2, l3;
|
||||||
|
float32x2_t vlo, vhi;
|
||||||
|
|
||||||
|
l0 = vld1q_f32(m[0]);
|
||||||
|
l1 = vld1q_f32(m[1]);
|
||||||
|
l2 = vld1q_f32(m[2]);
|
||||||
|
l3 = vld1q_f32(m[3]);
|
||||||
|
|
||||||
|
vlo = vld1_f32(&v[0]);
|
||||||
|
vhi = vld1_f32(&v[2]);
|
||||||
|
|
||||||
|
l0 = vmulq_lane_f32(l0, vlo, 0);
|
||||||
|
l0 = vmlaq_lane_f32(l0, l1, vlo, 1);
|
||||||
|
l0 = vmlaq_lane_f32(l0, l2, vhi, 0);
|
||||||
|
l0 = vmlaq_lane_f32(l0, l3, vhi, 1);
|
||||||
|
|
||||||
|
vst1q_f32(dest, l0);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* cglm_mat4_neon_h */
|
#endif /* cglm_mat4_neon_h */
|
||||||
|
|||||||
@@ -10,6 +10,6 @@
|
|||||||
|
|
||||||
#define CGLM_VERSION_MAJOR 0
|
#define CGLM_VERSION_MAJOR 0
|
||||||
#define CGLM_VERSION_MINOR 7
|
#define CGLM_VERSION_MINOR 7
|
||||||
#define CGLM_VERSION_PATCH 8
|
#define CGLM_VERSION_PATCH 9
|
||||||
|
|
||||||
#endif /* cglm_version_h */
|
#endif /* cglm_version_h */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
project('cglm', 'c',
|
project('cglm', 'c',
|
||||||
version : '0.7.8',
|
version : '0.7.9',
|
||||||
license : 'mit',
|
license : 'mit',
|
||||||
default_options : [
|
default_options : [
|
||||||
'c_std=c11',
|
'c_std=c11',
|
||||||
|
|||||||
Reference in New Issue
Block a user