Coverage Report

Created: 2026-10-27 06:57

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.82M
                                  float* JXL_RESTRICT scratch_space) {
41
1.82M
  static_assert(LF_ROWS == ROWS,
42
1.82M
                "ReinterpretingDCT should only be called with LF == N");
43
1.82M
  static_assert(LF_COLS == COLS,
44
1.82M
                "ReinterpretingDCT should only be called with LF == N");
45
1.82M
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
1.82M
                                 scratch_space);
47
1.82M
  if (ROWS < COLS) {
48
3.62M
    for (size_t y = 0; y < LF_ROWS; y++) {
49
5.43M
      for (size_t x = 0; x < LF_COLS; x++) {
50
3.62M
        output[y * output_stride + x] =
51
3.62M
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
3.62M
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
3.62M
      }
54
1.81M
    }
55
1.81M
  } else {
56
58.4k
    for (size_t y = 0; y < LF_COLS; y++) {
57
499k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
453k
        output[y * output_stride + x] =
59
453k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
453k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
453k
      }
62
45.7k
    }
63
12.7k
  }
64
1.82M
}
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.6k
                                  float* JXL_RESTRICT scratch_space) {
41
14.6k
  static_assert(LF_ROWS == ROWS,
42
14.6k
                "ReinterpretingDCT should only be called with LF == N");
43
14.6k
  static_assert(LF_COLS == COLS,
44
14.6k
                "ReinterpretingDCT should only be called with LF == N");
45
14.6k
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
14.6k
                                 scratch_space);
47
14.6k
  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.6k
  } else {
56
29.9k
    for (size_t y = 0; y < LF_COLS; y++) {
57
45.3k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
30.0k
        output[y * output_stride + x] =
59
30.0k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
30.0k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
30.0k
      }
62
15.2k
    }
63
14.6k
  }
64
14.6k
}
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.80M
                                  float* JXL_RESTRICT scratch_space) {
41
1.80M
  static_assert(LF_ROWS == ROWS,
42
1.80M
                "ReinterpretingDCT should only be called with LF == N");
43
1.80M
  static_assert(LF_COLS == COLS,
44
1.80M
                "ReinterpretingDCT should only be called with LF == N");
45
1.80M
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
1.80M
                                 scratch_space);
47
1.81M
  if (ROWS < COLS) {
48
3.62M
    for (size_t y = 0; y < LF_ROWS; y++) {
49
5.43M
      for (size_t x = 0; x < LF_COLS; x++) {
50
3.62M
        output[y * output_stride + x] =
51
3.62M
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
3.62M
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
3.62M
      }
54
1.81M
    }
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.80M
}
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
615
                                  float* JXL_RESTRICT scratch_space) {
41
615
  static_assert(LF_ROWS == ROWS,
42
615
                "ReinterpretingDCT should only be called with LF == N");
43
615
  static_assert(LF_COLS == COLS,
44
615
                "ReinterpretingDCT should only be called with LF == N");
45
615
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
615
                                 scratch_space);
47
615
  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
615
  } else {
56
1.84k
    for (size_t y = 0; y < LF_COLS; y++) {
57
3.69k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
2.46k
        output[y * output_stride + x] =
59
2.46k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
2.46k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
2.46k
      }
62
1.23k
    }
63
615
  }
64
615
}
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
159
                                  float* JXL_RESTRICT scratch_space) {
41
159
  static_assert(LF_ROWS == ROWS,
42
159
                "ReinterpretingDCT should only be called with LF == N");
43
159
  static_assert(LF_COLS == COLS,
44
159
                "ReinterpretingDCT should only be called with LF == N");
45
159
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
159
                                 scratch_space);
47
159
  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
159
  } else {
56
477
    for (size_t y = 0; y < LF_COLS; y++) {
57
1.59k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
1.27k
        output[y * output_stride + x] =
59
1.27k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
1.27k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
1.27k
      }
62
318
    }
63
159
  }
64
159
}
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
75
                                  float* JXL_RESTRICT scratch_space) {
41
75
  static_assert(LF_ROWS == ROWS,
42
75
                "ReinterpretingDCT should only be called with LF == N");
43
75
  static_assert(LF_COLS == COLS,
44
75
                "ReinterpretingDCT should only be called with LF == N");
45
75
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
75
                                 scratch_space);
47
75
  if (ROWS < COLS) {
48
225
    for (size_t y = 0; y < LF_ROWS; y++) {
49
750
      for (size_t x = 0; x < LF_COLS; x++) {
50
600
        output[y * output_stride + x] =
51
600
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
600
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
600
      }
54
150
    }
55
75
  } 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
75
}
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
66
                                  float* JXL_RESTRICT scratch_space) {
41
66
  static_assert(LF_ROWS == ROWS,
42
66
                "ReinterpretingDCT should only be called with LF == N");
43
66
  static_assert(LF_COLS == COLS,
44
66
                "ReinterpretingDCT should only be called with LF == N");
45
66
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
66
                                 scratch_space);
47
66
  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
66
  } else {
56
330
    for (size_t y = 0; y < LF_COLS; y++) {
57
1.32k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
1.05k
        output[y * output_stride + x] =
59
1.05k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
1.05k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
1.05k
      }
62
264
    }
63
66
  }
64
66
}
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.60k
    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.41k
                                  float* JXL_RESTRICT scratch_space) {
41
1.41k
  static_assert(LF_ROWS == ROWS,
42
1.41k
                "ReinterpretingDCT should only be called with LF == N");
43
1.41k
  static_assert(LF_COLS == COLS,
44
1.41k
                "ReinterpretingDCT should only be called with LF == N");
45
1.41k
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
1.41k
                                 scratch_space);
47
1.41k
  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.41k
  } else {
56
23.9k
    for (size_t y = 0; y < LF_COLS; y++) {
57
383k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
360k
        output[y * output_stride + x] =
59
360k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
360k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
360k
      }
62
22.5k
    }
63
1.41k
  }
64
1.41k
}
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
26.5k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
26.5k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
26.5k
  static_assert(S % 2 == 0, "S should be even");
70
26.5k
  float temp[kDCTBlockSize];
71
26.5k
  constexpr size_t num_2x2 = S / 2;
72
88.4k
  for (size_t y = 0; y < num_2x2; y++) {
73
247k
    for (size_t x = 0; x < num_2x2; x++) {
74
185k
      float c00 = block[y * kBlockDim + x];
75
185k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
185k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
185k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
185k
      float r00 = c00 + c01 + c10 + c11;
79
185k
      float r01 = c00 + c01 - c10 - c11;
80
185k
      float r10 = c00 - c01 + c10 - c11;
81
185k
      float r11 = c00 - c01 - c10 + c11;
82
185k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
185k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
185k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
185k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
185k
    }
87
61.8k
  }
88
150k
  for (size_t y = 0; y < S; y++) {
89
865k
    for (size_t x = 0; x < S; x++) {
90
742k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
742k
    }
92
123k
  }
93
26.5k
}
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
8.85k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
8.85k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
8.85k
  static_assert(S % 2 == 0, "S should be even");
70
8.85k
  float temp[kDCTBlockSize];
71
8.85k
  constexpr size_t num_2x2 = S / 2;
72
17.7k
  for (size_t y = 0; y < num_2x2; y++) {
73
17.7k
    for (size_t x = 0; x < num_2x2; x++) {
74
8.86k
      float c00 = block[y * kBlockDim + x];
75
8.86k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
8.86k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
8.86k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
8.86k
      float r00 = c00 + c01 + c10 + c11;
79
8.86k
      float r01 = c00 + c01 - c10 - c11;
80
8.86k
      float r10 = c00 - c01 + c10 - c11;
81
8.86k
      float r11 = c00 - c01 - c10 + c11;
82
8.86k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
8.86k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
8.86k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
8.86k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
8.86k
    }
87
8.86k
  }
88
26.5k
  for (size_t y = 0; y < S; y++) {
89
53.0k
    for (size_t x = 0; x < S; x++) {
90
35.3k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
35.3k
    }
92
17.6k
  }
93
8.85k
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Line
Count
Source
67
8.83k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
8.83k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
8.83k
  static_assert(S % 2 == 0, "S should be even");
70
8.83k
  float temp[kDCTBlockSize];
71
8.83k
  constexpr size_t num_2x2 = S / 2;
