This is the mail archive of the gcc-prs@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]

c/900: `gcc -O2' takes 30x as long to compile certain files



>Number:         900
>Category:       c
>Synopsis:       `gcc -O2' takes 30x as long to compile certain files
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Nov 27 01:56:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Jim Meyering
>Release:        2.97 20001126 (experimental)
>Organization:
>Environment:
System: Linux ixi.eng.ascend.com 2.2.17 #3 SMP Wed Sep 20 19:24:00 CEST 2000 i686 unknown
Architecture: i686

	
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /mirror/d/egcs/configure --disable-nls --prefix=/p/p/gcc-2000-11-27.04h18
>Description:
The use of the following inline __asm__ directive seems to be what causes
gcc -O2 to take *far* longer to compile sha.c (below).

#if defined __GNUC__ && defined __i386__
static inline md5_uint32
rol(md5_uint32 x, int n)
{
  __asm__("roll %%cl,%0"
	  :"=r" (x)
	  :"0" (x),"c" (n));
  return x;
}
#else
# define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
#endif

If I use the macro instead, the file compiles in about 3 seconds.
With the inline function, it takes around 90 seconds.

Here's part of sha.c from the latest fileutils test release:
-------------------------------
typedef unsigned int size_t;
typedef unsigned int md5_uint32;

#if defined __GNUC__ && defined __i386__
static inline md5_uint32
rol (md5_uint32 x, int n)
{
  __asm__("roll %%cl,%0"
	  :"=r" (x)
	  :"0" (x),"c" (n));
  return x;
}
#else
# define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
#endif

struct sha_ctx
{
  md5_uint32 A;
  md5_uint32 B;
  md5_uint32 C;
  md5_uint32 D;
  md5_uint32 E;

  md5_uint32 total[2];
  md5_uint32 buflen;
  char buffer[128];
};

