serpent-sse2-amd64: Move register clearing to assembly functions
authorJussi Kivilinna <jussi.kivilinna@iki.fi>
Thu, 22 Aug 2013 12:26:52 +0000 (15:26 +0300)
committerJussi Kivilinna <jussi.kivilinna@iki.fi>
Thu, 22 Aug 2013 12:26:52 +0000 (15:26 +0300)
cipher/serpent-sse2-amd64.S (_gcry_serpent_sse2_ctr_enc)
(_gcry_serpent_sse2_cbc_dec, _gcry_serpent_sse2_cfb_dec): Clear used
XMM registers.
cipher/serpent.c (_gcry_serpent_ctr_enc, _gcry_serpent_cbc_dec)
( _gcry_serpent_cfb_dec) [USE_SSE2]: Remove XMM register clearing from
bulk functions.
--

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
cipher/serpent-sse2-amd64.S
cipher/serpent.c

index fe9feee..a5cf353 100644 (file)
@@ -756,6 +756,20 @@ _gcry_serpent_sse2_ctr_enc:
        movdqu RB2, (6 * 16)(%rsi);
        movdqu RB3, (7 * 16)(%rsi);
 
+       /* clear the used registers */
+       pxor RA0, RA0;
+       pxor RA1, RA1;
+       pxor RA2, RA2;
+       pxor RA3, RA3;
+       pxor RB0, RB0;
+       pxor RB1, RB1;
+       pxor RB2, RB2;
+       pxor RB3, RB3;
+       pxor RTMP0, RTMP0;
+       pxor RTMP1, RTMP1;
+       pxor RTMP2, RTMP2;
+       pxor RNOT, RNOT;
+
        ret
 .size _gcry_serpent_sse2_ctr_enc,.-_gcry_serpent_sse2_ctr_enc;
 
@@ -819,6 +833,20 @@ _gcry_serpent_sse2_cbc_dec:
        movdqu RB2, (6 * 16)(%rsi);
        movdqu RB3, (7 * 16)(%rsi);
 
+       /* clear the used registers */
+       pxor RA0, RA0;
+       pxor RA1, RA1;
+       pxor RA2, RA2;
+       pxor RA3, RA3;
+       pxor RB0, RB0;
+       pxor RB1, RB1;
+       pxor RB2, RB2;
+       pxor RB3, RB3;
+       pxor RTMP0, RTMP0;
+       pxor RTMP1, RTMP1;
+       pxor RTMP2, RTMP2;
+       pxor RNOT, RNOT;
+
        ret
 .size _gcry_serpent_sse2_cbc_dec,.-_gcry_serpent_sse2_cbc_dec;
 
@@ -885,6 +913,20 @@ _gcry_serpent_sse2_cfb_dec:
        movdqu RB2, (6 * 16)(%rsi);
        movdqu RB3, (7 * 16)(%rsi);
 
+       /* clear the used registers */
+       pxor RA0, RA0;
+       pxor RA1, RA1;
+       pxor RA2, RA2;
+       pxor RA3, RA3;
+       pxor RB0, RB0;
+       pxor RB1, RB1;
+       pxor RB2, RB2;
+       pxor RB3, RB3;
+       pxor RTMP0, RTMP0;
+       pxor RTMP1, RTMP1;
+       pxor RTMP2, RTMP2;
+       pxor RNOT, RNOT;
+
        ret
 .size _gcry_serpent_sse2_cfb_dec,.-_gcry_serpent_sse2_cfb_dec;
 
index 8aded34..bf03fe7 100644 (file)
@@ -875,22 +875,6 @@ _gcry_serpent_ctr_enc(void *context, unsigned char *ctr,
 
     if (did_use_sse2)
       {
-        /* clear SSE2 registers used by serpent-sse2 */
-        asm volatile (
-          "pxor %%xmm0, %%xmm0;\n"
-          "pxor %%xmm1, %%xmm1;\n"
-          "pxor %%xmm2, %%xmm2;\n"
-          "pxor %%xmm3, %%xmm3;\n"
-          "pxor %%xmm4, %%xmm4;\n"
-          "pxor %%xmm5, %%xmm5;\n"
-          "pxor %%xmm6, %%xmm6;\n"
-          "pxor %%xmm7, %%xmm7;\n"
-          "pxor %%xmm10, %%xmm10;\n"
-          "pxor %%xmm11, %%xmm11;\n"
-          "pxor %%xmm12, %%xmm12;\n"
-          "pxor %%xmm13, %%xmm13;\n"
-          :::);
-
         /* serpent-sse2 assembly code does not use stack */
         if (nblocks == 0)
           burn_stack_depth = 0;
@@ -982,22 +966,6 @@ _gcry_serpent_cbc_dec(void *context, unsigned char *iv,
 
     if (did_use_sse2)
       {
-        /* clear SSE2 registers used by serpent-sse2 */
-        asm volatile (
-          "pxor %%xmm0, %%xmm0;\n"
-          "pxor %%xmm1, %%xmm1;\n"
-          "pxor %%xmm2, %%xmm2;\n"
-          "pxor %%xmm3, %%xmm3;\n"
-          "pxor %%xmm4, %%xmm4;\n"
-          "pxor %%xmm5, %%xmm5;\n"
-          "pxor %%xmm6, %%xmm6;\n"
-          "pxor %%xmm7, %%xmm7;\n"
-          "pxor %%xmm10, %%xmm10;\n"
-          "pxor %%xmm11, %%xmm11;\n"
-          "pxor %%xmm12, %%xmm12;\n"
-          "pxor %%xmm13, %%xmm13;\n"
-          :::);
-
         /* serpent-sse2 assembly code does not use stack */
         if (nblocks == 0)
           burn_stack_depth = 0;
@@ -1084,22 +1052,6 @@ _gcry_serpent_cfb_dec(void *context, unsigned char *iv,
 
     if (did_use_sse2)
       {
-        /* clear SSE2 registers used by serpent-sse2 */
-        asm volatile (
-          "pxor %%xmm0, %%xmm0;\n"
-          "pxor %%xmm1, %%xmm1;\n"
-          "pxor %%xmm2, %%xmm2;\n"
-          "pxor %%xmm3, %%xmm3;\n"
-          "pxor %%xmm4, %%xmm4;\n"
-          "pxor %%xmm5, %%xmm5;\n"
-          "pxor %%xmm6, %%xmm6;\n"
-          "pxor %%xmm7, %%xmm7;\n"
-          "pxor %%xmm10, %%xmm10;\n"
-          "pxor %%xmm11, %%xmm11;\n"
-          "pxor %%xmm12, %%xmm12;\n"
-          "pxor %%xmm13, %%xmm13;\n"
-          :::);
-
         /* serpent-sse2 assembly code does not use stack */
         if (nblocks == 0)
           burn_stack_depth = 0;