// Copyright 2023 The Wuffs Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

pri func decoder.decode_idct!(dst_buffer: slice base.u8, dst_stride: base.u64, b: base.u32[..= 9], q: base.u32[..= 3]) {
    // This method implements the same algorithm as libjpeg-turbo's jidctint.c.

    var bq0 : base.u32
    var bq2 : base.u32
    var bq4 : base.u32
    var bq6 : base.u32

    var ca : base.u32

    var cb2 : base.u32
    var cb6 : base.u32

    var ccp : base.u32
    var ccm : base.u32

    var cd0 : base.u32
    var cd1 : base.u32
    var cd2 : base.u32
    var cd3 : base.u32

    var bq1 : base.u32
    var bq3 : base.u32
    var bq5 : base.u32
    var bq7 : base.u32

    var ci51 : base.u32
    var ci53 : base.u32
    var ci71 : base.u32
    var ci73 : base.u32

    var cj : base.u32

    var ck1 : base.u32
    var ck3 : base.u32
    var ck5 : base.u32
    var ck7 : base.u32

    var cl51 : base.u32
    var cl73 : base.u32

    var in0 : base.u32
    var in2 : base.u32
    var in4 : base.u32
    var in6 : base.u32

    var ra : base.u32

    var rb2 : base.u32
    var rb6 : base.u32

    var rcp : base.u32
    var rcm : base.u32

    var rd0 : base.u32
    var rd1 : base.u32
    var rd2 : base.u32
    var rd3 : base.u32

    var in1 : base.u32
    var in3 : base.u32
    var in5 : base.u32
    var in7 : base.u32

    var ri51 : base.u32
    var ri53 : base.u32
    var ri71 : base.u32
    var ri73 : base.u32

    var rj : base.u32

    var rk1 : base.u32
    var rk3 : base.u32
    var rk5 : base.u32
    var rk7 : base.u32

    var rl51 : base.u32
    var rl73 : base.u32

    var intermediate : array[64] base.u32

    if 8 > args.dst_stride {
        return nothing
    }

    // -------- BEGIN generated by script/print-jpeg-idct-code.go

    // p0_298631336 = 0x098E =  2446
    // p0_390180644 = 0x0C7C =  3196
    // p0_541196100 = 0x1151 =  4433
    // p0_765366865 = 0x187E =  6270
    // p0_899976223 = 0x1CCD =  7373
    // p1_175875602 = 0x25A1 =  9633
    // p1_501321110 = 0x300B = 12299
    // p1_847759065 = 0x3B21 = 15137
    // p1_961570560 = 0x3EC5 = 16069
    // p2_053119869 = 0x41B3 = 16819
    // p2_562915447 = 0x5203 = 20995
    // p3_072711026 = 0x6254 = 25172
    //
    // m0_390180644 = 0xFFFFF384 = 4294964100
    // m0_899976223 = 0xFFFFE333 = 4294959923
    // m1_961570560 = 0xFFFFC13B = 4294951227
    // m2_562915447 = 0xFFFFADFD = 4294946301

    // ==== First pass, column 0.

    // Even rows.

    bq2 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x10]) ~mod* (this.quant_tables[args.q][0x10] as base.u32)
    bq6 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x30]) ~mod* (this.quant_tables[args.q][0x30] as base.u32)

    ca = (bq2 ~mod+ bq6) ~mod* 0x1151

    cb2 = ca ~mod+ (bq2 ~mod* 0x187E)
    cb6 = ca ~mod- (bq6 ~mod* 0x3B21)

    bq0 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x00]) ~mod* (this.quant_tables[args.q][0x00] as base.u32)
    bq4 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x20]) ~mod* (this.quant_tables[args.q][0x20] as base.u32)

    ccp = (bq0 ~mod+ bq4) ~mod<< 13
    ccm = (bq0 ~mod- bq4) ~mod<< 13

    cd0 = ccp ~mod+ cb2
    cd1 = ccm ~mod+ cb6
    cd2 = ccm ~mod- cb6
    cd3 = ccp ~mod- cb2

    // Odd rows.

    bq1 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x08]) ~mod* (this.quant_tables[args.q][0x08] as base.u32)
    bq3 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x18]) ~mod* (this.quant_tables[args.q][0x18] as base.u32)
    bq5 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x28]) ~mod* (this.quant_tables[args.q][0x28] as base.u32)
    bq7 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x38]) ~mod* (this.quant_tables[args.q][0x38] as base.u32)

    ci51 = bq5 ~mod+ bq1
    ci53 = bq5 ~mod+ bq3
    ci71 = bq7 ~mod+ bq1
    ci73 = bq7 ~mod+ bq3

    cj = (ci73 ~mod+ ci51) ~mod* 0x25A1

    ck1 = bq1 ~mod* 0x300B
    ck3 = bq3 ~mod* 0x6254
    ck5 = bq5 ~mod* 0x41B3
    ck7 = bq7 ~mod* 0x098E

    ci51 ~mod*= 0xFFFF_F384
    ci53 ~mod*= 0xFFFF_ADFD
    ci71 ~mod*= 0xFFFF_E333
    ci73 ~mod*= 0xFFFF_C13B

    cl51 = ci51 ~mod+ cj
    cl73 = ci73 ~mod+ cj

    ck1 ~mod+= ci71 ~mod+ cl51
    ck3 ~mod+= ci53 ~mod+ cl73
    ck5 ~mod+= ci53 ~mod+ cl51
    ck7 ~mod+= ci71 ~mod+ cl73

    // Combine rows.

    intermediate[0x00] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod+ ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x38] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod- ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x08] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod+ ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x30] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod- ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x10] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod+ ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x28] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod- ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x18] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod+ ck7) ~mod+ (1 << 10), n: 11)
    intermediate[0x20] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod- ck7) ~mod+ (1 << 10), n: 11)

    // ==== First pass, column 1.

    // Even rows.

    bq2 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x11]) ~mod* (this.quant_tables[args.q][0x11] as base.u32)
    bq6 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x31]) ~mod* (this.quant_tables[args.q][0x31] as base.u32)

    ca = (bq2 ~mod+ bq6) ~mod* 0x1151

    cb2 = ca ~mod+ (bq2 ~mod* 0x187E)
    cb6 = ca ~mod- (bq6 ~mod* 0x3B21)

    bq0 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x01]) ~mod* (this.quant_tables[args.q][0x01] as base.u32)
    bq4 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x21]) ~mod* (this.quant_tables[args.q][0x21] as base.u32)

    ccp = (bq0 ~mod+ bq4) ~mod<< 13
    ccm = (bq0 ~mod- bq4) ~mod<< 13

    cd0 = ccp ~mod+ cb2
    cd1 = ccm ~mod+ cb6
    cd2 = ccm ~mod- cb6
    cd3 = ccp ~mod- cb2

    // Odd rows.

    bq1 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x09]) ~mod* (this.quant_tables[args.q][0x09] as base.u32)
    bq3 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x19]) ~mod* (this.quant_tables[args.q][0x19] as base.u32)
    bq5 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x29]) ~mod* (this.quant_tables[args.q][0x29] as base.u32)
    bq7 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x39]) ~mod* (this.quant_tables[args.q][0x39] as base.u32)

    ci51 = bq5 ~mod+ bq1
    ci53 = bq5 ~mod+ bq3
    ci71 = bq7 ~mod+ bq1
    ci73 = bq7 ~mod+ bq3

    cj = (ci73 ~mod+ ci51) ~mod* 0x25A1

    ck1 = bq1 ~mod* 0x300B
    ck3 = bq3 ~mod* 0x6254
    ck5 = bq5 ~mod* 0x41B3
    ck7 = bq7 ~mod* 0x098E

    ci51 ~mod*= 0xFFFF_F384
    ci53 ~mod*= 0xFFFF_ADFD
    ci71 ~mod*= 0xFFFF_E333
    ci73 ~mod*= 0xFFFF_C13B

    cl51 = ci51 ~mod+ cj
    cl73 = ci73 ~mod+ cj

    ck1 ~mod+= ci71 ~mod+ cl51
    ck3 ~mod+= ci53 ~mod+ cl73
    ck5 ~mod+= ci53 ~mod+ cl51
    ck7 ~mod+= ci71 ~mod+ cl73

    // Combine rows.

    intermediate[0x01] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod+ ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x39] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod- ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x09] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod+ ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x31] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod- ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x11] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod+ ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x29] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod- ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x19] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod+ ck7) ~mod+ (1 << 10), n: 11)
    intermediate[0x21] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod- ck7) ~mod+ (1 << 10), n: 11)

    // ==== First pass, column 2.

    // Even rows.

    bq2 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x12]) ~mod* (this.quant_tables[args.q][0x12] as base.u32)
    bq6 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x32]) ~mod* (this.quant_tables[args.q][0x32] as base.u32)

    ca = (bq2 ~mod+ bq6) ~mod* 0x1151

    cb2 = ca ~mod+ (bq2 ~mod* 0x187E)
    cb6 = ca ~mod- (bq6 ~mod* 0x3B21)

    bq0 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x02]) ~mod* (this.quant_tables[args.q][0x02] as base.u32)
    bq4 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x22]) ~mod* (this.quant_tables[args.q][0x22] as base.u32)

    ccp = (bq0 ~mod+ bq4) ~mod<< 13
    ccm = (bq0 ~mod- bq4) ~mod<< 13

    cd0 = ccp ~mod+ cb2
    cd1 = ccm ~mod+ cb6
    cd2 = ccm ~mod- cb6
    cd3 = ccp ~mod- cb2

    // Odd rows.

    bq1 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x0A]) ~mod* (this.quant_tables[args.q][0x0A] as base.u32)
    bq3 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x1A]) ~mod* (this.quant_tables[args.q][0x1A] as base.u32)
    bq5 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x2A]) ~mod* (this.quant_tables[args.q][0x2A] as base.u32)
    bq7 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x3A]) ~mod* (this.quant_tables[args.q][0x3A] as base.u32)

    ci51 = bq5 ~mod+ bq1
    ci53 = bq5 ~mod+ bq3
    ci71 = bq7 ~mod+ bq1
    ci73 = bq7 ~mod+ bq3

    cj = (ci73 ~mod+ ci51) ~mod* 0x25A1

    ck1 = bq1 ~mod* 0x300B
    ck3 = bq3 ~mod* 0x6254
    ck5 = bq5 ~mod* 0x41B3
    ck7 = bq7 ~mod* 0x098E

    ci51 ~mod*= 0xFFFF_F384
    ci53 ~mod*= 0xFFFF_ADFD
    ci71 ~mod*= 0xFFFF_E333
    ci73 ~mod*= 0xFFFF_C13B

    cl51 = ci51 ~mod+ cj
    cl73 = ci73 ~mod+ cj

    ck1 ~mod+= ci71 ~mod+ cl51
    ck3 ~mod+= ci53 ~mod+ cl73
    ck5 ~mod+= ci53 ~mod+ cl51
    ck7 ~mod+= ci71 ~mod+ cl73

    // Combine rows.

    intermediate[0x02] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod+ ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x3A] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod- ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x0A] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod+ ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x32] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod- ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x12] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod+ ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x2A] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod- ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x1A] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod+ ck7) ~mod+ (1 << 10), n: 11)
    intermediate[0x22] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod- ck7) ~mod+ (1 << 10), n: 11)

    // ==== First pass, column 3.

    // Even rows.

    bq2 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x13]) ~mod* (this.quant_tables[args.q][0x13] as base.u32)
    bq6 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x33]) ~mod* (this.quant_tables[args.q][0x33] as base.u32)

    ca = (bq2 ~mod+ bq6) ~mod* 0x1151

    cb2 = ca ~mod+ (bq2 ~mod* 0x187E)
    cb6 = ca ~mod- (bq6 ~mod* 0x3B21)

    bq0 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x03]) ~mod* (this.quant_tables[args.q][0x03] as base.u32)
    bq4 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x23]) ~mod* (this.quant_tables[args.q][0x23] as base.u32)

    ccp = (bq0 ~mod+ bq4) ~mod<< 13
    ccm = (bq0 ~mod- bq4) ~mod<< 13

    cd0 = ccp ~mod+ cb2
    cd1 = ccm ~mod+ cb6
    cd2 = ccm ~mod- cb6
    cd3 = ccp ~mod- cb2

    // Odd rows.

    bq1 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x0B]) ~mod* (this.quant_tables[args.q][0x0B] as base.u32)
    bq3 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x1B]) ~mod* (this.quant_tables[args.q][0x1B] as base.u32)
    bq5 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x2B]) ~mod* (this.quant_tables[args.q][0x2B] as base.u32)
    bq7 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x3B]) ~mod* (this.quant_tables[args.q][0x3B] as base.u32)

    ci51 = bq5 ~mod+ bq1
    ci53 = bq5 ~mod+ bq3
    ci71 = bq7 ~mod+ bq1
    ci73 = bq7 ~mod+ bq3

    cj = (ci73 ~mod+ ci51) ~mod* 0x25A1

    ck1 = bq1 ~mod* 0x300B
    ck3 = bq3 ~mod* 0x6254
    ck5 = bq5 ~mod* 0x41B3
    ck7 = bq7 ~mod* 0x098E

    ci51 ~mod*= 0xFFFF_F384
    ci53 ~mod*= 0xFFFF_ADFD
    ci71 ~mod*= 0xFFFF_E333
    ci73 ~mod*= 0xFFFF_C13B

    cl51 = ci51 ~mod+ cj
    cl73 = ci73 ~mod+ cj

    ck1 ~mod+= ci71 ~mod+ cl51
    ck3 ~mod+= ci53 ~mod+ cl73
    ck5 ~mod+= ci53 ~mod+ cl51
    ck7 ~mod+= ci71 ~mod+ cl73

    // Combine rows.

    intermediate[0x03] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod+ ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x3B] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod- ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x0B] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod+ ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x33] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod- ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x13] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod+ ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x2B] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod- ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x1B] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod+ ck7) ~mod+ (1 << 10), n: 11)
    intermediate[0x23] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod- ck7) ~mod+ (1 << 10), n: 11)

    // ==== First pass, column 4.

    // Even rows.

    bq2 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x14]) ~mod* (this.quant_tables[args.q][0x14] as base.u32)
    bq6 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x34]) ~mod* (this.quant_tables[args.q][0x34] as base.u32)

    ca = (bq2 ~mod+ bq6) ~mod* 0x1151

    cb2 = ca ~mod+ (bq2 ~mod* 0x187E)
    cb6 = ca ~mod- (bq6 ~mod* 0x3B21)

    bq0 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x04]) ~mod* (this.quant_tables[args.q][0x04] as base.u32)
    bq4 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x24]) ~mod* (this.quant_tables[args.q][0x24] as base.u32)

    ccp = (bq0 ~mod+ bq4) ~mod<< 13
    ccm = (bq0 ~mod- bq4) ~mod<< 13

    cd0 = ccp ~mod+ cb2
    cd1 = ccm ~mod+ cb6
    cd2 = ccm ~mod- cb6
    cd3 = ccp ~mod- cb2

    // Odd rows.

    bq1 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x0C]) ~mod* (this.quant_tables[args.q][0x0C] as base.u32)
    bq3 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x1C]) ~mod* (this.quant_tables[args.q][0x1C] as base.u32)
    bq5 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x2C]) ~mod* (this.quant_tables[args.q][0x2C] as base.u32)
    bq7 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x3C]) ~mod* (this.quant_tables[args.q][0x3C] as base.u32)

    ci51 = bq5 ~mod+ bq1
    ci53 = bq5 ~mod+ bq3
    ci71 = bq7 ~mod+ bq1
    ci73 = bq7 ~mod+ bq3

    cj = (ci73 ~mod+ ci51) ~mod* 0x25A1

    ck1 = bq1 ~mod* 0x300B
    ck3 = bq3 ~mod* 0x6254
    ck5 = bq5 ~mod* 0x41B3
    ck7 = bq7 ~mod* 0x098E

    ci51 ~mod*= 0xFFFF_F384
    ci53 ~mod*= 0xFFFF_ADFD
    ci71 ~mod*= 0xFFFF_E333
    ci73 ~mod*= 0xFFFF_C13B

    cl51 = ci51 ~mod+ cj
    cl73 = ci73 ~mod+ cj

    ck1 ~mod+= ci71 ~mod+ cl51
    ck3 ~mod+= ci53 ~mod+ cl73
    ck5 ~mod+= ci53 ~mod+ cl51
    ck7 ~mod+= ci71 ~mod+ cl73

    // Combine rows.

    intermediate[0x04] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod+ ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x3C] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod- ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x0C] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod+ ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x34] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod- ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x14] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod+ ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x2C] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod- ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x1C] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod+ ck7) ~mod+ (1 << 10), n: 11)
    intermediate[0x24] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod- ck7) ~mod+ (1 << 10), n: 11)

    // ==== First pass, column 5.

    // Even rows.

    bq2 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x15]) ~mod* (this.quant_tables[args.q][0x15] as base.u32)
    bq6 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x35]) ~mod* (this.quant_tables[args.q][0x35] as base.u32)

    ca = (bq2 ~mod+ bq6) ~mod* 0x1151

    cb2 = ca ~mod+ (bq2 ~mod* 0x187E)
    cb6 = ca ~mod- (bq6 ~mod* 0x3B21)

    bq0 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x05]) ~mod* (this.quant_tables[args.q][0x05] as base.u32)
    bq4 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x25]) ~mod* (this.quant_tables[args.q][0x25] as base.u32)

    ccp = (bq0 ~mod+ bq4) ~mod<< 13
    ccm = (bq0 ~mod- bq4) ~mod<< 13

    cd0 = ccp ~mod+ cb2
    cd1 = ccm ~mod+ cb6
    cd2 = ccm ~mod- cb6
    cd3 = ccp ~mod- cb2

    // Odd rows.

    bq1 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x0D]) ~mod* (this.quant_tables[args.q][0x0D] as base.u32)
    bq3 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x1D]) ~mod* (this.quant_tables[args.q][0x1D] as base.u32)
    bq5 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x2D]) ~mod* (this.quant_tables[args.q][0x2D] as base.u32)
    bq7 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x3D]) ~mod* (this.quant_tables[args.q][0x3D] as base.u32)

    ci51 = bq5 ~mod+ bq1
    ci53 = bq5 ~mod+ bq3
    ci71 = bq7 ~mod+ bq1
    ci73 = bq7 ~mod+ bq3

    cj = (ci73 ~mod+ ci51) ~mod* 0x25A1

    ck1 = bq1 ~mod* 0x300B
    ck3 = bq3 ~mod* 0x6254
    ck5 = bq5 ~mod* 0x41B3
    ck7 = bq7 ~mod* 0x098E

    ci51 ~mod*= 0xFFFF_F384
    ci53 ~mod*= 0xFFFF_ADFD
    ci71 ~mod*= 0xFFFF_E333
    ci73 ~mod*= 0xFFFF_C13B

    cl51 = ci51 ~mod+ cj
    cl73 = ci73 ~mod+ cj

    ck1 ~mod+= ci71 ~mod+ cl51
    ck3 ~mod+= ci53 ~mod+ cl73
    ck5 ~mod+= ci53 ~mod+ cl51
    ck7 ~mod+= ci71 ~mod+ cl73

    // Combine rows.

    intermediate[0x05] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod+ ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x3D] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod- ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x0D] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod+ ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x35] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod- ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x15] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod+ ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x2D] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod- ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x1D] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod+ ck7) ~mod+ (1 << 10), n: 11)
    intermediate[0x25] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod- ck7) ~mod+ (1 << 10), n: 11)

    // ==== First pass, column 6.

    // Even rows.

    bq2 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x16]) ~mod* (this.quant_tables[args.q][0x16] as base.u32)
    bq6 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x36]) ~mod* (this.quant_tables[args.q][0x36] as base.u32)

    ca = (bq2 ~mod+ bq6) ~mod* 0x1151

    cb2 = ca ~mod+ (bq2 ~mod* 0x187E)
    cb6 = ca ~mod- (bq6 ~mod* 0x3B21)

    bq0 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x06]) ~mod* (this.quant_tables[args.q][0x06] as base.u32)
    bq4 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x26]) ~mod* (this.quant_tables[args.q][0x26] as base.u32)

    ccp = (bq0 ~mod+ bq4) ~mod<< 13
    ccm = (bq0 ~mod- bq4) ~mod<< 13

    cd0 = ccp ~mod+ cb2
    cd1 = ccm ~mod+ cb6
    cd2 = ccm ~mod- cb6
    cd3 = ccp ~mod- cb2

    // Odd rows.

    bq1 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x0E]) ~mod* (this.quant_tables[args.q][0x0E] as base.u32)
    bq3 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x1E]) ~mod* (this.quant_tables[args.q][0x1E] as base.u32)
    bq5 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x2E]) ~mod* (this.quant_tables[args.q][0x2E] as base.u32)
    bq7 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x3E]) ~mod* (this.quant_tables[args.q][0x3E] as base.u32)

    ci51 = bq5 ~mod+ bq1
    ci53 = bq5 ~mod+ bq3
    ci71 = bq7 ~mod+ bq1
    ci73 = bq7 ~mod+ bq3

    cj = (ci73 ~mod+ ci51) ~mod* 0x25A1

    ck1 = bq1 ~mod* 0x300B
    ck3 = bq3 ~mod* 0x6254
    ck5 = bq5 ~mod* 0x41B3
    ck7 = bq7 ~mod* 0x098E

    ci51 ~mod*= 0xFFFF_F384
    ci53 ~mod*= 0xFFFF_ADFD
    ci71 ~mod*= 0xFFFF_E333
    ci73 ~mod*= 0xFFFF_C13B

    cl51 = ci51 ~mod+ cj
    cl73 = ci73 ~mod+ cj

    ck1 ~mod+= ci71 ~mod+ cl51
    ck3 ~mod+= ci53 ~mod+ cl73
    ck5 ~mod+= ci53 ~mod+ cl51
    ck7 ~mod+= ci71 ~mod+ cl73

    // Combine rows.

    intermediate[0x06] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod+ ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x3E] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod- ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x0E] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod+ ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x36] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod- ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x16] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod+ ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x2E] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod- ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x1E] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod+ ck7) ~mod+ (1 << 10), n: 11)
    intermediate[0x26] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod- ck7) ~mod+ (1 << 10), n: 11)

    // ==== First pass, column 7.

    // Even rows.

    bq2 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x17]) ~mod* (this.quant_tables[args.q][0x17] as base.u32)
    bq6 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x37]) ~mod* (this.quant_tables[args.q][0x37] as base.u32)

    ca = (bq2 ~mod+ bq6) ~mod* 0x1151

    cb2 = ca ~mod+ (bq2 ~mod* 0x187E)
    cb6 = ca ~mod- (bq6 ~mod* 0x3B21)

    bq0 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x07]) ~mod* (this.quant_tables[args.q][0x07] as base.u32)
    bq4 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x27]) ~mod* (this.quant_tables[args.q][0x27] as base.u32)

    ccp = (bq0 ~mod+ bq4) ~mod<< 13
    ccm = (bq0 ~mod- bq4) ~mod<< 13

    cd0 = ccp ~mod+ cb2
    cd1 = ccm ~mod+ cb6
    cd2 = ccm ~mod- cb6
    cd3 = ccp ~mod- cb2

    // Odd rows.

    bq1 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x0F]) ~mod* (this.quant_tables[args.q][0x0F] as base.u32)
    bq3 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x1F]) ~mod* (this.quant_tables[args.q][0x1F] as base.u32)
    bq5 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x2F]) ~mod* (this.quant_tables[args.q][0x2F] as base.u32)
    bq7 = this.util.sign_extend_convert_u16_u32(a: this.mcu_blocks[args.b][0x3F]) ~mod* (this.quant_tables[args.q][0x3F] as base.u32)

    ci51 = bq5 ~mod+ bq1
    ci53 = bq5 ~mod+ bq3
    ci71 = bq7 ~mod+ bq1
    ci73 = bq7 ~mod+ bq3

    cj = (ci73 ~mod+ ci51) ~mod* 0x25A1

    ck1 = bq1 ~mod* 0x300B
    ck3 = bq3 ~mod* 0x6254
    ck5 = bq5 ~mod* 0x41B3
    ck7 = bq7 ~mod* 0x098E

    ci51 ~mod*= 0xFFFF_F384
    ci53 ~mod*= 0xFFFF_ADFD
    ci71 ~mod*= 0xFFFF_E333
    ci73 ~mod*= 0xFFFF_C13B

    cl51 = ci51 ~mod+ cj
    cl73 = ci73 ~mod+ cj

    ck1 ~mod+= ci71 ~mod+ cl51
    ck3 ~mod+= ci53 ~mod+ cl73
    ck5 ~mod+= ci53 ~mod+ cl51
    ck7 ~mod+= ci71 ~mod+ cl73

    // Combine rows.

    intermediate[0x07] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod+ ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x3F] = this.util.sign_extend_rshift_u32(a: (cd0 ~mod- ck1) ~mod+ (1 << 10), n: 11)
    intermediate[0x0F] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod+ ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x37] = this.util.sign_extend_rshift_u32(a: (cd1 ~mod- ck3) ~mod+ (1 << 10), n: 11)
    intermediate[0x17] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod+ ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x2F] = this.util.sign_extend_rshift_u32(a: (cd2 ~mod- ck5) ~mod+ (1 << 10), n: 11)
    intermediate[0x1F] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod+ ck7) ~mod+ (1 << 10), n: 11)
    intermediate[0x27] = this.util.sign_extend_rshift_u32(a: (cd3 ~mod- ck7) ~mod+ (1 << 10), n: 11)

    // ==== Second pass, row 0.

    // Even columns.

    in2 = intermediate[0x02]
    in6 = intermediate[0x06]

    ra = (in2 ~mod+ in6) ~mod* 0x1151

    rb2 = ra ~mod+ (in2 ~mod* 0x187E)
    rb6 = ra ~mod- (in6 ~mod* 0x3B21)

    in0 = intermediate[0x00]
    in4 = intermediate[0x04]

    rcp = (in0 ~mod+ in4) ~mod<< 13
    rcm = (in0 ~mod- in4) ~mod<< 13

    rd0 = rcp ~mod+ rb2
    rd1 = rcm ~mod+ rb6
    rd2 = rcm ~mod- rb6
    rd3 = rcp ~mod- rb2

    // Odd columns.

    in1 = intermediate[0x01]
    in3 = intermediate[0x03]
    in5 = intermediate[0x05]
    in7 = intermediate[0x07]

    ri51 = in5 ~mod+ in1
    ri53 = in5 ~mod+ in3
    ri71 = in7 ~mod+ in1
    ri73 = in7 ~mod+ in3

    rj = (ri73 ~mod+ ri51) ~mod* 0x25A1

    rk1 = in1 ~mod* 0x300B
    rk3 = in3 ~mod* 0x6254
    rk5 = in5 ~mod* 0x41B3
    rk7 = in7 ~mod* 0x098E

    ri51 ~mod*= 0xFFFF_F384
    ri53 ~mod*= 0xFFFF_ADFD
    ri71 ~mod*= 0xFFFF_E333
    ri73 ~mod*= 0xFFFF_C13B

    rl51 = ri51 ~mod+ rj
    rl73 = ri73 ~mod+ rj

    rk1 ~mod+= ri71 ~mod+ rl51
    rk3 ~mod+= ri53 ~mod+ rl73
    rk5 ~mod+= ri53 ~mod+ rl51
    rk7 ~mod+= ri71 ~mod+ rl73

    // Combine columns.

    if args.dst_stride > args.dst_buffer.length() {
        return nothing
    }
    assert 8 <= args.dst_buffer.length() via "a <= b: a <= c; c <= b"(c: args.dst_stride)

    args.dst_buffer[0] = BIAS_AND_CLAMP[(((rd0 ~mod+ rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[7] = BIAS_AND_CLAMP[(((rd0 ~mod- rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[1] = BIAS_AND_CLAMP[(((rd1 ~mod+ rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[6] = BIAS_AND_CLAMP[(((rd1 ~mod- rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[2] = BIAS_AND_CLAMP[(((rd2 ~mod+ rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[5] = BIAS_AND_CLAMP[(((rd2 ~mod- rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[3] = BIAS_AND_CLAMP[(((rd3 ~mod+ rk7) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[4] = BIAS_AND_CLAMP[(((rd3 ~mod- rk7) ~mod+ (1 << 17)) >> 18) & 1023]

    args.dst_buffer = args.dst_buffer[args.dst_stride ..]

    // ==== Second pass, row 1.

    // Even columns.

    in2 = intermediate[0x0A]
    in6 = intermediate[0x0E]

    ra = (in2 ~mod+ in6) ~mod* 0x1151

    rb2 = ra ~mod+ (in2 ~mod* 0x187E)
    rb6 = ra ~mod- (in6 ~mod* 0x3B21)

    in0 = intermediate[0x08]
    in4 = intermediate[0x0C]

    rcp = (in0 ~mod+ in4) ~mod<< 13
    rcm = (in0 ~mod- in4) ~mod<< 13

    rd0 = rcp ~mod+ rb2
    rd1 = rcm ~mod+ rb6
    rd2 = rcm ~mod- rb6
    rd3 = rcp ~mod- rb2

    // Odd columns.

    in1 = intermediate[0x09]
    in3 = intermediate[0x0B]
    in5 = intermediate[0x0D]
    in7 = intermediate[0x0F]

    ri51 = in5 ~mod+ in1
    ri53 = in5 ~mod+ in3
    ri71 = in7 ~mod+ in1
    ri73 = in7 ~mod+ in3

    rj = (ri73 ~mod+ ri51) ~mod* 0x25A1

    rk1 = in1 ~mod* 0x300B
    rk3 = in3 ~mod* 0x6254
    rk5 = in5 ~mod* 0x41B3
    rk7 = in7 ~mod* 0x098E

    ri51 ~mod*= 0xFFFF_F384
    ri53 ~mod*= 0xFFFF_ADFD
    ri71 ~mod*= 0xFFFF_E333
    ri73 ~mod*= 0xFFFF_C13B

    rl51 = ri51 ~mod+ rj
    rl73 = ri73 ~mod+ rj

    rk1 ~mod+= ri71 ~mod+ rl51
    rk3 ~mod+= ri53 ~mod+ rl73
    rk5 ~mod+= ri53 ~mod+ rl51
    rk7 ~mod+= ri71 ~mod+ rl73

    // Combine columns.

    if args.dst_stride > args.dst_buffer.length() {
        return nothing
    }
    assert 8 <= args.dst_buffer.length() via "a <= b: a <= c; c <= b"(c: args.dst_stride)

    args.dst_buffer[0] = BIAS_AND_CLAMP[(((rd0 ~mod+ rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[7] = BIAS_AND_CLAMP[(((rd0 ~mod- rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[1] = BIAS_AND_CLAMP[(((rd1 ~mod+ rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[6] = BIAS_AND_CLAMP[(((rd1 ~mod- rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[2] = BIAS_AND_CLAMP[(((rd2 ~mod+ rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[5] = BIAS_AND_CLAMP[(((rd2 ~mod- rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[3] = BIAS_AND_CLAMP[(((rd3 ~mod+ rk7) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[4] = BIAS_AND_CLAMP[(((rd3 ~mod- rk7) ~mod+ (1 << 17)) >> 18) & 1023]

    args.dst_buffer = args.dst_buffer[args.dst_stride ..]

    // ==== Second pass, row 2.

    // Even columns.

    in2 = intermediate[0x12]
    in6 = intermediate[0x16]

    ra = (in2 ~mod+ in6) ~mod* 0x1151

    rb2 = ra ~mod+ (in2 ~mod* 0x187E)
    rb6 = ra ~mod- (in6 ~mod* 0x3B21)

    in0 = intermediate[0x10]
    in4 = intermediate[0x14]

    rcp = (in0 ~mod+ in4) ~mod<< 13
    rcm = (in0 ~mod- in4) ~mod<< 13

    rd0 = rcp ~mod+ rb2
    rd1 = rcm ~mod+ rb6
    rd2 = rcm ~mod- rb6
    rd3 = rcp ~mod- rb2

    // Odd columns.

    in1 = intermediate[0x11]
    in3 = intermediate[0x13]
    in5 = intermediate[0x15]
    in7 = intermediate[0x17]

    ri51 = in5 ~mod+ in1
    ri53 = in5 ~mod+ in3
    ri71 = in7 ~mod+ in1
    ri73 = in7 ~mod+ in3

    rj = (ri73 ~mod+ ri51) ~mod* 0x25A1

    rk1 = in1 ~mod* 0x300B
    rk3 = in3 ~mod* 0x6254
    rk5 = in5 ~mod* 0x41B3
    rk7 = in7 ~mod* 0x098E

    ri51 ~mod*= 0xFFFF_F384
    ri53 ~mod*= 0xFFFF_ADFD
    ri71 ~mod*= 0xFFFF_E333
    ri73 ~mod*= 0xFFFF_C13B

    rl51 = ri51 ~mod+ rj
    rl73 = ri73 ~mod+ rj

    rk1 ~mod+= ri71 ~mod+ rl51
    rk3 ~mod+= ri53 ~mod+ rl73
    rk5 ~mod+= ri53 ~mod+ rl51
    rk7 ~mod+= ri71 ~mod+ rl73

    // Combine columns.

    if args.dst_stride > args.dst_buffer.length() {
        return nothing
    }
    assert 8 <= args.dst_buffer.length() via "a <= b: a <= c; c <= b"(c: args.dst_stride)

    args.dst_buffer[0] = BIAS_AND_CLAMP[(((rd0 ~mod+ rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[7] = BIAS_AND_CLAMP[(((rd0 ~mod- rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[1] = BIAS_AND_CLAMP[(((rd1 ~mod+ rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[6] = BIAS_AND_CLAMP[(((rd1 ~mod- rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[2] = BIAS_AND_CLAMP[(((rd2 ~mod+ rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[5] = BIAS_AND_CLAMP[(((rd2 ~mod- rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[3] = BIAS_AND_CLAMP[(((rd3 ~mod+ rk7) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[4] = BIAS_AND_CLAMP[(((rd3 ~mod- rk7) ~mod+ (1 << 17)) >> 18) & 1023]

    args.dst_buffer = args.dst_buffer[args.dst_stride ..]

    // ==== Second pass, row 3.

    // Even columns.

    in2 = intermediate[0x1A]
    in6 = intermediate[0x1E]

    ra = (in2 ~mod+ in6) ~mod* 0x1151

    rb2 = ra ~mod+ (in2 ~mod* 0x187E)
    rb6 = ra ~mod- (in6 ~mod* 0x3B21)

    in0 = intermediate[0x18]
    in4 = intermediate[0x1C]

    rcp = (in0 ~mod+ in4) ~mod<< 13
    rcm = (in0 ~mod- in4) ~mod<< 13

    rd0 = rcp ~mod+ rb2
    rd1 = rcm ~mod+ rb6
    rd2 = rcm ~mod- rb6
    rd3 = rcp ~mod- rb2

    // Odd columns.

    in1 = intermediate[0x19]
    in3 = intermediate[0x1B]
    in5 = intermediate[0x1D]
    in7 = intermediate[0x1F]

    ri51 = in5 ~mod+ in1
    ri53 = in5 ~mod+ in3
    ri71 = in7 ~mod+ in1
    ri73 = in7 ~mod+ in3

    rj = (ri73 ~mod+ ri51) ~mod* 0x25A1

    rk1 = in1 ~mod* 0x300B
    rk3 = in3 ~mod* 0x6254
    rk5 = in5 ~mod* 0x41B3
    rk7 = in7 ~mod* 0x098E

    ri51 ~mod*= 0xFFFF_F384
    ri53 ~mod*= 0xFFFF_ADFD
    ri71 ~mod*= 0xFFFF_E333
    ri73 ~mod*= 0xFFFF_C13B

    rl51 = ri51 ~mod+ rj
    rl73 = ri73 ~mod+ rj

    rk1 ~mod+= ri71 ~mod+ rl51
    rk3 ~mod+= ri53 ~mod+ rl73
    rk5 ~mod+= ri53 ~mod+ rl51
    rk7 ~mod+= ri71 ~mod+ rl73

    // Combine columns.

    if args.dst_stride > args.dst_buffer.length() {
        return nothing
    }
    assert 8 <= args.dst_buffer.length() via "a <= b: a <= c; c <= b"(c: args.dst_stride)

    args.dst_buffer[0] = BIAS_AND_CLAMP[(((rd0 ~mod+ rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[7] = BIAS_AND_CLAMP[(((rd0 ~mod- rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[1] = BIAS_AND_CLAMP[(((rd1 ~mod+ rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[6] = BIAS_AND_CLAMP[(((rd1 ~mod- rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[2] = BIAS_AND_CLAMP[(((rd2 ~mod+ rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[5] = BIAS_AND_CLAMP[(((rd2 ~mod- rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[3] = BIAS_AND_CLAMP[(((rd3 ~mod+ rk7) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[4] = BIAS_AND_CLAMP[(((rd3 ~mod- rk7) ~mod+ (1 << 17)) >> 18) & 1023]

    args.dst_buffer = args.dst_buffer[args.dst_stride ..]

    // ==== Second pass, row 4.

    // Even columns.

    in2 = intermediate[0x22]
    in6 = intermediate[0x26]

    ra = (in2 ~mod+ in6) ~mod* 0x1151

    rb2 = ra ~mod+ (in2 ~mod* 0x187E)
    rb6 = ra ~mod- (in6 ~mod* 0x3B21)

    in0 = intermediate[0x20]
    in4 = intermediate[0x24]

    rcp = (in0 ~mod+ in4) ~mod<< 13
    rcm = (in0 ~mod- in4) ~mod<< 13

    rd0 = rcp ~mod+ rb2
    rd1 = rcm ~mod+ rb6
    rd2 = rcm ~mod- rb6
    rd3 = rcp ~mod- rb2

    // Odd columns.

    in1 = intermediate[0x21]
    in3 = intermediate[0x23]
    in5 = intermediate[0x25]
    in7 = intermediate[0x27]

    ri51 = in5 ~mod+ in1
    ri53 = in5 ~mod+ in3
    ri71 = in7 ~mod+ in1
    ri73 = in7 ~mod+ in3

    rj = (ri73 ~mod+ ri51) ~mod* 0x25A1

    rk1 = in1 ~mod* 0x300B
    rk3 = in3 ~mod* 0x6254
    rk5 = in5 ~mod* 0x41B3
    rk7 = in7 ~mod* 0x098E

    ri51 ~mod*= 0xFFFF_F384
    ri53 ~mod*= 0xFFFF_ADFD
    ri71 ~mod*= 0xFFFF_E333
    ri73 ~mod*= 0xFFFF_C13B

    rl51 = ri51 ~mod+ rj
    rl73 = ri73 ~mod+ rj

    rk1 ~mod+= ri71 ~mod+ rl51
    rk3 ~mod+= ri53 ~mod+ rl73
    rk5 ~mod+= ri53 ~mod+ rl51
    rk7 ~mod+= ri71 ~mod+ rl73

    // Combine columns.

    if args.dst_stride > args.dst_buffer.length() {
        return nothing
    }
    assert 8 <= args.dst_buffer.length() via "a <= b: a <= c; c <= b"(c: args.dst_stride)

    args.dst_buffer[0] = BIAS_AND_CLAMP[(((rd0 ~mod+ rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[7] = BIAS_AND_CLAMP[(((rd0 ~mod- rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[1] = BIAS_AND_CLAMP[(((rd1 ~mod+ rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[6] = BIAS_AND_CLAMP[(((rd1 ~mod- rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[2] = BIAS_AND_CLAMP[(((rd2 ~mod+ rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[5] = BIAS_AND_CLAMP[(((rd2 ~mod- rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[3] = BIAS_AND_CLAMP[(((rd3 ~mod+ rk7) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[4] = BIAS_AND_CLAMP[(((rd3 ~mod- rk7) ~mod+ (1 << 17)) >> 18) & 1023]

    args.dst_buffer = args.dst_buffer[args.dst_stride ..]

    // ==== Second pass, row 5.

    // Even columns.

    in2 = intermediate[0x2A]
    in6 = intermediate[0x2E]

    ra = (in2 ~mod+ in6) ~mod* 0x1151

    rb2 = ra ~mod+ (in2 ~mod* 0x187E)
    rb6 = ra ~mod- (in6 ~mod* 0x3B21)

    in0 = intermediate[0x28]
    in4 = intermediate[0x2C]

    rcp = (in0 ~mod+ in4) ~mod<< 13
    rcm = (in0 ~mod- in4) ~mod<< 13

    rd0 = rcp ~mod+ rb2
    rd1 = rcm ~mod+ rb6
    rd2 = rcm ~mod- rb6
    rd3 = rcp ~mod- rb2

    // Odd columns.

    in1 = intermediate[0x29]
    in3 = intermediate[0x2B]
    in5 = intermediate[0x2D]
    in7 = intermediate[0x2F]

    ri51 = in5 ~mod+ in1
    ri53 = in5 ~mod+ in3
    ri71 = in7 ~mod+ in1
    ri73 = in7 ~mod+ in3

    rj = (ri73 ~mod+ ri51) ~mod* 0x25A1

    rk1 = in1 ~mod* 0x300B
    rk3 = in3 ~mod* 0x6254
    rk5 = in5 ~mod* 0x41B3
    rk7 = in7 ~mod* 0x098E

    ri51 ~mod*= 0xFFFF_F384
    ri53 ~mod*= 0xFFFF_ADFD
    ri71 ~mod*= 0xFFFF_E333
    ri73 ~mod*= 0xFFFF_C13B

    rl51 = ri51 ~mod+ rj
    rl73 = ri73 ~mod+ rj

    rk1 ~mod+= ri71 ~mod+ rl51
    rk3 ~mod+= ri53 ~mod+ rl73
    rk5 ~mod+= ri53 ~mod+ rl51
    rk7 ~mod+= ri71 ~mod+ rl73

    // Combine columns.

    if args.dst_stride > args.dst_buffer.length() {
        return nothing
    }
    assert 8 <= args.dst_buffer.length() via "a <= b: a <= c; c <= b"(c: args.dst_stride)

    args.dst_buffer[0] = BIAS_AND_CLAMP[(((rd0 ~mod+ rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[7] = BIAS_AND_CLAMP[(((rd0 ~mod- rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[1] = BIAS_AND_CLAMP[(((rd1 ~mod+ rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[6] = BIAS_AND_CLAMP[(((rd1 ~mod- rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[2] = BIAS_AND_CLAMP[(((rd2 ~mod+ rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[5] = BIAS_AND_CLAMP[(((rd2 ~mod- rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[3] = BIAS_AND_CLAMP[(((rd3 ~mod+ rk7) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[4] = BIAS_AND_CLAMP[(((rd3 ~mod- rk7) ~mod+ (1 << 17)) >> 18) & 1023]

    args.dst_buffer = args.dst_buffer[args.dst_stride ..]

    // ==== Second pass, row 6.

    // Even columns.

    in2 = intermediate[0x32]
    in6 = intermediate[0x36]

    ra = (in2 ~mod+ in6) ~mod* 0x1151

    rb2 = ra ~mod+ (in2 ~mod* 0x187E)
    rb6 = ra ~mod- (in6 ~mod* 0x3B21)

    in0 = intermediate[0x30]
    in4 = intermediate[0x34]

    rcp = (in0 ~mod+ in4) ~mod<< 13
    rcm = (in0 ~mod- in4) ~mod<< 13

    rd0 = rcp ~mod+ rb2
    rd1 = rcm ~mod+ rb6
    rd2 = rcm ~mod- rb6
    rd3 = rcp ~mod- rb2

    // Odd columns.

    in1 = intermediate[0x31]
    in3 = intermediate[0x33]
    in5 = intermediate[0x35]
    in7 = intermediate[0x37]

    ri51 = in5 ~mod+ in1
    ri53 = in5 ~mod+ in3
    ri71 = in7 ~mod+ in1
    ri73 = in7 ~mod+ in3

    rj = (ri73 ~mod+ ri51) ~mod* 0x25A1

    rk1 = in1 ~mod* 0x300B
    rk3 = in3 ~mod* 0x6254
    rk5 = in5 ~mod* 0x41B3
    rk7 = in7 ~mod* 0x098E

    ri51 ~mod*= 0xFFFF_F384
    ri53 ~mod*= 0xFFFF_ADFD
    ri71 ~mod*= 0xFFFF_E333
    ri73 ~mod*= 0xFFFF_C13B

    rl51 = ri51 ~mod+ rj
    rl73 = ri73 ~mod+ rj

    rk1 ~mod+= ri71 ~mod+ rl51
    rk3 ~mod+= ri53 ~mod+ rl73
    rk5 ~mod+= ri53 ~mod+ rl51
    rk7 ~mod+= ri71 ~mod+ rl73

    // Combine columns.

    if args.dst_stride > args.dst_buffer.length() {
        return nothing
    }
    assert 8 <= args.dst_buffer.length() via "a <= b: a <= c; c <= b"(c: args.dst_stride)

    args.dst_buffer[0] = BIAS_AND_CLAMP[(((rd0 ~mod+ rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[7] = BIAS_AND_CLAMP[(((rd0 ~mod- rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[1] = BIAS_AND_CLAMP[(((rd1 ~mod+ rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[6] = BIAS_AND_CLAMP[(((rd1 ~mod- rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[2] = BIAS_AND_CLAMP[(((rd2 ~mod+ rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[5] = BIAS_AND_CLAMP[(((rd2 ~mod- rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[3] = BIAS_AND_CLAMP[(((rd3 ~mod+ rk7) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[4] = BIAS_AND_CLAMP[(((rd3 ~mod- rk7) ~mod+ (1 << 17)) >> 18) & 1023]

    args.dst_buffer = args.dst_buffer[args.dst_stride ..]

    // ==== Second pass, row 7.

    // Even columns.

    in2 = intermediate[0x3A]
    in6 = intermediate[0x3E]

    ra = (in2 ~mod+ in6) ~mod* 0x1151

    rb2 = ra ~mod+ (in2 ~mod* 0x187E)
    rb6 = ra ~mod- (in6 ~mod* 0x3B21)

    in0 = intermediate[0x38]
    in4 = intermediate[0x3C]

    rcp = (in0 ~mod+ in4) ~mod<< 13
    rcm = (in0 ~mod- in4) ~mod<< 13

    rd0 = rcp ~mod+ rb2
    rd1 = rcm ~mod+ rb6
    rd2 = rcm ~mod- rb6
    rd3 = rcp ~mod- rb2

    // Odd columns.

    in1 = intermediate[0x39]
    in3 = intermediate[0x3B]
    in5 = intermediate[0x3D]
    in7 = intermediate[0x3F]

    ri51 = in5 ~mod+ in1
    ri53 = in5 ~mod+ in3
    ri71 = in7 ~mod+ in1
    ri73 = in7 ~mod+ in3

    rj = (ri73 ~mod+ ri51) ~mod* 0x25A1

    rk1 = in1 ~mod* 0x300B
    rk3 = in3 ~mod* 0x6254
    rk5 = in5 ~mod* 0x41B3
    rk7 = in7 ~mod* 0x098E

    ri51 ~mod*= 0xFFFF_F384
    ri53 ~mod*= 0xFFFF_ADFD
    ri71 ~mod*= 0xFFFF_E333
    ri73 ~mod*= 0xFFFF_C13B

    rl51 = ri51 ~mod+ rj
    rl73 = ri73 ~mod+ rj

    rk1 ~mod+= ri71 ~mod+ rl51
    rk3 ~mod+= ri53 ~mod+ rl73
    rk5 ~mod+= ri53 ~mod+ rl51
    rk7 ~mod+= ri71 ~mod+ rl73

    // Combine columns.

    if 8 > args.dst_buffer.length() {
        return nothing
    }

    args.dst_buffer[0] = BIAS_AND_CLAMP[(((rd0 ~mod+ rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[7] = BIAS_AND_CLAMP[(((rd0 ~mod- rk1) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[1] = BIAS_AND_CLAMP[(((rd1 ~mod+ rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[6] = BIAS_AND_CLAMP[(((rd1 ~mod- rk3) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[2] = BIAS_AND_CLAMP[(((rd2 ~mod+ rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[5] = BIAS_AND_CLAMP[(((rd2 ~mod- rk5) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[3] = BIAS_AND_CLAMP[(((rd3 ~mod+ rk7) ~mod+ (1 << 17)) >> 18) & 1023]
    args.dst_buffer[4] = BIAS_AND_CLAMP[(((rd3 ~mod- rk7) ~mod+ (1 << 17)) >> 18) & 1023]

    // -------- END   generated by script/print-jpeg-idct-code.go
}
