From: Denys Vlasenko Date: Mon, 18 Jan 2010 04:22:34 +0000 (+0100) Subject: diff: defeat gcc's optimization X-Git-Tag: 1_16_0~31 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=032bf6553346537cb02d0406c05548c8aa23c81f;p=oweals%2Fbusybox.git diff: defeat gcc's optimization Signed-off-by: Denys Vlasenko --- diff --git a/editors/diff.c b/editors/diff.c index af6917a03..b89bbc1dc 100644 --- a/editors/diff.c +++ b/editors/diff.c @@ -435,7 +435,10 @@ static int *create_J(FILE_and_pos_t ft[2], int nlen[2], off_t *ix[2]) tok = read_token(&ft[i], tok); if (!(tok & TOK_EMPTY)) { /* Hash algorithm taken from Robert Sedgewick, Algorithms in C, 3d ed., p 578. */ - hash = hash * 128 - hash + TOK2CHAR(tok); + /*hash = hash * 128 - hash + TOK2CHAR(tok); + * gcc insists on optimizing above to "hash * 127 + ...", thus... */ + unsigned o = hash - TOK2CHAR(tok); + hash = hash * 128 - o; /* we want SPEED here */ continue; } if (nlen[i]++ == sz) {