This turned out to be very beneficial: For GCC 13, the codesize of ac3_output_frame_header went down from 4522B to 1247B and from 10762B to 9298B for eac3_output_frame_header. For Clang 17, the numbers went down from 3923B to 2477B and from 8338B to 6548B (always with -O3).
Unified · Split
| @@ -1638,6 +1638,8 @@ static void ac3_output_frame_header(AC3EncodeContext *s, PutBitContext *pb) · 1637 unmodified lines | ||
| 1638 | 1638 | { |
| 1639 | 1639 | AC3EncOptions *opt = &s->options; |
| 1640 | 1640 | |
| 1641 | + put_bits_assume_flushed(pb); | |
| 1642 | + | |
| 1641 | 1643 | put_bits(pb, 16, 0x0b77); /* frame header */ |
| 1642 | 1644 | put_bits(pb, 16, 0); /* crc1: will be filled later */ |
| 1643 | 1645 | put_bits(pb, 2, s->bit_alloc.sr_code); |
| @@ -135,6 +135,8 @@ static void eac3_output_frame_header(AC3EncodeContext *s, PutBitContext *pb) · 134 unmodified lines | ||
| 135 | 135 | int blk, ch; |
| 136 | 136 | AC3EncOptions *opt = &s->options; |
| 137 | 137 | |
| 138 | + put_bits_assume_flushed(pb); | |
| 139 | + | |
| 138 | 140 | put_bits(pb, 16, 0x0b77); /* sync word */ |
| 139 | 141 | |
| 140 | 142 | /* BSI header */ |