new file to encapsulate posix_memalign() hackery
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 23 Apr 2009 17:43:39 +0000 (17:43 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 23 Apr 2009 17:43:39 +0000 (17:43 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@4998 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/pbd/malign.cc [new file with mode: 0644]
libs/pbd/pbd/malign.h [new file with mode: 0644]

diff --git a/libs/pbd/malign.cc b/libs/pbd/malign.cc
new file mode 100644 (file)
index 0000000..cd3459a
--- /dev/null
@@ -0,0 +1,35 @@
+#include <cstring>
+#include <cerrno>
+
+#include "pbd/malign.h"
+#include "pbd/error.h"
+
+#include "i18n.h"
+
+using namespace PBD;
+
+#ifdef __x86_64__
+static const int CPU_CACHE_ALIGN = 64;
+#else
+static const int CPU_CACHE_ALIGN = 16; /* arguably 32 on most arches, but it matters less */
+#endif
+
+int cache_aligned_malloc (void** memptr, size_t size)
+{
+#ifdef NO_POSIX_MEMALIGN
+       if (((*memptr) = malloc (size)) == 0) {
+               fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"),
+                                        CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg;
+               return errno;
+       } else {
+               return 0;
+       }
+#else
+        if (posix_memalign (memptr, CPU_CACHE_ALIGN, size)) {
+               fatal << string_compose (_("Memory allocation error: posix_memalign (%1 * %2) failed (%3)"),
+                                        CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg;
+       }
+
+       return 0;
+#endif 
+}
diff --git a/libs/pbd/pbd/malign.h b/libs/pbd/pbd/malign.h
new file mode 100644 (file)
index 0000000..97e68c0
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __pbd_malign_h__
+#define __pbd_malign_h__
+
+#include <stdlib.h>
+
+int cache_aligned_malloc (void** memptr, size_t size);
+
+#endif /* __pbd_malign_h__ */