emp-toolkit
block.h
Go to the documentation of this file.
1 #ifndef LIBGARBLE_BLOCK_H
2 #define LIBGARBLE_BLOCK_H
3 
4 #include <wmmintrin.h>
5 #include <emmintrin.h>
6 #include <xmmintrin.h>
7 
8 typedef __m128i block;
9 
10 #define garble_xor(x,y) _mm_xor_si128(x,y)
11 #define garble_zero_block() _mm_setzero_si128()
12 #define garble_equal(x,y) (_mm_movemask_epi8(_mm_cmpeq_epi8(x,y)) == 0xffff)
13 #define garble_unequal(x,y) (_mm_movemask_epi8(_mm_cmpeq_epi8(x,y)) != 0xffff)
14 
15 #define garble_lsb(x) (*((char *) &x) & 1)
16 #define garble_make_block(X,Y) _mm_set_epi64((__m64)(X), (__m64)(Y))
17 #define garble_double(B) _mm_slli_epi64(B,1)
18 
19 #include <stdio.h>
20 
21 block
22 garble_seed(block *seed);
23 block
25 block *
26 garble_allocate_blocks(size_t nblocks);
27 
28 int
29 block_vfprintf(FILE *stream, const char *format, va_list ap);
30 int
31 block_fprintf(FILE *stream, const char *format, ...);
32 int
33 block_printf(const char *format, ...);
34 
35 #endif
__m128i block
Definition: block.h:8
int block_printf(const char *format,...)
block garble_random_block(void)
int block_fprintf(FILE *stream, const char *format,...)
int block_vfprintf(FILE *stream, const char *format, va_list ap)
block * garble_allocate_blocks(size_t nblocks)
block garble_seed(block *seed)