gpu_neon: don't include vector_ops.h in the main header
[pcsx_rearmed.git] / plugins / gpu_neon / psx_gpu / vector_types.h
diff --git a/plugins/gpu_neon/psx_gpu/vector_types.h b/plugins/gpu_neon/psx_gpu/vector_types.h
new file mode 100644 (file)
index 0000000..4b1213e
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 Gilead Kutnick "Exophase" <exophase@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+
+#ifndef VECTOR_TYPES
+#define VECTOR_TYPES
+
+#include <stdint.h>
+
+typedef int8_t s8;
+typedef uint8_t u8;
+typedef int16_t s16;
+typedef uint16_t u16;
+typedef int32_t s32;
+typedef uint32_t u32;
+typedef int64_t s64;
+typedef uint64_t u64;
+
+#define build_vector_type_pair(sign, size, count, count_x2)                    \
+typedef struct                                                                 \
+{                                                                              \
+  sign##size e[count];                                                         \
+} vec_##count##x##size##sign;                                                  \
+                                                                               \
+typedef struct                                                                 \
+{                                                                              \
+  union                                                                        \
+  {                                                                            \
+    sign##size e[count_x2];                                                    \
+    struct                                                                     \
+    {                                                                          \
+      vec_##count##x##size##sign low;                                          \
+      vec_##count##x##size##sign high;                                         \
+    };                                                                         \
+  };                                                                           \
+} vec_##count_x2##x##size##sign                                                \
+
+#define build_vector_types(sign)                                               \
+  build_vector_type_pair(sign, 8, 8, 16);                                      \
+  build_vector_type_pair(sign, 16, 4, 8);                                      \
+  build_vector_type_pair(sign, 32, 2, 4);                                      \
+  build_vector_type_pair(sign, 64, 1, 2)                                       \
+
+build_vector_types(u);
+build_vector_types(s);
+
+#endif // VECTOR_TYPES