~mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
symm/: New SSE2 implementations of Salsa20 and ChaCha.
[catacomb]
/
symm
/
salsa20.c
diff --git
a/symm/salsa20.c
b/symm/salsa20.c
index
0104e5e
..
d3fb69a
100644
(file)
--- a/
symm/salsa20.c
+++ b/
symm/salsa20.c
@@
-7,11
+7,14
@@
/*----- Header files ------------------------------------------------------*/
/*----- Header files ------------------------------------------------------*/
+#include "config.h"
+
#include <stdarg.h>
#include <mLib/bits.h>
#include "arena.h"
#include <stdarg.h>
#include <mLib/bits.h>
#include "arena.h"
+#include "dispatch.h"
#include "gcipher.h"
#include "grand.h"
#include "keysz.h"
#include "gcipher.h"
#include "grand.h"
#include "keysz.h"
@@
-39,9
+42,28
@@
const octet salsa20_keysz[] = { KSZ_SET, 32, 16, 10, 0 };
* the feedforward step.
*/
* 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); }
{ SALSA20_nR(dest, src, r); SALSA20_FFWD(dest, src); }
+#ifdef CPUFAM_X86
+extern core__functype salsa20_core_x86_sse2;
+#endif
+
+static core__functype *pick_core(void)
+{
+#ifdef CPUFAM_X86
+ if (cpu_feature_p(CPUFEAT_X86_SSE2)) return salsa20_core_x86_sse2;
+#endif
+ return simple_core;
+}
+
/* --- @populate@ --- *
*
* Arguments: @salsa20_matrix a@ = a matrix to fill in
/* --- @populate@ --- *
*
* Arguments: @salsa20_matrix a@ = a matrix to fill in