From: Dougall Johnson Date: Mon, 8 Dec 2025 04:11:52 +0000 (-0800) Subject: Reorder code struct fields for better access patterns X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47a17e9362699d21f989c056f0ee26c23e28bf9a;p=thirdparty%2Fzlib-ng.git Reorder code struct fields for better access patterns Place bits field before op field in code struct to optimize memory access. The bits field is accessed first in the hot path, so placing it at offset 0 may improve code generation on some architectures. --- diff --git a/inffixed_tbl.h b/inffixed_tbl.h index 7292fa06e..02b4ee687 100644 --- a/inffixed_tbl.h +++ b/inffixed_tbl.h @@ -8,87 +8,87 @@ */ static const code lenfix[512] = { - {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, - {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, - {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, - {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, - {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, - {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, - {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, - {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, - {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, - {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, - {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, - {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, - {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, - {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, - {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, - {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, - {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, - {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, - {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, - {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, - {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, - {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, - {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, - {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, - {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, - {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, - {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, - {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, - {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, - {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, - {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, - {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, - {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, - {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, - {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, - {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, - {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, - {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, - {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, - {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, - {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, - {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, - {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, - {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, - {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, - {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, - {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, - {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, - {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, - {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, - {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, - {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, - {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, - {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, - {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, - {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, - {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, - {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, - {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, - {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, - {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, - {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, - {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, - {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, - {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, - {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, - {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, - {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, - {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, - {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, - {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, - {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, - {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, - {0,9,255} + {7,96,0},{8,0,80},{8,0,16},{8,20,115},{7,18,31},{8,0,112},{8,0,48}, + {9,0,192},{7,16,10},{8,0,96},{8,0,32},{9,0,160},{8,0,0},{8,0,128}, + {8,0,64},{9,0,224},{7,16,6},{8,0,88},{8,0,24},{9,0,144},{7,19,59}, + {8,0,120},{8,0,56},{9,0,208},{7,17,17},{8,0,104},{8,0,40},{9,0,176}, + {8,0,8},{8,0,136},{8,0,72},{9,0,240},{7,16,4},{8,0,84},{8,0,20}, + {8,21,227},{7,19,43},{8,0,116},{8,0,52},{9,0,200},{7,17,13},{8,0,100}, + {8,0,36},{9,0,168},{8,0,4},{8,0,132},{8,0,68},{9,0,232},{7,16,8}, + {8,0,92},{8,0,28},{9,0,152},{7,20,83},{8,0,124},{8,0,60},{9,0,216}, + {7,18,23},{8,0,108},{8,0,44},{9,0,184},{8,0,12},{8,0,140},{8,0,76}, + {9,0,248},{7,16,3},{8,0,82},{8,0,18},{8,21,163},{7,19,35},{8,0,114}, + {8,0,50},{9,0,196},{7,17,11},{8,0,98},{8,0,34},{9,0,164},{8,0,2}, + {8,0,130},{8,0,66},{9,0,228},{7,16,7},{8,0,90},{8,0,26},{9,0,148}, + {7,20,67},{8,0,122},{8,0,58},{9,0,212},{7,18,19},{8,0,106},{8,0,42}, + {9,0,180},{8,0,10},{8,0,138},{8,0,74},{9,0,244},{7,16,5},{8,0,86}, + {8,0,22},{8,64,0},{7,19,51},{8,0,118},{8,0,54},{9,0,204},{7,17,15}, + {8,0,102},{8,0,38},{9,0,172},{8,0,6},{8,0,134},{8,0,70},{9,0,236}, + {7,16,9},{8,0,94},{8,0,30},{9,0,156},{7,20,99},{8,0,126},{8,0,62}, + {9,0,220},{7,18,27},{8,0,110},{8,0,46},{9,0,188},{8,0,14},{8,0,142}, + {8,0,78},{9,0,252},{7,96,0},{8,0,81},{8,0,17},{8,21,131},{7,18,31}, + {8,0,113},{8,0,49},{9,0,194},{7,16,10},{8,0,97},{8,0,33},{9,0,162}, + {8,0,1},{8,0,129},{8,0,65},{9,0,226},{7,16,6},{8,0,89},{8,0,25}, + {9,0,146},{7,19,59},{8,0,121},{8,0,57},{9,0,210},{7,17,17},{8,0,105}, + {8,0,41},{9,0,178},{8,0,9},{8,0,137},{8,0,73},{9,0,242},{7,16,4}, + {8,0,85},{8,0,21},{8,16,258},{7,19,43},{8,0,117},{8,0,53},{9,0,202}, + {7,17,13},{8,0,101},{8,0,37},{9,0,170},{8,0,5},{8,0,133},{8,0,69}, + {9,0,234},{7,16,8},{8,0,93},{8,0,29},{9,0,154},{7,20,83},{8,0,125}, + {8,0,61},{9,0,218},{7,18,23},{8,0,109},{8,0,45},{9,0,186},{8,0,13}, + {8,0,141},{8,0,77},{9,0,250},{7,16,3},{8,0,83},{8,0,19},{8,21,195}, + {7,19,35},{8,0,115},{8,0,51},{9,0,198},{7,17,11},{8,0,99},{8,0,35}, + {9,0,166},{8,0,3},{8,0,131},{8,0,67},{9,0,230},{7,16,7},{8,0,91}, + {8,0,27},{9,0,150},{7,20,67},{8,0,123},{8,0,59},{9,0,214},{7,18,19}, + {8,0,107},{8,0,43},{9,0,182},{8,0,11},{8,0,139},{8,0,75},{9,0,246}, + {7,16,5},{8,0,87},{8,0,23},{8,64,0},{7,19,51},{8,0,119},{8,0,55}, + {9,0,206},{7,17,15},{8,0,103},{8,0,39},{9,0,174},{8,0,7},{8,0,135}, + {8,0,71},{9,0,238},{7,16,9},{8,0,95},{8,0,31},{9,0,158},{7,20,99}, + {8,0,127},{8,0,63},{9,0,222},{7,18,27},{8,0,111},{8,0,47},{9,0,190}, + {8,0,15},{8,0,143},{8,0,79},{9,0,254},{7,96,0},{8,0,80},{8,0,16}, + {8,20,115},{7,18,31},{8,0,112},{8,0,48},{9,0,193},{7,16,10},{8,0,96}, + {8,0,32},{9,0,161},{8,0,0},{8,0,128},{8,0,64},{9,0,225},{7,16,6}, + {8,0,88},{8,0,24},{9,0,145},{7,19,59},{8,0,120},{8,0,56},{9,0,209}, + {7,17,17},{8,0,104},{8,0,40},{9,0,177},{8,0,8},{8,0,136},{8,0,72}, + {9,0,241},{7,16,4},{8,0,84},{8,0,20},{8,21,227},{7,19,43},{8,0,116}, + {8,0,52},{9,0,201},{7,17,13},{8,0,100},{8,0,36},{9,0,169},{8,0,4}, + {8,0,132},{8,0,68},{9,0,233},{7,16,8},{8,0,92},{8,0,28},{9,0,153}, + {7,20,83},{8,0,124},{8,0,60},{9,0,217},{7,18,23},{8,0,108},{8,0,44}, + {9,0,185},{8,0,12},{8,0,140},{8,0,76},{9,0,249},{7,16,3},{8,0,82}, + {8,0,18},{8,21,163},{7,19,35},{8,0,114},{8,0,50},{9,0,197},{7,17,11}, + {8,0,98},{8,0,34},{9,0,165},{8,0,2},{8,0,130},{8,0,66},{9,0,229}, + {7,16,7},{8,0,90},{8,0,26},{9,0,149},{7,20,67},{8,0,122},{8,0,58}, + {9,0,213},{7,18,19},{8,0,106},{8,0,42},{9,0,181},{8,0,10},{8,0,138}, + {8,0,74},{9,0,245},{7,16,5},{8,0,86},{8,0,22},{8,64,0},{7,19,51}, + {8,0,118},{8,0,54},{9,0,205},{7,17,15},{8,0,102},{8,0,38},{9,0,173}, + {8,0,6},{8,0,134},{8,0,70},{9,0,237},{7,16,9},{8,0,94},{8,0,30}, + {9,0,157},{7,20,99},{8,0,126},{8,0,62},{9,0,221},{7,18,27},{8,0,110}, + {8,0,46},{9,0,189},{8,0,14},{8,0,142},{8,0,78},{9,0,253},{7,96,0}, + {8,0,81},{8,0,17},{8,21,131},{7,18,31},{8,0,113},{8,0,49},{9,0,195}, + {7,16,10},{8,0,97},{8,0,33},{9,0,163},{8,0,1},{8,0,129},{8,0,65}, + {9,0,227},{7,16,6},{8,0,89},{8,0,25},{9,0,147},{7,19,59},{8,0,121}, + {8,0,57},{9,0,211},{7,17,17},{8,0,105},{8,0,41},{9,0,179},{8,0,9}, + {8,0,137},{8,0,73},{9,0,243},{7,16,4},{8,0,85},{8,0,21},{8,16,258}, + {7,19,43},{8,0,117},{8,0,53},{9,0,203},{7,17,13},{8,0,101},{8,0,37}, + {9,0,171},{8,0,5},{8,0,133},{8,0,69},{9,0,235},{7,16,8},{8,0,93}, + {8,0,29},{9,0,155},{7,20,83},{8,0,125},{8,0,61},{9,0,219},{7,18,23}, + {8,0,109},{8,0,45},{9,0,187},{8,0,13},{8,0,141},{8,0,77},{9,0,251}, + {7,16,3},{8,0,83},{8,0,19},{8,21,195},{7,19,35},{8,0,115},{8,0,51}, + {9,0,199},{7,17,11},{8,0,99},{8,0,35},{9,0,167},{8,0,3},{8,0,131}, + {8,0,67},{9,0,231},{7,16,7},{8,0,91},{8,0,27},{9,0,151},{7,20,67}, + {8,0,123},{8,0,59},{9,0,215},{7,18,19},{8,0,107},{8,0,43},{9,0,183}, + {8,0,11},{8,0,139},{8,0,75},{9,0,247},{7,16,5},{8,0,87},{8,0,23}, + {8,64,0},{7,19,51},{8,0,119},{8,0,55},{9,0,207},{7,17,15},{8,0,103}, + {8,0,39},{9,0,175},{8,0,7},{8,0,135},{8,0,71},{9,0,239},{7,16,9}, + {8,0,95},{8,0,31},{9,0,159},{7,20,99},{8,0,127},{8,0,63},{9,0,223}, + {7,18,27},{8,0,111},{8,0,47},{9,0,191},{8,0,15},{8,0,143},{8,0,79}, + {9,0,255} }; static const code distfix[32] = { - {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, - {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, - {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, - {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, - {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, - {22,5,193},{64,5,0} + {5,16,1},{5,23,257},{5,19,17},{5,27,4097},{5,17,5},{5,25,1025}, + {5,21,65},{5,29,16385},{5,16,3},{5,24,513},{5,20,33},{5,28,8193}, + {5,18,9},{5,26,2049},{5,22,129},{5,64,0},{5,16,2},{5,23,385}, + {5,19,25},{5,27,6145},{5,17,7},{5,25,1537},{5,21,97},{5,29,24577}, + {5,16,4},{5,24,769},{5,20,49},{5,28,12289},{5,18,13},{5,26,3073}, + {5,22,193},{5,64,0} }; diff --git a/inftrees.h b/inftrees.h index ad2be151f..a3d6421fe 100644 --- a/inftrees.h +++ b/inftrees.h @@ -25,8 +25,8 @@ of a literal, the base length or distance, or the offset from the current table to the next table. Each entry is four bytes. */ typedef struct { - unsigned char op; /* operation, extra bits, table bits */ unsigned char bits; /* bits in this part of the code */ + unsigned char op; /* operation, extra bits, table bits */ uint16_t val; /* offset in table or code value */ } code; diff --git a/tools/makefixed.c b/tools/makefixed.c index 7fe71e75e..13d4fa70d 100644 --- a/tools/makefixed.c +++ b/tools/makefixed.c @@ -61,8 +61,8 @@ void makefixed(void) { for (;;) { if ((low % 7) == 0) printf("\n "); - printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op, - state.lencode[low].bits, state.lencode[low].val); + printf("{%u,%u,%d}", state.lencode[low].bits, (low & 127) == 99 ? 64 : state.lencode[low].op, + state.lencode[low].val); if (++low == size) break; putchar(','); @@ -74,7 +74,7 @@ void makefixed(void) { for (;;) { if ((low % 6) == 0) printf("\n "); - printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, state.distcode[low].val); + printf("{%u,%u,%d}", state.distcode[low].bits, state.distcode[low].op, state.distcode[low].val); if (++low == size) break; putchar(',');