c/900: `gcc -O2' takes 30x as long to compile certain files
meyering@ascend.com
meyering@ascend.com
Mon Nov 27 01:56:00 GMT 2000
>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:
More information about the Gcc-bugs
mailing list