X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fgpu_neon%2Fpsx_gpu%2Fvector_ops.h;h=c91e7d950d874536738a07c57d2fe8925a078e3c;hp=c11955d050ebcba733d8e57c1eebeac4ca69e24d;hb=HEAD;hpb=75e28f62b2a50044b58075d63d207409e0148409 diff --git a/plugins/gpu_neon/psx_gpu/vector_ops.h b/plugins/gpu_neon/psx_gpu/vector_ops.h index c11955d0..6bc76433 100644 --- a/plugins/gpu_neon/psx_gpu/vector_ops.h +++ b/plugins/gpu_neon/psx_gpu/vector_ops.h @@ -15,33 +15,7 @@ #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)) \ @@ -394,6 +368,10 @@ build_vector_types(s); foreach_element(8, (dest).e[_i] = \ (u8)(source_a).e[_i] | ((u8)(source_b).e[_i] << 8)) \ +#define zip_4x32b(dest, source_a, source_b) \ + foreach_element(4, (dest).e[_i] = \ + (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] = \ (u64)(source_a).e[_i] | ((u64)(source_b).e[_i] << 32)) \ @@ -547,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, \ { \