Coverage Report

Created: 2026-10-14 06:45

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libjxl/lib/jxl/dec_transforms-inl.h
Line
Count
Source
1
// Copyright (c) the JPEG XL Project Authors. All rights reserved.
2
//
3
// Use of this source code is governed by a BSD-style
4
// license that can be found in the LICENSE file.
5
6
#include <cstring>
7
8
#include "lib/jxl/base/compiler_specific.h"
9
#include "lib/jxl/frame_dimensions.h"
10
11
#if defined(LIB_JXL_DEC_TRANSFORMS_INL_H_) == defined(HWY_TARGET_TOGGLE)
12
#ifdef LIB_JXL_DEC_TRANSFORMS_INL_H_
13
#undef LIB_JXL_DEC_TRANSFORMS_INL_H_
14
#else
15
#define LIB_JXL_DEC_TRANSFORMS_INL_H_
16
#endif
17
18
#include <cstddef>
19
#include <hwy/highway.h>
20
21
#include "lib/jxl/ac_strategy.h"
22
#include "lib/jxl/dct-inl.h"
23
#include "lib/jxl/dct_scales.h"
24
HWY_BEFORE_NAMESPACE();
25
namespace jxl {
26
namespace HWY_NAMESPACE {
27
namespace {
28
29
// These templates are not found via ADL.
30
using hwy::HWY_NAMESPACE::MulAdd;
31
32
// Computes the lowest-frequency LF_ROWSxLF_COLS-sized square in output, which
33
// is a DCT_ROWS*DCT_COLS-sized DCT block, by doing a ROWS*COLS DCT on the
34
// input block.
35
template <size_t DCT_ROWS, size_t DCT_COLS, size_t LF_ROWS, size_t LF_COLS,
36
          size_t ROWS, size_t COLS>
37
JXL_INLINE void ReinterpretingDCT(const float* input, const size_t input_stride,
38
                                  float* output, const size_t output_stride,
39
                                  float* JXL_RESTRICT block,
40
1.85M
                                  float* JXL_RESTRICT scratch_space) {
41
1.85M
  static_assert(LF_ROWS == ROWS,
42
1.85M
                "ReinterpretingDCT should only be called with LF == N");
43
1.85M
  static_assert(LF_COLS == COLS,
44
1.85M
                "ReinterpretingDCT should only be called with LF == N");
45
1.85M
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
1.85M
                                 scratch_space);
47
1.85M
  if (ROWS < COLS) {
48
3.69M
    for (size_t y = 0; y < LF_ROWS; y++) {
49
5.52M
      for (size_t x = 0; x < LF_COLS; x++) {
50
3.67M
        output[y * output_stride + x] =
51
3.67M
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
3.67M
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
3.67M
      }
54
1.84M
    }
55
1.84M
  } else {
56
56.1k
    for (size_t y = 0; y < LF_COLS; y++) {
57
500k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
455k
        output[y * output_stride + x] =
59
455k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
455k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
455k
      }
62
45.1k
    }
63
10.9k
  }
64
1.85M
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
14.5k
                                  float* JXL_RESTRICT scratch_space) {
41
14.5k
  static_assert(LF_ROWS == ROWS,
42
14.5k
                "ReinterpretingDCT should only be called with LF == N");
43
14.5k
  static_assert(LF_COLS == COLS,
44
14.5k
                "ReinterpretingDCT should only be called with LF == N");
45
14.5k
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
14.5k
                                 scratch_space);
47
14.5k
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
14.5k
  } else {
56
29.4k
    for (size_t y = 0; y < LF_COLS; y++) {
57
44.6k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
29.6k
        output[y * output_stride + x] =
59
29.6k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
29.6k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
29.6k
      }
62
14.9k
    }
63
14.5k
  }
64
14.5k
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
1.83M
                                  float* JXL_RESTRICT scratch_space) {
41
1.83M
  static_assert(LF_ROWS == ROWS,
42
1.83M
                "ReinterpretingDCT should only be called with LF == N");
43
1.83M
  static_assert(LF_COLS == COLS,
44
1.83M
                "ReinterpretingDCT should only be called with LF == N");
45
1.83M
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
1.83M
                                 scratch_space);
47
1.84M
  if (ROWS < COLS) {
48
3.69M
    for (size_t y = 0; y < LF_ROWS; y++) {
49
5.52M
      for (size_t x = 0; x < LF_COLS; x++) {
50
3.67M
        output[y * output_stride + x] =
51
3.67M
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
3.67M
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
3.67M
      }
54
1.84M
    }
55
18.4E
  } else {
56
18.4E
    for (size_t y = 0; y < LF_COLS; y++) {
57
0
      for (size_t x = 0; x < LF_ROWS; x++) {
58
0
        output[y * output_stride + x] =
59
0
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
0
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
0
      }
62
0
    }
63
18.4E
  }
64
1.83M
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
423
                                  float* JXL_RESTRICT scratch_space) {
41
423
  static_assert(LF_ROWS == ROWS,
42
423
                "ReinterpretingDCT should only be called with LF == N");
43
423
  static_assert(LF_COLS == COLS,
44
423
                "ReinterpretingDCT should only be called with LF == N");
45
423
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
423
                                 scratch_space);
47
423
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
423
  } else {
56
1.26k
    for (size_t y = 0; y < LF_COLS; y++) {
57
2.53k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
1.69k
        output[y * output_stride + x] =
59
1.69k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
1.69k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
1.69k
      }
62
846
    }
63
423
  }
64
423
}
Unexecuted instantiation: dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
114
                                  float* JXL_RESTRICT scratch_space) {
41
114
  static_assert(LF_ROWS == ROWS,
42
114
                "ReinterpretingDCT should only be called with LF == N");
43
114
  static_assert(LF_COLS == COLS,
44
114
                "ReinterpretingDCT should only be called with LF == N");
45
114
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
114
                                 scratch_space);
47
114
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
114
  } else {
56
342
    for (size_t y = 0; y < LF_COLS; y++) {
57
1.14k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
912
        output[y * output_stride + x] =
59
912
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
912
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
912
      }
62
228
    }
63
114
  }
64
114
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
63
                                  float* JXL_RESTRICT scratch_space) {
41
63
  static_assert(LF_ROWS == ROWS,
42
63
                "ReinterpretingDCT should only be called with LF == N");
43
63
  static_assert(LF_COLS == COLS,
44
63
                "ReinterpretingDCT should only be called with LF == N");
45
63
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
63
                                 scratch_space);
47
63
  if (ROWS < COLS) {
48
189
    for (size_t y = 0; y < LF_ROWS; y++) {
49
630
      for (size_t x = 0; x < LF_COLS; x++) {
50
504
        output[y * output_stride + x] =
51
504
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
504
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
504
      }
54
126
    }
55
63
  } else {
56
0
    for (size_t y = 0; y < LF_COLS; y++) {
57
0
      for (size_t x = 0; x < LF_ROWS; x++) {
58
0
        output[y * output_stride + x] =
59
0
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
0
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
0
      }
62
0
    }
63
0
  }
64
63
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
57
                                  float* JXL_RESTRICT scratch_space) {
41
57
  static_assert(LF_ROWS == ROWS,
42
57
                "ReinterpretingDCT should only be called with LF == N");
43
57
  static_assert(LF_COLS == COLS,
44
57
                "ReinterpretingDCT should only be called with LF == N");
45
57
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
57
                                 scratch_space);
47
57
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
57
  } else {
56
285
    for (size_t y = 0; y < LF_COLS; y++) {
57
1.14k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
912
        output[y * output_stride + x] =
59
912
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
912
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
912
      }
62
228
    }
63
57
  }
64
57
}
Unexecuted instantiation: dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
624
                                  float* JXL_RESTRICT scratch_space) {
41
624
  static_assert(LF_ROWS == ROWS,
42
624
                "ReinterpretingDCT should only be called with LF == N");
43
624
  static_assert(LF_COLS == COLS,
44
624
                "ReinterpretingDCT should only be called with LF == N");
45
624
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
624
                                 scratch_space);
47
624
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
624
  } else {
56
5.61k
    for (size_t y = 0; y < LF_COLS; y++) {
57
44.8k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
39.8k
        output[y * output_stride + x] =
59
39.8k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
39.8k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
39.8k
      }
62
4.98k
    }
63
624
  }
64
624
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
138
                                  float* JXL_RESTRICT scratch_space) {
41
138
  static_assert(LF_ROWS == ROWS,
42
138
                "ReinterpretingDCT should only be called with LF == N");
43
138
  static_assert(LF_COLS == COLS,
44
138
                "ReinterpretingDCT should only be called with LF == N");
45
138
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
138
                                 scratch_space);
47
138
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
138
  } else {
56
1.24k
    for (size_t y = 0; y < LF_COLS; y++) {
57
18.7k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
17.6k
        output[y * output_stride + x] =
59
17.6k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
17.6k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
17.6k
      }
62
1.10k
    }
63
138
  }
64
138
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
3
                                  float* JXL_RESTRICT scratch_space) {
41
3
  static_assert(LF_ROWS == ROWS,
42
3
                "ReinterpretingDCT should only be called with LF == N");
43
3
  static_assert(LF_COLS == COLS,
44
3
                "ReinterpretingDCT should only be called with LF == N");
45
3
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
3
                                 scratch_space);
47
3
  if (ROWS < COLS) {
48
27
    for (size_t y = 0; y < LF_ROWS; y++) {
49
408
      for (size_t x = 0; x < LF_COLS; x++) {
50
384
        output[y * output_stride + x] =
51
384
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
384
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
384
      }
54
24
    }
55
3
  } else {
56
0
    for (size_t y = 0; y < LF_COLS; y++) {
57
0
      for (size_t x = 0; x < LF_ROWS; x++) {
58
0
        output[y * output_stride + x] =
59
0
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
0
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
0
      }
62
0
    }
63
0
  }
64
3
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
1.42k
                                  float* JXL_RESTRICT scratch_space) {
41
1.42k
  static_assert(LF_ROWS == ROWS,
42
1.42k
                "ReinterpretingDCT should only be called with LF == N");
43
1.42k
  static_assert(LF_COLS == COLS,
44
1.42k
                "ReinterpretingDCT should only be called with LF == N");
45
1.42k
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
1.42k
                                 scratch_space);
47
1.42k
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
1.42k
  } else {
56
24.2k
    for (size_t y = 0; y < LF_COLS; y++) {
57
387k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
364k
        output[y * output_stride + x] =
59
364k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
364k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
364k
      }
62
22.8k
    }
63
1.42k
  }
64
1.42k
}
Unexecuted instantiation: dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::ReinterpretingDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
65
66
template <size_t S>
67
39.6k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
39.6k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
39.6k
  static_assert(S % 2 == 0, "S should be even");
70
39.6k
  float temp[kDCTBlockSize];
71
39.6k
  constexpr size_t num_2x2 = S / 2;