72
26.5k
  for (size_t y = 0; y < num_2x2; y++) {
73
53.0k
    for (size_t x = 0; x < num_2x2; x++) {
74
35.3k
      float c00 = block[y * kBlockDim + x];
75
35.3k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
35.3k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
35.3k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
35.3k
      float r00 = c00 + c01 + c10 + c11;
79
35.3k
      float r01 = c00 + c01 - c10 - c11;
80
35.3k
      float r10 = c00 - c01 + c10 - c11;
81
35.3k
      float r11 = c00 - c01 - c10 + c11;
82
35.3k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
35.3k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
35.3k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
35.3k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
35.3k
    }
87
17.6k
  }
88
44.1k
  for (size_t y = 0; y < S; y++) {
89
176k
    for (size_t x = 0; x < S; x++) {
90
141k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
141k
    }
92
35.3k
  }
93
8.83k
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
Line
Count
Source
67
8.83k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
8.83k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
8.83k
  static_assert(S % 2 == 0, "S should be even");
70
8.83k
  float temp[kDCTBlockSize];
71
8.83k
  constexpr size_t num_2x2 = S / 2;
72
44.1k
  for (size_t y = 0; y < num_2x2; y++) {
73
176k
    for (size_t x = 0; x < num_2x2; x++) {
74
141k
      float c00 = block[y * kBlockDim + x];
75
141k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
141k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
141k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
141k
      float r00 = c00 + c01 + c10 + c11;
79
141k
      float r01 = c00 + c01 - c10 - c11;
80
141k
      float r10 = c00 - c01 + c10 - c11;
81
141k
      float r11 = c00 - c01 - c10 + c11;
82
141k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
141k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
141k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
141k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
141k
    }
87
35.3k
  }
88
79.5k
  for (size_t y = 0; y < S; y++) {
89
636k
    for (size_t x = 0; x < S; x++) {
90
565k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
565k
    }
92
70.6k
  }
