This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [PATCH] doloop_optimize miscompiles openssl


On Wed, 27 Sep 2000, Franz Sirl wrote:
> At 13:57 27.09.00, Michael Hayes wrote:
> >Franz Sirl writes:
> >  > BTW, I will try to turn both testcases in this thread into executable
> >  > testcases.
> >
> >This would be useful.  I haven't had a chance to look at this thread
> >yet; could you post me a simple testcase?
>
> The other testcase is at
> <http://gcc.gnu.org/ml/gcc-patches/2000-09/msg00999.html>. I converted this
> one into an non-PPC specific executable testcase too. I'll post my current
> patch and the executable testcases later today.

Here is my final patch (sorry for the delay, but I couldn't reach gcc.gnu.org 
yesterday anymore) and the executable testcases extracted from openssl.

GCC with the patch bootstraps fine and causes no regressions in the testsuite.

OK to commit the patch and the testcases?

Franz.

	* doloop.c (doloop_modify): Prevent delete_insn() from
	deleting too much.  Prefer loop->top over loop->start as
	target for the new JUMP insn.
	(doloop_valid_p): Ignore loop with exit_count != 0.

Index: gcc/doloop.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/doloop.c,v
retrieving revision 1.2
diff -u -p -r1.2 doloop.c
--- doloop.c	2000/08/14 20:55:11	1.2
+++ doloop.c	2000/09/28 17:02:42
@@ -281,7 +281,7 @@ doloop_valid_p (loop, jump_insn)
      statement within a loop will generate multiple loop exits.
      Another example of a loop that currently generates multiple exit
      targets is for (i = 0; i < (foo ? 8 : 4); i++) { }.  */
