Do not use alignas on macOS

Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
falkTX 2022-05-26 14:00:20 +01:00
parent b3d68d9e9f
commit dfc59c94cc
No known key found for this signature in database
GPG key ID: CDBAA37ABC74FBA0
2 changed files with 17 additions and 5 deletions

View file

@ -32,6 +32,13 @@
#include <list> #include <list>
/** NOTE alignas is required in some systems in order to allow SSE usage. */
#ifndef ARCH_MAC
#define SIMD_ALIGN alignas(32)
#else
#define SIMD_ALIGN
#endif
namespace rack { namespace rack {
namespace engine { namespace engine {
@ -48,7 +55,7 @@ struct Port {
/** Voltage of the port. */ /** Voltage of the port. */
/** NOTE alignas is required in order to allow SSE usage. /** NOTE alignas is required in order to allow SSE usage.
Consecutive data (like in a vector) would otherwise pack Ports in a way that breaks SSE. */ Consecutive data (like in a vector) would otherwise pack Ports in a way that breaks SSE. */
union alignas(32) { union SIMD_ALIGN {
/** Unstable API. Use getVoltage() and setVoltage() instead. */ /** Unstable API. Use getVoltage() and setVoltage() instead. */
float voltages[PORT_MAX_CHANNELS] = {}; float voltages[PORT_MAX_CHANNELS] = {};
/** DEPRECATED. Unstable API. Use getVoltage() and setVoltage() instead. */ /** DEPRECATED. Unstable API. Use getVoltage() and setVoltage() instead. */

View file

@ -30,6 +30,13 @@
#include <cstring> #include <cstring>
#include <pmmintrin.h> #include <pmmintrin.h>
/** NOTE alignas is required in some systems in order to allow SSE usage. */
#ifndef ARCH_MAC
#define SIMD_ALIGN alignas(32)
#else
#define SIMD_ALIGN
#endif
namespace rack { namespace rack {
@ -62,8 +69,7 @@ struct Vector<float, 4> {
using type = float; using type = float;
constexpr static int size = 4; constexpr static int size = 4;
/** NOTE alignas is required in order to allow SSE usage. */ union SIMD_ALIGN {
union alignas(32) {
__m128 v; __m128 v;
/** Accessing this array of scalars is slow and defeats the purpose of vectorizing. /** Accessing this array of scalars is slow and defeats the purpose of vectorizing.
*/ */
@ -137,8 +143,7 @@ struct Vector<int32_t, 4> {
using type = int32_t; using type = int32_t;
constexpr static int size = 4; constexpr static int size = 4;
/** NOTE alignas is required in order to allow SSE usage. */ union SIMD_ALIGN {
union alignas(32) {
__m128i v; __m128i v;
int32_t s[4]; int32_t s[4];
}; };