93
8.83k
}
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
5.60k
void AFVIDCT4x4(const float* JXL_RESTRICT coeffs, float* JXL_RESTRICT pixels) {
96
5.60k
  HWY_ALIGN static constexpr float k4x4AFVBasis[16][16] = {
97
5.60k
      {
98
5.60k
          0.25,
99
5.60k
          0.25,
100
5.60k
          0.25,
101
5.60k
          0.25,
102
5.60k
          0.25,
103
5.60k
          0.25,
104
5.60k
          0.25,
105
5.60k
          0.25,
106
5.60k
          0.25,
107
5.60k
          0.25,
108
5.60k
          0.25,
109
5.60k
          0.25,
110
5.60k
          0.25,
111
5.60k
          0.25,
112
5.60k
          0.25,
113
5.60k
          0.25,
114
5.60k
      },
115
5.60k
      {
116
5.60k
          0.876902929799142f,
117
5.60k
          0.2206518106944235f,
118
5.60k
          -0.10140050393753763f,
119
5.60k
          -0.1014005039375375f,
120
5.60k
          0.2206518106944236f,
121
5.60k
          -0.10140050393753777f,
122
5.60k
          -0.10140050393753772f,
123
5.60k
          -0.10140050393753763f,
124
5.60k
          -0.10140050393753758f,
125
5.60k
          -0.10140050393753769f,
126
5.60k
          -0.1014005039375375f,
127
5.60k
          -0.10140050393753768f,
128
5.60k
          -0.10140050393753768f,
129
5.60k
          -0.10140050393753759f,
130
5.60k
          -0.10140050393753763f,
131
5.60k
          -0.10140050393753741f,
132
5.60k
      },
133
5.60k
      {
134
5.60k
          0.0,
135
5.60k
          0.0,
136
5.60k
          0.40670075830260755f,
137
5.60k
          0.44444816619734445f,
138
5.60k
          0.0,
139
5.60k
          0.0,
140
5.60k
          0.19574399372042936f,
141
5.60k
          0.2929100136981264f,
142
5.60k
          -0.40670075830260716f,
143
5.60k
          -0.19574399372042872f,
144
5.60k
          0.0,
145
5.60k
          0.11379074460448091f,
146
5.60k
          -0.44444816619734384f,
147
5.60k
          -0.29291001369812636f,
148
5.60k
          -0.1137907446044814f,
149
5.60k
          0.0,
150
5.60k
      },
151
5.60k
      {
152
5.60k
          0.0,
153
5.60k
          0.0,
154
5.60k
          -0.21255748058288748f,
155
5.60k
          0.3085497062849767f,
156
5.60k
          0.0,
157
5.60k
          0.4706702258572536f,
158
5.60k
          -0.1621205195722993f,
159
5.60k
          0.0,
160
5.60k
          -0.21255748058287047f,
161
5.60k
          -0.16212051957228327f,
162
5.60k
          -0.47067022585725277f,
163
5.60k
          -0.1464291867126764f,
164
5.60k
          0.3085497062849487f,
165
5.60k
          0.0,
166
5.60k
          -0.14642918671266536f,
167
5.60k
          0.4251149611657548f,
168
5.60k
      },
169
5.60k
      {
170
5.60k
          0.0,
171
5.60k
          -0.7071067811865474f,
172
5.60k
          0.0,
173
5.60k
          0.0,
174
5.60k
          0.7071067811865476f,
175
5.60k
          0.0,
176
5.60k
          0.0,
177
5.60k
          0.0,
178
5.60k
          0.0,
179
5.60k
          0.0,
180
5.60k
          0.0,
181
5.60k
          0.0,
182
5.60k
          0.0,
183
5.60k
          0.0,
184
5.60k
          0.0,
185
5.60k
          0.0,
186
5.60k
      },
187
5.60k
      {
188
5.60k
          -0.4105377591765233f,
189
5.60k
          0.6235485373547691f,
190
5.60k
          -0.06435071657946274f,
191
5.60k
          -0.06435071657946266f,
192
5.60k
          0.6235485373547694f,
193
5.60k
          -0.06435071657946284f,
194
5.60k
          -0.0643507165794628f,
195
5.60k
          -0.06435071657946274f,
196
5.60k
          -0.06435071657946272f,
197
5.60k
          -0.06435071657946279f,
198
5.60k
          -0.06435071657946266f,
199
5.60k
          -0.06435071657946277f,
200
5.60k
          -0.06435071657946277f,
201
5.60k
          -0.06435071657946273f,
202
5.60k
          -0.06435071657946274f,
203
5.60k
          -0.0643507165794626f,
204
5.60k
      },
205
5.60k
      {
206
5.60k
          0.0,
207
5.60k
          0.0,
208
5.60k
          -0.4517556589999482f,
209
5.60k
          0.15854503551840063f,
210
5.60k
          0.0,
211
5.60k
          -0.04038515160822202f,
212
5.60k
          0.0074182263792423875f,
213
5.60k
          0.39351034269210167f,
214
5.60k
          -0.45175565899994635f,
215
5.60k
          0.007418226379244351f,
216
5.60k
          0.1107416575309343f,
217
5.60k
          0.08298163094882051f,
218
5.60k
          0.15854503551839705f,
219
5.60k
          0.3935103426921022f,
220
5.60k
          0.0829816309488214f,
221
5.60k
          -0.45175565899994796f,
222
5.60k
      },
223
5.60k
      {
224
5.60k
          0.0,
225
5.60k
          0.0,
226
5.60k
          -0.304684750724869f,
227
5.60k
          0.5112616136591823f,
228
5.60k
          0.0,
229
5.60k
          0.0,
230
5.60k
          -0.290480129728998f,
231
5.60k
          -0.06578701549142804f,
232
5.60k
          0.304684750724884f,
233
5.60k
          0.2904801297290076f,
234
5.60k
          0.0,
235
5.60k
          -0.23889773523344604f,
236
5.60k
          -0.5112616136592012f,
237
5.60k
          0.06578701549142545f,
238
5.60k
          0.23889773523345467f,
239
5.60k
          0.0,
240
5.60k
      },
241
5.60k
      {
242
5.60k
          0.0,
243
5.60k
          0.0,
244
5.60k
          0.3017929516615495f,
245
5.60k
          0.25792362796341184f,
246
5.60k
          0.0,
247
5.60k
          0.16272340142866204f,
248
5.60k
          0.09520022653475037f,
249
5.60k
          0.0,
250
5.60k
          0.3017929516615503f,
251
5.60k
          0.09520022653475055f,
252
5.60k
          -0.16272340142866173f,
253
5.60k
          -0.35312385449816297f,
254
5.60k
          0.25792362796341295f,
255
5.60k
          0.0,
256
5.60k
          -0.3531238544981624f,
257
5.60k
          -0.6035859033230976f,
258
5.60k
      },
259
5.60k
      {
260
5.60k
          0.0,
261
5.60k
          0.0,
262
5.60k
          0.40824829046386274f,
263
5.60k
          0.0,
264
5.60k
          0.0,
265
5.60k
          0.0,
266
5.60k
          0.0,
267
5.60k
          -0.4082482904638628f,
268
5.60k
          -0.4082482904638635f,
269
5.60k
          0.0,
270
5.60k
          0.0,
271
5.60k
          -0.40824829046386296f,
272
5.60k
          0.0,
273
5.60k
          0.4082482904638634f,
274
5.60k
          0.408248290463863f,
275
5.60k
          0.0,
276
5.60k
      },
277
5.60k
      {
278
5.60k
          0.0,
279
5.60k
          0.0,
280
5.60k
          0.1747866975480809f,
281
5.60k
          0.0812611176717539f,
282
5.60k
          0.0,
283
5.60k
          0.0,
284
5.60k
          -0.3675398009862027f,
285
5.60k
          -0.307882213957909f,
286
5.60k
          -0.17478669754808135f,
287
5.60k
          0.3675398009862011f,
288
5.60k
          0.0,
289
5.60k
          0.4826689115059883f,
290
5.60k
          -0.08126111767175039f,
291
5.60k
          0.30788221395790305f,
292
5.60k
          -0.48266891150598584f,
293
5.60k
          0.0,
294
5.60k
      },
295
5.60k
      {
296
5.60k
          0.0,
297
5.60k
          0.0,
298
5.60k
          -0.21105601049335784f,
299
5.60k
          0.18567180916109802f,
300
5.60k
          0.0,
301
5.60k
          0.0,
302
5.60k
          0.49215859013738733f,
303
5.60k
          -0.38525013709251915f,
304
5.60k
          0.21105601049335806f,
305
5.60k
          -0.49215859013738905f,
306
5.60k
          0.0,
307
5.60k
          0.17419412659916217f,
308
5.60k
          -0.18567180916109904f,
309
5.60k
          0.3852501370925211f,
310
5.60k
          -0.1741941265991621f,
311
5.60k
          0.0,
312
5.60k
      },
313
5.60k
      {
314
5.60k
          0.0,
315
5.60k
          0.0,
316
5.60k
          -0.14266084808807264f,
317
5.60k
          -0.3416446842253372f,
318
5.60k
          0.0,
319
5.60k
          0.7367497537172237f,
320
5.60k
          0.24627107722075148f,
321
5.60k
          -0.08574019035519306f,
322
5.60k
          -0.14266084808807344f,
323
5.60k
          0.24627107722075137f,
324
5.60k
          0.14883399227113567f,
325
5.60k
          -0.04768680350229251f,
326
5.60k
          -0.3416446842253373f,
327
5.60k
          -0.08574019035519267f,
328
5.60k
          -0.047686803502292804f,
329
5.60k
          -0.14266084808807242f,
330
5.60k
      },
331
5.60k
      {
332
5.60k
          0.0,
333
5.60k
          0.0,
334
5.60k
          -0.13813540350758585f,
335
5.60k
          0.3302282550303788f,
336
5.60k
          0.0,
337
5.60k
          0.08755115000587084f,
338
5.60k
          -0.07946706605909573f,
339
5.60k
          -0.4613374887461511f,
340
5.60k
          -0.13813540350758294f,
341
5.60k
          -0.07946706605910261f,
342
5.60k
          0.49724647109535086f,
343
5.60k
          0.12538059448563663f,
344
5.60k
          0.3302282550303805f,
345
5.60k
          -0.4613374887461554f,
346
5.60k
          0.12538059448564315f,
347
5.60k
          -0.13813540350758452f,
348
5.60k
      },
349
5.60k
      {
350
5.60k
          0.0,
351
5.60k
          0.0,
352
5.60k
          -0.17437602599651067f,
353
5.60k
          0.0702790691196284f,
354
5.60k
          0.0,
355
5.60k
          -0.2921026642334881f,
356
5.60k
          0.3623817333531167f,
357
5.60k
          0.0,
358
5.60k
          -0.1743760259965108f,
359
5.60k
          0.36238173335311646f,
360
5.60k
          0.29210266423348785f,
361
5.60k
          -0.4326608024727445f,
362
5.60k
          0.07027906911962818f,
363
5.60k
          0.0,
364
5.60k
          -0.4326608024727457f,
365
5.60k
          0.34875205199302267f,
366
5.60k
      },
367
5.60k
      {
368
5.60k
          0.0,
369
5.60k
          0.0,
370
5.60k
          0.11354987314994337f,
371
5.60k
          -0.07417504595810355f,
372
5.60k
          0.0,
373
5.60k
          0.19402893032594343f,
374
5.60k
          -0.435190496523228f,
375
5.60k
          0.21918684838857466f,
376
5.60k
          0.11354987314994257f,
377
5.60k
          -0.4351904965232251f,
378
5.60k
          0.5550443808910661f,
379
5.60k
          -0.25468277124066463f,
380
5.60k
          -0.07417504595810233f,
381
5.60k
          0.2191868483885728f,
382
5.60k
          -0.25468277124066413f,
383
5.60k
          0.1135498731499429f,
384
5.60k
      },
385
5.60k
  };
386
387
5.60k
  const HWY_CAPPED(float, 16) d;
388
28.0k
  for (size_t i = 0; i < 16; i += Lanes(d)) {
389
22.4k
    auto pixel = Zero(d);
390
381k
    for (size_t j = 0; j < 16; j++) {
391
358k
      auto cf = Set(d, coeffs[j]);
392
358k
      auto basis = Load(d, k4x4AFVBasis[j] + i);
393
358k
      pixel = MulAdd(cf, basis, pixel);
394
358k
    }
395
22.4k
    Store(pixel, d, pixels + i);
396
22.4k
  }
397
5.60k
}
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
5.60k
void AFVIDCT4x4(const float* JXL_RESTRICT coeffs, float* JXL_RESTRICT pixels) {
96
5.60k
  HWY_ALIGN static constexpr float k4x4AFVBasis[16][16] = {
97
5.60k
      {
98
5.60k
          0.25,
99
5.60k
          0.25,
100
5.60k
          0.25,
101
5.60k
          0.25,
102
5.60k
          0.25,
103
5.60k
          0.25,
104
5.60k
          0.25,
105
5.60k
          0.25,
106
5.60k
          0.25,
107
5.60k
          0.25,
108
5.60k
          0.25,
109
5.60k
          0.25,
110
5.60k
          0.25,
111
5.60k
          0.25,
112
5.60k
          0.25,
113
5.60k
          0.25,
114
5.60k
      },
115
5.60k
      {
116
5.60k
          0.876902929799142f,
117
5.60k
          0.2206518106944235f,
118
5.60k
          -0.10140050393753763f,
119
5.60k
          -0.1014005039375375f,
120
5.60k
          0.2206518106944236f,
121
5.60k
          -0.10140050393753777f,
122
5.60k
          -0.10140050393753772f,
123
5.60k
          -0.10140050393753763f,
124
5.60k
          -0.10140050393753758f,
125
5.60k
          -0.10140050393753769f,
126
5.60k
          -0.1014005039375375f,
127
5.60k
          -0.10140050393753768f,
128
5.60k
          -0.10140050393753768f,
129
5.60k
          -0.10140050393753759f,
130
5.60k
          -0.10140050393753763f,
131
5.60k
          -0.10140050393753741f,
132
5.60k
      },
133
5.60k
      {
134
5.60k
          0.0,
135
5.60k
          0.0,
136
5.60k
          0.40670075830260755f,
137
5.60k
          0.44444816619734445f,
138
5.60k
          0.0,
139
5.60k
          0.0,
140
5.60k
          0.19574399372042936f,
141
5.60k
          0.2929100136981264f,
142
5.60k
          -0.40670075830260716f,
143
5.60k
          -0.19574399372042872f,
144
5.60k
          0.0,
145
5.60k
          0.11379074460448091f,
146
5.60k
          -0.44444816619734384f,
147
5.60k
          -0.29291001369812636f,
148
5.60k
          -0.1137907446044814f,
149
5.60k
          0.0,
150
5.60k
      },
151
5.60k
      {
152
5.60k
          0.0,
153
5.60k
          0.0,
154
5.60k
          -0.21255748058288748f,
155
5.60k
          0.3085497062849767f,
156
5.60k
          0.0,
157
5.60k
          0.4706702258572536f,
158
5.60k
          -0.1621205195722993f,
159
5.60k
          0.0,
160
5.60k
          -0.21255748058287047f,
161
5.60k
          -0.16212051957228327f,
162
5.60k
          -0.47067022585725277f,
163
5.60k
          -0.1464291867126764f,
164
5.60k
          0.3085497062849487f,
165
5.60k
          0.0,
166
5.60k
          -0.14642918671266536f,
167
5.60k
          0.4251149611657548f,
168
5.60k
      },
169
5.60k
      {
170
5.60k
          0.0,
171
5.60k
          -0.7071067811865474f,
172
5.60k
          0.0,
173
5.60k
          0.0,
174
5.60k
          0.7071067811865476f,
175
5.60k
          0.0,
176
5.60k
          0.0,
177
5.60k
          0.0,
178
5.60k
          0.0,
179
5.60k
          0.0,
180
5.60k
          0.0,
181
5.60k
          0.0,
182
5.60k
          0.0,
183
5.60k
          0.0,
184
5.60k
          0.0,
185
5.60k
          0.0,
186
5.60k
      },
187
5.60k
      {
188
5.60k
          -0.4105377591765233f,
189
5.60k
          0.6235485373547691f,
190
5.60k
          -0.06435071657946274f,
191
5.60k
          -0.06435071657946266f,
192
5.60k
          0.6235485373547694f,
193
5.60k
          -0.06435071657946284f,
194
5.60k
          -0.0643507165794628f,
195
5.60k
          -0.06435071657946274f,
196
5.60k
          -0.06435071657946272f,
197
5.60k
          -0.06435071657946279f,
198
5.60k
          -0.06435071657946266f,
199
5.60k
          -0.06435071657946277f,
200
5.60k
          -0.06435071657946277f,
201
5.60k
          -0.06435071657946273f,
202
5.60k
          -0.06435071657946274f,
203
5.60k
          -0.0643507165794626f,
204
5.60k
      },
205
5.60k
      {
206
5.60k
          0.0,
207
5.60k
          0.0,
208
5.60k
          -0.4517556589999482f,
209
5.60k
          0.15854503551840063f,
210
5.60k
          0.0,
211
5.60k
          -0.04038515160822202f,
212
5.60k
          0.0074182263792423875f,
213
5.60k
          0.39351034269210167f,
214
5.60k
          -0.45175565899994635f,
215
5.60k
          0.007418226379244351f,
216
5.60k
          0.1107416575309343f,
217
5.60k
          0.08298163094882051f,
218
5.60k
          0.15854503551839705f,
219
5.60k
          0.3935103426921022f,
220
5.60k
          0.0829816309488214f,
221
5.60k
          -0.45175565899994796f,
222
5.60k
      },
223
5.60k
      {
224
5.60k
          0.0,
225
5.60k
          0.0,
226
5.60k
          -0.304684750724869f,
227
5.60k
          0.5112616136591823f,
228
5.60k
          0.0,
229
5.60k
          0.0,
230
5.60k
          -0.290480129728998f,
231
5.60k
          -0.06578701549142804f,
232
5.60k
          0.304684750724884f,
233
5.60k
          0.2904801297290076f,
234
5.60k
          0.0,
235
5.60k
          -0.23889773523344604f,
236
5.60k
          -0.5112616136592012f,
237
5.60k
          0.06578701549142545f,
238
5.60k
          0.23889773523345467f,
239
5.60k
          0.0,
240
5.60k
      },
241
5.60k
      {
242
5.60k
          0.0,
243
5.60k
          0.0,
244
5.60k
          0.3017929516615495f,
245
5.60k
          0.25792362796341184f,
246
5.60k
          0.0,
247
5.60k
          0.16272340142866204f,
248
5.60k
          0.09520022653475037f,
249
5.60k
          0.0,
250
5.60k
          0.3017929516615503f,
251
5.60k
          0.09520022653475055f,
252
5.60k
          -0.16272340142866173f,
253
5.60k
          -0.35312385449816297f,
254
5.60k
          0.25792362796341295f,
255
5.60k
          0.0,
256
5.60k
          -0.3531238544981624f,
257
5.60k
          -0.6035859033230976f,
258
5.60k
      },
259
5.60k
      {
260
5.60k
          0.0,
261
5.60k
          0.0,
262
5.60k
          0.40824829046386274f,
263
5.60k
          0.0,
264
5.60k
          0.0,
265
5.60k
          0.0,
266
5.60k
          0.0,
267
5.60k
          -0.4082482904638628f,
268
5.60k
          -0.4082482904638635f,
269
5.60k
          0.0,
270
5.60k
          0.0,
271
5.60k
          -0.40824829046386296f,
272
5.60k
          0.0,
273
5.60k
          0.4082482904638634f,
274
5.60k
          0.408248290463863f,
275
5.60k
          0.0,
276
5.60k
      },
277
5.60k
      {
278
5.60k
          0.0,
279
5.60k
          0.0,
280
5.60k
          0.1747866975480809f,
281
5.60k
          0.0812611176717539f,
282
5.60k
          0.0,
283
5.60k
          0.0,
284
5.60k
          -0.3675398009862027f,
285
5.60k
          -0.307882213957909f,
286
5.60k
          -0.17478669754808135f,
287
5.60k
          0.3675398009862011f,
288
5.60k
          0.0,
289
5.60k
          0.4826689115059883f,
290
5.60k
          -0.08126111767175039f,
291
5.60k
          0.30788221395790305f,
292
5.60k
          -0.48266891150598584f,
293
5.60k
          0.0,
294
5.60k
      },
295
5.60k
      {
296
5.60k
          0.0,
297
5.60k
          0.0,
298
5.60k
          -0.21105601049335784f,
299
5.60k
          0.18567180916109802f,
300
5.60k
          0.0,
301
5.60k
          0.0,
302
5.60k
          0.49215859013738733f,
303
5.60k
          -0.38525013709251915f,
304
5.60k
          0.21105601049335806f,
305
5.60k
          -0.49215859013738905f,
306
5.60k
          0.0,
307
5.60k
          0.17419412659916217f,
308
5.60k
          -0.18567180916109904f,
309
5.60k
          0.3852501370925211f,
310
5.60k
          -0.1741941265991621f,
311
5.60k
          0.0,
312
5.60k
      },
313
5.60k
      {
314
5.60k
          0.0,
315
5.60k
          0.0,
316
5.60k
          -0.14266084808807264f,
317
5.60k
          -0.3416446842253372f,
318
5.60k
          0.0,
319
5.60k
          0.7367497537172237f,
320
5.60k
          0.24627107722075148f,
321
5.60k
          -0.08574019035519306f,
322
5.60k
          -0.14266084808807344f,
323
5.60k
          0.24627107722075137f,
324
5.60k
          0.14883399227113567f,
325
5.60k
          -0.04768680350229251f,
326
5.60k
          -0.3416446842253373f,
327
5.60k
          -0.08574019035519267f,
328
5.60k
          -0.047686803502292804f,
329
5.60k
          -0.14266084808807242f,
330
5.60k
      },
331
5.60k
      {
332
5.60k
          0.0,
333
5.60k
          0.0,
334
5.60k
          -0.13813540350758585f,
335
5.60k
          0.3302282550303788f,
336
5.60k
          0.0,
337
5.60k
          0.08755115000587084f,
338
5.60k
          -0.07946706605909573f,
339
5.60k
          -0.4613374887461511f,
340
5.60k
          -0.13813540350758294f,
341
5.60k
          -0.07946706605910261f,
342
5.60k
          0.49724647109535086f,
343
5.60k
          0.12538059448563663f,
344
5.60k
          0.3302282550303805f,
345
5.60k
          -0.4613374887461554f,
346
5.60k
          0.12538059448564315f,
347
5.60k
          -0.13813540350758452f,
348
5.60k
      },
349
5.60k
      {
350
5.60k
          0.0,
351
5.60k
          0.0,
352
5.60k
          -0.17437602599651067f,
353
5.60k
          0.0702790691196284f,
354
5.60k
          0.0,
355
5.60k
          -0.2921026642334881f,
356
5.60k
          0.3623817333531167f,
357
5.60k
          0.0,
358
5.60k
          -0.1743760259965108f,
359
5.60k
          0.36238173335311646f,
360
5.60k
          0.29210266423348785f,
361
5.60k
          -0.4326608024727445f,
362
5.60k
          0.07027906911962818f,
363
5.60k
          0.0,
364
5.60k
          -0.4326608024727457f,
365
5.60k
          0.34875205199302267f,
366
5.60k
      },
367
5.60k
      {
368
5.60k
          0.0,
369
5.60k
          0.0,
370
5.60k
          0.11354987314994337f,
371
5.60k
          -0.07417504595810355f,
372
5.60k
          0.0,
373
5.60k
          0.19402893032594343f,
374
5.60k
          -0.435190496523228f,
375
5.60k
          0.21918684838857466f,
376
5.60k
          0.11354987314994257f,
377
5.60k
          -0.4351904965232251f,
378
5.60k
          0.5550443808910661f,
379
5.60k
          -0.25468277124066463f,
380
5.60k
          -0.07417504595810233f,
381
5.60k
          0.2191868483885728f,
382
5.60k
          -0.25468277124066413f,
383
5.60k
          0.1135498731499429f,
384
5.60k
      },
385
5.60k
  };
386
387
5.60k
  const HWY_CAPPED(float, 16) d;
388
28.0k
  for (size_t i = 0; i < 16; i += Lanes(d)) {
389
22.4k
    auto pixel = Zero(d);
390
381k
    for (size_t j = 0; j < 16; j++) {
391
358k
      auto cf = Set(d, coeffs[j]);
392
358k
      auto basis = Load(d, k4x4AFVBasis[j] + i);
393
358k
      pixel = MulAdd(cf, basis, pixel);
394
358k
    }
395
22.4k
    Store(pixel, d, pixels + i);
396
22.4k
  }
397
5.60k
}
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
5.60k
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
5.60k
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
5.60k
  size_t afv_x = afv_kind & 1;
