• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdint.h>
2 #include <stddef.h>
3 #include <stdlib.h>
4 
5 #include "../../../include/libbase64.h"
6 #include "../../tables/tables.h"
7 #include "../../codecs.h"
8 #include "config.h"
9 #include "../../env.h"
10 
11 #if HAVE_AVX2
12 #include <immintrin.h>
13 
14 // Only enable inline assembly on supported compilers and on 64-bit CPUs.
15 #ifndef BASE64_AVX2_USE_ASM
16 # if (defined(__GNUC__) || defined(__clang__)) && BASE64_WORDSIZE == 64
17 #  define BASE64_AVX2_USE_ASM 1
18 # else
19 #  define BASE64_AVX2_USE_ASM 0
20 # endif
21 #endif
22 
23 #include "dec_reshuffle.c"
24 #include "dec_loop.c"
25 
26 #if BASE64_AVX2_USE_ASM
27 # include "enc_loop_asm.c"
28 #else
29 # include "enc_translate.c"
30 # include "enc_reshuffle.c"
31 # include "enc_loop.c"
32 #endif
33 
34 #endif	// HAVE_AVX2
35 
BASE64_ENC_FUNCTION(avx2)36 BASE64_ENC_FUNCTION(avx2)
37 {
38 #if HAVE_AVX2
39 	#include "../generic/enc_head.c"
40 	enc_loop_avx2(&s, &slen, &o, &olen);
41 	#include "../generic/enc_tail.c"
42 #else
43 	BASE64_ENC_STUB
44 #endif
45 }
46 
BASE64_DEC_FUNCTION(avx2)47 BASE64_DEC_FUNCTION(avx2)
48 {
49 #if HAVE_AVX2
50 	#include "../generic/dec_head.c"
51 	dec_loop_avx2(&s, &slen, &o, &olen);
52 	#include "../generic/dec_tail.c"
53 #else
54 	BASE64_DEC_STUB
55 #endif
56 }
57