1 /* { dg-do compile } */ 2 /* { dg-options "-O2" } */ 3 4 typedef unsigned IPos; 5 typedef unsigned char uch; 6 extern uch window[]; 7 unsigned max_chain_length; 8 unsigned strstart; longest_match(IPos cur_match,int len,int best_len)9int longest_match(IPos cur_match, int len, int best_len) 10 { 11 unsigned chain_length = max_chain_length; 12 register uch *scan = window + strstart; 13 register uch *match; 14 register uch scan_end1 = scan[best_len-1]; 15 register uch scan_end = scan[best_len]; 16 do { 17 ; 18 match = window + cur_match; 19 if (match[best_len] != scan_end || 20 match[best_len-1] != scan_end1 || 21 *match != *scan || 22 *++match != scan[1]) continue; 23 best_len = len; 24 } while ( --chain_length != 0); 25 return best_len; 26 } 27