72
132k
  for (size_t y = 0; y < num_2x2; y++) {
73
369k
    for (size_t x = 0; x < num_2x2; x++) {
74
277k
      float c00 = block[y * kBlockDim + x];
75
277k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
277k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
277k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
277k
      float r00 = c00 + c01 + c10 + c11;
79
277k
      float r01 = c00 + c01 - c10 - c11;
80
277k
      float r10 = c00 - c01 + c10 - c11;
81
277k
      float r11 = c00 - c01 - c10 + c11;
82
277k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
277k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
277k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
277k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
277k
    }
87
92.4k
  }
88
224k
  for (size_t y = 0; y < S; y++) {
89
1.29M
    for (size_t x = 0; x < S; x++) {
90
1.10M
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
1.10M
    }
92
184k
  }
93
39.6k
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<2ul>(float const*, unsigned long, float*)
Line
Count
Source
67
13.2k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
13.2k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
13.2k
  static_assert(S % 2 == 0, "S should be even");
70
13.2k
  float temp[kDCTBlockSize];
71
13.2k
  constexpr size_t num_2x2 = S / 2;
72
26.4k
  for (size_t y = 0; y < num_2x2; y++) {
73
26.4k
    for (size_t x = 0; x < num_2x2; x++) {
74
13.2k
      float c00 = block[y * kBlockDim + x];
75
13.2k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
13.2k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
13.2k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
13.2k
      float r00 = c00 + c01 + c10 + c11;
79
13.2k
      float r01 = c00 + c01 - c10 - c11;
80
13.2k
      float r10 = c00 - c01 + c10 - c11;
81
13.2k
      float r11 = c00 - c01 - c10 + c11;
82
13.2k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
13.2k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
13.2k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
13.2k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
13.2k
    }
87
13.2k
  }
88
39.6k
  for (size_t y = 0; y < S; y++) {
89
79.2k
    for (size_t x = 0; x < S; x++) {
90
52.8k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
52.8k
    }
92
26.4k
  }
93
13.2k
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Line
Count
Source
67
13.2k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
13.2k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
13.2k
  static_assert(S % 2 == 0, "S should be even");
70
13.2k
  float temp[kDCTBlockSize];
71
13.2k
  constexpr size_t num_2x2 = S / 2;
72
39.6k
  for (size_t y = 0; y < num_2x2; y++) {
73
79.2k
    for (size_t x = 0; x < num_2x2; x++) {
74
52.8k
      float c00 = block[y * kBlockDim + x];
75
52.8k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
52.8k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
52.8k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
52.8k
      float r00 = c00 + c01 + c10 + c11;
79
52.8k
      float r01 = c00 + c01 - c10 - c11;
80
52.8k
      float r10 = c00 - c01 + c10 - c11;
81
52.8k
      float r11 = c00 - c01 - c10 + c11;
82
52.8k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
52.8k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
52.8k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
52.8k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
52.8k
    }
87
26.4k
  }
88
66.0k
  for (size_t y = 0; y < S; y++) {
89
264k
    for (size_t x = 0; x < S; x++) {
90
211k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
211k
    }
92
52.8k
  }
93
13.2k
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
Line
Count
Source
67
13.2k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
13.2k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
13.2k
  static_assert(S % 2 == 0, "S should be even");
70
13.2k
  float temp[kDCTBlockSize];
71
13.2k
  constexpr size_t num_2x2 = S / 2;
72
66.0k
  for (size_t y = 0; y < num_2x2; y++) {
73
263k
    for (size_t x = 0; x < num_2x2; x++) {
74
211k
      float c00 = block[y * kBlockDim + x];
75
211k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
211k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
211k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
211k
      float r00 = c00 + c01 + c10 + c11;
79
211k
      float r01 = c00 + c01 - c10 - c11;
80
211k
      float r10 = c00 - c01 + c10 - c11;
81
211k
      float r11 = c00 - c01 - c10 + c11;
82
211k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
211k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
211k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
211k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
211k
    }
87
52.8k
  }
88
118k
  for (size_t y = 0; y < S; y++) {
89
950k
    for (size_t x = 0; x < S; x++) {
90
845k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
845k
    }
92
105k
  }
