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 | 132 | static bool is_supported() { |
38 | 132 | return config::enable_bmi2_optimizations && __builtin_cpu_supports("bmi2") && |
39 | 132 | __builtin_cpu_supports("avx2"); |
40 | 132 | } |
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_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 Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi15EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack17is_supported_typeItLi16EEEbv 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_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 |
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_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 Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi15EEEbv Unexecuted instantiation: _ZN5doris10PdepUnpack10should_useItLi16EEEbv 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_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 |
62 | | |
63 | | template <typename T, int BIT_WIDTH> |
64 | 701 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { |
65 | 701 | static_assert(is_supported_type<T, BIT_WIDTH>()); |
66 | 701 | if constexpr (std::is_same_v<T, uint8_t>) { |
67 | 96 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); |
68 | 96 | } else if constexpr (std::is_same_v<T, uint16_t> && BIT_WIDTH <= 8) { |
69 | 288 | for (int group = 0; group < 2; ++group) { |
70 | 192 | const int first_value = group * 16; |
71 | 192 | const uint8_t* group_input = input + group * 2 * BIT_WIDTH; |
72 | 192 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(group_input), |
73 | 192 | pdep_mask<uint8_t, BIT_WIDTH>()); |
74 | 192 | uint64_t expanded1 = |
75 | 192 | _pdep_u64(load_packed_group<8 * BIT_WIDTH, 8 * BIT_WIDTH>(group_input), |
76 | 192 | pdep_mask<uint8_t, BIT_WIDTH>()); |
77 | 192 | __m128i packed8 = _mm_set_epi64x(static_cast<int64_t>(expanded1), |
78 | 192 | static_cast<int64_t>(expanded0)); |
79 | 192 | __m256i unpacked16 = _mm256_cvtepu8_epi16(packed8); |
80 | 192 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked16); |
81 | 192 | } |
82 | 102 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { |
83 | 510 | for (int group = 0; group < 4; ++group) { |
84 | 408 | uint64_t expanded = |
85 | 408 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), |
86 | 408 | pdep_mask<uint8_t, BIT_WIDTH>()); |
87 | 408 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); |
88 | 408 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); |
89 | 408 | } |
90 | 323 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { |
91 | 1.61k | for (int group = 0; group < 4; ++group) { |
92 | 1.29k | const int first_value = group * 8; |
93 | 1.29k | const uint8_t* group_input = input + group * BIT_WIDTH; |
94 | 1.29k | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), |
95 | 1.29k | pdep_mask<uint16_t, BIT_WIDTH>()); |
96 | 1.29k | uint64_t expanded1 = |
97 | 1.29k | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), |
98 | 1.29k | pdep_mask<uint16_t, BIT_WIDTH>()); |
99 | 1.29k | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), |
100 | 1.29k | static_cast<int64_t>(expanded0)); |
101 | 1.29k | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); |
102 | 1.29k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); |
103 | 1.29k | } |
104 | 323 | } else { |
105 | 84 | unpack32_with_pdep<T, BIT_WIDTH>(input, output); |
106 | 84 | } |
107 | 701 | } _ZN5doris10PdepUnpack8unpack32IjLi1EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 60 | for (int group = 0; group < 4; ++group) { | 84 | 48 | uint64_t expanded = | 85 | 48 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 48 | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 48 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 48 | } | 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 | } |
_ZN5doris10PdepUnpack8unpack32IjLi2EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 60 | for (int group = 0; group < 4; ++group) { | 84 | 48 | uint64_t expanded = | 85 | 48 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 48 | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 48 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 48 | } | 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 | } |
_ZN5doris10PdepUnpack8unpack32IjLi3EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 60 | for (int group = 0; group < 4; ++group) { | 84 | 48 | uint64_t expanded = | 85 | 48 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 48 | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 48 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 48 | } | 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 | } |
_ZN5doris10PdepUnpack8unpack32IjLi4EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 60 | for (int group = 0; group < 4; ++group) { | 84 | 48 | uint64_t expanded = | 85 | 48 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 48 | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 48 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 48 | } | 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 | } |
_ZN5doris10PdepUnpack8unpack32IjLi5EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 60 | for (int group = 0; group < 4; ++group) { | 84 | 48 | uint64_t expanded = | 85 | 48 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 48 | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 48 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 48 | } | 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 | } |
_ZN5doris10PdepUnpack8unpack32IjLi6EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 60 | for (int group = 0; group < 4; ++group) { | 84 | 48 | uint64_t expanded = | 85 | 48 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 48 | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 48 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 48 | } | 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 | } |
_ZN5doris10PdepUnpack8unpack32IjLi7EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 60 | for (int group = 0; group < 4; ++group) { | 84 | 48 | uint64_t expanded = | 85 | 48 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 48 | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 48 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 48 | } | 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 | } |
_ZN5doris10PdepUnpack8unpack32IjLi8EEEvPKhPT_ Line | Count | Source | 64 | 18 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 18 | 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 | 18 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 8) { | 83 | 90 | for (int group = 0; group < 4; ++group) { | 84 | 72 | uint64_t expanded = | 85 | 72 | _pdep_u64(load_packed_group<0, 8 * BIT_WIDTH>(input + group * BIT_WIDTH), | 86 | 72 | pdep_mask<uint8_t, BIT_WIDTH>()); | 87 | 72 | __m256i unpacked32 = _mm256_cvtepu8_epi32(_mm_cvtsi64_si128(expanded)); | 88 | 72 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + group * 8), unpacked32); | 89 | 72 | } | 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 | 18 | } |
_ZN5doris10PdepUnpack8unpack32IjLi9EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 60 | for (int group = 0; group < 4; ++group) { | 92 | 48 | const int first_value = group * 8; | 93 | 48 | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 48 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 48 | uint64_t expanded1 = | 97 | 48 | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 48 | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 48 | static_cast<int64_t>(expanded0)); | 101 | 48 | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 48 | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IjLi10EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 60 | for (int group = 0; group < 4; ++group) { | 92 | 48 | const int first_value = group * 8; | 93 | 48 | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 48 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 48 | uint64_t expanded1 = | 97 | 48 | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 48 | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 48 | static_cast<int64_t>(expanded0)); | 101 | 48 | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 48 | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IjLi11EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 60 | for (int group = 0; group < 4; ++group) { | 92 | 48 | const int first_value = group * 8; | 93 | 48 | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 48 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 48 | uint64_t expanded1 = | 97 | 48 | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 48 | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 48 | static_cast<int64_t>(expanded0)); | 101 | 48 | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 48 | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IjLi12EEEvPKhPT_ Line | Count | Source | 64 | 251 | __attribute__((target("bmi2,avx2"))) static void unpack32(const uint8_t* input, T* output) { | 65 | 251 | 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 | 251 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 1.25k | for (int group = 0; group < 4; ++group) { | 92 | 1.00k | const int first_value = group * 8; | 93 | 1.00k | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 1.00k | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 1.00k | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 1.00k | uint64_t expanded1 = | 97 | 1.00k | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 1.00k | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 1.00k | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 1.00k | static_cast<int64_t>(expanded0)); | 101 | 1.00k | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 1.00k | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 1.00k | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 251 | } |
_ZN5doris10PdepUnpack8unpack32IjLi13EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 60 | for (int group = 0; group < 4; ++group) { | 92 | 48 | const int first_value = group * 8; | 93 | 48 | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 48 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 48 | uint64_t expanded1 = | 97 | 48 | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 48 | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 48 | static_cast<int64_t>(expanded0)); | 101 | 48 | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 48 | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IjLi14EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 60 | for (int group = 0; group < 4; ++group) { | 92 | 48 | const int first_value = group * 8; | 93 | 48 | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 48 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 48 | uint64_t expanded1 = | 97 | 48 | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 48 | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 48 | static_cast<int64_t>(expanded0)); | 101 | 48 | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 48 | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IjLi15EEEvPKhPT_ 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 | 12 | } else if constexpr (std::is_same_v<T, uint32_t> && BIT_WIDTH <= 15) { | 91 | 60 | for (int group = 0; group < 4; ++group) { | 92 | 48 | const int first_value = group * 8; | 93 | 48 | const uint8_t* group_input = input + group * BIT_WIDTH; | 94 | 48 | uint64_t expanded0 = _pdep_u64(load_packed_group<0, 4 * BIT_WIDTH>(group_input), | 95 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 96 | 48 | uint64_t expanded1 = | 97 | 48 | _pdep_u64(load_packed_group<4 * BIT_WIDTH, 4 * BIT_WIDTH>(group_input), | 98 | 48 | pdep_mask<uint16_t, BIT_WIDTH>()); | 99 | 48 | __m128i packed16 = _mm_set_epi64x(static_cast<int64_t>(expanded1), | 100 | 48 | static_cast<int64_t>(expanded0)); | 101 | 48 | __m256i unpacked32 = _mm256_cvtepu16_epi32(packed16); | 102 | 48 | _mm256_storeu_si256(reinterpret_cast<__m256i*>(output + first_value), unpacked32); | 103 | 48 | } | 104 | | } else { | 105 | | unpack32_with_pdep<T, BIT_WIDTH>(input, output); | 106 | | } | 107 | 12 | } |
_ZN5doris10PdepUnpack8unpack32IhLi1EEEvPKhPT_ 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 | } |
_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 | } |
_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 | 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 | } |
_ZN5doris10PdepUnpack8unpack32ItLi3EEEvPKhPT_ 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 | } |
_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 | } |
|
108 | | |
109 | | private: |
110 | | template <typename T, int BIT_WIDTH> |
111 | 4.43k | static constexpr uint64_t pdep_mask() { |
112 | 4.43k | constexpr int lane_bits = sizeof(T) * 8; |
113 | 4.43k | constexpr int lanes = 64 / lane_bits; |
114 | 4.43k | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; |
115 | 4.43k | uint64_t mask = 0; |
116 | 26.8k | for (int lane = 0; lane < lanes; ++lane) { |
117 | 22.4k | mask |= value_mask << (lane * lane_bits); |
118 | 22.4k | } |
119 | 4.43k | return mask; |
120 | 4.43k | } _ZN5doris10PdepUnpack9pdep_maskIhLi1EEEmv Line | Count | Source | 111 | 144 | static constexpr uint64_t pdep_mask() { | 112 | 144 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 144 | constexpr int lanes = 64 / lane_bits; | 114 | 144 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 144 | uint64_t mask = 0; | 116 | 1.29k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.15k | mask |= value_mask << (lane * lane_bits); | 118 | 1.15k | } | 119 | 144 | return mask; | 120 | 144 | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi2EEEmv Line | Count | Source | 111 | 144 | static constexpr uint64_t pdep_mask() { | 112 | 144 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 144 | constexpr int lanes = 64 / lane_bits; | 114 | 144 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 144 | uint64_t mask = 0; | 116 | 1.29k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.15k | mask |= value_mask << (lane * lane_bits); | 118 | 1.15k | } | 119 | 144 | return mask; | 120 | 144 | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi3EEEmv Line | Count | Source | 111 | 144 | static constexpr uint64_t pdep_mask() { | 112 | 144 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 144 | constexpr int lanes = 64 / lane_bits; | 114 | 144 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 144 | uint64_t mask = 0; | 116 | 1.29k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.15k | mask |= value_mask << (lane * lane_bits); | 118 | 1.15k | } | 119 | 144 | return mask; | 120 | 144 | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi4EEEmv Line | Count | Source | 111 | 144 | static constexpr uint64_t pdep_mask() { | 112 | 144 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 144 | constexpr int lanes = 64 / lane_bits; | 114 | 144 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 144 | uint64_t mask = 0; | 116 | 1.29k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.15k | mask |= value_mask << (lane * lane_bits); | 118 | 1.15k | } | 119 | 144 | return mask; | 120 | 144 | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi5EEEmv Line | Count | Source | 111 | 144 | static constexpr uint64_t pdep_mask() { | 112 | 144 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 144 | constexpr int lanes = 64 / lane_bits; | 114 | 144 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 144 | uint64_t mask = 0; | 116 | 1.29k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.15k | mask |= value_mask << (lane * lane_bits); | 118 | 1.15k | } | 119 | 144 | return mask; | 120 | 144 | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi6EEEmv Line | Count | Source | 111 | 144 | static constexpr uint64_t pdep_mask() { | 112 | 144 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 144 | constexpr int lanes = 64 / lane_bits; | 114 | 144 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 144 | uint64_t mask = 0; | 116 | 1.29k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.15k | mask |= value_mask << (lane * lane_bits); | 118 | 1.15k | } | 119 | 144 | return mask; | 120 | 144 | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi7EEEmv Line | Count | Source | 111 | 144 | static constexpr uint64_t pdep_mask() { | 112 | 144 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 144 | constexpr int lanes = 64 / lane_bits; | 114 | 144 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 144 | uint64_t mask = 0; | 116 | 1.29k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.15k | mask |= value_mask << (lane * lane_bits); | 118 | 1.15k | } | 119 | 144 | return mask; | 120 | 144 | } |
_ZN5doris10PdepUnpack9pdep_maskIhLi8EEEmv Line | Count | Source | 111 | 168 | static constexpr uint64_t pdep_mask() { | 112 | 168 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 168 | constexpr int lanes = 64 / lane_bits; | 114 | 168 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 168 | uint64_t mask = 0; | 116 | 1.51k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 1.34k | mask |= value_mask << (lane * lane_bits); | 118 | 1.34k | } | 119 | 168 | return mask; | 120 | 168 | } |
_ZN5doris10PdepUnpack9pdep_maskItLi9EEEmv Line | Count | Source | 111 | 192 | static constexpr uint64_t pdep_mask() { | 112 | 192 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 192 | constexpr int lanes = 64 / lane_bits; | 114 | 192 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 192 | uint64_t mask = 0; | 116 | 960 | for (int lane = 0; lane < lanes; ++lane) { | 117 | 768 | mask |= value_mask << (lane * lane_bits); | 118 | 768 | } | 119 | 192 | return mask; | 120 | 192 | } |
_ZN5doris10PdepUnpack9pdep_maskItLi10EEEmv Line | Count | Source | 111 | 192 | static constexpr uint64_t pdep_mask() { | 112 | 192 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 192 | constexpr int lanes = 64 / lane_bits; | 114 | 192 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 192 | uint64_t mask = 0; | 116 | 960 | for (int lane = 0; lane < lanes; ++lane) { | 117 | 768 | mask |= value_mask << (lane * lane_bits); | 118 | 768 | } | 119 | 192 | return mask; | 120 | 192 | } |
_ZN5doris10PdepUnpack9pdep_maskItLi11EEEmv Line | Count | Source | 111 | 192 | static constexpr uint64_t pdep_mask() { | 112 | 192 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 192 | constexpr int lanes = 64 / lane_bits; | 114 | 192 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 192 | uint64_t mask = 0; | 116 | 960 | for (int lane = 0; lane < lanes; ++lane) { | 117 | 768 | mask |= value_mask << (lane * lane_bits); | 118 | 768 | } | 119 | 192 | return mask; | 120 | 192 | } |
_ZN5doris10PdepUnpack9pdep_maskItLi12EEEmv Line | Count | Source | 111 | 2.10k | static constexpr uint64_t pdep_mask() { | 112 | 2.10k | constexpr int lane_bits = sizeof(T) * 8; | 113 | 2.10k | constexpr int lanes = 64 / lane_bits; | 114 | 2.10k | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 2.10k | uint64_t mask = 0; | 116 | 10.5k | for (int lane = 0; lane < lanes; ++lane) { | 117 | 8.41k | mask |= value_mask << (lane * lane_bits); | 118 | 8.41k | } | 119 | 2.10k | return mask; | 120 | 2.10k | } |
_ZN5doris10PdepUnpack9pdep_maskItLi13EEEmv Line | Count | Source | 111 | 192 | static constexpr uint64_t pdep_mask() { | 112 | 192 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 192 | constexpr int lanes = 64 / lane_bits; | 114 | 192 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 192 | uint64_t mask = 0; | 116 | 960 | for (int lane = 0; lane < lanes; ++lane) { | 117 | 768 | mask |= value_mask << (lane * lane_bits); | 118 | 768 | } | 119 | 192 | return mask; | 120 | 192 | } |
_ZN5doris10PdepUnpack9pdep_maskItLi14EEEmv Line | Count | Source | 111 | 192 | static constexpr uint64_t pdep_mask() { | 112 | 192 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 192 | constexpr int lanes = 64 / lane_bits; | 114 | 192 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 192 | uint64_t mask = 0; | 116 | 960 | for (int lane = 0; lane < lanes; ++lane) { | 117 | 768 | mask |= value_mask << (lane * lane_bits); | 118 | 768 | } | 119 | 192 | return mask; | 120 | 192 | } |
_ZN5doris10PdepUnpack9pdep_maskItLi15EEEmv Line | Count | Source | 111 | 192 | static constexpr uint64_t pdep_mask() { | 112 | 192 | constexpr int lane_bits = sizeof(T) * 8; | 113 | 192 | constexpr int lanes = 64 / lane_bits; | 114 | 192 | constexpr uint64_t value_mask = (1ULL << BIT_WIDTH) - 1; | 115 | 192 | uint64_t mask = 0; | 116 | 960 | for (int lane = 0; lane < lanes; ++lane) { | 117 | 768 | mask |= value_mask << (lane * lane_bits); | 118 | 768 | } | 119 | 192 | return mask; | 120 | 192 | } |
|
121 | | |
122 | | template <int BIT_OFFSET, int PACKED_BITS> |
123 | 4.43k | static uint64_t load_packed_group(const uint8_t* input) { |
124 | 4.43k | constexpr int byte_offset = BIT_OFFSET / 8; |
125 | 4.43k | constexpr int shift = BIT_OFFSET % 8; |
126 | 4.43k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; |
127 | 4.43k | static_assert(PACKED_BITS <= 64); |
128 | 4.43k | static_assert(bytes_needed <= 9); |
129 | | |
130 | 4.43k | uint64_t low = 0; |
131 | 4.43k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); |
132 | 4.43k | if constexpr (bytes_needed <= 8) { |
133 | 4.43k | 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.43k | } _ZN5doris10PdepUnpack17load_packed_groupILi0ELi8EEEmPKh Line | Count | Source | 123 | 84 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 84 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 84 | constexpr int shift = BIT_OFFSET % 8; | 126 | 84 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 84 | static_assert(PACKED_BITS <= 64); | 128 | 84 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 84 | uint64_t low = 0; | 131 | 84 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 84 | if constexpr (bytes_needed <= 8) { | 133 | 84 | 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 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi16EEEmPKh Line | Count | Source | 123 | 84 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 84 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 84 | constexpr int shift = BIT_OFFSET % 8; | 126 | 84 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 84 | static_assert(PACKED_BITS <= 64); | 128 | 84 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 84 | uint64_t low = 0; | 131 | 84 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 84 | if constexpr (bytes_needed <= 8) { | 133 | 84 | 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 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi24EEEmPKh Line | Count | Source | 123 | 84 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 84 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 84 | constexpr int shift = BIT_OFFSET % 8; | 126 | 84 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 84 | static_assert(PACKED_BITS <= 64); | 128 | 84 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 84 | uint64_t low = 0; | 131 | 84 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 84 | if constexpr (bytes_needed <= 8) { | 133 | 84 | 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 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi32EEEmPKh Line | Count | Source | 123 | 84 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 84 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 84 | constexpr int shift = BIT_OFFSET % 8; | 126 | 84 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 84 | static_assert(PACKED_BITS <= 64); | 128 | 84 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 84 | uint64_t low = 0; | 131 | 84 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 84 | if constexpr (bytes_needed <= 8) { | 133 | 84 | 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 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi40EEEmPKh Line | Count | Source | 123 | 144 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 144 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 144 | constexpr int shift = BIT_OFFSET % 8; | 126 | 144 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 144 | static_assert(PACKED_BITS <= 64); | 128 | 144 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 144 | uint64_t low = 0; | 131 | 144 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 144 | if constexpr (bytes_needed <= 8) { | 133 | 144 | 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 | 144 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi48EEEmPKh Line | Count | Source | 123 | 1.10k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 1.10k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 1.10k | constexpr int shift = BIT_OFFSET % 8; | 126 | 1.10k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 1.10k | static_assert(PACKED_BITS <= 64); | 128 | 1.10k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 1.10k | uint64_t low = 0; | 131 | 1.10k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 1.10k | if constexpr (bytes_needed <= 8) { | 133 | 1.10k | 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.10k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi56EEEmPKh Line | Count | Source | 123 | 144 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 144 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 144 | constexpr int shift = BIT_OFFSET % 8; | 126 | 144 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 144 | static_assert(PACKED_BITS <= 64); | 128 | 144 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 144 | uint64_t low = 0; | 131 | 144 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 144 | if constexpr (bytes_needed <= 8) { | 133 | 144 | 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 | 144 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi64EEEmPKh Line | Count | Source | 123 | 108 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 108 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 108 | constexpr int shift = BIT_OFFSET % 8; | 126 | 108 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 108 | static_assert(PACKED_BITS <= 64); | 128 | 108 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 108 | uint64_t low = 0; | 131 | 108 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 108 | if constexpr (bytes_needed <= 8) { | 133 | 108 | 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 | 108 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi36EEEmPKh Line | Count | Source | 123 | 60 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 60 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 60 | constexpr int shift = BIT_OFFSET % 8; | 126 | 60 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 60 | static_assert(PACKED_BITS <= 64); | 128 | 60 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 60 | uint64_t low = 0; | 131 | 60 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 60 | if constexpr (bytes_needed <= 8) { | 133 | 60 | 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 | 60 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi36ELi36EEEmPKh Line | Count | Source | 123 | 60 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 60 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 60 | constexpr int shift = BIT_OFFSET % 8; | 126 | 60 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 60 | static_assert(PACKED_BITS <= 64); | 128 | 60 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 60 | uint64_t low = 0; | 131 | 60 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 60 | if constexpr (bytes_needed <= 8) { | 133 | 60 | 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 | 60 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi40ELi40EEEmPKh Line | Count | Source | 123 | 96 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 96 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 96 | constexpr int shift = BIT_OFFSET % 8; | 126 | 96 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 96 | static_assert(PACKED_BITS <= 64); | 128 | 96 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 96 | uint64_t low = 0; | 131 | 96 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 96 | if constexpr (bytes_needed <= 8) { | 133 | 96 | 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 | 96 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi44EEEmPKh Line | Count | Source | 123 | 60 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 60 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 60 | constexpr int shift = BIT_OFFSET % 8; | 126 | 60 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 60 | static_assert(PACKED_BITS <= 64); | 128 | 60 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 60 | uint64_t low = 0; | 131 | 60 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 60 | if constexpr (bytes_needed <= 8) { | 133 | 60 | 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 | 60 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi44ELi44EEEmPKh Line | Count | Source | 123 | 60 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 60 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 60 | constexpr int shift = BIT_OFFSET % 8; | 126 | 60 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 60 | static_assert(PACKED_BITS <= 64); | 128 | 60 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 60 | uint64_t low = 0; | 131 | 60 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 60 | if constexpr (bytes_needed <= 8) { | 133 | 60 | 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 | 60 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi48ELi48EEEmPKh Line | Count | Source | 123 | 1.05k | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 1.05k | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 1.05k | constexpr int shift = BIT_OFFSET % 8; | 126 | 1.05k | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 1.05k | static_assert(PACKED_BITS <= 64); | 128 | 1.05k | static_assert(bytes_needed <= 9); | 129 | | | 130 | 1.05k | uint64_t low = 0; | 131 | 1.05k | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 1.05k | if constexpr (bytes_needed <= 8) { | 133 | 1.05k | 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.05k | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi52EEEmPKh Line | Count | Source | 123 | 60 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 60 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 60 | constexpr int shift = BIT_OFFSET % 8; | 126 | 60 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 60 | static_assert(PACKED_BITS <= 64); | 128 | 60 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 60 | uint64_t low = 0; | 131 | 60 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 60 | if constexpr (bytes_needed <= 8) { | 133 | 60 | 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 | 60 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi52ELi52EEEmPKh Line | Count | Source | 123 | 60 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 60 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 60 | constexpr int shift = BIT_OFFSET % 8; | 126 | 60 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 60 | static_assert(PACKED_BITS <= 64); | 128 | 60 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 60 | uint64_t low = 0; | 131 | 60 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 60 | if constexpr (bytes_needed <= 8) { | 133 | 60 | 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 | 60 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi56ELi56EEEmPKh Line | Count | Source | 123 | 96 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 96 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 96 | constexpr int shift = BIT_OFFSET % 8; | 126 | 96 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 96 | static_assert(PACKED_BITS <= 64); | 128 | 96 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 96 | uint64_t low = 0; | 131 | 96 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 96 | if constexpr (bytes_needed <= 8) { | 133 | 96 | 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 | 96 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi0ELi60EEEmPKh Line | Count | Source | 123 | 60 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 60 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 60 | constexpr int shift = BIT_OFFSET % 8; | 126 | 60 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 60 | static_assert(PACKED_BITS <= 64); | 128 | 60 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 60 | uint64_t low = 0; | 131 | 60 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 60 | if constexpr (bytes_needed <= 8) { | 133 | 60 | 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 | 60 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi60ELi60EEEmPKh Line | Count | Source | 123 | 60 | static uint64_t load_packed_group(const uint8_t* input) { | 124 | 60 | constexpr int byte_offset = BIT_OFFSET / 8; | 125 | 60 | constexpr int shift = BIT_OFFSET % 8; | 126 | 60 | constexpr int bytes_needed = (shift + PACKED_BITS + 7) / 8; | 127 | 60 | static_assert(PACKED_BITS <= 64); | 128 | 60 | static_assert(bytes_needed <= 9); | 129 | | | 130 | 60 | uint64_t low = 0; | 131 | 60 | std::memcpy(&low, input + byte_offset, bytes_needed < 8 ? bytes_needed : 8); | 132 | 60 | if constexpr (bytes_needed <= 8) { | 133 | 60 | 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 | 60 | } |
_ZN5doris10PdepUnpack17load_packed_groupILi24ELi8EEEmPKh 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_groupILi16ELi8EEEmPKh 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_groupILi8ELi8EEEmPKh 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_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_groupILi16ELi16EEEmPKh 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_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_groupILi24ELi24EEEmPKh 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_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_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_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_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_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_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_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_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_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 | } |
_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_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_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_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 | } |
|
140 | | |
141 | | template <typename T, int BIT_WIDTH, std::size_t GROUP> |
142 | 1.05k | __attribute__((target("bmi2"))) static void unpack_group(const uint8_t* input, T* output) { |
143 | 1.05k | constexpr int lanes = 64 / (sizeof(T) * 8); |
144 | 1.05k | constexpr int first_value = GROUP * lanes; |
145 | 1.05k | constexpr int bit_offset = first_value * BIT_WIDTH; |
146 | 1.05k | constexpr int packed_bits = lanes * BIT_WIDTH; |
147 | 1.05k | uint64_t packed = load_packed_group<bit_offset, packed_bits>(input); |
148 | 1.05k | uint64_t expanded = _pdep_u64(packed, pdep_mask<T, BIT_WIDTH>()); |
149 | 1.05k | std::memcpy(output + first_value, &expanded, sizeof(expanded)); |
150 | 1.05k | } _ZN5doris10PdepUnpack12unpack_groupIhLi1ELm3EEEvPKhPT_ 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_groupIhLi1ELm2EEEvPKhPT_ 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_groupIhLi1ELm1EEEvPKhPT_ 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_groupIhLi1ELm0EEEvPKhPT_ 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_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 | } |
_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 | } |
|
151 | | |
152 | | template <typename T, int BIT_WIDTH, std::size_t... GROUPS> |
153 | | __attribute__((target("bmi2"))) static void unpack32_with_pdep_impl( |
154 | 180 | const uint8_t* input, T* output, std::index_sequence<GROUPS...>) { |
155 | 180 | (unpack_group<T, BIT_WIDTH, GROUPS>(input, output), ...); |
156 | 180 | } _ZN5doris10PdepUnpack23unpack32_with_pdep_implIhLi1EJLm0ELm1ELm2ELm3EEEEvPKhPT_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_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 | } |
_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 | } |
|
157 | | |
158 | | template <typename T, int BIT_WIDTH> |
159 | | __attribute__((target("bmi2"))) static void unpack32_with_pdep(const uint8_t* input, |
160 | 180 | T* output) { |
161 | 180 | constexpr int lanes = 64 / (sizeof(T) * 8); |
162 | 180 | unpack32_with_pdep_impl<T, BIT_WIDTH>(input, output, |
163 | 180 | std::make_index_sequence<32 / lanes> {}); |
164 | 180 | } _ZN5doris10PdepUnpack18unpack32_with_pdepIhLi1EEEvPKhPT_ 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_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 | } |
_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 | } |
|
165 | | }; |
166 | | |
167 | | } // namespace doris |
168 | | |
169 | | #endif |