Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.97 KB | None | 0 0
  1. #include <inttypes.h>
  2. #include <stdint.h>
  3. #include <stdio.h>
  4. #include <io.h>
  5.  
  6. #if 1
  7.     typedef uint32_t sum_t;
  8.     typedef uint64_t sum2_t;
  9. #define PRI_SUM2 "#018"PRIx64
  10. #else
  11.     typedef uint16_t sum_t;
  12.     typedef uint32_t sum2_t;
  13. #define PRI_SUM2 "#010"PRIx32
  14. #endif
  15. #define BITS_PER_SUM (8 * sizeof(sum_t))
  16.  
  17. // in: a pseudo-simd number of the form x+(y<<16)
  18. // return: abs(x)+(abs(y)<<16)
  19. static sum2_t abs2( sum2_t a )
  20. {
  21.     sum2_t s = ((a>>(BITS_PER_SUM-1))&(((sum2_t)1<<BITS_PER_SUM)+1))*((sum_t)-1);
  22.     return (a+s)^s;
  23. }
  24.  
  25. int main( int argc, char **argv )
  26. {
  27.     for(int x = -2; x <= 2; x++ )
  28.     for(int y = -2; y <= 2; y++ )
  29.     {
  30.         sum2_t sum2 = (sum2_t)x + ((sum2_t)y << BITS_PER_SUM);
  31.         sum2_t abs_sum2 = abs2(sum2);
  32.         sum_t a = abs_sum2;
  33.         sum_t b = abs_sum2 >> BITS_PER_SUM;
  34.         fprintf( stdout, "(%3d, %3d) -> %"PRI_SUM2" -> %"PRI_SUM2" - > (%3d, %3d)\n", x, y, sum2, abs_sum2, (int)a, (int)b );
  35.     }
  36.     return 0;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement