X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/a4c2e267f29d601a9d68ecfedc66852379e429ae..1da1ed6a5815deef6c33d74f1eb3c856793df3e5:/symm/salsa20.c diff --git a/symm/salsa20.c b/symm/salsa20.c index 0104e5e5..40f28fc0 100644 --- a/symm/salsa20.c +++ b/symm/salsa20.c @@ -7,11 +7,14 @@ /*----- Header files ------------------------------------------------------*/ +#include "config.h" + #include #include #include "arena.h" +#include "dispatch.h" #include "gcipher.h" #include "grand.h" #include "keysz.h" @@ -39,9 +42,29 @@ const octet salsa20_keysz[] = { KSZ_SET, 32, 16, 10, 0 }; * the feedforward step. */ -static void core(unsigned r, const salsa20_matrix src, salsa20_matrix dest) +CPU_DISPATCH(static, (void), + void, core, (unsigned r, const salsa20_matrix src, + salsa20_matrix dest), + (r, src, dest), + pick_core, simple_core); + +static void simple_core(unsigned r, const salsa20_matrix src, + salsa20_matrix dest) { SALSA20_nR(dest, src, r); SALSA20_FFWD(dest, src); } +#if CPUFAM_X86 || CPUFAM_AMD64 +extern core__functype salsa20_core_x86ish_sse2; +#endif + +static core__functype *pick_core(void) +{ +#if CPUFAM_X86 || CPUFAM_AMD64 + DISPATCH_PICK_COND(salsa20_core, salsa20_core_x86ish_sse2, + cpu_feature_p(CPUFEAT_X86_SSE2)); +#endif + DISPATCH_PICK_FALLBACK(salsa20_core, simple_core); +} + /* --- @populate@ --- * * * Arguments: @salsa20_matrix a@ = a matrix to fill in @@ -672,7 +695,7 @@ static void grdestroy(grand *r) static const grand_ops grops_rand_##rr = { \ SALSA20_NAME_##rr, GRAND_CRYPTO, 0, \ grmisc, grdestroy, grword, \ - grbyte, grword, grand_range, grfill \ + grbyte, grword, grand_defaultrange, grfill \ }; \ \ grand *SALSA20_DECOR(salsa20, rr, _rand) \ @@ -715,7 +738,7 @@ SALSA20_VARS(DEFGRAND) static const grand_ops grxops_rand_##rr = { \ "x" SALSA20_NAME_##rr, GRAND_CRYPTO, 0, \ grmisc, grxdestroy_##rr, grword, \ - grbyte, grword, grand_range, grfill \ + grbyte, grword, grand_defaultrange, grfill \ }; \ \ grand *SALSA20_DECOR(xsalsa20, rr, _rand) \