]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Enable ed25519-donna's SSE2 code when possible for 32 bit x86.
authorYawning Angel <yawning@schwanenlied.me>
Mon, 17 Aug 2015 18:41:41 +0000 (18:41 +0000)
committerYawning Angel <yawning@schwanenlied.me>
Mon, 17 Aug 2015 18:41:41 +0000 (18:41 +0000)
This probably requires the user to manually set CFLAGS, but should
result in a net gain on 32 bit x86. Enabling SSE2 support would be
possible on x86_64, but will result in slower performance.

Implements feature #16535.

changes/feature16535 [new file with mode: 0644]
src/ext/ed25519/donna/README.tor
src/ext/ed25519/donna/ed25519-donna-portable.h

diff --git a/changes/feature16535 b/changes/feature16535
new file mode 100644 (file)
index 0000000..3df46b6
--- /dev/null
@@ -0,0 +1,4 @@
+  o Minor features (performance)
+    - Improve the runtime speed of Ed25519 operations and Curve25519 keypair
+      generation when built targeting 32 bit x86 platforms with SSE2
+      available. Implements ticket 16535.
index 2bb0efc01219e72a6361fd977d3e1ba26b1ae144..026d180c24cdfdba002ed8b1ae2a73337fe18021 100644 (file)
@@ -40,3 +40,7 @@ as of 8757bd4cd209cb032853ece0ce413f122eef212c.
  * On non-x86 targets, GCC's Stack Protector dislikes variables that have
    alignment constraints greater than that of other primitive types.
    The `ALIGN` macro is thus no-oped for all non-SSE2 builds.
+
+ * On 32 bit x86 targets that the compiler thinks supports SSE2, always
+   enable SSE2 support by force defining ED25519_SSE2 (x86_64 would also
+   always support this, but that code path is slower).
index 9ec83b87e3257d814dcf23c0d718053c77938c9d..1cd644c003e357df75d269f7336670e4463331bf 100644 (file)
@@ -158,6 +158,16 @@ static inline void U64TO8_LE(unsigned char *p, const uint64_t v) {
        #define ALIGN(x)
 #endif
 
+/* Tor: Force enable SSE2 on 32 bit x86 systems if the compile target
+ * architecture supports it.  This is not done on x86-64 as the non-SSE2
+ * code benchmarks better, at least on Haswell.
+ */
+#if defined(__SSE2__) && !defined(CPU_X86_64)
+       /* undef in case it's manually specified... */
+       #undef ED25519_SSE2
+       #define ED25519_SSE2
+#endif
+
 #include <stdlib.h>
 #include <string.h>