404
5.60k
  size_t afv_y = afv_kind / 2;
405
5.60k
  float dcs[3] = {};
406
5.60k
  float block00 = coefficients[0];
407
5.60k
  float block01 = coefficients[1];
408
5.60k
  float block10 = coefficients[8];
409
5.60k
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
5.60k
  dcs[1] = (block00 + block10 - block01);
411
5.60k
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
5.60k
  HWY_ALIGN float coeff[4 * 4];
414
5.60k
  coeff[0] = dcs[0];
415
28.0k
  for (size_t iy = 0; iy < 4; iy++) {
416
112k
    for (size_t ix = 0; ix < 4; ix++) {
417
89.7k
      if (ix == 0 && iy == 0) continue;
418
84.1k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
84.1k
    }
420
22.4k
  }
421
5.60k
  HWY_ALIGN float block[4 * 8];
422
5.60k
  AFVIDCT4x4(coeff, block);
423
28.0k
  for (size_t iy = 0; iy < 4; iy++) {
424
112k
    for (size_t ix = 0; ix < 4; ix++) {
425
89.7k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
89.7k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
89.7k
    }
428
22.4k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
5.60k
  block[0] = dcs[1];
431
28.0k
  for (size_t iy = 0; iy < 4; iy++) {
432
112k
    for (size_t ix = 0; ix < 4; ix++) {
433
89.7k
      if (ix == 0 && iy == 0) continue;
434
84.1k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
84.1k
    }
436
22.4k
  }
437
5.60k
  ComputeScaledIDCT<4, 4>()(
438
5.60k
      block,
439
5.60k
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
5.60k
            pixels_stride),
441
5.60k
      scratch_space);