93
13.2k
}
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
94
95
6.96k
void AFVIDCT4x4(const float* JXL_RESTRICT coeffs, float* JXL_RESTRICT pixels) {
96
6.96k
  HWY_ALIGN static constexpr float k4x4AFVBasis[16][16] = {
97
6.96k
      {
98
6.96k
          0.25,
99
6.96k
          0.25,
100
6.96k
          0.25,
101
6.96k
          0.25,
102
6.96k
          0.25,
103
6.96k
          0.25,
104
6.96k
          0.25,
105
6.96k
          0.25,
106
6.96k
          0.25,
107
6.96k
          0.25,
108
6.96k
          0.25,
109
6.96k
          0.25,
110
6.96k
          0.25,
111
6.96k
          0.25,
112
6.96k
          0.25,
113
6.96k
          0.25,
114
6.96k
      },
115
6.96k
      {
116
6.96k
          0.876902929799142f,
117
6.96k
          0.2206518106944235f,
118
6.96k
          -0.10140050393753763f,
119
6.96k
          -0.1014005039375375f,
120
6.96k
          0.2206518106944236f,
121
6.96k
          -0.10140050393753777f,
122
6.96k
          -0.10140050393753772f,
123
6.96k
          -0.10140050393753763f,
124
6.96k
          -0.10140050393753758f,
125
6.96k
          -0.10140050393753769f,
126
6.96k
          -0.1014005039375375f,
127
6.96k
          -0.10140050393753768f,
128
6.96k
          -0.10140050393753768f,
129
6.96k
          -0.10140050393753759f,
130
6.96k
          -0.10140050393753763f,
131
6.96k
          -0.10140050393753741f,
132
6.96k
      },
133
6.96k
      {
134
6.96k
          0.0,
135
6.96k
          0.0,
136
6.96k
          0.40670075830260755f,
137
6.96k
          0.44444816619734445f,
138
6.96k
          0.0,
139
6.96k
          0.0,
140
6.96k
          0.19574399372042936f,
141
6.96k
          0.2929100136981264f,
142
6.96k
          -0.40670075830260716f,
143
6.96k
          -0.19574399372042872f,
144
6.96k
          0.0,
145
6.96k
          0.11379074460448091f,
146
6.96k
          -0.44444816619734384f,
147
6.96k
          -0.29291001369812636f,
148
6.96k
          -0.1137907446044814f,
149
6.96k
          0.0,
150
6.96k
      },
151
6.96k
      {
152
6.96k
          0.0,
153
6.96k
          0.0,
154
6.96k
          -0.21255748058288748f,
155
6.96k
          0.3085497062849767f,
156
6.96k
          0.0,
157
6.96k
          0.4706702258572536f,
158
6.96k
          -0.1621205195722993f,
159
6.96k
          0.0,
160
6.96k
          -0.21255748058287047f,
161
6.96k
          -0.16212051957228327f,
162
6.96k
          -0.47067022585725277f,
163
6.96k
          -0.1464291867126764f,
164
6.96k
          0.3085497062849487f,
165
6.96k
          0.0,
166
6.96k
          -0.14642918671266536f,
167
6.96k
          0.4251149611657548f,
168
6.96k
      },
169
6.96k
      {
170
6.96k
          0.0,
171
6.96k
          -0.7071067811865474f,
172
6.96k
          0.0,
173
6.96k
          0.0,
174
6.96k
          0.7071067811865476f,
175
6.96k
          0.0,
176
6.96k
          0.0,
177
6.96k
          0.0,
178
6.96k
          0.0,
179
6.96k
          0.0,
180
6.96k
          0.0,
181
6.96k
          0.0,
182
6.96k
          0.0,
183
6.96k
          0.0,
184
6.96k
          0.0,
185
6.96k
          0.0,
186
6.96k
      },
187
6.96k
      {
188
6.96k
          -0.4105377591765233f,
189
6.96k
          0.6235485373547691f,
190
6.96k
          -0.06435071657946274f,
191
6.96k
          -0.06435071657946266f,
192
6.96k
          0.6235485373547694f,
193
6.96k
          -0.06435071657946284f,
194
6.96k
          -0.0643507165794628f,
195
6.96k
          -0.06435071657946274f,
196
6.96k
          -0.06435071657946272f,
197
6.96k
          -0.06435071657946279f,
198
6.96k
          -0.06435071657946266f,
199
6.96k
          -0.06435071657946277f,
200
6.96k
          -0.06435071657946277f,
201
6.96k
          -0.06435071657946273f,
202
6.96k
          -0.06435071657946274f,
203
6.96k
          -0.0643507165794626f,
204
6.96k
      },
205
6.96k
      {
206
6.96k
          0.0,
207
6.96k
          0.0,
208
6.96k
          -0.4517556589999482f,
209
6.96k
          0.15854503551840063f,
210
6.96k
          0.0,
211
6.96k
          -0.04038515160822202f,
212
6.96k
          0.0074182263792423875f,
213
6.96k
          0.39351034269210167f,
214
6.96k
          -0.45175565899994635f,
215
6.96k
          0.007418226379244351f,
216
6.96k
          0.1107416575309343f,
217
6.96k
          0.08298163094882051f,
218
6.96k
          0.15854503551839705f,
219
6.96k
          0.3935103426921022f,
220
6.96k
          0.0829816309488214f,
221
6.96k
          -0.45175565899994796f,
222
6.96k
      },
223
6.96k
      {
224
6.96k
          0.0,
225
6.96k
          0.0,
226
6.96k
          -0.304684750724869f,
227
6.96k
          0.5112616136591823f,
228
6.96k
          0.0,
229
6.96k
          0.0,
230
6.96k
          -0.290480129728998f,
231
6.96k
          -0.06578701549142804f,
232
6.96k
          0.304684750724884f,
233
6.96k
          0.2904801297290076f,
234
6.96k
          0.0,
235
6.96k
          -0.23889773523344604f,
236
6.96k
          -0.5112616136592012f,
237
6.96k
          0.06578701549142545f,
238
6.96k
          0.23889773523345467f,
239
6.96k
          0.0,
240
6.96k
      },
241
6.96k
      {
242
6.96k
          0.0,
243
6.96k
          0.0,
244
6.96k
          0.3017929516615495f,
245
6.96k
          0.25792362796341184f,
246
6.96k
          0.0,
247
6.96k
          0.16272340142866204f,
248
6.96k
          0.09520022653475037f,
249
6.96k
          0.0,
250
6.96k
          0.3017929516615503f,
251
6.96k
          0.09520022653475055f,
252
6.96k
          -0.16272340142866173f,
253
6.96k
          -0.35312385449816297f,
254
6.96k
          0.25792362796341295f,
255
6.96k
          0.0,
256
6.96k
          -0.3531238544981624f,
257
6.96k
          -0.6035859033230976f,
258
6.96k
      },
259
6.96k
      {
260
6.96k
          0.0,
261
6.96k
          0.0,
262
6.96k
          0.40824829046386274f,
263
6.96k
          0.0,
264
6.96k
          0.0,
265
6.96k
          0.0,
266
6.96k
          0.0,
267
6.96k
          -0.4082482904638628f,
268
6.96k
          -0.4082482904638635f,
269
6.96k
          0.0,
270
6.96k
          0.0,
271
6.96k
          -0.40824829046386296f,
272
6.96k
          0.0,
273
6.96k
          0.4082482904638634f,
274
6.96k
          0.408248290463863f,
275
6.96k
          0.0,
276
6.96k
      },
277
6.96k
      {
278
6.96k
          0.0,
279
6.96k
          0.0,
280
6.96k
          0.1747866975480809f,
281
6.96k
          0.0812611176717539f,
282
6.96k
          0.0,
283
6.96k
          0.0,
284
6.96k
          -0.3675398009862027f,
285
6.96k
          -0.307882213957909f,
286
6.96k
          -0.17478669754808135f,
287
6.96k
          0.3675398009862011f,
288
6.96k
          0.0,
289
6.96k
          0.4826689115059883f,
290
6.96k
          -0.08126111767175039f,
291
6.96k
          0.30788221395790305f,
292
6.96k
          -0.48266891150598584f,
293
6.96k
          0.0,
294
6.96k
      },
295
6.96k
      {
296
6.96k
          0.0,
297
6.96k
          0.0,
298
6.96k
          -0.21105601049335784f,
299
6.96k
          0.18567180916109802f,
300
6.96k
          0.0,
301
6.96k
          0.0,
302
6.96k
          0.49215859013738733f,
303
6.96k
          -0.38525013709251915f,
304
6.96k
          0.21105601049335806f,
305
6.96k
          -0.49215859013738905f,
306
6.96k
          0.0,
307
6.96k
          0.17419412659916217f,
308
6.96k
          -0.18567180916109904f,
309
6.96k
          0.3852501370925211f,
310
6.96k
          -0.1741941265991621f,
311
6.96k
          0.0,
312
6.96k
      },
313
6.96k
      {
314
6.96k
          0.0,
315
6.96k
          0.0,
316
6.96k
          -0.14266084808807264f,
317
6.96k
          -0.3416446842253372f,
318
6.96k
          0.0,
319
6.96k
          0.7367497537172237f,
320
6.96k
          0.24627107722075148f,
321
6.96k
          -0.08574019035519306f,
322
6.96k
          -0.14266084808807344f,
323
6.96k
          0.24627107722075137f,
324
6.96k
          0.14883399227113567f,
325
6.96k
          -0.04768680350229251f,
326
6.96k
          -0.3416446842253373f,
327
6.96k
          -0.08574019035519267f,
328
6.96k
          -0.047686803502292804f,
329
6.96k
          -0.14266084808807242f,
330
6.96k
      },
331
6.96k
      {
332
6.96k
          0.0,
333
6.96k
          0.0,
334
6.96k
          -0.13813540350758585f,
335
6.96k
          0.3302282550303788f,
336
6.96k
          0.0,
337
6.96k
          0.08755115000587084f,
338
6.96k
          -0.07946706605909573f,
339
6.96k
          -0.4613374887461511f,
340
6.96k
          -0.13813540350758294f,
341
6.96k
          -0.07946706605910261f,
342
6.96k
          0.49724647109535086f,
343
6.96k
          0.12538059448563663f,
344
6.96k
          0.3302282550303805f,
345
6.96k
          -0.4613374887461554f,
346
6.96k
          0.12538059448564315f,
347
6.96k
          -0.13813540350758452f,
348
6.96k
      },
349
6.96k
      {
350
6.96k
          0.0,
351
6.96k
          0.0,
352
6.96k
          -0.17437602599651067f,
353
6.96k
          0.0702790691196284f,
354
6.96k
          0.0,
355
6.96k
          -0.2921026642334881f,
356
6.96k
          0.3623817333531167f,
357
6.96k
          0.0,
358
6.96k
          -0.1743760259965108f,
359
6.96k
          0.36238173335311646f,
360
6.96k
          0.29210266423348785f,
361
6.96k
          -0.4326608024727445f,
362
6.96k
          0.07027906911962818f,
363
6.96k
          0.0,
364
6.96k
          -0.4326608024727457f,
365
6.96k
          0.34875205199302267f,
366
6.96k
      },
367
6.96k
      {
368
6.96k
          0.0,
369
6.96k
          0.0,
370
6.96k
          0.11354987314994337f,
371
6.96k
          -0.07417504595810355f,
372
6.96k
          0.0,
373
6.96k
          0.19402893032594343f,
374
6.96k
          -0.435190496523228f,
375
6.96k
          0.21918684838857466f,
376
6.96k
          0.11354987314994257f,
377
6.96k
          -0.4351904965232251f,
378
6.96k
          0.5550443808910661f,
379
6.96k
          -0.25468277124066463f,
380
6.96k
          -0.07417504595810233f,
381
6.96k
          0.2191868483885728f,
382
6.96k
          -0.25468277124066413f,
383
6.96k
          0.1135498731499429f,
384
6.96k
      },
385
6.96k
  };
386
387
6.96k
  const HWY_CAPPED(float, 16) d;
388
34.8k
  for (size_t i = 0; i < 16; i += Lanes(d)) {
389
27.8k
    auto pixel = Zero(d);
390
473k
    for (size_t j = 0; j < 16; j++) {
391
445k
      auto cf = Set(d, coeffs[j]);
392
445k
      auto basis = Load(d, k4x4AFVBasis[j] + i);
393
445k
      pixel = MulAdd(cf, basis, pixel);
394
445k
    }
395
27.8k
    Store(pixel, d, pixels + i);
396
27.8k
  }
397
6.96k
}
Unexecuted instantiation: enc_group.cc:jxl::N_SSE2::(anonymous namespace)::AFVIDCT4x4(float const*, float*)
dec_group.cc:jxl::N_SSE2::(anonymous namespace)::AFVIDCT4x4(float const*, float*)
Line
Count
Source
95
6.96k
void AFVIDCT4x4(const float* JXL_RESTRICT coeffs, float* JXL_RESTRICT pixels) {
96
6.96k
  HWY_ALIGN static constexpr float k4x4AFVBasis[16][16] = {
97
6.96k
      {
98
6.96k
          0.25,
99
6.96k
          0.25,
100
6.96k
          0.25,
101
6.96k
          0.25,
102
6.96k
          0.25,
103
6.96k
          0.25,
104
6.96k
          0.25,
105
6.96k
          0.25,
106
6.96k
          0.25,
107
6.96k
          0.25,
108
6.96k
          0.25,
109
6.96k
          0.25,
110
6.96k
          0.25,
111
6.96k
          0.25,
112
6.96k
          0.25,
113
6.96k
          0.25,
114
6.96k
      },
115
6.96k
      {
116
6.96k
          0.876902929799142f,
117
6.96k
          0.2206518106944235f,
118
6.96k
          -0.10140050393753763f,
119
6.96k
          -0.1014005039375375f,
120
6.96k
          0.2206518106944236f,
121
6.96k
          -0.10140050393753777f,
122
6.96k
          -0.10140050393753772f,
123
6.96k
          -0.10140050393753763f,
124
6.96k
          -0.10140050393753758f,
125
6.96k
          -0.10140050393753769f,
126
6.96k
          -0.1014005039375375f,
127
6.96k
          -0.10140050393753768f,
128
6.96k
          -0.10140050393753768f,
129
6.96k
          -0.10140050393753759f,
130
6.96k
          -0.10140050393753763f,
131
6.96k
          -0.10140050393753741f,
132
6.96k
      },
133
6.96k
      {
134
6.96k
          0.0,
135
6.96k
          0.0,
136
6.96k
          0.40670075830260755f,
137
6.96k
          0.44444816619734445f,
138
6.96k
          0.0,
139
6.96k
          0.0,
140
6.96k
          0.19574399372042936f,
141
6.96k
          0.2929100136981264f,
142
6.96k
          -0.40670075830260716f,
143
6.96k
          -0.19574399372042872f,
144
6.96k
          0.0,
145
6.96k
          0.11379074460448091f,
146
6.96k
          -0.44444816619734384f,
147
6.96k
          -0.29291001369812636f,
148
6.96k
          -0.1137907446044814f,
149
6.96k
          0.0,
150
6.96k
      },
151
6.96k
      {
152
6.96k
          0.0,
153
6.96k
          0.0,
154
6.96k
          -0.21255748058288748f,
155
6.96k
          0.3085497062849767f,
156
6.96k
          0.0,
157
6.96k
          0.4706702258572536f,
158
6.96k
          -0.1621205195722993f,
159
6.96k
          0.0,
160
6.96k
          -0.21255748058287047f,
161
6.96k
          -0.16212051957228327f,
162
6.96k
          -0.47067022585725277f,
163
6.96k
          -0.1464291867126764f,
164
6.96k
          0.3085497062849487f,
165
6.96k
          0.0,
166
6.96k
          -0.14642918671266536f,
167
6.96k
          0.4251149611657548f,
168
6.96k
      },
169
6.96k
      {
170
6.96k
          0.0,
171
6.96k
          -0.7071067811865474f,
172
6.96k
          0.0,
173
6.96k
          0.0,
174
6.96k
          0.7071067811865476f,
175
6.96k
          0.0,
176
6.96k
          0.0,
177
6.96k
          0.0,
178
6.96k
          0.0,
179
6.96k
          0.0,
180
6.96k
          0.0,
181
6.96k
          0.0,
182
6.96k
          0.0,
183
6.96k
          0.0,
184
6.96k
          0.0,
185
6.96k
          0.0,
186
6.96k
      },
187
6.96k
      {
188
6.96k
          -0.4105377591765233f,
189
6.96k
          0.6235485373547691f,
190
6.96k
          -0.06435071657946274f,
191
6.96k
          -0.06435071657946266f,
192
6.96k
          0.6235485373547694f,
193
6.96k
          -0.06435071657946284f,
194
6.96k
          -0.0643507165794628f,
195
6.96k
          -0.06435071657946274f,
196
6.96k
          -0.06435071657946272f,
197
6.96k
          -0.06435071657946279f,
198
6.96k
          -0.06435071657946266f,
199
6.96k
          -0.06435071657946277f,
200
6.96k
          -0.06435071657946277f,
201
6.96k
          -0.06435071657946273f,
202
6.96k
          -0.06435071657946274f,
203
6.96k
          -0.0643507165794626f,
204
6.96k
      },
205
6.96k
      {
206
6.96k
          0.0,
207
6.96k
          0.0,
208
6.96k
          -0.4517556589999482f,
209
6.96k
          0.15854503551840063f,
210
6.96k
          0.0,
211
6.96k
          -0.04038515160822202f,
212
6.96k
          0.0074182263792423875f,
213
6.96k
          0.39351034269210167f,
214
6.96k
          -0.45175565899994635f,
215
6.96k
          0.007418226379244351f,
216
6.96k
          0.1107416575309343f,
217
6.96k
          0.08298163094882051f,
218
6.96k
          0.15854503551839705f,
219
6.96k
          0.3935103426921022f,
220
6.96k
          0.0829816309488214f,
221
6.96k
          -0.45175565899994796f,
222
6.96k
      },
223
6.96k
      {
224
6.96k
          0.0,
225
6.96k
          0.0,
226
6.96k
          -0.304684750724869f,
227
6.96k
          0.5112616136591823f,
228
6.96k
          0.0,
229
6.96k
          0.0,
230
6.96k
          -0.290480129728998f,
231
6.96k
          -0.06578701549142804f,
232
6.96k
          0.304684750724884f,
233
6.96k
          0.2904801297290076f,
234
6.96k
          0.0,
235
6.96k
          -0.23889773523344604f,
236
6.96k
          -0.5112616136592012f,
237
6.96k
          0.06578701549142545f,
238
6.96k
          0.23889773523345467f,
239
6.96k
          0.0,
240
6.96k
      },
241
6.96k
      {
242
6.96k
          0.0,
243
6.96k
          0.0,
244
6.96k
          0.3017929516615495f,
245
6.96k
          0.25792362796341184f,
246
6.96k
          0.0,
247
6.96k
          0.16272340142866204f,
248
6.96k
          0.09520022653475037f,
249
6.96k
          0.0,
250
6.96k
          0.3017929516615503f,
251
6.96k
          0.09520022653475055f,
252
6.96k
          -0.16272340142866173f,
253
6.96k
          -0.35312385449816297f,
254
6.96k
          0.25792362796341295f,
255
6.96k
          0.0,
256
6.96k
          -0.3531238544981624f,
257
6.96k
          -0.6035859033230976f,
258
6.96k
      },
259
6.96k
      {
260
6.96k
          0.0,
261
6.96k
          0.0,
262
6.96k
          0.40824829046386274f,
263
6.96k
          0.0,
264
6.96k
          0.0,
265
6.96k
          0.0,
266
6.96k
          0.0,
267
6.96k
          -0.4082482904638628f,
268
6.96k
          -0.4082482904638635f,
269
6.96k
          0.0,
270
6.96k
          0.0,
271
6.96k
          -0.40824829046386296f,
272
6.96k
          0.0,
273
6.96k
          0.4082482904638634f,
274
6.96k
          0.408248290463863f,
275
6.96k
          0.0,
276
6.96k
      },
277
6.96k
      {
278
6.96k
          0.0,
279
6.96k
          0.0,
280
6.96k
          0.1747866975480809f,
281
6.96k
          0.0812611176717539f,
282
6.96k
          0.0,
283
6.96k
          0.0,
284
6.96k
          -0.3675398009862027f,
285
6.96k
          -0.307882213957909f,
286
6.96k
          -0.17478669754808135f,
287
6.96k
          0.3675398009862011f,
288
6.96k
          0.0,
289
6.96k
          0.4826689115059883f,
290
6.96k
          -0.08126111767175039f,
291
6.96k
          0.30788221395790305f,
292
6.96k
          -0.48266891150598584f,
293
6.96k
          0.0,
294
6.96k
      },
295
6.96k
      {
296
6.96k
          0.0,
297
6.96k
          0.0,
298
6.96k
          -0.21105601049335784f,
299
6.96k
          0.18567180916109802f,
300
6.96k
          0.0,
301
6.96k
          0.0,
302
6.96k
          0.49215859013738733f,
303
6.96k
          -0.38525013709251915f,
304
6.96k
          0.21105601049335806f,
305
6.96k
          -0.49215859013738905f,
306
6.96k
          0.0,
307
6.96k
          0.17419412659916217f,
308
6.96k
          -0.18567180916109904f,
309
6.96k
          0.3852501370925211f,
310
6.96k
          -0.1741941265991621f,
311
6.96k
          0.0,
312
6.96k
      },
313
6.96k
      {
314
6.96k
          0.0,
315
6.96k
          0.0,
316
6.96k
          -0.14266084808807264f,
317
6.96k
          -0.3416446842253372f,
318
6.96k
          0.0,
319
6.96k
          0.7367497537172237f,
320
6.96k
          0.24627107722075148f,
321
6.96k
          -0.08574019035519306f,
322
6.96k
          -0.14266084808807344f,
323
6.96k
          0.24627107722075137f,
324
6.96k
          0.14883399227113567f,
325
6.96k
          -0.04768680350229251f,
326
6.96k
          -0.3416446842253373f,
327
6.96k
          -0.08574019035519267f,
328
6.96k
          -0.047686803502292804f,
329
6.96k
          -0.14266084808807242f,
330
6.96k
      },
331
6.96k
      {
332
6.96k
          0.0,
333
6.96k
          0.0,
334
6.96k
          -0.13813540350758585f,
335
6.96k
          0.3302282550303788f,
336
6.96k
          0.0,
337
6.96k
          0.08755115000587084f,
338
6.96k
          -0.07946706605909573f,
339
6.96k
          -0.4613374887461511f,
340
6.96k
          -0.13813540350758294f,
341
6.96k
          -0.07946706605910261f,
342
6.96k
          0.49724647109535086f,
343
6.96k
          0.12538059448563663f,
344
6.96k
          0.3302282550303805f,
345
6.96k
          -0.4613374887461554f,
346
6.96k
          0.12538059448564315f,
347
6.96k
          -0.13813540350758452f,
348
6.96k
      },
349
6.96k
      {
350
6.96k
          0.0,
351
6.96k
          0.0,
352
6.96k
          -0.17437602599651067f,
353
6.96k
          0.0702790691196284f,
354
6.96k
          0.0,
355
6.96k
          -0.2921026642334881f,
356
6.96k
          0.3623817333531167f,
357
6.96k
          0.0,
358
6.96k
          -0.1743760259965108f,
359
6.96k
          0.36238173335311646f,
360
6.96k
          0.29210266423348785f,
361
6.96k
          -0.4326608024727445f,
362
6.96k
          0.07027906911962818f,
363
6.96k
          0.0,
364
6.96k
          -0.4326608024727457f,
365
6.96k
          0.34875205199302267f,
366
6.96k
      },
367
6.96k
      {
368
6.96k
          0.0,
369
6.96k
          0.0,
370
6.96k
          0.11354987314994337f,
371
6.96k
          -0.07417504595810355f,
372
6.96k
          0.0,
373
6.96k
          0.19402893032594343f,
374
6.96k
          -0.435190496523228f,
375
6.96k
          0.21918684838857466f,
376
6.96k
          0.11354987314994257f,
377
6.96k
          -0.4351904965232251f,
378
6.96k
          0.5550443808910661f,
379
6.96k
          -0.25468277124066463f,
380
6.96k
          -0.07417504595810233f,
381
6.96k
          0.2191868483885728f,
382
6.96k
          -0.25468277124066413f,
383
6.96k
          0.1135498731499429f,
384
6.96k
      },
385
6.96k
  };
386
387
6.96k
  const HWY_CAPPED(float, 16) d;
388
34.8k
  for (size_t i = 0; i < 16; i += Lanes(d)) {
389
27.8k
    auto pixel = Zero(d);
390
473k
    for (size_t j = 0; j < 16; j++) {
391
445k
      auto cf = Set(d, coeffs[j]);
392
445k
      auto basis = Load(d, k4x4AFVBasis[j] + i);
393
445k
      pixel = MulAdd(cf, basis, pixel);
394
445k
    }
395
27.8k
    Store(pixel, d, pixels + i);
396
27.8k
  }
397
6.96k
}
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SSE2::(anonymous namespace)::AFVIDCT4x4(float const*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SSE2::(anonymous namespace)::AFVIDCT4x4(float const*, float*)
398
399
template <size_t afv_kind>
400
void AFVTransformToPixels(const float* JXL_RESTRICT coefficients,
401
6.96k
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
6.96k
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
6.96k
  size_t afv_x = afv_kind & 1;
404
6.96k
  size_t afv_y = afv_kind / 2;
405
6.96k
  float dcs[3] = {};
406
6.96k
  float block00 = coefficients[0];
407
6.96k
  float block01 = coefficients[1];
408
6.96k
  float block10 = coefficients[8];
409
6.96k
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
6.96k
  dcs[1] = (block00 + block10 - block01);
411
6.96k
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
6.96k
  HWY_ALIGN float coeff[4 * 4];
414
6.96k
  coeff[0] = dcs[0];
415
34.8k
  for (size_t iy = 0; iy < 4; iy++) {
416
139k
    for (size_t ix = 0; ix < 4; ix++) {
417
111k
      if (ix == 0 && iy == 0) continue;
418
104k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
104k
    }
420
27.8k
  }
421
6.96k
  HWY_ALIGN float block[4 * 8];
422
6.96k
  AFVIDCT4x4(coeff, block);
423
34.8k
  for (size_t iy = 0; iy < 4; iy++) {
424
139k
    for (size_t ix = 0; ix < 4; ix++) {
425
111k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
111k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
111k
    }
428
27.8k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
6.96k
  block[0] = dcs[1];
431
34.8k
  for (size_t iy = 0; iy < 4; iy++) {
432
139k
    for (size_t ix = 0; ix < 4; ix++) {
433
111k
      if (ix == 0 && iy == 0) continue;
434
104k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
104k
    }
436
27.8k
  }
437
6.96k
  ComputeScaledIDCT<4, 4>()(
438
6.96k
      block,
439
6.96k
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
6.96k
            pixels_stride),
441
6.96k
      scratch_space);
442
  // IDCT4x8.
443
6.96k
  block[0] = dcs[2];
444
34.8k
  for (size_t iy = 0; iy < 4; iy++) {
445
250k
    for (size_t ix = 0; ix < 8; ix++) {
446
222k
      if (ix == 0 && iy == 0) continue;
447
215k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
215k
    }
449
27.8k
  }
450
6.96k
  ComputeScaledIDCT<4, 8>()(
451
6.96k
      block,
452
6.96k
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
6.96k
      scratch_space);
454
6.96k
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<0ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<0ul>(float const*, float*, unsigned long)
Line
Count
Source
401
264
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
264
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
264
  size_t afv_x = afv_kind & 1;
404
264
  size_t afv_y = afv_kind / 2;
405
264
  float dcs[3] = {};
406
264
  float block00 = coefficients[0];
407
264
  float block01 = coefficients[1];
408
264
  float block10 = coefficients[8];
409
264
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
264
  dcs[1] = (block00 + block10 - block01);
411
264
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
264
  HWY_ALIGN float coeff[4 * 4];
414
264
  coeff[0] = dcs[0];
415
1.32k
  for (size_t iy = 0; iy < 4; iy++) {
416
5.28k
    for (size_t ix = 0; ix < 4; ix++) {
417
4.22k
      if (ix == 0 && iy == 0) continue;
418
3.96k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
3.96k
    }
420
1.05k
  }
421
264
  HWY_ALIGN float block[4 * 8];
422
264
  AFVIDCT4x4(coeff, block);
423
1.32k
  for (size_t iy = 0; iy < 4; iy++) {
424
5.28k
    for (size_t ix = 0; ix < 4; ix++) {
425
4.22k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
4.22k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
4.22k
    }
428
1.05k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
264
  block[0] = dcs[1];
431
1.32k
  for (size_t iy = 0; iy < 4; iy++) {
432
5.28k
    for (size_t ix = 0; ix < 4; ix++) {
433
4.22k
      if (ix == 0 && iy == 0) continue;
434
3.96k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
3.96k
    }
436
1.05k
  }
437
264
  ComputeScaledIDCT<4, 4>()(
438
264
      block,
439
264
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
264
            pixels_stride),
441
264
      scratch_space);
442
  // IDCT4x8.
443
264
  block[0] = dcs[2];
444
1.32k
  for (size_t iy = 0; iy < 4; iy++) {
445
9.50k
    for (size_t ix = 0; ix < 8; ix++) {
446
8.44k
      if (ix == 0 && iy == 0) continue;
447
8.18k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
8.18k
    }
449
1.05k
  }
450
264
  ComputeScaledIDCT<4, 8>()(
451
264
      block,
452
264
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
264
      scratch_space);
454
264
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Line
Count
Source
401
30
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
30
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
30
  size_t afv_x = afv_kind & 1;
404
30
  size_t afv_y = afv_kind / 2;
405
30
  float dcs[3] = {};
406
30
  float block00 = coefficients[0];
407
30
  float block01 = coefficients[1];
408
30
  float block10 = coefficients[8];
409
30
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
30
  dcs[1] = (block00 + block10 - block01);
411
30
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
30
  HWY_ALIGN float coeff[4 * 4];
414
30
  coeff[0] = dcs[0];
415
150
  for (size_t iy = 0; iy < 4; iy++) {
416
600
    for (size_t ix = 0; ix < 4; ix++) {
417
480
      if (ix == 0 && iy == 0) continue;
418
450
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
450
    }
420
120
  }
421
30
  HWY_ALIGN float block[4 * 8];
422
30
  AFVIDCT4x4(coeff, block);
423
150
  for (size_t iy = 0; iy < 4; iy++) {
424
600
    for (size_t ix = 0; ix < 4; ix++) {
425
480
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
480
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
480
    }
428
120
  }
429
  // IDCT4x4 in (odd, even) positions.
430
30
  block[0] = dcs[1];
431
150
  for (size_t iy = 0; iy < 4; iy++) {
432
600
    for (size_t ix = 0; ix < 4; ix++) {
433
480
      if (ix == 0 && iy == 0) continue;
434
450
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
450
    }
436
120
  }
437
30
  ComputeScaledIDCT<4, 4>()(
438
30
      block,
439
30
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
30
            pixels_stride),
441
30
      scratch_space);
442
  // IDCT4x8.
443
30
  block[0] = dcs[2];
444
150
  for (size_t iy = 0; iy < 4; iy++) {
445
1.08k
    for (size_t ix = 0; ix < 8; ix++) {
446
960
      if (ix == 0 && iy == 0) continue;
447
930
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
930
    }
449
120
  }
450
30
  ComputeScaledIDCT<4, 8>()(
451
30
      block,
452
30
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
30
      scratch_space);
454
30
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Line
Count
Source
401
656
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
656
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
656
  size_t afv_x = afv_kind & 1;
404
656
  size_t afv_y = afv_kind / 2;
405
656
  float dcs[3] = {};
406
656
  float block00 = coefficients[0];
407
656
  float block01 = coefficients[1];
408
656
  float block10 = coefficients[8];
409
656
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
656
  dcs[1] = (block00 + block10 - block01);
411
656
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
656
  HWY_ALIGN float coeff[4 * 4];
414
656
  coeff[0] = dcs[0];
415
3.28k
  for (size_t iy = 0; iy < 4; iy++) {
416
13.1k
    for (size_t ix = 0; ix < 4; ix++) {
417
10.4k
      if (ix == 0 && iy == 0) continue;
418
9.84k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
9.84k
    }
420
2.62k
  }
421
656
  HWY_ALIGN float block[4 * 8];
422
656
  AFVIDCT4x4(coeff, block);
423
3.28k
  for (size_t iy = 0; iy < 4; iy++) {
424
13.1k
    for (size_t ix = 0; ix < 4; ix++) {
425
10.5k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
10.5k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
10.5k
    }
428
2.62k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
656
  block[0] = dcs[1];
431
3.28k
  for (size_t iy = 0; iy < 4; iy++) {
432
13.1k
    for (size_t ix = 0; ix < 4; ix++) {
433
10.5k
      if (ix == 0 && iy == 0) continue;
434
9.85k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
9.85k
    }
436
2.62k
  }
437
656
  ComputeScaledIDCT<4, 4>()(
438
656
      block,
439
656
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
656
            pixels_stride),
441
656
      scratch_space);
442
  // IDCT4x8.
443
656
  block[0] = dcs[2];
444
3.28k
  for (size_t iy = 0; iy < 4; iy++) {
445
23.6k
    for (size_t ix = 0; ix < 8; ix++) {
446
20.9k
      if (ix == 0 && iy == 0) continue;
447
20.3k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
20.3k
    }
449
2.62k
  }
450
656
  ComputeScaledIDCT<4, 8>()(
451
656
      block,
452
656
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
656
      scratch_space);
454
656
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
Line
Count
Source
401
6.01k
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
6.01k
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
6.01k
  size_t afv_x = afv_kind & 1;
404
6.01k
  size_t afv_y = afv_kind / 2;
405
6.01k
  float dcs[3] = {};
406
6.01k
  float block00 = coefficients[0];
407
6.01k
  float block01 = coefficients[1];
408
6.01k
  float block10 = coefficients[8];
409
6.01k
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
6.01k
  dcs[1] = (block00 + block10 - block01);
411
6.01k
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
6.01k
  HWY_ALIGN float coeff[4 * 4];
414
6.01k
  coeff[0] = dcs[0];
415
30.0k
  for (size_t iy = 0; iy < 4; iy++) {
416
120k
    for (size_t ix = 0; ix < 4; ix++) {
417
96.2k
      if (ix == 0 && iy == 0) continue;
418
90.2k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
90.2k
    }
420
24.0k
  }
421
6.01k
  HWY_ALIGN float block[4 * 8];
422
6.01k
  AFVIDCT4x4(coeff, block);
423
30.0k
  for (size_t iy = 0; iy < 4; iy++) {
424
120k
    for (size_t ix = 0; ix < 4; ix++) {
425
96.2k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
96.2k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
96.2k
    }
428
24.0k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
6.01k
  block[0] = dcs[1];
431
30.0k
  for (size_t iy = 0; iy < 4; iy++) {
432
120k
    for (size_t ix = 0; ix < 4; ix++) {
433
96.2k
      if (ix == 0 && iy == 0) continue;
434
90.2k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
90.2k
    }
436
24.0k
  }
437
6.01k
  ComputeScaledIDCT<4, 4>()(
438
6.01k
      block,
439
6.01k
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
6.01k
            pixels_stride),
441
6.01k
      scratch_space);
442
  // IDCT4x8.
443
6.01k
  block[0] = dcs[2];
444
30.0k
  for (size_t iy = 0; iy < 4; iy++) {
445
216k
    for (size_t ix = 0; ix < 8; ix++) {
446
192k
      if (ix == 0 && iy == 0) continue;
447
186k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
186k
    }
449
24.0k
  }
450
6.01k
  ComputeScaledIDCT<4, 8>()(
451
6.01k
      block,
452
6.01k
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
6.01k
      scratch_space);
454
6.01k
}
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<0ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<0ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
455
456
HWY_MAYBE_UNUSED void TransformToPixels(const AcStrategyType strategy,
457
                                        float* JXL_RESTRICT coefficients,
458
                                        float* JXL_RESTRICT pixels,
459
                                        size_t pixels_stride,
460
2.38M
                                        float* scratch_space) {
461
2.38M
  using Type = AcStrategyType;
462
2.38M
  switch (strategy) {
463
320k
    case Type::IDENTITY: {
464
320k
      float dcs[4] = {};
465
320k
      float block00 = coefficients[0];
466
320k
      float block01 = coefficients[1];
467
320k
      float block10 = coefficients[8];
468
320k
      float block11 = coefficients[9];
469
320k
      dcs[0] = block00 + block01 + block10 + block11;
470
320k
      dcs[1] = block00 + block01 - block10 - block11;
471
320k
      dcs[2] = block00 - block01 + block10 - block11;
472
320k
      dcs[3] = block00 - block01 - block10 + block11;
473
931k
      for (size_t y = 0; y < 2; y++) {
474
1.83M
        for (size_t x = 0; x < 2; x++) {
475
1.22M
          float block_dc = dcs[y * 2 + x];
476
1.22M
          float residual_sum = 0;
477
6.10M
          for (size_t iy = 0; iy < 4; iy++) {
478
24.4M
            for (size_t ix = 0; ix < 4; ix++) {
479
19.5M
              if (ix == 0 && iy == 0) continue;
480
18.3M
              residual_sum += coefficients[(y + iy * 2) * 8 + x + ix * 2];
481
18.3M
            }
482
4.88M
          }
483
1.22M
          pixels[(4 * y + 1) * pixels_stride + 4 * x + 1] =
484
1.22M
              block_dc - residual_sum * (1.0f / 16);
485
6.11M
          for (size_t iy = 0; iy < 4; iy++) {
486
24.4M
            for (size_t ix = 0; ix < 4; ix++) {
487
19.5M
              if (ix == 1 && iy == 1) continue;
488
18.3M
              pixels[(y * 4 + iy) * pixels_stride + x * 4 + ix] =
489
18.3M
                  coefficients[(y + iy * 2) * 8 + x + ix * 2] +
490
18.3M
                  pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
491
18.3M
            }
492
4.89M
          }
493
1.22M
          pixels[y * 4 * pixels_stride + x * 4] =
494
1.22M
              coefficients[(y + 2) * 8 + x + 2] +
495
1.22M
              pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
496
1.22M
        }
497
610k
      }
498
320k
      break;
499
0
    }
500
2.86k
    case Type::DCT8X4: {
501
2.86k
      float dcs[2] = {};
502
2.86k
      float block0 = coefficients[0];
503
2.86k
      float block1 = coefficients[8];
504
2.86k
      dcs[0] = block0 + block1;
505
2.86k
      dcs[1] = block0 - block1;
506
8.58k
      for (size_t x = 0; x < 2; x++) {
507
5.72k
        HWY_ALIGN float block[4 * 8];
508
5.72k
        block[0] = dcs[x];
509
28.6k
        for (size_t iy = 0; iy < 4; iy++) {
510
205k
          for (size_t ix = 0; ix < 8; ix++) {
511
183k
            if (ix == 0 && iy == 0) continue;
512
177k
            block[iy * 8 + ix] = coefficients[(x + iy * 2) * 8 + ix];
513
177k
          }
514
22.8k
        }
515
5.72k
        ComputeScaledIDCT<8, 4>()(block, DCTTo(pixels + x * 4, pixels_stride),
516
5.72k
                                  scratch_space);
517
5.72k
      }
518
2.86k
      break;
519
0
    }
520
1.32k
    case Type::DCT4X8: {
521
1.32k
      float dcs[2] = {};
522
1.32k
      float block0 = coefficients[0];
523
1.32k
      float block1 = coefficients[8];
524
1.32k
      dcs[0] = block0 + block1;
525
1.32k
      dcs[1] = block0 - block1;
526
3.98k
      for (size_t y = 0; y < 2; y++) {
527
2.65k
        HWY_ALIGN float block[4 * 8];
528
2.65k
        block[0] = dcs[y];
529
13.2k
        for (size_t iy = 0; iy < 4; iy++) {
530
95.6k
          for (size_t ix = 0; ix < 8; ix++) {
531
85.0k
            if (ix == 0 && iy == 0) continue;
532
82.3k
            block[iy * 8 + ix] = coefficients[(y + iy * 2) * 8 + ix];
533
82.3k
          }
534
10.6k
        }
535
2.65k
        ComputeScaledIDCT<4, 8>()(
536
2.65k
            block, DCTTo(pixels + y * 4 * pixels_stride, pixels_stride),
537
2.65k
            scratch_space);
538
2.65k
      }
539
1.32k
      break;
540
0
    }
541
0
    case Type::DCT4X4: {
542
0
      float dcs[4] = {};
543
0
      float block00 = coefficients[0];
544
0
      float block01 = coefficients[1];
545
0
      float block10 = coefficients[8];
546
0
      float block11 = coefficients[9];
547
0
      dcs[0] = block00 + block01 + block10 + block11;
548
0
      dcs[1] = block00 + block01 - block10 - block11;
549
0
      dcs[2] = block00 - block01 + block10 - block11;
550
0
      dcs[3] = block00 - block01 - block10 + block11;
551
0
      for (size_t y = 0; y < 2; y++) {
552
0
        for (size_t x = 0; x < 2; x++) {
553
0
          HWY_ALIGN float block[4 * 4];
554
0
          block[0] = dcs[y * 2 + x];
555
0
          for (size_t iy = 0; iy < 4; iy++) {
556
0
            for (size_t ix = 0; ix < 4; ix++) {
557
0
              if (ix == 0 && iy == 0) continue;
558
0
              block[iy * 4 + ix] = coefficients[(y + iy * 2) * 8 + x + ix * 2];
559
0
            }
560
0
          }
561
0
          ComputeScaledIDCT<4, 4>()(
562
0
              block,
563
0
              DCTTo(pixels + y * 4 * pixels_stride + x * 4, pixels_stride),
564
0
              scratch_space);
565
0
        }
566
0
      }
567
0
      break;
568
0
    }
569
13.2k
    case Type::DCT2X2: {
570
13.2k
      HWY_ALIGN float coeffs[kDCTBlockSize];
571
13.2k
      memcpy(coeffs, coefficients, sizeof(float) * kDCTBlockSize);
572
13.2k
      IDCT2TopBlock<2>(coeffs, kBlockDim, coeffs);
573
13.2k
      IDCT2TopBlock<4>(coeffs, kBlockDim, coeffs);
574
13.2k
      IDCT2TopBlock<8>(coeffs, kBlockDim, coeffs);
575
118k
      for (size_t y = 0; y < kBlockDim; y++) {
576
950k
        for (size_t x = 0; x < kBlockDim; x++) {
577
844k
          pixels[y * pixels_stride + x] = coeffs[y * kBlockDim + x];
578
844k
        }
579
105k
      }
580
13.2k
      break;
581
0
    }
582
423
    case Type::DCT16X16: {
583
423
      ComputeScaledIDCT<16, 16>()(coefficients, DCTTo(pixels, pixels_stride),
584
423
                                  scratch_space);
585
423
      break;
586
0
    }
587
14.5k
    case Type::DCT16X8: {
588
14.5k
      ComputeScaledIDCT<16, 8>()(coefficients, DCTTo(pixels, pixels_stride),
589
14.5k
                                 scratch_space);
590
14.5k
      break;
591
0
    }
592
1.82M
    case Type::DCT8X16: {
593
1.82M
      ComputeScaledIDCT<8, 16>()(coefficients, DCTTo(pixels, pixels_stride),
594
1.82M
                                 scratch_space);
595
1.82M
      break;
596
0
    }
597
0
    case Type::DCT32X8: {
598
0
      ComputeScaledIDCT<32, 8>()(coefficients, DCTTo(pixels, pixels_stride),
599
0
                                 scratch_space);
600
0
      break;
601
0
    }
602
0
    case Type::DCT8X32: {
603
0
      ComputeScaledIDCT<8, 32>()(coefficients, DCTTo(pixels, pixels_stride),
604
0
                                 scratch_space);
605
0
      break;
606
0
    }
607
114
    case Type::DCT32X16: {
608
114
      ComputeScaledIDCT<32, 16>()(coefficients, DCTTo(pixels, pixels_stride),
609
114
                                  scratch_space);
610
114
      break;
611
0
    }
612
63
    case Type::DCT16X32: {
613
63
      ComputeScaledIDCT<16, 32>()(coefficients, DCTTo(pixels, pixels_stride),
614
63
                                  scratch_space);
615
63
      break;
616
0
    }
617
57
    case Type::DCT32X32: {
618
57
      ComputeScaledIDCT<32, 32>()(coefficients, DCTTo(pixels, pixels_stride),
619
57
                                  scratch_space);
620
57
      break;
621
0
    }
622
198k
    case Type::DCT: {
623
198k
      ComputeScaledIDCT<8, 8>()(coefficients, DCTTo(pixels, pixels_stride),
624
198k
                                scratch_space);
625
198k
      break;
626
0
    }
627
264
    case Type::AFV0: {
628
264
      AFVTransformToPixels<0>(coefficients, pixels, pixels_stride);
629
264
      break;
630
0
    }
631
30
    case Type::AFV1: {
632
30
      AFVTransformToPixels<1>(coefficients, pixels, pixels_stride);
633
30
      break;
634
0
    }
635
656
    case Type::AFV2: {
636
656
      AFVTransformToPixels<2>(coefficients, pixels, pixels_stride);
637
656
      break;
638
0
    }
639
6.01k
    case Type::AFV3: {
640
6.01k
      AFVTransformToPixels<3>(coefficients, pixels, pixels_stride);
641
6.01k
      break;
642
0
    }
643
0
    case Type::DCT64X32: {
644
0
      ComputeScaledIDCT<64, 32>()(coefficients, DCTTo(pixels, pixels_stride),
645
0
                                  scratch_space);
646
0
      break;
647
0
    }
648
0
    case Type::DCT32X64: {
649
0
      ComputeScaledIDCT<32, 64>()(coefficients, DCTTo(pixels, pixels_stride),
650
0
                                  scratch_space);
651
0
      break;
652
0
    }
653
623
    case Type::DCT64X64: {
654
623
      ComputeScaledIDCT<64, 64>()(coefficients, DCTTo(pixels, pixels_stride),
655
623
                                  scratch_space);
656
623
      break;
657
0
    }
658
138
    case Type::DCT128X64: {
659
138
      ComputeScaledIDCT<128, 64>()(coefficients, DCTTo(pixels, pixels_stride),
660
138
                                   scratch_space);
661
138
      break;
662
0
    }
663
3
    case Type::DCT64X128: {
664
3
      ComputeScaledIDCT<64, 128>()(coefficients, DCTTo(pixels, pixels_stride),
665
3
                                   scratch_space);
666
3
      break;
667
0
    }
668
1.42k
    case Type::DCT128X128: {
669
1.42k
      ComputeScaledIDCT<128, 128>()(coefficients, DCTTo(pixels, pixels_stride),
670
1.42k
                                    scratch_space);
671
1.42k
      break;
672
0
    }
673
0
    case Type::DCT256X128: {
674
0
      ComputeScaledIDCT<256, 128>()(coefficients, DCTTo(pixels, pixels_stride),
675
0
                                    scratch_space);
676
0
      break;
677
0
    }
678
0
    case Type::DCT128X256: {
679
0
      ComputeScaledIDCT<128, 256>()(coefficients, DCTTo(pixels, pixels_stride),
680
0
                                    scratch_space);
681
0
      break;
682
0
    }
683
0
    case Type::DCT256X256: {
684
0
      ComputeScaledIDCT<256, 256>()(coefficients, DCTTo(pixels, pixels_stride),
685
0
                                    scratch_space);
686
0
      break;
687
0
    }
688
2.38M
  }
689
2.38M
}
Unexecuted instantiation: enc_group.cc:jxl::N_SSE2::(anonymous namespace)::TransformToPixels(jxl::AcStrategyType, float*, float*, unsigned long, float*)
dec_group.cc:jxl::N_SSE2::(anonymous namespace)::TransformToPixels(jxl::AcStrategyType, float*, float*, unsigned long, float*)
Line
Count
Source
460
2.38M
                                        float* scratch_space) {
461
2.38M
  using Type = AcStrategyType;
462
2.38M
  switch (strategy) {
463
320k
    case Type::IDENTITY: {
464
320k
      float dcs[4] = {};
465
320k
      float block00 = coefficients[0];
466
320k
      float block01 = coefficients[1];
467
320k
      float block10 = coefficients[8];
468
320k
      float block11 = coefficients[9];
469
320k
      dcs[0] = block00 + block01 + block10 + block11;
470
320k
      dcs[1] = block00 + block01 - block10 - block11;
471
320k
      dcs[2] = block00 - block01 + block10 - block11;
472
320k
      dcs[3] = block00 - block01 - block10 + block11;
473
931k
      for (size_t y = 0; y < 2; y++) {
474
1.83M
        for (size_t x = 0; x < 2; x++) {
475
1.22M
          float block_dc = dcs[y * 2 + x];
476
1.22M
          float residual_sum = 0;
477
6.10M
          for (size_t iy = 0; iy < 4; iy++) {
478
24.4M
            for (size_t ix = 0; ix < 4; ix++) {
479
19.5M
              if (ix == 0 && iy == 0) continue;
480
18.3M
              residual_sum += coefficients[(y + iy * 2) * 8 + x + ix * 2];
481
18.3M
            }
482
4.88M
          }
483
1.22M
          pixels[(4 * y + 1) * pixels_stride + 4 * x + 1] =
484
1.22M
              block_dc - residual_sum * (1.0f / 16);
485
6.11M
          for (size_t iy = 0; iy < 4; iy++) {
486
24.4M
            for (size_t ix = 0; ix < 4; ix++) {
487
19.5M
              if (ix == 1 && iy == 1) continue;
488
18.3M
              pixels[(y * 4 + iy) * pixels_stride + x * 4 + ix] =
489
18.3M
                  coefficients[(y + iy * 2) * 8 + x + ix * 2] +
490
18.3M
                  pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
491
18.3M
            }
492
4.89M
          }
493
1.22M
          pixels[y * 4 * pixels_stride + x * 4] =
494
1.22M
              coefficients[(y + 2) * 8 + x + 2] +
495
1.22M
              pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
496
1.22M
        }
497
610k
      }
498
320k
      break;
499
0
    }
500
2.86k
    case Type::DCT8X4: {
501
2.86k
      float dcs[2] = {};
502
2.86k
      float block0 = coefficients[0];
503
2.86k
      float block1 = coefficients[8];
504
2.86k
      dcs[0] = block0 + block1;
505
2.86k
      dcs[1] = block0 - block1;
506
8.58k
      for (size_t x = 0; x < 2; x++) {
507
5.72k
        HWY_ALIGN float block[4 * 8];
508
5.72k
        block[0] = dcs[x];
509
28.6k
        for (size_t iy = 0; iy < 4; iy++) {
510
205k
          for (size_t ix = 0; ix < 8; ix++) {
511
183k
            if (ix == 0 && iy == 0) continue;
512
177k
            block[iy * 8 + ix] = coefficients[(x + iy * 2) * 8 + ix];
513
177k
          }
514
22.8k
        }
515
5.72k
        ComputeScaledIDCT<8, 4>()(block, DCTTo(pixels + x * 4, pixels_stride),
516
5.72k
                                  scratch_space);
517
5.72k
      }
518
2.86k
      break;
519
0
    }
520
1.32k
    case Type::DCT4X8: {
521
1.32k
      float dcs[2] = {};
522
1.32k
      float block0 = coefficients[0];
523
1.32k
      float block1 = coefficients[8];
524
1.32k
      dcs[0] = block0 + block1;
525
1.32k
      dcs[1] = block0 - block1;
526
3.98k
      for (size_t y = 0; y < 2; y++) {
527
2.65k
        HWY_ALIGN float block[4 * 8];
528
2.65k
        block[0] = dcs[y];
529
13.2k
        for (size_t iy = 0; iy < 4; iy++) {
530
95.6k
          for (size_t ix = 0; ix < 8; ix++) {
531
85.0k
            if (ix == 0 && iy == 0) continue;
532
82.3k
            block[iy * 8 + ix] = coefficients[(y + iy * 2) * 8 + ix];
533
82.3k
          }
534
10.6k
        }
535
2.65k
        ComputeScaledIDCT<4, 8>()(
536
2.65k
            block, DCTTo(pixels + y * 4 * pixels_stride, pixels_stride),
537
2.65k
            scratch_space);
538
2.65k
      }
539
1.32k
      break;
540
0
    }
541
0
    case Type::DCT4X4: {
542
0
      float dcs[4] = {};
543
0
      float block00 = coefficients[0];
544
0
      float block01 = coefficients[1];
545
0
      float block10 = coefficients[8];
546
0
      float block11 = coefficients[9];
547
0
      dcs[0] = block00 + block01 + block10 + block11;
548
0
      dcs[1] = block00 + block01 - block10 - block11;
549
0
      dcs[2] = block00 - block01 + block10 - block11;
550
0
      dcs[3] = block00 - block01 - block10 + block11;
551
0
      for (size_t y = 0; y < 2; y++) {
552
0
        for (size_t x = 0; x < 2; x++) {
553
0
          HWY_ALIGN float block[4 * 4];
554
0
          block[0] = dcs[y * 2 + x];
555
0
          for (size_t iy = 0; iy < 4; iy++) {
556
0
            for (size_t ix = 0; ix < 4; ix++) {
557
0
              if (ix == 0 && iy == 0) continue;
558
0
              block[iy * 4 + ix] = coefficients[(y + iy * 2) * 8 + x + ix * 2];
559
0
            }
560
0
          }
561
0
          ComputeScaledIDCT<4, 4>()(
562
0
              block,
563
0
              DCTTo(pixels + y * 4 * pixels_stride + x * 4, pixels_stride),
564
0
              scratch_space);
565
0
        }
566
0
      }
567
0
      break;
568
0
    }
569
13.2k
    case Type::DCT2X2: {
570
13.2k
      HWY_ALIGN float coeffs[kDCTBlockSize];
571
13.2k
      memcpy(coeffs, coefficients, sizeof(float) * kDCTBlockSize);
572
13.2k
      IDCT2TopBlock<2>(coeffs, kBlockDim, coeffs);
573
13.2k
      IDCT2TopBlock<4>(coeffs, kBlockDim, coeffs);
574
13.2k
      IDCT2TopBlock<8>(coeffs, kBlockDim, coeffs);
575
118k
      for (size_t y = 0; y < kBlockDim; y++) {
576
950k
        for (size_t x = 0; x < kBlockDim; x++) {
577
844k
          pixels[y * pixels_stride + x] = coeffs[y * kBlockDim + x];
578
844k
        }
579
105k
      }
580
13.2k
      break;
581
0
    }
582
423
    case Type::DCT16X16: {
583
423
      ComputeScaledIDCT<16, 16>()(coefficients, DCTTo(pixels, pixels_stride),
584
423
                                  scratch_space);
585
423
      break;
586
0
    }
587
14.5k
    case Type::DCT16X8: {
588
14.5k
      ComputeScaledIDCT<16, 8>()(coefficients, DCTTo(pixels, pixels_stride),
589
14.5k
                                 scratch_space);
590
14.5k
      break;
591
0
    }
592
1.82M
    case Type::DCT8X16: {
593
1.82M
      ComputeScaledIDCT<8, 16>()(coefficients, DCTTo(pixels, pixels_stride),
594
1.82M
                                 scratch_space);
595
1.82M
      break;
596
0
    }
597
0
    case Type::DCT32X8: {
598
0
      ComputeScaledIDCT<32, 8>()(coefficients, DCTTo(pixels, pixels_stride),
599
0
                                 scratch_space);
600
0
      break;
601
0
    }
602
0
    case Type::DCT8X32: {
603
0
      ComputeScaledIDCT<8, 32>()(coefficients, DCTTo(pixels, pixels_stride),
604
0
                                 scratch_space);
605
0
      break;
606
0
    }
607
114
    case Type::DCT32X16: {
608
114
      ComputeScaledIDCT<32, 16>()(coefficients, DCTTo(pixels, pixels_stride),
609
114
                                  scratch_space);
610
114
      break;
611
0
    }
612
63
    case Type::DCT16X32: {
613
63
      ComputeScaledIDCT<16, 32>()(coefficients, DCTTo(pixels, pixels_stride),
614
63
                                  scratch_space);
615
63
      break;
616
0
    }
617
57
    case Type::DCT32X32: {
618
57
      ComputeScaledIDCT<32, 32>()(coefficients, DCTTo(pixels, pixels_stride),
619
57
                                  scratch_space);
620
57
      break;
621
0
    }
622
198k
    case Type::DCT: {
623
198k
      ComputeScaledIDCT<8, 8>()(coefficients, DCTTo(pixels, pixels_stride),
624
198k
                                scratch_space);
625
198k
      break;
626
0
    }
627
264
    case Type::AFV0: {
628
264
      AFVTransformToPixels<0>(coefficients, pixels, pixels_stride);
629
264
      break;
630
0
    }
631
30
    case Type::AFV1: {
632
30
      AFVTransformToPixels<1>(coefficients, pixels, pixels_stride);
633
30
      break;
634
0
    }
635
656
    case Type::AFV2: {
636
656
      AFVTransformToPixels<2>(coefficients, pixels, pixels_stride);
637
656
      break;
638
0
    }
639
6.01k
    case Type::AFV3: {
640
6.01k
      AFVTransformToPixels<3>(coefficients, pixels, pixels_stride);
641
6.01k
      break;
642
0
    }
643
0
    case Type::DCT64X32: {
644
0
      ComputeScaledIDCT<64, 32>()(coefficients, DCTTo(pixels, pixels_stride),
645
0
                                  scratch_space);
646
0
      break;
647
0
    }
648
0
    case Type::DCT32X64: {
649
0
      ComputeScaledIDCT<32, 64>()(coefficients, DCTTo(pixels, pixels_stride),
650
0
                                  scratch_space);
651
0
      break;
652
0
    }
653
623
    case Type::DCT64X64: {
654
623
      ComputeScaledIDCT<64, 64>()(coefficients, DCTTo(pixels, pixels_stride),
655
623
                                  scratch_space);
656
623
      break;
657
0
    }
658
138
    case Type::DCT128X64: {
659
138
      ComputeScaledIDCT<128, 64>()(coefficients, DCTTo(pixels, pixels_stride),
660
138
                                   scratch_space);
661
138
      break;
662
0
    }
663
3
    case Type::DCT64X128: {
664
3
      ComputeScaledIDCT<64, 128>()(coefficients, DCTTo(pixels, pixels_stride),
665
3
                                   scratch_space);
666
3
      break;
667
0
    }
668
1.42k
    case Type::DCT128X128: {
669
1.42k
      ComputeScaledIDCT<128, 128>()(coefficients, DCTTo(pixels, pixels_stride),
670
1.42k
                                    scratch_space);
671
1.42k
      break;
672
0
    }
673
0
    case Type::DCT256X128: {
674
0
      ComputeScaledIDCT<256, 128>()(coefficients, DCTTo(pixels, pixels_stride),
675
0
                                    scratch_space);
676
0
      break;
677
0
    }
678
0
    case Type::DCT128X256: {
679
0
      ComputeScaledIDCT<128, 256>()(coefficients, DCTTo(pixels, pixels_stride),
680
0
                                    scratch_space);
681
0
      break;
682
0
    }
683
0
    case Type::DCT256X256: {
684
0
      ComputeScaledIDCT<256, 256>()(coefficients, DCTTo(pixels, pixels_stride),
685
0
                                    scratch_space);
686
0
      break;
687
0
    }
688
2.38M
  }
689
2.38M
}
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SSE2::(anonymous namespace)::TransformToPixels(jxl::AcStrategyType, float*, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SSE2::(anonymous namespace)::TransformToPixels(jxl::AcStrategyType, float*, float*, unsigned long, float*)
690
691
HWY_MAYBE_UNUSED void LowestFrequenciesFromDC(const AcStrategyType strategy,
692
                                              const float* dc, size_t dc_stride,
693
                                              float* llf,
694
2.56M
                                              float* JXL_RESTRICT scratch) {
695
2.56M
  using Type = AcStrategyType;
696
2.56M
  HWY_ALIGN float warm_block[4 * 4];
697
2.56M
  HWY_ALIGN float warm_scratch_space[4 * 4 * 4];
698
2.56M
  switch (strategy) {
699
14.5k
    case Type::DCT16X8: {
700
14.5k
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/kBlockDim,
701
14.5k
                        /*LF_ROWS=*/2, /*LF_COLS=*/1, /*ROWS=*/2, /*COLS=*/1>(
702
14.5k
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
703
14.5k
      break;
704
0
    }
705
1.83M
    case Type::DCT8X16: {
706
1.83M
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
707
1.83M
                        /*LF_ROWS=*/1, /*LF_COLS=*/2, /*ROWS=*/1, /*COLS=*/2>(
708
1.83M
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
709
1.83M
      break;
710
0
    }
711
423
    case Type::DCT16X16: {
712
423
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
713
423
                        /*LF_ROWS=*/2, /*LF_COLS=*/2, /*ROWS=*/2, /*COLS=*/2>(
714
423
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
715
423
      break;
716
0
    }
717
0
    case Type::DCT32X8: {
718
0
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/kBlockDim,
719
0
                        /*LF_ROWS=*/4, /*LF_COLS=*/1, /*ROWS=*/4, /*COLS=*/1>(
720
0
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
721
0
      break;
722
0
    }
723
0
    case Type::DCT8X32: {
724
0
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
725
0
                        /*LF_ROWS=*/1, /*LF_COLS=*/4, /*ROWS=*/1, /*COLS=*/4>(
726
0
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
727
0
      break;
728
0
    }
729
114
    case Type::DCT32X16: {
730
114
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
731
114
                        /*LF_ROWS=*/4, /*LF_COLS=*/2, /*ROWS=*/4, /*COLS=*/2>(
732
114
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
733
114
      break;
734
0
    }
735
63
    case Type::DCT16X32: {
736
63
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
737
63
                        /*LF_ROWS=*/2, /*LF_COLS=*/4, /*ROWS=*/2, /*COLS=*/4>(
738
63
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
739
63
      break;
740
0
    }
741
57
    case Type::DCT32X32: {
742
57
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
743
57
                        /*LF_ROWS=*/4, /*LF_COLS=*/4, /*ROWS=*/4, /*COLS=*/4>(
744
57
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
745
57
      break;
746
0
    }
747
0
    case Type::DCT64X32: {
748
0
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
749
0
                        /*LF_ROWS=*/8, /*LF_COLS=*/4, /*ROWS=*/8, /*COLS=*/4>(
750
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 8 * 4);
751
0
      break;
752
0
    }
753
0
    case Type::DCT32X64: {
754
0
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
755
0
                        /*LF_ROWS=*/4, /*LF_COLS=*/8, /*ROWS=*/4, /*COLS=*/8>(
756
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 4 * 8);
757
0
      break;
758
0
    }
759
624
    case Type::DCT64X64: {
760
624
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
761
624
                        /*LF_ROWS=*/8, /*LF_COLS=*/8, /*ROWS=*/8, /*COLS=*/8>(
762
624
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 8 * 8);
763
624
      break;
764
0
    }
765
138
    case Type::DCT128X64: {
766
138
      ReinterpretingDCT</*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
767
138
                        /*LF_ROWS=*/16, /*LF_COLS=*/8, /*ROWS=*/16, /*COLS=*/8>(
768
138
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 8);
769
138
      break;
770
0
    }
771
3
    case Type::DCT64X128: {
772
3
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
773
3
                        /*LF_ROWS=*/8, /*LF_COLS=*/16, /*ROWS=*/8, /*COLS=*/16>(
774
3
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 8 * 16);
775
3
      break;
776
0
    }
777
1.42k
    case Type::DCT128X128: {
778
1.42k
      ReinterpretingDCT<
779
1.42k
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
780
1.42k
          /*LF_ROWS=*/16, /*LF_COLS=*/16, /*ROWS=*/16, /*COLS=*/16>(
781
1.42k
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 16);
782
1.42k
      break;
783
0
    }
784
0
    case Type::DCT256X128: {
785
0
      ReinterpretingDCT<
786
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
787
0
          /*LF_ROWS=*/32, /*LF_COLS=*/16, /*ROWS=*/32, /*COLS=*/16>(
788
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 32 * 16);
789
0
      break;
790
0
    }
791
0
    case Type::DCT128X256: {
792
0
      ReinterpretingDCT<
793
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
794
0
          /*LF_ROWS=*/16, /*LF_COLS=*/32, /*ROWS=*/16, /*COLS=*/32>(
795
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 16 * 32);
796
0
      break;
797
0
    }
798
0
    case Type::DCT256X256: {
799
0
      ReinterpretingDCT<
800
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
801
0
          /*LF_ROWS=*/32, /*LF_COLS=*/32, /*ROWS=*/32, /*COLS=*/32>(
802
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 32 * 32);
803
0
      break;
804
0
    }
805
298k
    case Type::DCT:
806
311k
    case Type::DCT2X2:
807
311k
    case Type::DCT4X4:
808
313k
    case Type::DCT4X8:
809
315k
    case Type::DCT8X4:
810
316k
    case Type::AFV0:
811
316k
    case Type::AFV1:
812
316k
    case Type::AFV2:
813
322k
    case Type::AFV3:
814
706k
    case Type::IDENTITY:
815
706k
      llf[0] = dc[0];
816
706k
      break;
817
2.56M
  };
818
2.56M
}
Unexecuted instantiation: enc_group.cc:jxl::N_SSE2::(anonymous namespace)::LowestFrequenciesFromDC(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
dec_group.cc:jxl::N_SSE2::(anonymous namespace)::LowestFrequenciesFromDC(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
Line
Count
Source
694
2.56M
                                              float* JXL_RESTRICT scratch) {
695
2.56M
  using Type = AcStrategyType;
696
2.56M
  HWY_ALIGN float warm_block[4 * 4];
697
2.56M
  HWY_ALIGN float warm_scratch_space[4 * 4 * 4];
698
2.56M
  switch (strategy) {
699
14.5k
    case Type::DCT16X8: {
700
14.5k
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/kBlockDim,
701
14.5k
                        /*LF_ROWS=*/2, /*LF_COLS=*/1, /*ROWS=*/2, /*COLS=*/1>(
702
14.5k
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
703
14.5k
      break;
704
0
    }
705
1.83M
    case Type::DCT8X16: {
706
1.83M
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
707
1.83M
                        /*LF_ROWS=*/1, /*LF_COLS=*/2, /*ROWS=*/1, /*COLS=*/2>(
708
1.83M
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
709
1.83M
      break;
710
0
    }
711
423
    case Type::DCT16X16: {
712
423
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
713
423
                        /*LF_ROWS=*/2, /*LF_COLS=*/2, /*ROWS=*/2, /*COLS=*/2>(
714
423
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
715
423
      break;
716
0
    }
717
0
    case Type::DCT32X8: {
718
0
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/kBlockDim,
719
0
                        /*LF_ROWS=*/4, /*LF_COLS=*/1, /*ROWS=*/4, /*COLS=*/1>(
720
0
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
721
0
      break;
722
0
    }
723
0
    case Type::DCT8X32: {
724
0
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
725
0
                        /*LF_ROWS=*/1, /*LF_COLS=*/4, /*ROWS=*/1, /*COLS=*/4>(
726
0
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
727
0
      break;
728
0
    }
729
114
    case Type::DCT32X16: {
730
114
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
731
114
                        /*LF_ROWS=*/4, /*LF_COLS=*/2, /*ROWS=*/4, /*COLS=*/2>(
732
114
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
733
114
      break;
734
0
    }
735
63
    case Type::DCT16X32: {
736
63
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
737
63
                        /*LF_ROWS=*/2, /*LF_COLS=*/4, /*ROWS=*/2, /*COLS=*/4>(
738
63
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
739
63
      break;
740
0
    }
741
57
    case Type::DCT32X32: {
742
57
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
743
57
                        /*LF_ROWS=*/4, /*LF_COLS=*/4, /*ROWS=*/4, /*COLS=*/4>(
744
57
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
745
57
      break;
746
0
    }
747
0
    case Type::DCT64X32: {
748
0
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
749
0
                        /*LF_ROWS=*/8, /*LF_COLS=*/4, /*ROWS=*/8, /*COLS=*/4>(
750
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 8 * 4);
751
0
      break;
752
0
    }
753
0
    case Type::DCT32X64: {
754
0
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
755
0
                        /*LF_ROWS=*/4, /*LF_COLS=*/8, /*ROWS=*/4, /*COLS=*/8>(
756
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 4 * 8);
757
0
      break;
758
0
    }
759
624
    case Type::DCT64X64: {
760
624
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
761
624
                        /*LF_ROWS=*/8, /*LF_COLS=*/8, /*ROWS=*/8, /*COLS=*/8>(
762
624
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 8 * 8);
763
624
      break;
764
0
    }
765
138
    case Type::DCT128X64: {
766
138
      ReinterpretingDCT</*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
767
138
                        /*LF_ROWS=*/16, /*LF_COLS=*/8, /*ROWS=*/16, /*COLS=*/8>(
768
138
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 8);
769
138
      break;
770
0
    }
771
3
    case Type::DCT64X128: {
772
3
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
773
3
                        /*LF_ROWS=*/8, /*LF_COLS=*/16, /*ROWS=*/8, /*COLS=*/16>(
774
3
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 8 * 16);
775
3
      break;
776
0
    }
777
1.42k
    case Type::DCT128X128: {
778
1.42k
      ReinterpretingDCT<
779
1.42k
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
780
1.42k
          /*LF_ROWS=*/16, /*LF_COLS=*/16, /*ROWS=*/16, /*COLS=*/16>(
781
1.42k
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 16);
782
1.42k
      break;
783
0
    }
784
0
    case Type::DCT256X128: {
785
0
      ReinterpretingDCT<
786
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
787
0
          /*LF_ROWS=*/32, /*LF_COLS=*/16, /*ROWS=*/32, /*COLS=*/16>(
788
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 32 * 16);
789
0
      break;
790
0
    }
791
0
    case Type::DCT128X256: {
792
0
      ReinterpretingDCT<
793
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
794
0
          /*LF_ROWS=*/16, /*LF_COLS=*/32, /*ROWS=*/16, /*COLS=*/32>(
795
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 16 * 32);
796
0
      break;
797
0
    }
798
0
    case Type::DCT256X256: {
799
0
      ReinterpretingDCT<
800
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
801
0
          /*LF_ROWS=*/32, /*LF_COLS=*/32, /*ROWS=*/32, /*COLS=*/32>(
802
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 32 * 32);
803
0
      break;
804
0
    }
805
298k
    case Type::DCT:
806
311k
    case Type::DCT2X2:
807
311k
    case Type::DCT4X4:
808
313k
    case Type::DCT4X8:
809
315k
    case Type::DCT8X4:
810
316k
    case Type::AFV0:
811
316k
    case Type::AFV1:
812
316k
    case Type::AFV2:
813
322k
    case Type::AFV3:
814
706k
    case Type::IDENTITY:
815
706k
      llf[0] = dc[0];
816
706k
      break;
817
2.56M
  };
818
2.56M
}
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SSE2::(anonymous namespace)::LowestFrequenciesFromDC(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SSE2::(anonymous namespace)::LowestFrequenciesFromDC(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
819
820
}  // namespace
821
// NOLINTNEXTLINE(google-readability-namespace-comments)
822
}  // namespace HWY_NAMESPACE
823
}  // namespace jxl
824
HWY_AFTER_NAMESPACE();
825
826
#endif  // LIB_JXL_DEC_TRANSFORMS_INL_H_