cdrom: change pause timing again
[pcsx_rearmed.git] / plugins / gpu_neon / psx_gpu / vector_ops.h
index b58b190..6bc7643 100644 (file)
 #ifndef VECTOR_OPS
 #define VECTOR_OPS
 
-#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);
+#include "vector_types.h"
 
 
 #define foreach_element(iterations, operation)                                 \
@@ -129,7 +103,7 @@ build_vector_types(s);
   foreach_element(2, (dest).e[_i] = (u32)(source).e[_i] >> (shift))            \
 
 #define shr_4x16b(dest, source, shift)                                         \
-  foreach_element(4, (dest).e[_i] = (source).e[_i] >> (shift))                 \
+  foreach_element(4, (dest).e[_i] = (u16)(source).e[_i] >> (shift))            \
 
 #define shl_4x16b(dest, source, shift)                                         \
   foreach_element(4, (dest).e[_i] = (u32)(source).e[_i] << (shift))            \
@@ -396,7 +370,7 @@ build_vector_types(s);
 
 #define zip_4x32b(dest, source_a, source_b)                                    \
   foreach_element(4, (dest).e[_i] =                                            \
-   (u8)(source_a).e[_i] | ((u8)(source_b).e[_i] << 16))                        \
+   (u16)(source_a).e[_i] | ((u16)(source_b).e[_i] << 16))                      \
 
 #define zip_2x64b(dest, source_a, source_b)                                    \
   foreach_element(2, (dest).e[_i] =                                            \
@@ -551,6 +525,15 @@ build_vector_types(s);
     (dest).e[_i] = result;                                                     \
   })                                                                           \
 
+#define min_4x16b(dest, source_a, source_b)                                    \
+  foreach_element(4,                                                           \
+  {                                                                            \
+    s32 result = (source_a).e[_i];                                             \
+    if((source_b).e[_i] < result)                                              \
+      result = (source_b).e[_i];                                               \
+    (dest).e[_i] = result;                                                     \
+  })                                                                           \
+
 #define min_8x16b(dest, source_a, source_b)                                    \
   foreach_element(8,                                                           \
   {                                                                            \