442
  // IDCT4x8.
443
5.60k
  block[0] = dcs[2];
444
28.0k
  for (size_t iy = 0; iy < 4; iy++) {
445
201k
    for (size_t ix = 0; ix < 8; ix++) {
446
179k
      if (ix == 0 && iy == 0) continue;
447
173k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
173k
    }
449
22.4k
  }
450
5.60k
  ComputeScaledIDCT<4, 8>()(
451
5.60k
      block,
452
5.60k
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
5.60k
      scratch_space);
454
5.60k
}
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
150
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
150
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
150
  size_t afv_x = afv_kind & 1;
404
150
  size_t afv_y = afv_kind / 2;
405
150
  float dcs[3] = {};
406
150
  float block00 = coefficients[0];
407
150
  float block01 = coefficients[1];
408
150
  float block10 = coefficients[8];
409
150
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
150
  dcs[1] = (block00 + block10 - block01);
411
150
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
150
  HWY_ALIGN float coeff[4 * 4];
414
150
  coeff[0] = dcs[0];
415
750
  for (size_t iy = 0; iy < 4; iy++) {
416
3.00k
    for (size_t ix = 0; ix < 4; ix++) {
417
2.40k
      if (ix == 0 && iy == 0) continue;
418
2.25k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
2.25k
    }
420
600
  }
421
150
  HWY_ALIGN float block[4 * 8];
422
150
  AFVIDCT4x4(coeff, block);
423
750
  for (size_t iy = 0; iy < 4; iy++) {
424
3.00k
    for (size_t ix = 0; ix < 4; ix++) {
425
2.40k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
2.40k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
2.40k
    }
428
600
  }
429
  // IDCT4x4 in (odd, even) positions.
430
150
  block[0] = dcs[1];
431
750
  for (size_t iy = 0; iy < 4; iy++) {
432
3.00k
    for (size_t ix = 0; ix < 4; ix++) {
433
2.40k
      if (ix == 0 && iy == 0) continue;
434
2.25k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
2.25k
    }
436
600
  }
437
150
  ComputeScaledIDCT<4, 4>()(
438
150
      block,
439
150
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
150
            pixels_stride),
441
150
      scratch_space);
442
  // IDCT4x8.
443
150
  block[0] = dcs[2];
444
750
  for (size_t iy = 0; iy < 4; iy++) {
445
5.40k
    for (size_t ix = 0; ix < 8; ix++) {
446
4.80k
      if (ix == 0 && iy == 0) continue;
447
4.65k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
4.65k
    }
449
600
  }
450
150
  ComputeScaledIDCT<4, 8>()(
451
150
      block,
452
150
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
150
      scratch_space);
454
150
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Line
Count
Source
401
39
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
39
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
39
  size_t afv_x = afv_kind & 1;
404
39
  size_t afv_y = afv_kind / 2;
405
39
  float dcs[3] = {};
406
39
  float block00 = coefficients[0];
407
39
  float block01 = coefficients[1];
408
39
  float block10 = coefficients[8];
409
39
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
39
  dcs[1] = (block00 + block10 - block01);
411
39
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
39
  HWY_ALIGN float coeff[4 * 4];
414
39
  coeff[0] = dcs[0];
415
195
  for (size_t iy = 0; iy < 4; iy++) {
416
780
    for (size_t ix = 0; ix < 4; ix++) {
417
624
      if (ix == 0 && iy == 0) continue;
418
585
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
585
    }
420
156
  }
421
39
  HWY_ALIGN float block[4 * 8];
422
39
  AFVIDCT4x4(coeff, block);
423
195
  for (size_t iy = 0; iy < 4; iy++) {
424
780
    for (size_t ix = 0; ix < 4; ix++) {
425
624
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
624
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
624
    }
428
156
  }
429
  // IDCT4x4 in (odd, even) positions.
430
39
  block[0] = dcs[1];
431
195
  for (size_t iy = 0; iy < 4; iy++) {
432
780
    for (size_t ix = 0; ix < 4; ix++) {
433
624
      if (ix == 0 && iy == 0) continue;
434
585
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
585
    }
436
156
  }
437
39
  ComputeScaledIDCT<4, 4>()(
438
39
      block,
439
39
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
39
            pixels_stride),
441
39
      scratch_space);
442
  // IDCT4x8.
443
39
  block[0] = dcs[2];
444
195
  for (size_t iy = 0; iy < 4; iy++) {
445
1.40k
    for (size_t ix = 0; ix < 8; ix++) {
446
1.24k
      if (ix == 0 && iy == 0) continue;
447
1.20k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
1.20k
    }
449
156
  }
450
39
  ComputeScaledIDCT<4, 8>()(
451
39
      block,
452
39
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
39
      scratch_space);
454
39
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Line
Count
Source
401
417
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
417
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
417
  size_t afv_x = afv_kind & 1;
404
417
  size_t afv_y = afv_kind / 2;
405
417
  float dcs[3] = {};
406
417
  float block00 = coefficients[0];
407
417
  float block01 = coefficients[1];
408
417
  float block10 = coefficients[8];
409
417
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
417
  dcs[1] = (block00 + block10 - block01);
411
417
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
417
  HWY_ALIGN float coeff[4 * 4];
414
417
  coeff[0] = dcs[0];
415
2.08k
  for (size_t iy = 0; iy < 4; iy++) {
416
8.34k
    for (size_t ix = 0; ix < 4; ix++) {
417
6.67k
      if (ix == 0 && iy == 0) continue;
418
6.25k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
6.25k
    }
420
1.66k
  }
