Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <inttypes.h>
- #include <stdint.h>
- #include <stdio.h>
- #include <io.h>
- #if 1
- typedef uint32_t sum_t;
- typedef uint64_t sum2_t;
- #define PRI_SUM2 "#018"PRIx64
- #else
- typedef uint16_t sum_t;
- typedef uint32_t sum2_t;
- #define PRI_SUM2 "#010"PRIx32
- #endif
- #define BITS_PER_SUM (8 * sizeof(sum_t))
- // in: a pseudo-simd number of the form x+(y<<16)
- // return: abs(x)+(abs(y)<<16)
- static sum2_t abs2( sum2_t a )
- {
- sum2_t s = ((a>>(BITS_PER_SUM-1))&(((sum2_t)1<<BITS_PER_SUM)+1))*((sum_t)-1);
- return (a+s)^s;
- }
- int main( int argc, char **argv )
- {
- for(int x = -2; x <= 2; x++ )
- for(int y = -2; y <= 2; y++ )
- {
- sum2_t sum2 = (sum2_t)x + ((sum2_t)y << BITS_PER_SUM);
- sum2_t abs_sum2 = abs2(sum2);
- sum_t a = abs_sum2;
- sum_t b = abs_sum2 >> BITS_PER_SUM;
- fprintf( stdout, "(%3d, %3d) -> %"PRI_SUM2" -> %"PRI_SUM2" - > (%3d, %3d)\n", x, y, sum2, abs_sum2, (int)a, (int)b );
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement