Browse Source

Do not use alignas on macOS

Signed-off-by: falkTX <falktx@falktx.com>
tags/22.06
falkTX 2 years ago
parent
commit
dfc59c94cc
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
2 changed files with 17 additions and 5 deletions
  1. +8
    -1
      include/engine/Port.hpp
  2. +9
    -4
      include/simd/Vector.hpp

+ 8
- 1
include/engine/Port.hpp View File

@@ -32,6 +32,13 @@

#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 engine {
@@ -48,7 +55,7 @@ struct Port {
/** Voltage of the port. */
/** 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. */
union alignas(32) {
union SIMD_ALIGN {
/** Unstable API. Use getVoltage() and setVoltage() instead. */
float voltages[PORT_MAX_CHANNELS] = {};
/** DEPRECATED. Unstable API. Use getVoltage() and setVoltage() instead. */


+ 9
- 4
include/simd/Vector.hpp View File

@@ -30,6 +30,13 @@
#include <cstring>
#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 {

@@ -62,8 +69,7 @@ struct Vector<float, 4> {
using type = float;
constexpr static int size = 4;

/** NOTE alignas is required in order to allow SSE usage. */
union alignas(32) {
union SIMD_ALIGN {
__m128 v;
/** 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;
constexpr static int size = 4;

/** NOTE alignas is required in order to allow SSE usage. */
union alignas(32) {
union SIMD_ALIGN {
__m128i v;
int32_t s[4];
};


Loading…
Cancel
Save