421
417
  HWY_ALIGN float block[4 * 8];
422
417
  AFVIDCT4x4(coeff, block);
423
2.08k
  for (size_t iy = 0; iy < 4; iy++) {
424
8.34k
    for (size_t ix = 0; ix < 4; ix++) {
425
6.67k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
6.67k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
6.67k
    }
428
1.66k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
417
  block[0] = dcs[1];
431
2.08k
  for (size_t iy = 0; iy < 4; iy++) {
432
8.34k
    for (size_t ix = 0; ix < 4; ix++) {
433
6.67k
      if (ix == 0 && iy == 0) continue;
434
6.25k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
6.25k
    }
436
1.66k
  }
437
417
  ComputeScaledIDCT<4, 4>()(
438
417
      block,
439
417
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
417
            pixels_stride),
441
417
      scratch_space);
442
  // IDCT4x8.
443
417
  block[0] = dcs[2];
444
2.08k
  for (size_t iy = 0; iy < 4; iy++) {
445
15.0k
    for (size_t ix = 0; ix < 8; ix++) {
446
13.3k
      if (ix == 0 && iy == 0) continue;
447
12.9k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
12.9k
    }
449
1.66k
  }
450
417
  ComputeScaledIDCT<4, 8>()(
451
417
      block,
452
417
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
417
      scratch_space);
454
417
}
dec_group.cc:void jxl::N_SSE2::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
Line
Count
Source
401
5.00k
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
5.00k
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
5.00k
  size_t afv_x = afv_kind & 1;
404
5.00k
  size_t afv_y = afv_kind / 2;
405
5.00k
  float dcs[3] = {};
406
5.00k
  float block00 = coefficients[0];
407
5.00k
  float block01 = coefficients[1];
408
5.00k
  float block10 = coefficients[8];
409
5.00k
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
5.00k
  dcs[1] = (block00 + block10 - block01);
411
5.00k
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
5.00k
  HWY_ALIGN float coeff[4 * 4];
414
5.00k
  coeff[0] = dcs[0];
415
25.0k
  for (size_t iy = 0; iy < 4; iy++) {
416
100k
    for (size_t ix = 0; ix < 4; ix++) {
417
80.0k
      if (ix == 0 && iy == 0) continue;
418
75.0k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
75.0k
    }
420
20.0k
  }
421
5.00k
  HWY_ALIGN float block[4 * 8];
422
5.00k
  AFVIDCT4x4(coeff, block);
423
25.0k
  for (size_t iy = 0; iy < 4; iy++) {
424
100k
    for (size_t ix = 0; ix < 4; ix++) {
425
80.0k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
80.0k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
80.0k
    }
428
20.0k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
5.00k
  block[0] = dcs[1];
431
25.0k
  for (size_t iy = 0; iy < 4; iy++) {
432
100k
    for (size_t ix = 0; ix < 4; ix++) {
433
80.0k
      if (ix == 0 && iy == 0) continue;
434
75.0k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
75.0k
    }
436
20.0k
  }
437
5.00k
  ComputeScaledIDCT<4, 4>()(
438
5.00k
      block,
439
5.00k
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
5.00k
            pixels_stride),
441
5.00k
      scratch_space);
442
  // IDCT4x8.
443
5.00k
  block[0] = dcs[2];
444
25.0k
  for (size_t iy = 0; iy < 4; iy++) {
445
180k
    for (size_t ix = 0; ix < 8; ix++) {
446
160k
      if (ix == 0 && iy == 0) continue;
447
155k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
155k
    }
449
20.0k
  }
450
5.00k
  ComputeScaledIDCT<4, 8>()(
451
5.00k
      block,
452
5.00k
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
5.00k
      scratch_space);