-  if (loop_info->has_multiple_exit_targets)
+  if (loop_info->has_multiple_exit_targets || loop->exit_count)
     {
       if (loop_dump_stream)
 	fprintf (loop_dump_stream,
@@ -415,13 +415,15 @@ doloop_modify (loop, iterations, iterati
       fputs (" iterations).", loop_dump_stream);
     }
 
+  /* Emit the label that will delimit the top of the loop.
+     This has to be done before the delete_insn call below, to prevent
+     delete_insn from deleting too much.  */
+  emit_label_after (start_label, loop->top ? loop->top : loop->start);
+  LABEL_NUSES (start_label)++;
+
   /* Discard original jump to continue loop.  The original compare
      result may still be live, so it cannot be discarded explicitly.  */
   delete_insn (jump_insn);
-
-  /* Emit the label that will delimit the start of the loop.  */
-  emit_label_after (start_label, loop->start);
-  LABEL_NUSES (start_label)++;
 
   counter_reg = XEXP (condition, 0);
   if (GET_CODE (counter_reg) == PLUS)
extern void abort (void);
extern void exit(int);

static unsigned long a[16] = {
   0x00000000, 0x00000001, 0x00000002, 0x00000003,
   0x00000004, 0x00000005, 0x00000006, 0x00000007,
   0x00000000, 0x10000000, 0x20000000, 0x30000000,
   0x40000000, 0x50000000, 0x60000000, 0x70000000,
};

static unsigned long r[16];

static unsigned long cmp_r[16] = {
   0x00000000, 0x00000002, 0x00000004, 0x00000006,
   0x00000008, 0x0000000a, 0x0000000c, 0x0000000e,
   0x00000000, 0x20000000, 0x40000000, 0x60000000,
   0x80000000, 0xa0000000, 0xc0000000, 0xe0000000,
};

unsigned long bn_add_words (unsigned long *r, unsigned long *a, unsigned long *b, int n)
{
   unsigned long long ll=0;

   if (n <= 0) return((unsigned long)0);

   for (;;)
     {
	ll+=(unsigned long long)a[0]+b[0];
	r[0]=(unsigned long)ll&(0xffffffffL);
	ll>>=32;
	if (--n <= 0) break;

	ll+=(unsigned long long)a[1]+b[1];
	r[1]=(unsigned long)ll&(0xffffffffL);
	ll>>=32;
	if (--n <= 0) break;

	ll+=(unsigned long long)a[2]+b[2];
	r[2]=(unsigned long)ll&(0xffffffffL);
	ll>>=32;
	if (--n <= 0) break;

	ll+=(unsigned long long)a[3]+b[3];
	r[3]=(unsigned long)ll&(0xffffffffL);
	ll>>=32;
	if (--n <= 0) break;

	a+=4;
	b+=4;
	r+=4;
     }

   return((unsigned long)ll);
}

int main ()
{
   int i = 0;
   bn_add_words (r, a, a, 16);
   
   do {
      if (r[i] != cmp_r[i]) abort();
      i++;
   } while (i < 16);
   exit (0);
}


extern void abort (void);
extern void exit(int);

typedef struct SHAstate_st
{
   unsigned int h0,h1,h2,h3,h4;
} SHA_CTX;

SHA_CTX ctx;

static char test[512];

void sha_block_host_order (SHA_CTX *c, const void *d, int num)
{
   const unsigned int *W=d;
   register unsigned long A,B,C,D,E,T;

   unsigned long XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
   XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;

   A=c->h0;
   B=c->h1;
   C=c->h2;
   D=c->h3;
   E=c->h4;

   for (;;)
     {
        (T)=W[ 0]+(E)+0x5a827999UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((((C)) ^ ((D))) & ((B))) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (E)=W[ 1]+(D)+0x5a827999UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((((B)) ^ ((C))) & ((A))) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (D)=W[ 2]+(C)+0x5a827999UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((((A)) ^ ((B))) & ((T))) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (C)=W[ 3]+(B)+0x5a827999UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((((T)) ^ ((A))) & ((E))) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (B)=W[ 4]+(A)+0x5a827999UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((((E)) ^ ((T))) & ((D))) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (A)=W[ 5]+(T)+0x5a827999UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((((D)) ^ ((E))) & ((C))) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (T)=W[ 6]+(E)+0x5a827999UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((((C)) ^ ((D))) & ((B))) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (E)=W[ 7]+(D)+0x5a827999UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((((B)) ^ ((C))) & ((A))) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (D)=W[ 8]+(C)+0x5a827999UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((((A)) ^ ((B))) & ((T))) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (C)=W[ 9]+(B)+0x5a827999UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((((T)) ^ ((A))) & ((E))) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (B)=W[10]+(A)+0x5a827999UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((((E)) ^ ((T))) & ((D))) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (A)=W[11]+(T)+0x5a827999UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((((D)) ^ ((E))) & ((C))) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (T)=W[12]+(E)+0x5a827999UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((((C)) ^ ((D))) & ((B))) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (E)=W[13]+(D)+0x5a827999UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((((B)) ^ ((C))) & ((A))) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (D)=W[14]+(C)+0x5a827999UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((((A)) ^ ((B))) & ((T))) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (C)=W[15]+(B)+0x5a827999UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((((T)) ^ ((A))) & ((E))) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;

        (XX0=(B)=(W[ 0]^W[ 2]^W[ 8]^W[13])); (B)+=(A)+0x5a827999UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((((E)) ^ ((T))) & ((D))) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX1=(A)=(W[ 1]^W[ 3]^W[ 9]^W[14])); (A)+=(T)+0x5a827999UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((((D)) ^ ((E))) & ((C))) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX2=(T)=(W[ 2]^W[ 4]^W[10]^W[15])); (T)+=(E)+0x5a827999UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((((C)) ^ ((D))) & ((B))) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX3=(E)=(W[ 3]^W[ 5]^W[11]^XX0)); (E)+=(D)+0x5a827999UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((((B)) ^ ((C))) & ((A))) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;

        (XX4=(D)=(W[ 4]^W[ 6]^W[12]^XX1)); (D)+=(C)+0x6ed9eba1UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((T)) ^ ((A)) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX5=(C)=(W[ 5]^W[ 7]^W[13]^XX2)); (C)+=(B)+0x6ed9eba1UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((E)) ^ ((T)) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX6=(B)=(W[ 6]^W[ 8]^W[14]^XX3)); (B)+=(A)+0x6ed9eba1UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((D)) ^ ((E)) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX7=(A)=(W[ 7]^W[ 9]^W[15]^XX4)); (A)+=(T)+0x6ed9eba1UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((C)) ^ ((D)) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX8=(T)=(W[ 8]^W[10]^XX0^XX5)); (T)+=(E)+0x6ed9eba1UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((B)) ^ ((C)) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX9=(E)=(W[ 9]^W[11]^XX1^XX6)); (E)+=(D)+0x6ed9eba1UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((A)) ^ ((B)) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (XX10=(D)=(W[10]^W[12]^XX2^XX7)); (D)+=(C)+0x6ed9eba1UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((T)) ^ ((A)) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX11=(C)=(W[11]^W[13]^XX3^XX8)); (C)+=(B)+0x6ed9eba1UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((E)) ^ ((T)) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX12=(B)=(W[12]^W[14]^XX4^XX9)); (B)+=(A)+0x6ed9eba1UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((D)) ^ ((E)) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX13=(A)=(W[13]^W[15]^XX5^XX10)); (A)+=(T)+0x6ed9eba1UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((C)) ^ ((D)) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX14=(T)=(W[14]^XX0^XX6^XX11)); (T)+=(E)+0x6ed9eba1UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((B)) ^ ((C)) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX15=(E)=(W[15]^XX1^XX7^XX12)); (E)+=(D)+0x6ed9eba1UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((A)) ^ ((B)) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;

        (XX0=(D)=(XX0^XX2^XX8^XX13)); (D)+=(C)+0x6ed9eba1UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((T)) ^ ((A)) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX1=(C)=(XX1^XX3^XX9^XX14)); (C)+=(B)+0x6ed9eba1UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((E)) ^ ((T)) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX2=(B)=(XX2^XX4^XX10^XX15)); (B)+=(A)+0x6ed9eba1UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((D)) ^ ((E)) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX3=(A)=(XX3^XX5^XX11^XX0)); (A)+=(T)+0x6ed9eba1UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((C)) ^ ((D)) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX4=(T)=(XX4^XX6^XX12^XX1)); (T)+=(E)+0x6ed9eba1UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((B)) ^ ((C)) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX5=(E)=(XX5^XX7^XX13^XX2)); (E)+=(D)+0x6ed9eba1UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((A)) ^ ((B)) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (XX6=(D)=(XX6^XX8^XX14^XX3)); (D)+=(C)+0x6ed9eba1UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((T)) ^ ((A)) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX7=(C)=(XX7^XX9^XX15^XX4)); (C)+=(B)+0x6ed9eba1UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((E)) ^ ((T)) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;

        (XX8=(B)=(XX8^XX10^XX0^XX5)); (B)+=(A)+0x8f1bbcdcUL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+((((D)) & ((E))) | ((((D))|((E))) & ((T)))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX9=(A)=(XX9^XX11^XX1^XX6)); (A)+=(T)+0x8f1bbcdcUL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+((((C)) & ((D))) | ((((C))|((D))) & ((E)))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX10=(T)=(XX10^XX12^XX2^XX7)); (T)+=(E)+0x8f1bbcdcUL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+((((B)) & ((C))) | ((((B))|((C))) & ((D)))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX11=(E)=(XX11^XX13^XX3^XX8)); (E)+=(D)+0x8f1bbcdcUL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+((((A)) & ((B))) | ((((A))|((B))) & ((C)))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (XX12=(D)=(XX12^XX14^XX4^XX9)); (D)+=(C)+0x8f1bbcdcUL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+((((T)) & ((A))) | ((((T))|((A))) & ((B)))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX13=(C)=(XX13^XX15^XX5^XX10)); (C)+=(B)+0x8f1bbcdcUL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+((((E)) & ((T))) | ((((E))|((T))) & ((A)))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX14=(B)=(XX14^XX0^XX6^XX11)); (B)+=(A)+0x8f1bbcdcUL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+((((D)) & ((E))) | ((((D))|((E))) & ((T)))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX15=(A)=(XX15^XX1^XX7^XX12)); (A)+=(T)+0x8f1bbcdcUL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+((((C)) & ((D))) | ((((C))|((D))) & ((E)))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX0=(T)=(XX0^XX2^XX8^XX13)); (T)+=(E)+0x8f1bbcdcUL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+((((B)) & ((C))) | ((((B))|((C))) & ((D)))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX1=(E)=(XX1^XX3^XX9^XX14)); (E)+=(D)+0x8f1bbcdcUL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+((((A)) & ((B))) | ((((A))|((B))) & ((C)))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (XX2=(D)=(XX2^XX4^XX10^XX15)); (D)+=(C)+0x8f1bbcdcUL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+((((T)) & ((A))) | ((((T))|((A))) & ((B)))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX3=(C)=(XX3^XX5^XX11^XX0)); (C)+=(B)+0x8f1bbcdcUL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+((((E)) & ((T))) | ((((E))|((T))) & ((A)))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX4=(B)=(XX4^XX6^XX12^XX1)); (B)+=(A)+0x8f1bbcdcUL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+((((D)) & ((E))) | ((((D))|((E))) & ((T)))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX5=(A)=(XX5^XX7^XX13^XX2)); (A)+=(T)+0x8f1bbcdcUL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+((((C)) & ((D))) | ((((C))|((D))) & ((E)))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX6=(T)=(XX6^XX8^XX14^XX3)); (T)+=(E)+0x8f1bbcdcUL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+((((B)) & ((C))) | ((((B))|((C))) & ((D)))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX7=(E)=(XX7^XX9^XX15^XX4)); (E)+=(D)+0x8f1bbcdcUL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+((((A)) & ((B))) | ((((A))|((B))) & ((C)))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (XX8=(D)=(XX8^XX10^XX0^XX5)); (D)+=(C)+0x8f1bbcdcUL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+((((T)) & ((A))) | ((((T))|((A))) & ((B)))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX9=(C)=(XX9^XX11^XX1^XX6)); (C)+=(B)+0x8f1bbcdcUL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+((((E)) & ((T))) | ((((E))|((T))) & ((A)))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX10=(B)=(XX10^XX12^XX2^XX7)); (B)+=(A)+0x8f1bbcdcUL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+((((D)) & ((E))) | ((((D))|((E))) & ((T)))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX11=(A)=(XX11^XX13^XX3^XX8)); (A)+=(T)+0x8f1bbcdcUL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+((((C)) & ((D))) | ((((C))|((D))) & ((E)))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;

        (XX12=(T)=(XX12^XX14^XX4^XX9)); (T)=XX12+(E)+0xca62c1d6UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((B)) ^ ((C)) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX13=(E)=(XX13^XX15^XX5^XX10)); (E)=XX13+(D)+0xca62c1d6UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((A)) ^ ((B)) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (XX14=(D)=(XX14^XX0^XX6^XX11)); (D)=XX14+(C)+0xca62c1d6UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((T)) ^ ((A)) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX15=(C)=(XX15^XX1^XX7^XX12)); (C)=XX15+(B)+0xca62c1d6UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((E)) ^ ((T)) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX0=(B)=(XX0^XX2^XX8^XX13)); (B)=XX0+(A)+0xca62c1d6UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((D)) ^ ((E)) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX1=(A)=(XX1^XX3^XX9^XX14)); (A)=XX1+(T)+0xca62c1d6UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((C)) ^ ((D)) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX2=(T)=(XX2^XX4^XX10^XX15)); (T)=XX2+(E)+0xca62c1d6UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((B)) ^ ((C)) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX3=(E)=(XX3^XX5^XX11^XX0)); (E)=XX3+(D)+0xca62c1d6UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((A)) ^ ((B)) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (XX4=(D)=(XX4^XX6^XX12^XX1)); (D)=XX4+(C)+0xca62c1d6UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((T)) ^ ((A)) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX5=(C)=(XX5^XX7^XX13^XX2)); (C)=XX5+(B)+0xca62c1d6UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((E)) ^ ((T)) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX6=(B)=(XX6^XX8^XX14^XX3)); (B)=XX6+(A)+0xca62c1d6UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((D)) ^ ((E)) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX7=(A)=(XX7^XX9^XX15^XX4)); (A)=XX7+(T)+0xca62c1d6UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((C)) ^ ((D)) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX8=(T)=(XX8^XX10^XX0^XX5)); (T)=XX8+(E)+0xca62c1d6UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((B)) ^ ((C)) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX9=(E)=(XX9^XX11^XX1^XX6)); (E)=XX9+(D)+0xca62c1d6UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((A)) ^ ((B)) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;
        (XX10=(D)=(XX10^XX12^XX2^XX7)); (D)=XX10+(C)+0xca62c1d6UL+((((E))<<(5))|((((E))&0xffffffff)>>(32-(5))))+(((T)) ^ ((A)) ^ ((B))); (T)=((((T))<<(30))|((((T))&0xffffffff)>>(32-(30))));;
        (XX11=(C)=(XX11^XX13^XX3^XX8)); (C)=XX11+(B)+0xca62c1d6UL+((((D))<<(5))|((((D))&0xffffffff)>>(32-(5))))+(((E)) ^ ((T)) ^ ((A))); (E)=((((E))<<(30))|((((E))&0xffffffff)>>(32-(30))));;
        (XX12=(B)=(XX12^XX14^XX4^XX9)); (B)=XX12+(A)+0xca62c1d6UL+((((C))<<(5))|((((C))&0xffffffff)>>(32-(5))))+(((D)) ^ ((E)) ^ ((T))); (D)=((((D))<<(30))|((((D))&0xffffffff)>>(32-(30))));;
        (XX13=(A)=(XX13^XX15^XX5^XX10)); (A)=XX13+(T)+0xca62c1d6UL+((((B))<<(5))|((((B))&0xffffffff)>>(32-(5))))+(((C)) ^ ((D)) ^ ((E))); (C)=((((C))<<(30))|((((C))&0xffffffff)>>(32-(30))));;
        (XX14=(T)=(XX14^XX0^XX6^XX11)); (T)=XX14+(E)+0xca62c1d6UL+((((A))<<(5))|((((A))&0xffffffff)>>(32-(5))))+(((B)) ^ ((C)) ^ ((D))); (B)=((((B))<<(30))|((((B))&0xffffffff)>>(32-(30))));;
        (XX15=(E)=(XX15^XX1^XX7^XX12)); (E)=XX15+(D)+0xca62c1d6UL+((((T))<<(5))|((((T))&0xffffffff)>>(32-(5))))+(((A)) ^ ((B)) ^ ((C))); (A)=((((A))<<(30))|((((A))&0xffffffff)>>(32-(30))));;

        c->h0=(c->h0+E)&0xffffffffL;
        c->h1=(c->h1+T)&0xffffffffL;
        c->h2=(c->h2+A)&0xffffffffL;
        c->h3=(c->h3+B)&0xffffffffL;
        c->h4=(c->h4+C)&0xffffffffL;

        if (--num <= 0) break;

        A=c->h0;
        B=c->h1;
        C=c->h2;
        D=c->h3;
        E=c->h4;

        W+=16;
     }
}

int main ()
{

   sha_block_host_order (&ctx, test, 8);

   if (ctx.h0 != 0xfd80957d) abort ();
   if (ctx.h1 != 0x1aa20d47) abort ();
   if (ctx.h2 != 0x9e177928) abort ();
   if (ctx.h3 != 0x85075582) abort ();
   if (ctx.h4 != 0x061ded80) abort ();
   exit (0);
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]