rijndael-ssse3: fix counter operand from read-only to read/write
authorJussi Kivilinna <jussi.kivilinna@iki.fi>
Wed, 4 Jan 2017 10:02:36 +0000 (12:02 +0200)
committerJussi Kivilinna <jussi.kivilinna@iki.fi>
Wed, 4 Jan 2017 10:10:19 +0000 (12:10 +0200)
* cipher/rijndael-ssse3-amd64.c (_gcry_aes_ssse3_ctr_enc): Change
'ctrlow' operand from read-only to read-write.
--

With read-only operand, compiler is allowed to pass temporary
register to assembly block and throw away any calculation that
have been done on that register. On the other hand, compiler is
also allowed to keep operand value permanently in one register
as value is treated as read-only, and effectly operates as
expected. Selection between these two depends on compiler
version and used flags.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
cipher/rijndael-ssse3-amd64.c

index a8e89d4..2adb73f 100644 (file)
@@ -387,8 +387,8 @@ _gcry_aes_ssse3_ctr_enc (RIJNDAEL_context *ctx, unsigned char *outbuf,
                     ".Lno_carry%=:\n\t"
 
                     "pshufb %%xmm6, %%xmm7\n\t"
-                    :
-                    : [ctr] "r" (ctr), [ctrlow] "r" (ctrlow)
+                    : [ctrlow] "+r" (ctrlow)
+                    : [ctr] "r" (ctr)
                     : "cc", "memory");
 
       do_vpaes_ssse3_enc (ctx, nrounds, aes_const_ptr);