454
5.00k
}
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.16M
                                        float* scratch_space) {
461
2.16M
  using Type = AcStrategyType;
462
2.16M
  switch (strategy) {
463
195k
    case Type::IDENTITY: {
464
195k
      float dcs[4] = {};
465
195k
      float block00 = coefficients[0];
466
195k
      float block01 = coefficients[1];
467
195k
      float block10 = coefficients[8];
468
195k
      float block11 = coefficients[9];
469
195k
      dcs[0] = block00 + block01 + block10 + block11;
470
195k
      dcs[1] = block00 + block01 - block10 - block11;
471
195k
      dcs[2] = block00 - block01 + block10 - block11;
472
195k
      dcs[3] = block00 - block01 - block10 + block11;
473
571k
      for (size_t y = 0; y < 2; y++) {
474
1.13M
        for (size_t x = 0; x < 2; x++) {
475
753k
          float block_dc = dcs[y * 2 + x];
476
753k
          float residual_sum = 0;
477
3.76M
          for (size_t iy = 0; iy < 4; iy++) {
478
15.0M
            for (size_t ix = 0; ix < 4; ix++) {
479
12.0M
              if (ix == 0 && iy == 0) continue;
480
11.3M
              residual_sum += coefficients[(y + iy * 2) * 8 + x + ix * 2];
481
11.3M
            }
482
3.01M
          }
483
753k
          pixels[(4 * y + 1) * pixels_stride + 4 * x + 1] =
484
753k
              block_dc - residual_sum * (1.0f / 16);
485
3.77M
          for (size_t iy = 0; iy < 4; iy++) {
486
15.0M
            for (size_t ix = 0; ix < 4; ix++) {
487
12.0M
              if (ix == 1 && iy == 1) continue;
488
11.3M
              pixels[(y * 4 + iy) * pixels_stride + x * 4 + ix] =
489
11.3M
                  coefficients[(y + iy * 2) * 8 + x + ix * 2] +
490
11.3M
                  pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
491
11.3M
            }
492
3.01M
          }
493
753k
          pixels[y * 4 * pixels_stride + x * 4] =
494
753k
              coefficients[(y + 2) * 8 + x + 2] +
495
753k
              pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
496
753k
        }
497
376k
      }
498
195k
      break;
499
0
    }
500
1.87k
    case Type::DCT8X4: {
501
1.87k
      float dcs[2] = {};
502
1.87k
      float block0 = coefficients[0];
503
1.87k
      float block1 = coefficients[8];
504
1.87k
      dcs[0] = block0 + block1;
505
1.87k
      dcs[1] = block0 - block1;
506
5.58k
      for (size_t x = 0; x < 2; x++) {
507
3.71k
        HWY_ALIGN float block[4 * 8];
508
3.71k
        block[0] = dcs[x];
509
18.5k
        for (size_t iy = 0; iy < 4; iy++) {
510
133k
          for (size_t ix = 0; ix < 8; ix++) {
511
118k
            if (ix == 0 && iy == 0) continue;
512
114k
            block[iy * 8 + ix] = coefficients[(x + iy * 2) * 8 + ix];
513
114k
          }
514
14.8k
        }
515
3.71k
        ComputeScaledIDCT<8, 4>()(block, DCTTo(pixels + x * 4, pixels_stride),
516
3.71k
                                  scratch_space);
517
3.71k
      }
518
1.87k
      break;
519
0
    }
520
1.38k
    case Type::DCT4X8: {
521
1.38k
      float dcs[2] = {};
522
1.38k
      float block0 = coefficients[0];
523
1.38k
      float block1 = coefficients[8];
524
1.38k
      dcs[0] = block0 + block1;
525
1.38k
      dcs[1] = block0 - block1;
526
4.14k
      for (size_t y = 0; y < 2; y++) {
527
2.76k
        HWY_ALIGN float block[4 * 8];
528
2.76k
        block[0] = dcs[y];
529
13.8k
        for (size_t iy = 0; iy < 4; iy++) {
530
99.4k
          for (size_t ix = 0; ix < 8; ix++) {
531
88.3k
            if (ix == 0 && iy == 0) continue;
532
85.5k
            block[iy * 8 + ix] = coefficients[(y + iy * 2) * 8 + ix];
533
85.5k
          }
534
11.0k
        }
535
2.76k
        ComputeScaledIDCT<4, 8>()(
536
2.76k
            block, DCTTo(pixels + y * 4 * pixels_stride, pixels_stride),
537
2.76k
            scratch_space);
538
2.76k
      }
539
1.38k
      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
8.86k
    case Type::DCT2X2: {
570
8.86k
      HWY_ALIGN float coeffs[kDCTBlockSize];
571
8.86k
      memcpy(coeffs, coefficients, sizeof(float) * kDCTBlockSize);
572
8.86k
      IDCT2TopBlock<2>(coeffs, kBlockDim, coeffs);
573
8.86k
      IDCT2TopBlock<4>(coeffs, kBlockDim, coeffs);
574
8.86k
      IDCT2TopBlock<8>(coeffs, kBlockDim, coeffs);
575
79.5k
      for (size_t y = 0; y < kBlockDim; y++) {
576
636k
        for (size_t x = 0; x < kBlockDim; x++) {
577
565k
          pixels[y * pixels_stride + x] = coeffs[y * kBlockDim + x];
578
565k
        }
579
70.6k
      }
580
8.86k
      break;
581
0
    }
582
615
    case Type::DCT16X16: {
583
615
      ComputeScaledIDCT<16, 16>()(coefficients, DCTTo(pixels, pixels_stride),
584
615
                                  scratch_space);
585
615
      break;
586
0
    }
587
14.3k
    case Type::DCT16X8: {
588
14.3k
      ComputeScaledIDCT<16, 8>()(coefficients, DCTTo(pixels, pixels_stride),
589
14.3k
                                 scratch_space);
590
14.3k
      break;
591
0
    }
592
1.80M
    case Type::DCT8X16: {
593
1.80M
      ComputeScaledIDCT<8, 16>()(coefficients, DCTTo(pixels, pixels_stride),
594
1.80M
                                 scratch_space);
595
1.80M
      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
159
    case Type::DCT32X16: {
608
159
      ComputeScaledIDCT<32, 16>()(coefficients, DCTTo(pixels, pixels_stride),
609
159
                                  scratch_space);
610
159
      break;
611
0
    }
612
75
    case Type::DCT16X32: {
613
75
      ComputeScaledIDCT<16, 32>()(coefficients, DCTTo(pixels, pixels_stride),
614
75
                                  scratch_space);
615
75
      break;
616
0
    }
617
66
    case Type::DCT32X32: {
618
66
      ComputeScaledIDCT<32, 32>()(coefficients, DCTTo(pixels, pixels_stride),
619
66
                                  scratch_space);
620
66
      break;
621
0
    }
622
133k
    case Type::DCT: {
623
133k
      ComputeScaledIDCT<8, 8>()(coefficients, DCTTo(pixels, pixels_stride),
624
133k
                                scratch_space);
625
133k
      break;
626
0
    }
627
150
    case Type::AFV0: {
628
150
      AFVTransformToPixels<0>(coefficients, pixels, pixels_stride);
629
150
      break;
630
0
    }
631
39
    case Type::AFV1: {
632
39
      AFVTransformToPixels<1>(coefficients, pixels, pixels_stride);
633
39
      break;
634
0
    }
635
417
    case Type::AFV2: {
636
417
      AFVTransformToPixels<2>(coefficients, pixels, pixels_stride);
637
417
      break;
638
0
    }
639
5.00k
    case Type::AFV3: {
640
5.00k
      AFVTransformToPixels<3>(coefficients, pixels, pixels_stride);
641
5.00k
      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
624
    case Type::DCT64X64: {
654
624
      ComputeScaledIDCT<64, 64>()(coefficients, DCTTo(pixels, pixels_stride),
655
624
                                  scratch_space);
656
624
      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.41k
    case Type::DCT128X128: {
669
1.41k
      ComputeScaledIDCT<128, 128>()(coefficients, DCTTo(pixels, pixels_stride),
670
1.41k
                                    scratch_space);
671
1.41k
      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.16M
  }
689
2.16M
}
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.16M
                                        float* scratch_space) {
461
2.16M
  using Type = AcStrategyType;
462
2.16M
  switch (strategy) {
463
195k
    case Type::IDENTITY: {
464
195k
      float dcs[4] = {};
465
195k
      float block00 = coefficients[0];
466
195k
      float block01 = coefficients[1];
467
195k
      float block10 = coefficients[8];
468
195k
      float block11 = coefficients[9];
469
195k
      dcs[0] = block00 + block01 + block10 + block11;
470
195k
      dcs[1] = block00 + block01 - block10 - block11;
471
195k
      dcs[2] = block00 - block01 + block10 - block11;
472
195k
      dcs[3] = block00 - block01 - block10 + block11;
473
571k
      for (size_t y = 0; y < 2; y++) {
474
1.13M
        for (size_t x = 0; x < 2; x++) {
475
753k
          float block_dc = dcs[y * 2 + x];
476
753k
          float residual_sum = 0;
477
3.76M
          for (size_t iy = 0; iy < 4; iy++) {
478
15.0M
            for (size_t ix = 0; ix < 4; ix++) {
479
12.0M
              if (ix == 0 && iy == 0) continue;
480
11.3M
              residual_sum += coefficients[(y + iy * 2) * 8 + x + ix * 2];
481
11.3M
            }
482
3.01M
          }
483
753k
          pixels[(4 * y + 1) * pixels_stride + 4 * x + 1] =
484
753k
              block_dc - residual_sum * (1.0f / 16);
485
3.77M
          for (size_t iy = 0; iy < 4; iy++) {
486
15.0M
            for (size_t ix = 0; ix < 4; ix++) {
487
12.0M
              if (ix == 1 && iy == 1) continue;
488
11.3M
              pixels[(y * 4 + iy) * pixels_stride + x * 4 + ix] =
489
11.3M
                  coefficients[(y + iy * 2) * 8 + x + ix * 2] +
490
11.3M
                  pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
491
11.3M
            }
492
3.01M
          }
493
753k
          pixels[y * 4 * pixels_stride + x * 4] =
494
753k
              coefficients[(y + 2) * 8 + x + 2] +
495
753k
              pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
496
753k
        }
497
376k
      }
498
195k
      break;
499
0
    }
500
1.87k
    case Type::DCT8X4: {
501
1.87k
      float dcs[2] = {};
502
1.87k
      float block0 = coefficients[0];
503
1.87k
      float block1 = coefficients[8];
504
1.87k
      dcs[0] = block0 + block1;
505
1.87k
      dcs[1] = block0 - block1;
506
5.58k
      for (size_t x = 0; x < 2; x++) {
507
3.71k
        HWY_ALIGN float block[4 * 8];
508
3.71k
        block[0] = dcs[x];
509
18.5k
        for (size_t iy = 0; iy < 4; iy++) {
510
133k
          for (size_t ix = 0; ix < 8; ix++) {
511
118k
            if (ix == 0 && iy == 0) continue;
512
114k
            block[iy * 8 + ix] = coefficients[(x + iy * 2) * 8 + ix];
513
114k
          }
514
14.8k
        }
515
3.71k
        ComputeScaledIDCT<8, 4>()(block, DCTTo(pixels + x * 4, pixels_stride),
516
3.71k
                                  scratch_space);
517
3.71k
      }
518
1.87k
      break;
519
0
    }
520
1.38k
    case Type::DCT4X8: {
521
1.38k
      float dcs[2] = {};
522
1.38k
      float block0 = coefficients[0];
523
1.38k
      float block1 = coefficients[8];
524
1.38k
      dcs[0] = block0 + block1;
525
1.38k
      dcs[1] = block0 - block1;
526
4.14k
      for (size_t y = 0; y < 2; y++) {
527
2.76k
        HWY_ALIGN float block[4 * 8];
528
2.76k
        block[0] = dcs[y];
529
13.8k
        for (size_t iy = 0; iy < 4; iy++) {
530
99.4k
          for (size_t ix = 0; ix < 8; ix++) {
531
88.3k
            if (ix == 0 && iy == 0) continue;
532
85.5k
            block[iy * 8 + ix] = coefficients[(y + iy * 2) * 8 + ix];
533
85.5k
          }
534
11.0k
        }
535
2.76k
        ComputeScaledIDCT<4, 8>()(
536
2.76k
            block, DCTTo(pixels + y * 4 * pixels_stride, pixels_stride),
537
2.76k
            scratch_space);
538
2.76k
      }
539
1.38k
      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
8.86k
    case Type::DCT2X2: {
570
8.86k
      HWY_ALIGN float coeffs[kDCTBlockSize];
571
8.86k
      memcpy(coeffs, coefficients, sizeof(float) * kDCTBlockSize);
572
8.86k
      IDCT2TopBlock<2>(coeffs, kBlockDim, coeffs);
573
8.86k
      IDCT2TopBlock<4>(coeffs, kBlockDim, coeffs);
574
8.86k
      IDCT2TopBlock<8>(coeffs, kBlockDim, coeffs);
575
79.5k
      for (size_t y = 0; y < kBlockDim; y++) {
576
636k
        for (size_t x = 0; x < kBlockDim; x++) {
577
565k
          pixels[y * pixels_stride + x] = coeffs[y * kBlockDim + x];
578
565k
        }
579
70.6k
      }
580
8.86k
      break;
581
0
    }
582
615
    case Type::DCT16X16: {
583
615
      ComputeScaledIDCT<16, 16>()(coefficients, DCTTo(pixels, pixels_stride),
584
615
                                  scratch_space);
585
615
      break;
586
0
    }
587
14.3k
    case Type::DCT16X8: {
588
14.3k
      ComputeScaledIDCT<16, 8>()(coefficients, DCTTo(pixels, pixels_stride),
589
14.3k
                                 scratch_space);
590
14.3k
      break;
591
0
    }
592
1.80M
    case Type::DCT8X16: {
593
1.80M
      ComputeScaledIDCT<8, 16>()(coefficients, DCTTo(pixels, pixels_stride),
594
1.80M
                                 scratch_space);
595
1.80M
      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
159
    case Type::DCT32X16: {
608
159
      ComputeScaledIDCT<32, 16>()(coefficients, DCTTo(pixels, pixels_stride),
609
159
                                  scratch_space);
610
159
      break;
611
0
    }
612
75
    case Type::DCT16X32: {
613
75
      ComputeScaledIDCT<16, 32>()(coefficients, DCTTo(pixels, pixels_stride),
614
75
                                  scratch_space);
615
75
      break;
616
0
    }
617
66
    case Type::DCT32X32: {
618
66
      ComputeScaledIDCT<32, 32>()(coefficients, DCTTo(pixels, pixels_stride),
619
66
                                  scratch_space);
620
66
      break;
621
0
    }
622
133k
    case Type::DCT: {
623
133k
      ComputeScaledIDCT<8, 8>()(coefficients, DCTTo(pixels, pixels_stride),
624
133k
                                scratch_space);
625
133k
      break;
626
0
    }
627
150
    case Type::AFV0: {
628
150
      AFVTransformToPixels<0>(coefficients, pixels, pixels_stride);
629
150
      break;
630
0
    }
631
39
    case Type::AFV1: {
632
39
      AFVTransformToPixels<1>(coefficients, pixels, pixels_stride);
633
39
      break;
634
0
    }
635
417
    case Type::AFV2: {
636
417
      AFVTransformToPixels<2>(coefficients, pixels, pixels_stride);
637
417
      break;
638
0
    }
639
5.00k
    case Type::AFV3: {
640
5.00k
      AFVTransformToPixels<3>(coefficients, pixels, pixels_stride);
641
5.00k
      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
624
    case Type::DCT64X64: {
654
624
      ComputeScaledIDCT<64, 64>()(coefficients, DCTTo(pixels, pixels_stride),
655
624
                                  scratch_space);
656
624
      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.41k
    case Type::DCT128X128: {
669
1.41k
      ComputeScaledIDCT<128, 128>()(coefficients, DCTTo(pixels, pixels_stride),
670
1.41k
                                    scratch_space);
671
1.41k
      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.16M
  }
689
2.16M
}
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.26M
                                              float* JXL_RESTRICT scratch) {
695
2.26M
  using Type = AcStrategyType;
696
2.26M
  HWY_ALIGN float warm_block[4 * 4];
697
2.26M
  HWY_ALIGN float warm_scratch_space[4 * 4 * 4];
698
2.26M
  switch (strategy) {
699
14.6k
    case Type::DCT16X8: {
700
14.6k
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/kBlockDim,
701
14.6k
                        /*LF_ROWS=*/2, /*LF_COLS=*/1, /*ROWS=*/2, /*COLS=*/1>(
702
14.6k
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
703
14.6k
      break;
704
0
    }
705
1.80M
    case Type::DCT8X16: {
706
1.80M
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
707
1.80M
                        /*LF_ROWS=*/1, /*LF_COLS=*/2, /*ROWS=*/1, /*COLS=*/2>(
708
1.80M
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
709
1.80M
      break;
710
0
    }
711
615
    case Type::DCT16X16: {
712
615
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
713
615
                        /*LF_ROWS=*/2, /*LF_COLS=*/2, /*ROWS=*/2, /*COLS=*/2>(
714
615
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
715
615
      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
159
    case Type::DCT32X16: {
730
159
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
731
159
                        /*LF_ROWS=*/4, /*LF_COLS=*/2, /*ROWS=*/4, /*COLS=*/2>(
732
159
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
733
159
      break;
734
0
    }
735
75
    case Type::DCT16X32: {
736
75
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
737
75
                        /*LF_ROWS=*/2, /*LF_COLS=*/4, /*ROWS=*/2, /*COLS=*/4>(
738
75
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
739
75
      break;
740
0
    }
741
66
    case Type::DCT32X32: {
742
66
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
743
66
                        /*LF_ROWS=*/4, /*LF_COLS=*/4, /*ROWS=*/4, /*COLS=*/4>(
744
66
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
745
66
      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.41k
    case Type::DCT128X128: {
778
1.41k
      ReinterpretingDCT<
779
1.41k
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
780
1.41k
          /*LF_ROWS=*/16, /*LF_COLS=*/16, /*ROWS=*/16, /*COLS=*/16>(
781
1.41k
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 16);
782
1.41k
      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
189k
    case Type::DCT:
806
198k
    case Type::DCT2X2:
807
198k
    case Type::DCT4X4:
808
199k
    case Type::DCT4X8:
809
201k
    case Type::DCT8X4:
810
201k
    case Type::AFV0:
811
201k
    case Type::AFV1:
812
202k
    case Type::AFV2:
813
207k
    case Type::AFV3:
814
442k
    case Type::IDENTITY:
815
442k
      llf[0] = dc[0];
816
442k
      break;
817
2.27M
  };
818
2.27M
}
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.26M
                                              float* JXL_RESTRICT scratch) {
695
2.26M
  using Type = AcStrategyType;
696
2.26M
  HWY_ALIGN float warm_block[4 * 4];
697
2.26M
  HWY_ALIGN float warm_scratch_space[4 * 4 * 4];
698
2.26M
  switch (strategy) {
699
14.6k
    case Type::DCT16X8: {
700
14.6k
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/kBlockDim,
701
14.6k
                        /*LF_ROWS=*/2, /*LF_COLS=*/1, /*ROWS=*/2, /*COLS=*/1>(
702
14.6k
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
703
14.6k
      break;
704
0
    }
705
1.80M
    case Type::DCT8X16: {
706
1.80M
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
707
1.80M
                        /*LF_ROWS=*/1, /*LF_COLS=*/2, /*ROWS=*/1, /*COLS=*/2>(
708
1.80M
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
709
1.80M
      break;
710
0
    }
711
615
    case Type::DCT16X16: {
712
615
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
713
615
                        /*LF_ROWS=*/2, /*LF_COLS=*/2, /*ROWS=*/2, /*COLS=*/2>(
714
615
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
715
615
      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
159
    case Type::DCT32X16: {
730
159
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
731
159
                        /*LF_ROWS=*/4, /*LF_COLS=*/2, /*ROWS=*/4, /*COLS=*/2>(
732
159
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
733
159
      break;
734
0
    }
735
75
    case Type::DCT16X32: {
736
75
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
737
75
                        /*LF_ROWS=*/2, /*LF_COLS=*/4, /*ROWS=*/2, /*COLS=*/4>(
738
75
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
739
75
      break;
740
0
    }
741
66
    case Type::DCT32X32: {
742
66
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
743
66
                        /*LF_ROWS=*/4, /*LF_COLS=*/4, /*ROWS=*/4, /*COLS=*/4>(
744
66
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
745
66
      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.41k
    case Type::DCT128X128: {
778
1.41k
      ReinterpretingDCT<
779
1.41k
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
780
1.41k
          /*LF_ROWS=*/16, /*LF_COLS=*/16, /*ROWS=*/16, /*COLS=*/16>(
781
1.41k
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 16);
782
1.41k
      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
189k
    case Type::DCT:
806
198k
    case Type::DCT2X2:
807
198k
    case Type::DCT4X4:
808
199k
    case Type::DCT4X8:
809
201k
    case Type::DCT8X4:
810
201k
    case Type::AFV0:
811
201k
    case Type::AFV1:
812
202k
    case Type::AFV2:
813
207k
    case Type::AFV3:
814
442k
    case Type::IDENTITY:
815
442k
      llf[0] = dc[0];
816
442k
      break;
817
2.27M
  };
818
2.27M
}
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_