be/src/util/pdep_unpack.h
Line | Count | Source |
1 | | // Licensed to the Apache Software Foundation (ASF) under one |
2 | | // or more contributor license agreements. See the NOTICE file |
3 | | // distributed with this work for additional information |
4 | | // regarding copyright ownership. The ASF licenses this file |
5 | | // to you under the Apache License, Version 2.0 (the |
6 | | // "License"); you may not use this file except in compliance |
7 | | // with the License. You may obtain a copy of the License at |
8 | | // |
9 | | // http://www.apache.org/licenses/LICENSE-2.0 |
10 | | // |
11 | | // Unless required by applicable law or agreed to in writing, |
12 | | // software distributed under the License is distributed on an |
13 | | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
14 | | // KIND, either express or implied. See the License for the |
15 | | // specific language governing permissions and limitations |
16 | | // under the License. |
17 | | |
18 | | #pragma once |
19 | | |
20 | | #if defined(__x86_64__) && (defined(__GNUC__) || defined(__clang__)) |
21 | | |
22 | | #include <immintrin.h> |
23 | | |
24 | | #include <cstddef> |
25 | | #include <cstdint> |
26 | | #include <cstring> |
27 | | #include <limits> |
28 | | #include <type_traits> |
29 | | #include <utility> |
30 | | |
31 | | #include "common/config.h" |
32 | | |
33 | | namespace doris { |
34 | | |
35 | | class PdepUnpack { |
36 | | public: |
37 | 1.16M | static bool is_supported() { |
38 | 1.16M | return config::enable_bmi2_optimizations && __builtin_cpu_supports("bmi2") && |
39 | 1.16M | __builtin_cpu_supports("avx2"); |
40 | 1.16M | } |
41 | | |
42 | | template <typename T, int BIT_WIDTH> |
43 | 0 | static constexpr bool is_supported_type() { |
44 | 0 | return BIT_WIDTH > 0 && BIT_WIDTH <= std::numeric_limits<T>::digits && |
45 | 0 | (std::is_same_v<T, uint8_t> || std::is_same_v<T, uint16_t> || |
46 | 0 | std::is_same_v<T, uint32_t>); |
47 | 0 | } Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi0EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi1EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi2EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi3EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi4EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi5EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi6EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi7EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi8EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi9EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi10EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi11EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi12EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi13EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi14EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi15EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi16EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi17EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi18EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi19EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi20EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi21EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi22EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi23EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi24EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi25EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi26EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi27EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi28EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi29EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi30EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi31EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi32EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi33EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi34EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi35EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi36EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi37EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi38EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi39EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi40EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi41EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi42EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi43EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi44EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi45EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi46EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi47EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi48EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi49EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi50EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi51EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi52EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi53EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi54EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi55EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi56EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi57EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi58EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi59EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi60EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi61EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi62EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi63EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIjLi64EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi0EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi1EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi2EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi3EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi4EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi5EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi6EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi7EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi8EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi9EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi10EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi11EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi12EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi13EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi14EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi15EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi16EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi17EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi18EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi19EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi20EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi21EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi22EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi23EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi24EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi25EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi26EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi27EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi28EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi29EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi30EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi31EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi32EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi33EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi34EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi35EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi36EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi37EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi38EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi39EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi40EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi41EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi42EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi43EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi44EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi45EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi46EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi47EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi48EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi49EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi50EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi51EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi52EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi53EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi54EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi55EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi56EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi57EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi58EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi59EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi60EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi61EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi62EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi63EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi64EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi0EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi1EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi2EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi3EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi4EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi5EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi6EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi7EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi8EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi9EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi10EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi11EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi12EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi13EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi14EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi15EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi16EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi17EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi18EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi19EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi20EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi21EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi22EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi23EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi24EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi25EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi26EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi27EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi28EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi29EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi30EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi31EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi32EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi33EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi34EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi35EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi36EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi37EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi38EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi39EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi40EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi41EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi42EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi43EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi44EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi45EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi46EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi47EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi48EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi49EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi50EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi51EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi52EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi53EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi54EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi55EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi56EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi57EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi58EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi59EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi60EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi61EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi62EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi63EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeIhLi64EEEbv |
48 | | |
49 | | template <typename T, int BIT_WIDTH> |
50 | 0 | static constexpr bool should_use() { |
51 | 0 | // Keep the generic implementation available for benchmarking all supported widths, but |
52 | 0 | // only select PDEP in the production path for widths below 16. These widths can use the |
53 | 0 | // byte/word deposit layouts and the AVX2 widening specializations below. At 16 bits and |
54 | 0 | // above, unpack32() falls back to multiple generic 64-bit PDEP groups per batch and |
55 | 0 | // competes with efficient scalar specializations, including copy-like 16- and 32-bit |
56 | 0 | // cases. Benchmarks with L1-, L2-, and larger working sets show non-monotonic results and |
57 | 0 | // repeatable regressions for multiple high widths. Because the profitable high widths are |
58 | 0 | // CPU- and working-set-dependent, an irregular per-width allowlist would not be portable; |
59 | 0 | // use the scalar implementation conservatively instead. |
60 | 0 | return is_supported_type<T, BIT_WIDTH>() && BIT_WIDTH < 16; |
61 | 0 | } Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi0EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi1EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi2EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi3EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi4EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi5EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi6EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi7EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi8EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi9EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi10EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi11EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi12EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi13EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi14EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi15EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi16EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi17EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi18EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi19EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi20EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi21EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi22EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi23EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi24EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi25EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi26EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi27EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi28EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi29EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi30EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi31EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi32EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi33EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi34EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi35EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi36EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi37EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi38EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi39EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi40EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi41EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi42EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi43EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi44EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi45EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi46EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi47EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi48EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi49EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi50EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi51EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi52EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi53EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi54EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi55EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi56EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi57EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi58EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi59EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi60EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi61EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi62EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi63EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIjLi64EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi0EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi1EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi2EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi3EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi4EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi5EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi6EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi7EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi8EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi9EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi10EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi11EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi12EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi13EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi14EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi15EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi16EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi17EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi18EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi19EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi20EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi21EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi22EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi23EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi24EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi25EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi26EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi27EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi28EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi29EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi30EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi31EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi32EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi33EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi34EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi35EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi36EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi37EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi38EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi39EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi40EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi41EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi42EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi43EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi44EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi45EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi46EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi47EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi48EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi49EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi50EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi51EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi52EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi53EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi54EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi55EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi56EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi57EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi58EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi59EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi60EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi61EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi62EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi63EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi64EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi0EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi1EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi2EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi3EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi4EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi5EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi6EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi7EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi8EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi9EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi10EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi11EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi12EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi13EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi14EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi15EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi16EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi17EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi18EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi19EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi20EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi21EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi22EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi23EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi24EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi25EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi26EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi27EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi28EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi29EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi30EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi31EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi32EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi33EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi34EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi35EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi36EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi37EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi38EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi39EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi40EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi41EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi42EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi43EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi44EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi45EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi46EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi47EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi48EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi49EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi50EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi51EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi52EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi53EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi54EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi55EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi56EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi57EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi58EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi59EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi60EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi61EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi62EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi63EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useIhLi64EEEbv |
62 | | |
63 | | template <typename T, int BIT_WIDTH> |
64 | 13.8M | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { |
65 | 13.8M | static_assert(is_supported_type<T, BIT_WIDTH>()); |
66 | 13.8M | if constexpr (std::is_same_v<T, uint8_t>) { |
67 | 2.37k | unpack32_with_pdep<T, BIT_WIDTH>(input, output); |
68 | 3.10k | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { |
69 | 9.31k | for (int group = 0; group < 2; ++group) { |
70 | 6.20k | const int first_value = group * 16; |
71 | 6.20k | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; |
72 | 6.20k | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), |
73 | 6.20k | pdep_mask<uint8_t, BIT_WIDTH>()); |
74 | 6.20k | uint64_t expanded1 = |
75 | 6.20k | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), |
76 | 6.20k | pdep_mask<uint8_t, BIT_WIDTH>()); |
77 | 6.20k | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), |
78 | 6.20k | static_cast<int64_t>(expanded0)); |
79 | 6.20k | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); |
80 | 6.20k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); |
81 | 6.20k | } |
82 | 7.72M | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { |
83 | 38.6M | for (int group = 0; group < 4; ++group) { |
84 | 30.8M | uint64_t expanded = |
85 | 30.8M | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), |
86 | 30.8M | pdep_mask<uint8_t, BIT_WIDTH>()); |
87 | 30.8M | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); |
88 | 30.8M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); |
89 | 30.8M | } |
90 | 7.72M | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { |
91 | 30.5M | for (int group = 0; group < 4; ++group) { |
92 | 24.4M | const int first_value = group * 8; |
93 | 24.4M | const uint8_t* group_input = input + group * BIT_WIDTH; |
94 | 24.4M | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), |
95 | 24.4M | pdep_mask<uint16_t, BIT_WIDTH>()); |
96 | 24.4M | uint64_t expanded1 = |
97 | 24.4M | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), |
98 | 24.4M | pdep_mask<uint16_t, BIT_WIDTH>()); |
99 | 24.4M | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), |
100 | 24.4M | static_cast<int64_t>(expanded0)); |
101 | 24.4M | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); |
102 | 24.4M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); |
103 | 24.4M | } |
104 | 6.11M | } else { |
105 | 84 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); |
106 | 84 | } |
107 | 13.8M | } _ZN5doris10PdepUnpack8unpack32IjLi1EEEvPKhPT_ Line | Count | Source | 64 | 11.3k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 11.3k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | 11.3k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 56.6k | for (int group = 0; group < 4; ++group) { | 84 | 45.3k | uint64_t expanded = | 85 | 45.3k | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 45.3k | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 45.3k | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 45.3k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 45.3k | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 11.3k | } |
_ZN5doris10PdepUnpack8unpack32IjLi2EEEvPKhPT_ Line | Count | Source | 64 | 1.06M | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 1.06M | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | 1.06M | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 5.30M | for (int group = 0; group < 4; ++group) { | 84 | 4.24M | uint64_t expanded = | 85 | 4.24M | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 4.24M | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 4.24M | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 4.24M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 4.24M | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 1.06M | } |
_ZN5doris10PdepUnpack8unpack32IjLi3EEEvPKhPT_ Line | Count | Source | 64 | 1.43M | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 1.43M | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | 1.43M | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 7.17M | for (int group = 0; group < 4; ++group) { | 84 | 5.73M | uint64_t expanded = | 85 | 5.73M | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 5.73M | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 5.73M | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 5.73M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 5.73M | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 1.43M | } |
_ZN5doris10PdepUnpack8unpack32IjLi4EEEvPKhPT_ Line | Count | Source | 64 | 3.06M | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 3.06M | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | 3.06M | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 15.3M | for (int group = 0; group < 4; ++group) { | 84 | 12.2M | uint64_t expanded = | 85 | 12.2M | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 12.2M | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 12.2M | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 12.2M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 12.2M | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 3.06M | } |
_ZN5doris10PdepUnpack8unpack32IjLi5EEEvPKhPT_ Line | Count | Source | 64 | 10.6k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 10.6k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | 10.6k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 53.1k | for (int group = 0; group < 4; ++group) { | 84 | 42.5k | uint64_t expanded = | 85 | 42.5k | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 42.5k | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 42.5k | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 42.5k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 42.5k | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 10.6k | } |
_ZN5doris10PdepUnpack8unpack32IjLi6EEEvPKhPT_ Line | Count | Source | 64 | 2.09M | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 2.09M | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | 2.09M | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 10.4M | for (int group = 0; group < 4; ++group) { | 84 | 8.39M | uint64_t expanded = | 85 | 8.39M | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 8.39M | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 8.39M | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 8.39M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 8.39M | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 2.09M | } |
_ZN5doris10PdepUnpack8unpack32IjLi7EEEvPKhPT_ Line | Count | Source | 64 | 21.3k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 21.3k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | 21.3k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 106k | for (int group = 0; group < 4; ++group) { | 84 | 85.2k | uint64_t expanded = | 85 | 85.2k | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 85.2k | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 85.2k | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 85.2k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 85.2k | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 21.3k | } |
_ZN5doris10PdepUnpack8unpack32IjLi8EEEvPKhPT_ Line | Count | Source | 64 | 21.1k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 21.1k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | 21.1k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 105k | for (int group = 0; group < 4; ++group) { | 84 | 84.5k | uint64_t expanded = | 85 | 84.5k | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 84.5k | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 84.5k | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 84.5k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 84.5k | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 21.1k | } |
_ZN5doris10PdepUnpack8unpack32IjLi9EEEvPKhPT_ Line | Count | Source | 64 | 38.1k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 38.1k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | 38.1k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 190k | for (int group = 0; group < 4; ++group) { | 92 | 152k | const int first_value = group * 8; | 93 | 152k | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 152k | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 152k | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 152k | uint64_t expanded1 = | 97 | 152k | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 152k | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 152k | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 152k | static_cast<int64_t>(expanded0)); | 101 | 152k | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 152k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 152k | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 38.1k | } |
_ZN5doris10PdepUnpack8unpack32IjLi10EEEvPKhPT_ Line | Count | Source | 64 | 33.6k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 33.6k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | 33.6k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 168k | for (int group = 0; group < 4; ++group) { | 92 | 134k | const int first_value = group * 8; | 93 | 134k | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 134k | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 134k | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 134k | uint64_t expanded1 = | 97 | 134k | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 134k | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 134k | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 134k | static_cast<int64_t>(expanded0)); | 101 | 134k | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 134k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 134k | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 33.6k | } |
_ZN5doris10PdepUnpack8unpack32IjLi11EEEvPKhPT_ Line | Count | Source | 64 | 524k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 524k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | 524k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 2.62M | for (int group = 0; group < 4; ++group) { | 92 | 2.09M | const int first_value = group * 8; | 93 | 2.09M | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 2.09M | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 2.09M | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 2.09M | uint64_t expanded1 = | 97 | 2.09M | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 2.09M | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 2.09M | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 2.09M | static_cast<int64_t>(expanded0)); | 101 | 2.09M | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 2.09M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 2.09M | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 524k | } |
_ZN5doris10PdepUnpack8unpack32IjLi12EEEvPKhPT_ Line | Count | Source | 64 | 4.10M | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 4.10M | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | 4.10M | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 20.5M | for (int group = 0; group < 4; ++group) { | 92 | 16.4M | const int first_value = group * 8; | 93 | 16.4M | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 16.4M | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 16.4M | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 16.4M | uint64_t expanded1 = | 97 | 16.4M | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 16.4M | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 16.4M | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 16.4M | static_cast<int64_t>(expanded0)); | 101 | 16.4M | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 16.4M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 16.4M | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 4.10M | } |
_ZN5doris10PdepUnpack8unpack32IjLi13EEEvPKhPT_ Line | Count | Source | 64 | 272k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 272k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | 272k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 1.36M | for (int group = 0; group < 4; ++group) { | 92 | 1.09M | const int first_value = group * 8; | 93 | 1.09M | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 1.09M | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 1.09M | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 1.09M | uint64_t expanded1 = | 97 | 1.09M | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 1.09M | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 1.09M | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 1.09M | static_cast<int64_t>(expanded0)); | 101 | 1.09M | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 1.09M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 1.09M | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 272k | } |
_ZN5doris10PdepUnpack8unpack32IjLi14EEEvPKhPT_ Line | Count | Source | 64 | 958k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 958k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | 958k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 4.79M | for (int group = 0; group < 4; ++group) { | 92 | 3.83M | const int first_value = group * 8; | 93 | 3.83M | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 3.83M | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 3.83M | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 3.83M | uint64_t expanded1 = | 97 | 3.83M | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 3.83M | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 3.83M | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 3.83M | static_cast<int64_t>(expanded0)); | 101 | 3.83M | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 3.83M | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 3.83M | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 958k | } |
_ZN5doris10PdepUnpack8unpack32IjLi15EEEvPKhPT_ Line | Count | Source | 64 | 182k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 182k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | 182k | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 914k | for (int group = 0; group < 4; ++group) { | 92 | 731k | const int first_value = group * 8; | 93 | 731k | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 731k | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 731k | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 731k | uint64_t expanded1 = | 97 | 731k | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 731k | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 731k | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 731k | static_cast<int64_t>(expanded0)); | 101 | 731k | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 731k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 731k | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 182k | } |
_ZN5doris10PdepUnpack8unpack32ItLi1EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | 12 | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | 36 | for (int group = 0; group < 2; ++group) { | 70 | 24 | const int first_value = group * 16; | 71 | 24 | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | 24 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | 24 | uint64_t expanded1 = | 75 | 24 | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | 24 | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | 24 | static_cast<int64_t>(expanded0)); | 79 | 24 | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | 24 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | 24 | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi2EEEvPKhPT_ Line | Count | Source | 64 | 694 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 694 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | 694 | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | 2.08k | for (int group = 0; group < 2; ++group) { | 70 | 1.38k | const int first_value = group * 16; | 71 | 1.38k | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | 1.38k | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | 1.38k | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | 1.38k | uint64_t expanded1 = | 75 | 1.38k | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | 1.38k | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | 1.38k | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | 1.38k | static_cast<int64_t>(expanded0)); | 79 | 1.38k | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | 1.38k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | 1.38k | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 694 | } |
_ZN5doris10PdepUnpack8unpack32ItLi3EEEvPKhPT_ Line | Count | Source | 64 | 2.33k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 2.33k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | 2.33k | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | 7.01k | for (int group = 0; group < 2; ++group) { | 70 | 4.67k | const int first_value = group * 16; | 71 | 4.67k | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | 4.67k | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | 4.67k | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | 4.67k | uint64_t expanded1 = | 75 | 4.67k | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | 4.67k | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | 4.67k | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | 4.67k | static_cast<int64_t>(expanded0)); | 79 | 4.67k | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | 4.67k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | 4.67k | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 2.33k | } |
_ZN5doris10PdepUnpack8unpack32ItLi4EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | 12 | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | 36 | for (int group = 0; group < 2; ++group) { | 70 | 24 | const int first_value = group * 16; | 71 | 24 | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | 24 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | 24 | uint64_t expanded1 = | 75 | 24 | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | 24 | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | 24 | static_cast<int64_t>(expanded0)); | 79 | 24 | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | 24 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | 24 | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi5EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | 12 | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | 36 | for (int group = 0; group < 2; ++group) { | 70 | 24 | const int first_value = group * 16; | 71 | 24 | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | 24 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | 24 | uint64_t expanded1 = | 75 | 24 | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | 24 | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | 24 | static_cast<int64_t>(expanded0)); | 79 | 24 | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | 24 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | 24 | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi6EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | 12 | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | 36 | for (int group = 0; group < 2; ++group) { | 70 | 24 | const int first_value = group * 16; | 71 | 24 | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | 24 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | 24 | uint64_t expanded1 = | 75 | 24 | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | 24 | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | 24 | static_cast<int64_t>(expanded0)); | 79 | 24 | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | 24 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | 24 | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi7EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | 12 | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | 36 | for (int group = 0; group < 2; ++group) { | 70 | 24 | const int first_value = group * 16; | 71 | 24 | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | 24 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | 24 | uint64_t expanded1 = | 75 | 24 | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | 24 | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | 24 | static_cast<int64_t>(expanded0)); | 79 | 24 | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | 24 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | 24 | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi8EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | 12 | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | 36 | for (int group = 0; group < 2; ++group) { | 70 | 24 | const int first_value = group * 16; | 71 | 24 | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | 24 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | 24 | uint64_t expanded1 = | 75 | 24 | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | 24 | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | 24 | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | 24 | static_cast<int64_t>(expanded0)); | 79 | 24 | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | 24 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | 24 | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi9EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | 12 | } else { | 105 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | 12 | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi10EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | 12 | } else { | 105 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | 12 | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi11EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | 12 | } else { | 105 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | 12 | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi12EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | 12 | } else { | 105 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | 12 | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi13EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | 12 | } else { | 105 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | 12 | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi14EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | 12 | } else { | 105 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | 12 | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32ItLi15EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | 12 | } else { | 105 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | 12 | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IhLi1EEEvPKhPT_ Line | Count | Source | 64 | 2.29k | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 2.29k | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | 2.29k | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | 2.29k | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 2.29k | } |
_ZN5doris10PdepUnpack8unpack32IhLi2EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | 12 | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IhLi3EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | 12 | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IhLi4EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | 12 | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IhLi5EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | 12 | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IhLi6EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | 12 | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IhLi7EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | 12 | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IhLi8EEEvPKhPT_ Line | Count | Source | 64 | 12 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 12 | static_assert(is_supported_type<T, BIT_WIDTH>()); | 66 | 12 | if constexpr (std::is_same_v<T, uint8_t>) { | 67 | 12 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 68 | | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { | 69 | | for (int group = 0; group < 2; ++group) { | 70 | | const int first_value = group * 16; | 71 | | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; | 72 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), | 73 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 74 | | uint64_t expanded1 = | 75 | | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), | 76 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 77 | | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 78 | | static_cast<int64_t>(expanded0)); | 79 | | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); | 80 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); | 81 | | } | 82 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | | for (int group = 0; group < 4; ++group) { | 84 | | uint64_t expanded = | 85 | | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | | } | 90 | | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | | for (int group = 0; group < 4; ++group) { | 92 | | const int first_value = group * 8; | 93 | | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | | uint64_t expanded1 = | 97 | | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | | static_cast<int64_t>(expanded0)); | 101 | | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
|
108 | | |
109 | | private: |
110 | | template <typename T, int BIT_WIDTH> |
111 | 79.8M | static constexpr uint64_t pdep_mask() { |
112 | 79.8M | constexpr int lane_bits = sizeof(T) * 8; |
113 | 79.8M | constexpr int lanes = 64 / lane_bits; |
114 | 79.8M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; |
115 | 79.8M | uint64_t mask = 0; |
116 | 522M | for (int lane = 0; lane < lanes; ++lane) { |
117 | 442M | mask |= value_mask << (lane * lane_bits); |
118 | 442M | } |
119 | 79.8M | return mask; |
120 | 79.8M | } _ZN5doris10PdepUnpack9pdep_maskIhLi1EEEmv Line | Count | Source | 111 | 54.5k | static constexpr uint64_t pdep_mask() { | 112 | 54.5k | constexpr int lane_bits = sizeof(T) * 8; | 113 | 54.5k | constexpr int lanes = 64 / lane_bits; | 114 | 54.5k | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 54.5k | uint64_t mask = 0; | 116 | 490k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 436k | mask |= value_mask << (lane * lane_bits); | 118 | 436k | } | 119 | 54.5k | return mask; | 120 | 54.5k | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi2EEEmv Line | Count | Source | 111 | 4.24M | static constexpr uint64_t pdep_mask() { | 112 | 4.24M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 4.24M | constexpr int lanes = 64 / lane_bits; | 114 | 4.24M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 4.24M | uint64_t mask = 0; | 116 | 38.2M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 33.9M | mask |= value_mask << (lane * lane_bits); | 118 | 33.9M | } | 119 | 4.24M | return mask; | 120 | 4.24M | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi3EEEmv Line | Count | Source | 111 | 5.74M | static constexpr uint64_t pdep_mask() { | 112 | 5.74M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 5.74M | constexpr int lanes = 64 / lane_bits; | 114 | 5.74M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 5.74M | uint64_t mask = 0; | 116 | 51.7M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 45.9M | mask |= value_mask << (lane * lane_bits); | 118 | 45.9M | } | 119 | 5.74M | return mask; | 120 | 5.74M | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi4EEEmv Line | Count | Source | 111 | 12.2M | static constexpr uint64_t pdep_mask() { | 112 | 12.2M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 12.2M | constexpr int lanes = 64 / lane_bits; | 114 | 12.2M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 12.2M | uint64_t mask = 0; | 116 | 110M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 98.0M | mask |= value_mask << (lane * lane_bits); | 118 | 98.0M | } | 119 | 12.2M | return mask; | 120 | 12.2M | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi5EEEmv Line | Count | Source | 111 | 42.6k | static constexpr uint64_t pdep_mask() { | 112 | 42.6k | constexpr int lane_bits = sizeof(T) * 8; | 113 | 42.6k | constexpr int lanes = 64 / lane_bits; | 114 | 42.6k | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 42.6k | uint64_t mask = 0; | 116 | 383k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 341k | mask |= value_mask << (lane * lane_bits); | 118 | 341k | } | 119 | 42.6k | return mask; | 120 | 42.6k | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi6EEEmv Line | Count | Source | 111 | 8.39M | static constexpr uint64_t pdep_mask() { | 112 | 8.39M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 8.39M | constexpr int lanes = 64 / lane_bits; | 114 | 8.39M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 8.39M | uint64_t mask = 0; | 116 | 75.5M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 67.1M | mask |= value_mask << (lane * lane_bits); | 118 | 67.1M | } | 119 | 8.39M | return mask; | 120 | 8.39M | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi7EEEmv Line | Count | Source | 111 | 85.3k | static constexpr uint64_t pdep_mask() { | 112 | 85.3k | constexpr int lane_bits = sizeof(T) * 8; | 113 | 85.3k | constexpr int lanes = 64 / lane_bits; | 114 | 85.3k | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 85.3k | uint64_t mask = 0; | 116 | 768k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 682k | mask |= value_mask << (lane * lane_bits); | 118 | 682k | } | 119 | 85.3k | return mask; | 120 | 85.3k | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi8EEEmv Line | Count | Source | 111 | 84.6k | static constexpr uint64_t pdep_mask() { | 112 | 84.6k | constexpr int lane_bits = sizeof(T) * 8; | 113 | 84.6k | constexpr int lanes = 64 / lane_bits; | 114 | 84.6k | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 84.6k | uint64_t mask = 0; | 116 | 761k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 676k | mask |= value_mask << (lane * lane_bits); | 118 | 676k | } | 119 | 84.6k | return mask; | 120 | 84.6k | } |
_ZN5doris10PdepUnpack9pdep_maskItLi9EEEmv Line | Count | Source | 111 | 305k | static constexpr uint64_t pdep_mask() { | 112 | 305k | constexpr int lane_bits = sizeof(T) * 8; | 113 | 305k | constexpr int lanes = 64 / lane_bits; | 114 | 305k | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 305k | uint64_t mask = 0; | 116 | 1.52M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.22M | mask |= value_mask << (lane * lane_bits); | 118 | 1.22M | } | 119 | 305k | return mask; | 120 | 305k | } |
_ZN5doris10PdepUnpack9pdep_maskItLi10EEEmv Line | Count | Source | 111 | 269k | static constexpr uint64_t pdep_mask() { | 112 | 269k | constexpr int lane_bits = sizeof(T) * 8; | 113 | 269k | constexpr int lanes = 64 / lane_bits; | 114 | 269k | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 269k | uint64_t mask = 0; | 116 | 1.34M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.07M | mask |= value_mask << (lane * lane_bits); | 118 | 1.07M | } | 119 | 269k | return mask; | 120 | 269k | } |
_ZN5doris10PdepUnpack9pdep_maskItLi11EEEmv Line | Count | Source | 111 | 4.19M | static constexpr uint64_t pdep_mask() { | 112 | 4.19M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 4.19M | constexpr int lanes = 64 / lane_bits; | 114 | 4.19M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 4.19M | uint64_t mask = 0; | 116 | 20.9M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 16.7M | mask |= value_mask << (lane * lane_bits); | 118 | 16.7M | } | 119 | 4.19M | return mask; | 120 | 4.19M | } |
_ZN5doris10PdepUnpack9pdep_maskItLi12EEEmv Line | Count | Source | 111 | 32.8M | static constexpr uint64_t pdep_mask() { | 112 | 32.8M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 32.8M | constexpr int lanes = 64 / lane_bits; | 114 | 32.8M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 32.8M | uint64_t mask = 0; | 116 | 164M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 131M | mask |= value_mask << (lane * lane_bits); | 118 | 131M | } | 119 | 32.8M | return mask; | 120 | 32.8M | } |
_ZN5doris10PdepUnpack9pdep_maskItLi13EEEmv Line | Count | Source | 111 | 2.18M | static constexpr uint64_t pdep_mask() { | 112 | 2.18M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 2.18M | constexpr int lanes = 64 / lane_bits; | 114 | 2.18M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 2.18M | uint64_t mask = 0; | 116 | 10.9M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 8.72M | mask |= value_mask << (lane * lane_bits); | 118 | 8.72M | } | 119 | 2.18M | return mask; | 120 | 2.18M | } |
_ZN5doris10PdepUnpack9pdep_maskItLi14EEEmv Line | Count | Source | 111 | 7.66M | static constexpr uint64_t pdep_mask() { | 112 | 7.66M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 7.66M | constexpr int lanes = 64 / lane_bits; | 114 | 7.66M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 7.66M | uint64_t mask = 0; | 116 | 38.3M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 30.6M | mask |= value_mask << (lane * lane_bits); | 118 | 30.6M | } | 119 | 7.66M | return mask; | 120 | 7.66M | } |
_ZN5doris10PdepUnpack9pdep_maskItLi15EEEmv Line | Count | Source | 111 | 1.46M | static constexpr uint64_t pdep_mask() { | 112 | 1.46M | constexpr int lane_bits = sizeof(T) * 8; | 113 | 1.46M | constexpr int lanes = 64 / lane_bits; | 114 | 1.46M | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 1.46M | uint64_t mask = 0; | 116 | 7.31M | for (int lane = 0; lane < lanes; ++lane) { | 117 | 5.85M | mask |= value_mask << (lane * lane_bits); | 118 | 5.85M | } | 119 | 1.46M | return mask; | 120 | 1.46M | } |
|
121 | | |
122 | | template <int BIT_OFFSET, int PACKED_BITS> |
123 | 79.8M | static uint64_t load_packed_group(const uint8_t* input) { |
124 | 79.8M | constexpr int byte_offset = BIT_OFFSET / 8; |
125 | 79.8M | constexpr int shift = BIT_OFFSET % 8; |
126 | 79.8M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; |
127 | 79.8M | static_assert(PACKED_BITS <= 64); |
128 | 79.8M | static_assert(bytes_needed <= 9); |
129 | | |
130 | 79.8M | uint64_t low = 0; |
131 | 79.8M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); |
132 | 79.8M | if constexpr (bytes_needed <= 8) { |
133 | 79.8M | return low >> shift; |
134 | | } else { |
135 | | uint8_t high = input[byte_offset + 8]; |
136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> |
137 | | shift); |
138 | | } |
139 | 79.8M | } _ZN5doris10PdepUnpack17load_packed_groupILi0ELi8EEEmPKh Line | Count | Source | 123 | 47.6k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 47.6k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 47.6k | constexpr int shift = BIT_OFFSET % 8; | 126 | 47.6k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 47.6k | static_assert(PACKED_BITS <= 64); | 128 | 47.6k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 47.6k | uint64_t low = 0; | 131 | 47.6k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 47.6k | if constexpr (bytes_needed <= 8) { | 133 | 47.6k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 47.6k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi16EEEmPKh Line | Count | Source | 123 | 4.24M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 4.24M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 4.24M | constexpr int shift = BIT_OFFSET % 8; | 126 | 4.24M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 4.24M | static_assert(PACKED_BITS <= 64); | 128 | 4.24M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 4.24M | uint64_t low = 0; | 131 | 4.24M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 4.24M | if constexpr (bytes_needed <= 8) { | 133 | 4.24M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 4.24M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi24EEEmPKh Line | Count | Source | 123 | 5.74M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 5.74M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 5.74M | constexpr int shift = BIT_OFFSET % 8; | 126 | 5.74M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 5.74M | static_assert(PACKED_BITS <= 64); | 128 | 5.74M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 5.74M | uint64_t low = 0; | 131 | 5.74M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 5.74M | if constexpr (bytes_needed <= 8) { | 133 | 5.74M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 5.74M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi32EEEmPKh Line | Count | Source | 123 | 12.2M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12.2M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12.2M | constexpr int shift = BIT_OFFSET % 8; | 126 | 12.2M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12.2M | static_assert(PACKED_BITS <= 64); | 128 | 12.2M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12.2M | uint64_t low = 0; | 131 | 18.4E | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12.2M | if constexpr (bytes_needed <= 8) { | 133 | 12.2M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12.2M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi40EEEmPKh Line | Count | Source | 123 | 177k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 177k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 177k | constexpr int shift = BIT_OFFSET % 8; | 126 | 177k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 177k | static_assert(PACKED_BITS <= 64); | 128 | 177k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 177k | uint64_t low = 0; | 131 | 177k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 177k | if constexpr (bytes_needed <= 8) { | 133 | 177k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 177k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi48EEEmPKh Line | Count | Source | 123 | 24.7M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 24.7M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 24.7M | constexpr int shift = BIT_OFFSET % 8; | 126 | 24.7M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 24.7M | static_assert(PACKED_BITS <= 64); | 128 | 24.7M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 24.7M | uint64_t low = 0; | 131 | 24.7M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 24.7M | if constexpr (bytes_needed <= 8) { | 133 | 24.7M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 24.7M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi56EEEmPKh Line | Count | Source | 123 | 3.91M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 3.91M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 3.91M | constexpr int shift = BIT_OFFSET % 8; | 126 | 3.91M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 3.91M | static_assert(PACKED_BITS <= 64); | 128 | 3.91M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 3.91M | uint64_t low = 0; | 131 | 18.4E | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 3.91M | if constexpr (bytes_needed <= 8) { | 133 | 3.91M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 3.91M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi64EEEmPKh Line | Count | Source | 123 | 84.5k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 84.5k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 84.5k | constexpr int shift = BIT_OFFSET % 8; | 126 | 84.5k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 84.5k | static_assert(PACKED_BITS <= 64); | 128 | 84.5k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 84.5k | uint64_t low = 0; | 131 | 84.5k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 84.5k | if constexpr (bytes_needed <= 8) { | 133 | 84.5k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 84.5k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi36EEEmPKh Line | Count | Source | 123 | 152k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 152k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 152k | constexpr int shift = BIT_OFFSET % 8; | 126 | 152k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 152k | static_assert(PACKED_BITS <= 64); | 128 | 152k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 152k | uint64_t low = 0; | 131 | 152k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 152k | if constexpr (bytes_needed <= 8) { | 133 | 152k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 152k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi36ELi36EEEmPKh Line | Count | Source | 123 | 152k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 152k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 152k | constexpr int shift = BIT_OFFSET % 8; | 126 | 152k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 152k | static_assert(PACKED_BITS <= 64); | 128 | 152k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 152k | uint64_t low = 0; | 131 | 152k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 152k | if constexpr (bytes_needed <= 8) { | 133 | 152k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 152k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi40ELi40EEEmPKh Line | Count | Source | 123 | 134k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 134k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 134k | constexpr int shift = BIT_OFFSET % 8; | 126 | 134k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 134k | static_assert(PACKED_BITS <= 64); | 128 | 134k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 134k | uint64_t low = 0; | 131 | 134k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 134k | if constexpr (bytes_needed <= 8) { | 133 | 134k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 134k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi44EEEmPKh Line | Count | Source | 123 | 2.09M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 2.09M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 2.09M | constexpr int shift = BIT_OFFSET % 8; | 126 | 2.09M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 2.09M | static_assert(PACKED_BITS <= 64); | 128 | 2.09M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 2.09M | uint64_t low = 0; | 131 | 2.09M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 2.09M | if constexpr (bytes_needed <= 8) { | 133 | 2.09M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 2.09M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi44ELi44EEEmPKh Line | Count | Source | 123 | 2.09M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 2.09M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 2.09M | constexpr int shift = BIT_OFFSET % 8; | 126 | 2.09M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 2.09M | static_assert(PACKED_BITS <= 64); | 128 | 2.09M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 2.09M | uint64_t low = 0; | 131 | 2.09M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 2.09M | if constexpr (bytes_needed <= 8) { | 133 | 2.09M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 2.09M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi48ELi48EEEmPKh Line | Count | Source | 123 | 16.4M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 16.4M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 16.4M | constexpr int shift = BIT_OFFSET % 8; | 126 | 16.4M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 16.4M | static_assert(PACKED_BITS <= 64); | 128 | 16.4M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 16.4M | uint64_t low = 0; | 131 | 18.4E | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 16.4M | if constexpr (bytes_needed <= 8) { | 133 | 16.4M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 16.4M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi52EEEmPKh Line | Count | Source | 123 | 1.09M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 1.09M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 1.09M | constexpr int shift = BIT_OFFSET % 8; | 126 | 1.09M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 1.09M | static_assert(PACKED_BITS <= 64); | 128 | 1.09M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 1.09M | uint64_t low = 0; | 131 | 1.09M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 1.09M | if constexpr (bytes_needed <= 8) { | 133 | 1.09M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 1.09M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi52ELi52EEEmPKh Line | Count | Source | 123 | 1.09M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 1.09M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 1.09M | constexpr int shift = BIT_OFFSET % 8; | 126 | 1.09M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 1.09M | static_assert(PACKED_BITS <= 64); | 128 | 1.09M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 1.09M | uint64_t low = 0; | 131 | 1.09M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 1.09M | if constexpr (bytes_needed <= 8) { | 133 | 1.09M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 1.09M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi56ELi56EEEmPKh Line | Count | Source | 123 | 3.83M | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 3.83M | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 3.83M | constexpr int shift = BIT_OFFSET % 8; | 126 | 3.83M | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 3.83M | static_assert(PACKED_BITS <= 64); | 128 | 3.83M | static_assert(bytes_needed <= 9); | 129 | | | 130 | 3.83M | uint64_t low = 0; | 131 | 3.83M | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 3.83M | if constexpr (bytes_needed <= 8) { | 133 | 3.83M | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 3.83M | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi60EEEmPKh Line | Count | Source | 123 | 731k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 731k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 731k | constexpr int shift = BIT_OFFSET % 8; | 126 | 731k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 731k | static_assert(PACKED_BITS <= 64); | 128 | 731k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 731k | uint64_t low = 0; | 131 | 731k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 731k | if constexpr (bytes_needed <= 8) { | 133 | 731k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 731k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi60ELi60EEEmPKh Line | Count | Source | 123 | 731k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 731k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 731k | constexpr int shift = BIT_OFFSET % 8; | 126 | 731k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 731k | static_assert(PACKED_BITS <= 64); | 128 | 731k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 731k | uint64_t low = 0; | 131 | 731k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 731k | if constexpr (bytes_needed <= 8) { | 133 | 731k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 731k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi8ELi8EEEmPKh Line | Count | Source | 123 | 2.31k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 2.31k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 2.31k | constexpr int shift = BIT_OFFSET % 8; | 126 | 2.31k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 2.31k | static_assert(PACKED_BITS <= 64); | 128 | 2.31k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 2.31k | uint64_t low = 0; | 131 | 2.31k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 2.31k | if constexpr (bytes_needed <= 8) { | 133 | 2.31k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 2.31k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi16ELi16EEEmPKh Line | Count | Source | 123 | 1.40k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 1.40k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 1.40k | constexpr int shift = BIT_OFFSET % 8; | 126 | 1.40k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 1.40k | static_assert(PACKED_BITS <= 64); | 128 | 1.40k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 1.40k | uint64_t low = 0; | 131 | 1.40k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 1.40k | if constexpr (bytes_needed <= 8) { | 133 | 1.40k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 1.40k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi24ELi24EEEmPKh Line | Count | Source | 123 | 4.68k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 4.68k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 4.68k | constexpr int shift = BIT_OFFSET % 8; | 126 | 4.68k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 4.68k | static_assert(PACKED_BITS <= 64); | 128 | 4.68k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 4.68k | uint64_t low = 0; | 131 | 4.68k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 4.68k | if constexpr (bytes_needed <= 8) { | 133 | 4.68k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 4.68k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi32ELi32EEEmPKh Line | Count | Source | 123 | 36 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 36 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 36 | constexpr int shift = BIT_OFFSET % 8; | 126 | 36 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 36 | static_assert(PACKED_BITS <= 64); | 128 | 36 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 36 | uint64_t low = 0; | 131 | 36 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 36 | if constexpr (bytes_needed <= 8) { | 133 | 36 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 36 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi64ELi64EEEmPKh Line | Count | Source | 123 | 36 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 36 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 36 | constexpr int shift = BIT_OFFSET % 8; | 126 | 36 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 36 | static_assert(PACKED_BITS <= 64); | 128 | 36 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 36 | uint64_t low = 0; | 131 | 36 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 36 | if constexpr (bytes_needed <= 8) { | 133 | 36 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 36 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi72ELi36EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi108ELi36EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi144ELi36EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi180ELi36EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi216ELi36EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi252ELi36EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi80ELi40EEEmPKh Line | Count | Source | 123 | 24 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 24 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 24 | constexpr int shift = BIT_OFFSET % 8; | 126 | 24 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 24 | static_assert(PACKED_BITS <= 64); | 128 | 24 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 24 | uint64_t low = 0; | 131 | 24 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 24 | if constexpr (bytes_needed <= 8) { | 133 | 24 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 24 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi120ELi40EEEmPKh Line | Count | Source | 123 | 24 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 24 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 24 | constexpr int shift = BIT_OFFSET % 8; | 126 | 24 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 24 | static_assert(PACKED_BITS <= 64); | 128 | 24 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 24 | uint64_t low = 0; | 131 | 24 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 24 | if constexpr (bytes_needed <= 8) { | 133 | 24 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 24 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi160ELi40EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi200ELi40EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi240ELi40EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi280ELi40EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi88ELi44EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi132ELi44EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi176ELi44EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi220ELi44EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi264ELi44EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi308ELi44EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi96ELi48EEEmPKh Line | Count | Source | 123 | 24 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 24 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 24 | constexpr int shift = BIT_OFFSET % 8; | 126 | 24 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 24 | static_assert(PACKED_BITS <= 64); | 128 | 24 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 24 | uint64_t low = 0; | 131 | 24 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 24 | if constexpr (bytes_needed <= 8) { | 133 | 24 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 24 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi144ELi48EEEmPKh Line | Count | Source | 123 | 24 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 24 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 24 | constexpr int shift = BIT_OFFSET % 8; | 126 | 24 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 24 | static_assert(PACKED_BITS <= 64); | 128 | 24 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 24 | uint64_t low = 0; | 131 | 24 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 24 | if constexpr (bytes_needed <= 8) { | 133 | 24 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 24 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi192ELi48EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi240ELi48EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi288ELi48EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi336ELi48EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi104ELi52EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi156ELi52EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi208ELi52EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi260ELi52EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi312ELi52EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi364ELi52EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi112ELi56EEEmPKh Line | Count | Source | 123 | 24 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 24 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 24 | constexpr int shift = BIT_OFFSET % 8; | 126 | 24 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 24 | static_assert(PACKED_BITS <= 64); | 128 | 24 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 24 | uint64_t low = 0; | 131 | 24 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 24 | if constexpr (bytes_needed <= 8) { | 133 | 24 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 24 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi168ELi56EEEmPKh Line | Count | Source | 123 | 24 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 24 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 24 | constexpr int shift = BIT_OFFSET % 8; | 126 | 24 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 24 | static_assert(PACKED_BITS <= 64); | 128 | 24 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 24 | uint64_t low = 0; | 131 | 24 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 24 | if constexpr (bytes_needed <= 8) { | 133 | 24 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 24 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi224ELi56EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi280ELi56EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi336ELi56EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi392ELi56EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi120ELi60EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi180ELi60EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi240ELi60EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi300ELi60EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi360ELi60EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi420ELi60EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi24ELi8EEEmPKh Line | Count | Source | 123 | 2.29k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 2.29k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 2.29k | constexpr int shift = BIT_OFFSET % 8; | 126 | 2.29k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 2.29k | static_assert(PACKED_BITS <= 64); | 128 | 2.29k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 2.29k | uint64_t low = 0; | 131 | 2.29k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 2.29k | if constexpr (bytes_needed <= 8) { | 133 | 2.29k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 2.29k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi16ELi8EEEmPKh Line | Count | Source | 123 | 2.29k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 2.29k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 2.29k | constexpr int shift = BIT_OFFSET % 8; | 126 | 2.29k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 2.29k | static_assert(PACKED_BITS <= 64); | 128 | 2.29k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 2.29k | uint64_t low = 0; | 131 | 2.29k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 2.29k | if constexpr (bytes_needed <= 8) { | 133 | 2.29k | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 2.29k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi48ELi16EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi32ELi16EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi72ELi24EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi48ELi24EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi96ELi32EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi64ELi32EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi192ELi64EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi128ELi64EEEmPKh Line | Count | Source | 123 | 12 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 12 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 12 | constexpr int shift = BIT_OFFSET % 8; | 126 | 12 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 12 | static_assert(PACKED_BITS <= 64); | 128 | 12 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 12 | uint64_t low = 0; | 131 | 12 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 12 | if constexpr (bytes_needed <= 8) { | 133 | 12 | return low >> shift; | 134 | | } else { | 135 | | uint8_t high = input[byte_offset + 8]; | 136 | | return static_cast<uint64_t>((static_cast<unsigned __int128>(high) << 64 | low) >> | 137 | | shift); | 138 | | } | 139 | 12 | } |
|
140 | | |
141 | | template <typename T, int BIT_WIDTH, std::size_t GROUP> |
142 | 10.1k | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { |
143 | 10.1k | constexpr int lanes = 64 / (sizeof(T) * 8); |
144 | 10.1k | constexpr int first_value = GROUP * lanes; |
145 | 10.1k | constexpr int bit_offset = first_value * BIT_WIDTH; |
146 | 10.1k | constexpr int packed_bits = lanes * BIT_WIDTH; |
147 | 10.1k | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); |
148 | 10.1k | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); |
149 | 10.1k | std::memcpy(output + first_value, &expanded, sizeof(expanded)); |
150 | 10.1k | } _ZN5doris10PdepUnpack12unpack_groupItLi9ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi9ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi9ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi9ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi9ELm4EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi9ELm5EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi9ELm6EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi9ELm7EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi10ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi10ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi10ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi10ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi10ELm4EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi10ELm5EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi10ELm6EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi10ELm7EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi11ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi11ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi11ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi11ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi11ELm4EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi11ELm5EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi11ELm6EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi11ELm7EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi12ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi12ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi12ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi12ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi12ELm4EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi12ELm5EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi12ELm6EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi12ELm7EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi13ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi13ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi13ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi13ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi13ELm4EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi13ELm5EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi13ELm6EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi13ELm7EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi14ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi14ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi14ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi14ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi14ELm4EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi14ELm5EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi14ELm6EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi14ELm7EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi15ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi15ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi15ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi15ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi15ELm4EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi15ELm5EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi15ELm6EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupItLi15ELm7EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi1ELm3EEEvPKhPT_ Line | Count | Source | 142 | 2.29k | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 2.29k | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 2.29k | constexpr int first_value = GROUP * lanes; | 145 | 2.29k | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 2.29k | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 2.29k | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 2.29k | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 2.29k | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 2.29k | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi1ELm2EEEvPKhPT_ Line | Count | Source | 142 | 2.29k | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 2.29k | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 2.29k | constexpr int first_value = GROUP * lanes; | 145 | 2.29k | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 2.29k | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 2.29k | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 2.29k | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 2.29k | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 2.29k | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi1ELm1EEEvPKhPT_ Line | Count | Source | 142 | 2.29k | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 2.29k | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 2.29k | constexpr int first_value = GROUP * lanes; | 145 | 2.29k | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 2.29k | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 2.29k | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 2.29k | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 2.29k | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 2.29k | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi1ELm0EEEvPKhPT_ Line | Count | Source | 142 | 2.29k | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 2.29k | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 2.29k | constexpr int first_value = GROUP * lanes; | 145 | 2.29k | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 2.29k | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 2.29k | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 2.29k | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 2.29k | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 2.29k | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi2ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi2ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi2ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi2ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi3ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi3ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi3ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi3ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi4ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi4ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi4ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi4ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi5ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi5ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi5ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi5ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi6ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi6ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi6ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi6ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi7ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi7ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi7ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi7ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi8ELm3EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi8ELm2EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi8ELm1EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
_ZN5doris10PdepUnpack12unpack_groupIhLi8ELm0EEEvPKhPT_ Line | Count | Source | 142 | 12 | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { | 143 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 144 | 12 | constexpr int first_value = GROUP * lanes; | 145 | 12 | constexpr int bit_offset = first_value * BIT_WIDTH; | 146 | 12 | constexpr int packed_bits = lanes * BIT_WIDTH; | 147 | 12 | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); | 148 | 12 | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); | 149 | 12 | std::memcpy(output + first_value, &expanded, sizeof(expanded)); | 150 | 12 | } |
|
151 | | |
152 | | template <typename T, int BIT_WIDTH, std::size_t... GROUPS> |
153 | | __attribute__((target("bmi2"))) static void unpack32_with_pdep_impl( |
154 | 2.46k | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { |
155 | 2.46k | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); |
156 | 2.46k | } _ZN5doris10PdepUnpack23unpack32_with_pdep_implItLi9EJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implItLi10EJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implItLi11EJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implItLi12EJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implItLi13EJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implItLi14EJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implItLi15EJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi1EJLm0ELm1ELm2ELm3EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 2.29k | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 2.29k | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 2.29k | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi2EJLm0ELm1ELm2ELm3EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi3EJLm0ELm1ELm2ELm3EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi4EJLm0ELm1ELm2ELm3EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi5EJLm0ELm1ELm2ELm3EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi6EJLm0ELm1ELm2ELm3EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi7EJLm0ELm1ELm2ELm3EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
_ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi8EJLm0ELm1ELm2ELm3EEEEvPKhPT_St16integer_sequenceImJXspT1_EEE Line | Count | Source | 154 | 12 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { | 155 | 12 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); | 156 | 12 | } |
|
157 | | |
158 | | template <typename T, int BIT_WIDTH> |
159 | | __attribute__((target("bmi2"))) static void unpack32_with_pdep(const uint8_t* input, |
160 | 2.46k | T* output) { |
161 | 2.46k | constexpr int lanes = 64 / (sizeof(T) * 8); |
162 | 2.46k | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, |
163 | 2.46k | std::make_index_sequence<32 / lanes> {}); |
164 | 2.46k | } _ZN5doris10PdepUnpack18unpack32_with_pdepItLi9EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepItLi10EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepItLi11EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepItLi12EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepItLi13EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepItLi14EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepItLi15EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepIhLi1EEEvPKhPT_ Line | Count | Source | 160 | 2.29k | T* output) { | 161 | 2.29k | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 2.29k | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 2.29k | std::make_index_sequence<32 / lanes> {}); | 164 | 2.29k | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepIhLi2EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepIhLi3EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepIhLi4EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepIhLi5EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepIhLi6EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepIhLi7EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
_ZN5doris10PdepUnpack18unpack32_with_pdepIhLi8EEEvPKhPT_ Line | Count | Source | 160 | 12 | T* output) { | 161 | 12 | constexpr int lanes = 64 / (sizeof(T) * 8); | 162 | 12 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, | 163 | 12 | std::make_index_sequence<32 / lanes> {}); | 164 | 12 | } |
|
165 | | }; |
166 | | |
167 | | } // namespace doris |
168 | | |
169 | | #endif |