void
sha_process_block (const void *buffer, size_t len, struct sha_ctx *ctx)
{
  const md5_uint32 *words = buffer;
  size_t nwords = len / sizeof (md5_uint32);
  const md5_uint32 *endp = words + nwords;
  md5_uint32 x[16];
  md5_uint32 a = ctx->A;
  md5_uint32 b = ctx->B;
  md5_uint32 c = ctx->C;
  md5_uint32 d = ctx->D;
  md5_uint32 e = ctx->E;

  ctx->total[0] += len;
  if (ctx->total[0] < len)
    ++ctx->total[1];
  while (words < endp)
    {
      md5_uint32 tm;
      int t;

      for (t = 0; t < 16; t++)
        {
          x[t] = (((*words) << 24) | (((*words) & 0xff00) << 8) | (((*words) >> 8) & 0xff00) | ((*words) >> 24));
          words++;
        }

      do { e += rol( a, 5 ) + ( d ^ ( b & ( c ^ d ) ) ) + 0x5a827999L + x[ 0]; b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + ( c ^ ( a & ( b ^ c ) ) ) + 0x5a827999L + x[ 1]; a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + ( b ^ ( e & ( a ^ b ) ) ) + 0x5a827999L + x[ 2]; e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + ( a ^ ( d & ( e ^ a ) ) ) + 0x5a827999L + x[ 3]; d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + ( e ^ ( c & ( d ^ e ) ) ) + 0x5a827999L + x[ 4]; c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + ( d ^ ( b & ( c ^ d ) ) ) + 0x5a827999L + x[ 5]; b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + ( c ^ ( a & ( b ^ c ) ) ) + 0x5a827999L + x[ 6]; a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + ( b ^ ( e & ( a ^ b ) ) ) + 0x5a827999L + x[ 7]; e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + ( a ^ ( d & ( e ^ a ) ) ) + 0x5a827999L + x[ 8]; d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + ( e ^ ( c & ( d ^ e ) ) ) + 0x5a827999L + x[ 9]; c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + ( d ^ ( b & ( c ^ d ) ) ) + 0x5a827999L + x[10]; b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + ( c ^ ( a & ( b ^ c ) ) ) + 0x5a827999L + x[11]; a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + ( b ^ ( e & ( a ^ b ) ) ) + 0x5a827999L + x[12]; e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + ( a ^ ( d & ( e ^ a ) ) ) + 0x5a827999L + x[13]; d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + ( e ^ ( c & ( d ^ e ) ) ) + 0x5a827999L + x[14]; c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + ( d ^ ( b & ( c ^ d ) ) ) + 0x5a827999L + x[15]; b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + ( c ^ ( a & ( b ^ c ) ) ) + 0x5a827999L + ( tm = x[16&0x0f] ^ x[(16 -14)&0x0f] ^ x[(16 -8)&0x0f] ^ x[(16 -3)&0x0f] , (x[16&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + ( b ^ ( e & ( a ^ b ) ) ) + 0x5a827999L + ( tm = x[17&0x0f] ^ x[(17 -14)&0x0f] ^ x[(17 -8)&0x0f] ^ x[(17 -3)&0x0f] , (x[17&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + ( a ^ ( d & ( e ^ a ) ) ) + 0x5a827999L + ( tm = x[18&0x0f] ^ x[(18 -14)&0x0f] ^ x[(18 -8)&0x0f] ^ x[(18 -3)&0x0f] , (x[18&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + ( e ^ ( c & ( d ^ e ) ) ) + 0x5a827999L + ( tm = x[19&0x0f] ^ x[(19 -14)&0x0f] ^ x[(19 -8)&0x0f] ^ x[(19 -3)&0x0f] , (x[19&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + (b ^ c ^ d) + 0x6ed9eba1L + ( tm = x[20&0x0f] ^ x[(20 -14)&0x0f] ^ x[(20 -8)&0x0f] ^ x[(20 -3)&0x0f] , (x[20&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + (a ^ b ^ c) + 0x6ed9eba1L + ( tm = x[21&0x0f] ^ x[(21 -14)&0x0f] ^ x[(21 -8)&0x0f] ^ x[(21 -3)&0x0f] , (x[21&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + (e ^ a ^ b) + 0x6ed9eba1L + ( tm = x[22&0x0f] ^ x[(22 -14)&0x0f] ^ x[(22 -8)&0x0f] ^ x[(22 -3)&0x0f] , (x[22&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + (d ^ e ^ a) + 0x6ed9eba1L + ( tm = x[23&0x0f] ^ x[(23 -14)&0x0f] ^ x[(23 -8)&0x0f] ^ x[(23 -3)&0x0f] , (x[23&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + (c ^ d ^ e) + 0x6ed9eba1L + ( tm = x[24&0x0f] ^ x[(24 -14)&0x0f] ^ x[(24 -8)&0x0f] ^ x[(24 -3)&0x0f] , (x[24&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + (b ^ c ^ d) + 0x6ed9eba1L + ( tm = x[25&0x0f] ^ x[(25 -14)&0x0f] ^ x[(25 -8)&0x0f] ^ x[(25 -3)&0x0f] , (x[25&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + (a ^ b ^ c) + 0x6ed9eba1L + ( tm = x[26&0x0f] ^ x[(26 -14)&0x0f] ^ x[(26 -8)&0x0f] ^ x[(26 -3)&0x0f] , (x[26&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + (e ^ a ^ b) + 0x6ed9eba1L + ( tm = x[27&0x0f] ^ x[(27 -14)&0x0f] ^ x[(27 -8)&0x0f] ^ x[(27 -3)&0x0f] , (x[27&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + (d ^ e ^ a) + 0x6ed9eba1L + ( tm = x[28&0x0f] ^ x[(28 -14)&0x0f] ^ x[(28 -8)&0x0f] ^ x[(28 -3)&0x0f] , (x[28&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + (c ^ d ^ e) + 0x6ed9eba1L + ( tm = x[29&0x0f] ^ x[(29 -14)&0x0f] ^ x[(29 -8)&0x0f] ^ x[(29 -3)&0x0f] , (x[29&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + (b ^ c ^ d) + 0x6ed9eba1L + ( tm = x[30&0x0f] ^ x[(30 -14)&0x0f] ^ x[(30 -8)&0x0f] ^ x[(30 -3)&0x0f] , (x[30&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + (a ^ b ^ c) + 0x6ed9eba1L + ( tm = x[31&0x0f] ^ x[(31 -14)&0x0f] ^ x[(31 -8)&0x0f] ^ x[(31 -3)&0x0f] , (x[31&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + (e ^ a ^ b) + 0x6ed9eba1L + ( tm = x[32&0x0f] ^ x[(32 -14)&0x0f] ^ x[(32 -8)&0x0f] ^ x[(32 -3)&0x0f] , (x[32&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + (d ^ e ^ a) + 0x6ed9eba1L + ( tm = x[33&0x0f] ^ x[(33 -14)&0x0f] ^ x[(33 -8)&0x0f] ^ x[(33 -3)&0x0f] , (x[33&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + (c ^ d ^ e) + 0x6ed9eba1L + ( tm = x[34&0x0f] ^ x[(34 -14)&0x0f] ^ x[(34 -8)&0x0f] ^ x[(34 -3)&0x0f] , (x[34&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + (b ^ c ^ d) + 0x6ed9eba1L + ( tm = x[35&0x0f] ^ x[(35 -14)&0x0f] ^ x[(35 -8)&0x0f] ^ x[(35 -3)&0x0f] , (x[35&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + (a ^ b ^ c) + 0x6ed9eba1L + ( tm = x[36&0x0f] ^ x[(36 -14)&0x0f] ^ x[(36 -8)&0x0f] ^ x[(36 -3)&0x0f] , (x[36&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + (e ^ a ^ b) + 0x6ed9eba1L + ( tm = x[37&0x0f] ^ x[(37 -14)&0x0f] ^ x[(37 -8)&0x0f] ^ x[(37 -3)&0x0f] , (x[37&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + (d ^ e ^ a) + 0x6ed9eba1L + ( tm = x[38&0x0f] ^ x[(38 -14)&0x0f] ^ x[(38 -8)&0x0f] ^ x[(38 -3)&0x0f] , (x[38&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + (c ^ d ^ e) + 0x6ed9eba1L + ( tm = x[39&0x0f] ^ x[(39 -14)&0x0f] ^ x[(39 -8)&0x0f] ^ x[(39 -3)&0x0f] , (x[39&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + ( ( b & c ) | ( d & ( b | c ) ) ) + 0x8f1bbcdcL + ( tm = x[40&0x0f] ^ x[(40 -14)&0x0f] ^ x[(40 -8)&0x0f] ^ x[(40 -3)&0x0f] , (x[40&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + ( ( a & b ) | ( c & ( a | b ) ) ) + 0x8f1bbcdcL + ( tm = x[41&0x0f] ^ x[(41 -14)&0x0f] ^ x[(41 -8)&0x0f] ^ x[(41 -3)&0x0f] , (x[41&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + ( ( e & a ) | ( b & ( e | a ) ) ) + 0x8f1bbcdcL + ( tm = x[42&0x0f] ^ x[(42 -14)&0x0f] ^ x[(42 -8)&0x0f] ^ x[(42 -3)&0x0f] , (x[42&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + ( ( d & e ) | ( a & ( d | e ) ) ) + 0x8f1bbcdcL + ( tm = x[43&0x0f] ^ x[(43 -14)&0x0f] ^ x[(43 -8)&0x0f] ^ x[(43 -3)&0x0f] , (x[43&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + ( ( c & d ) | ( e & ( c | d ) ) ) + 0x8f1bbcdcL + ( tm = x[44&0x0f] ^ x[(44 -14)&0x0f] ^ x[(44 -8)&0x0f] ^ x[(44 -3)&0x0f] , (x[44&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + ( ( b & c ) | ( d & ( b | c ) ) ) + 0x8f1bbcdcL + ( tm = x[45&0x0f] ^ x[(45 -14)&0x0f] ^ x[(45 -8)&0x0f] ^ x[(45 -3)&0x0f] , (x[45&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + ( ( a & b ) | ( c & ( a | b ) ) ) + 0x8f1bbcdcL + ( tm = x[46&0x0f] ^ x[(46 -14)&0x0f] ^ x[(46 -8)&0x0f] ^ x[(46 -3)&0x0f] , (x[46&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + ( ( e & a ) | ( b & ( e | a ) ) ) + 0x8f1bbcdcL + ( tm = x[47&0x0f] ^ x[(47 -14)&0x0f] ^ x[(47 -8)&0x0f] ^ x[(47 -3)&0x0f] , (x[47&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + ( ( d & e ) | ( a & ( d | e ) ) ) + 0x8f1bbcdcL + ( tm = x[48&0x0f] ^ x[(48 -14)&0x0f] ^ x[(48 -8)&0x0f] ^ x[(48 -3)&0x0f] , (x[48&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + ( ( c & d ) | ( e & ( c | d ) ) ) + 0x8f1bbcdcL + ( tm = x[49&0x0f] ^ x[(49 -14)&0x0f] ^ x[(49 -8)&0x0f] ^ x[(49 -3)&0x0f] , (x[49&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + ( ( b & c ) | ( d & ( b | c ) ) ) + 0x8f1bbcdcL + ( tm = x[50&0x0f] ^ x[(50 -14)&0x0f] ^ x[(50 -8)&0x0f] ^ x[(50 -3)&0x0f] , (x[50&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + ( ( a & b ) | ( c & ( a | b ) ) ) + 0x8f1bbcdcL + ( tm = x[51&0x0f] ^ x[(51 -14)&0x0f] ^ x[(51 -8)&0x0f] ^ x[(51 -3)&0x0f] , (x[51&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + ( ( e & a ) | ( b & ( e | a ) ) ) + 0x8f1bbcdcL + ( tm = x[52&0x0f] ^ x[(52 -14)&0x0f] ^ x[(52 -8)&0x0f] ^ x[(52 -3)&0x0f] , (x[52&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + ( ( d & e ) | ( a & ( d | e ) ) ) + 0x8f1bbcdcL + ( tm = x[53&0x0f] ^ x[(53 -14)&0x0f] ^ x[(53 -8)&0x0f] ^ x[(53 -3)&0x0f] , (x[53&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + ( ( c & d ) | ( e & ( c | d ) ) ) + 0x8f1bbcdcL + ( tm = x[54&0x0f] ^ x[(54 -14)&0x0f] ^ x[(54 -8)&0x0f] ^ x[(54 -3)&0x0f] , (x[54&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + ( ( b & c ) | ( d & ( b | c ) ) ) + 0x8f1bbcdcL + ( tm = x[55&0x0f] ^ x[(55 -14)&0x0f] ^ x[(55 -8)&0x0f] ^ x[(55 -3)&0x0f] , (x[55&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + ( ( a & b ) | ( c & ( a | b ) ) ) + 0x8f1bbcdcL + ( tm = x[56&0x0f] ^ x[(56 -14)&0x0f] ^ x[(56 -8)&0x0f] ^ x[(56 -3)&0x0f] , (x[56&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + ( ( e & a ) | ( b & ( e | a ) ) ) + 0x8f1bbcdcL + ( tm = x[57&0x0f] ^ x[(57 -14)&0x0f] ^ x[(57 -8)&0x0f] ^ x[(57 -3)&0x0f] , (x[57&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + ( ( d & e ) | ( a & ( d | e ) ) ) + 0x8f1bbcdcL + ( tm = x[58&0x0f] ^ x[(58 -14)&0x0f] ^ x[(58 -8)&0x0f] ^ x[(58 -3)&0x0f] , (x[58&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + ( ( c & d ) | ( e & ( c | d ) ) ) + 0x8f1bbcdcL + ( tm = x[59&0x0f] ^ x[(59 -14)&0x0f] ^ x[(59 -8)&0x0f] ^ x[(59 -3)&0x0f] , (x[59&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + (b ^ c ^ d) + 0xca62c1d6L + ( tm = x[60&0x0f] ^ x[(60 -14)&0x0f] ^ x[(60 -8)&0x0f] ^ x[(60 -3)&0x0f] , (x[60&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + (a ^ b ^ c) + 0xca62c1d6L + ( tm = x[61&0x0f] ^ x[(61 -14)&0x0f] ^ x[(61 -8)&0x0f] ^ x[(61 -3)&0x0f] , (x[61&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + (e ^ a ^ b) + 0xca62c1d6L + ( tm = x[62&0x0f] ^ x[(62 -14)&0x0f] ^ x[(62 -8)&0x0f] ^ x[(62 -3)&0x0f] , (x[62&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + (d ^ e ^ a) + 0xca62c1d6L + ( tm = x[63&0x0f] ^ x[(63 -14)&0x0f] ^ x[(63 -8)&0x0f] ^ x[(63 -3)&0x0f] , (x[63&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + (c ^ d ^ e) + 0xca62c1d6L + ( tm = x[64&0x0f] ^ x[(64 -14)&0x0f] ^ x[(64 -8)&0x0f] ^ x[(64 -3)&0x0f] , (x[64&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + (b ^ c ^ d) + 0xca62c1d6L + ( tm = x[65&0x0f] ^ x[(65 -14)&0x0f] ^ x[(65 -8)&0x0f] ^ x[(65 -3)&0x0f] , (x[65&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + (a ^ b ^ c) + 0xca62c1d6L + ( tm = x[66&0x0f] ^ x[(66 -14)&0x0f] ^ x[(66 -8)&0x0f] ^ x[(66 -3)&0x0f] , (x[66&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + (e ^ a ^ b) + 0xca62c1d6L + ( tm = x[67&0x0f] ^ x[(67 -14)&0x0f] ^ x[(67 -8)&0x0f] ^ x[(67 -3)&0x0f] , (x[67&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + (d ^ e ^ a) + 0xca62c1d6L + ( tm = x[68&0x0f] ^ x[(68 -14)&0x0f] ^ x[(68 -8)&0x0f] ^ x[(68 -3)&0x0f] , (x[68&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + (c ^ d ^ e) + 0xca62c1d6L + ( tm = x[69&0x0f] ^ x[(69 -14)&0x0f] ^ x[(69 -8)&0x0f] ^ x[(69 -3)&0x0f] , (x[69&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + (b ^ c ^ d) + 0xca62c1d6L + ( tm = x[70&0x0f] ^ x[(70 -14)&0x0f] ^ x[(70 -8)&0x0f] ^ x[(70 -3)&0x0f] , (x[70&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + (a ^ b ^ c) + 0xca62c1d6L + ( tm = x[71&0x0f] ^ x[(71 -14)&0x0f] ^ x[(71 -8)&0x0f] ^ x[(71 -3)&0x0f] , (x[71&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + (e ^ a ^ b) + 0xca62c1d6L + ( tm = x[72&0x0f] ^ x[(72 -14)&0x0f] ^ x[(72 -8)&0x0f] ^ x[(72 -3)&0x0f] , (x[72&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + (d ^ e ^ a) + 0xca62c1d6L + ( tm = x[73&0x0f] ^ x[(73 -14)&0x0f] ^ x[(73 -8)&0x0f] ^ x[(73 -3)&0x0f] , (x[73&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + (c ^ d ^ e) + 0xca62c1d6L + ( tm = x[74&0x0f] ^ x[(74 -14)&0x0f] ^ x[(74 -8)&0x0f] ^ x[(74 -3)&0x0f] , (x[74&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);
      do { e += rol( a, 5 ) + (b ^ c ^ d) + 0xca62c1d6L + ( tm = x[75&0x0f] ^ x[(75 -14)&0x0f] ^ x[(75 -8)&0x0f] ^ x[(75 -3)&0x0f] , (x[75&0x0f] = rol(tm, 1)) ); b = rol( b, 30 ); } while(0);
      do { d += rol( e, 5 ) + (a ^ b ^ c) + 0xca62c1d6L + ( tm = x[76&0x0f] ^ x[(76 -14)&0x0f] ^ x[(76 -8)&0x0f] ^ x[(76 -3)&0x0f] , (x[76&0x0f] = rol(tm, 1)) ); a = rol( a, 30 ); } while(0);
      do { c += rol( d, 5 ) + (e ^ a ^ b) + 0xca62c1d6L + ( tm = x[77&0x0f] ^ x[(77 -14)&0x0f] ^ x[(77 -8)&0x0f] ^ x[(77 -3)&0x0f] , (x[77&0x0f] = rol(tm, 1)) ); e = rol( e, 30 ); } while(0);
      do { b += rol( c, 5 ) + (d ^ e ^ a) + 0xca62c1d6L + ( tm = x[78&0x0f] ^ x[(78 -14)&0x0f] ^ x[(78 -8)&0x0f] ^ x[(78 -3)&0x0f] , (x[78&0x0f] = rol(tm, 1)) ); d = rol( d, 30 ); } while(0);
      do { a += rol( b, 5 ) + (c ^ d ^ e) + 0xca62c1d6L + ( tm = x[79&0x0f] ^ x[(79 -14)&0x0f] ^ x[(79 -8)&0x0f] ^ x[(79 -3)&0x0f] , (x[79&0x0f] = rol(tm, 1)) ); c = rol( c, 30 ); } while(0);

      a = ctx->A += a;
      b = ctx->B += b;
      c = ctx->C += c;
      d = ctx->D += d;
      e = ctx->E += e;
    }
}
-------------------------------

>How-To-Repeat:
	
$ time gcc -c -O2 sha.c

real    1m37.035s
user    1m36.860s
sys     0m0.080s

$ time gcc -c -O sha.c

real    0m1.563s
user    0m1.540s
sys     0m0.020s

Repeat, but modify source so the macro is used instead of the inline function:

$ time gcc -c -O2 sha.c

real    0m2.522s
user    0m2.480s
sys     0m0.050s


FYI, it began taking much longer to compile that file with -O2
some time between Nov 11, (when it worked fine) and Nov 22.

>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:

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