------- Additional Comments From steven at gcc dot gnu dot org 2005-01-27 01:36 ------- My first suspicion was the `register' keyword, but that's not it: -------------------------------------------------- extern unsigned int S[]; extern unsigned int state[]; unsigned int foo () { unsigned int t; int j; t=0; for (j=0; j<16; j+=4) { t = state[j + 0] ^= S[t]; t = state[j + 1] ^= S[t]; } return t; } -------------------------------------------------- --> -------------------------------------------------- foo: .LFB2: xorl %eax, %eax movl $4, %ecx movl $state, %edx .p2align 4,,7 .L2: mov %eax, %eax movl S(,%rax,4), %eax xorl (%rdx), %eax movl %eax, (%rdx) mov %eax, %eax <-- bah! movl S(,%rax,4), %eax xorl 4(%rdx), %eax movl %eax, 4(%rdx) addq $16, %rdx decl %ecx jne .L2 rep ; ret .LFE2: --------------------------------------------------
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17387