/root/doris/be/src/vec/functions/multiply.cpp
Line | Count | Source (jump to first uncovered line) |
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 | | // This file is copied from |
18 | | // https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/Multiply.cpp |
19 | | // and modified by Doris |
20 | | |
21 | | #include <stddef.h> |
22 | | |
23 | | #include "runtime/decimalv2_value.h" |
24 | | #include "vec/columns/columns_number.h" |
25 | | #include "vec/common/arithmetic_overflow.h" |
26 | | #include "vec/core/types.h" |
27 | | #include "vec/data_types/number_traits.h" |
28 | | #include "vec/functions/function_binary_arithmetic.h" |
29 | | #include "vec/functions/simple_function_factory.h" |
30 | | |
31 | | namespace doris::vectorized { |
32 | | |
33 | | template <PrimitiveType TypeA, PrimitiveType TypeB> |
34 | | struct MultiplyImpl { |
35 | | using A = typename PrimitiveTypeTraits<TypeA>::CppNativeType; |
36 | | using B = typename PrimitiveTypeTraits<TypeB>::CppNativeType; |
37 | | static constexpr PrimitiveType ResultType = |
38 | | NumberTraits::ResultOfAdditionMultiplication<A, B>::Type; |
39 | | static const constexpr bool allow_decimal = true; |
40 | | |
41 | | template <PrimitiveType Result = ResultType> |
42 | 0 | static inline typename PrimitiveTypeTraits<Result>::CppNativeType apply(A a, B b) { |
43 | 0 | return static_cast<typename PrimitiveTypeTraits<Result>::CppNativeType>(a) * b; |
44 | 0 | } Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE2ELS2_2EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbb Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE2ELS2_3EE5applyILS2_4EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEba Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE2ELS2_4EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbs Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE2ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbi Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE2ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbl Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE2ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE2ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbf Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE2ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbd Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE28ELS2_28EE5applyILS2_28EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEii Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE29ELS2_29EE5applyILS2_29EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEll Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE20ELS2_20EE5applyILS2_20EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE30ELS2_30EE5applyILS2_30EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE35ELS2_35EE5applyILS2_35EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEN4wide7integerILm256EiEESA_ Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE20ELS2_20EE5applyILS2_35EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE30ELS2_30EE5applyILS2_35EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE3ELS2_2EE5applyILS2_4EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEab Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE3ELS2_3EE5applyILS2_4EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEaa Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE3ELS2_4EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEas Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE3ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEai Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE3ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEal Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE3ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEan Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE3ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEaf Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE3ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEad Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE4ELS2_2EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsb Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE4ELS2_3EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsa Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE4ELS2_4EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEss Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE4ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsi Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE4ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsl Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE4ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE4ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsf Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE4ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsd Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE5ELS2_2EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEib Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE5ELS2_3EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEia Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE5ELS2_4EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEis Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE5ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEii Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE5ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEil Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE5ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEin Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE5ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEif Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE5ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEid Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE6ELS2_2EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeElb Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE6ELS2_3EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEla Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE6ELS2_4EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEls Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE6ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEli Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE6ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEll Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE6ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEln Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE6ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeElf Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE6ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEld Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE7ELS2_2EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnb Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE7ELS2_3EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEna Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE7ELS2_4EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEns Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE7ELS2_5EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEni Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE7ELS2_6EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnl Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE7ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE7ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnf Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE7ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnd Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE8ELS2_2EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfb Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE8ELS2_3EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfa Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE8ELS2_4EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfs Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE8ELS2_5EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfi Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE8ELS2_6EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfl Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE8ELS2_7EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE8ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEff Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE8ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfd Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE9ELS2_2EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdb Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE9ELS2_3EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEda Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE9ELS2_4EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEds Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE9ELS2_5EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdi Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE9ELS2_6EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdl Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE9ELS2_7EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdn Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE9ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdf Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE9ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdd |
45 | | |
46 | | template <PrimitiveType Result = TYPE_DECIMALV2> |
47 | 0 | static inline DecimalV2Value apply(const DecimalV2Value& a, const DecimalV2Value& b) { |
48 | 0 | return a * b; |
49 | 0 | } Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE28ELS2_28EE5applyILS2_20EEENS_14DecimalV2ValueERKS5_S7_ Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE29ELS2_29EE5applyILS2_20EEENS_14DecimalV2ValueERKS5_S7_ Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE20ELS2_20EE5applyILS2_20EEENS_14DecimalV2ValueERKS5_S7_ Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE30ELS2_30EE5applyILS2_20EEENS_14DecimalV2ValueERKS5_S7_ Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE35ELS2_35EE5applyILS2_20EEENS_14DecimalV2ValueERKS5_S7_ |
50 | | |
51 | | /* |
52 | | select 999999999999999999999999999 * 999999999999999999999999999; |
53 | | 999999999999999999999999998000000000.000000000000000001 54 digits |
54 | | */ |
55 | | template <bool check_overflow> |
56 | | static void vector_vector(const ColumnDecimal128V2::Container::value_type* __restrict a, |
57 | | const ColumnDecimal128V2::Container::value_type* __restrict b, |
58 | 0 | ColumnDecimal128V2::Container::value_type* c, size_t size) { |
59 | 0 | auto sng_uptr = std::unique_ptr<int8[]>(new int8[size]); |
60 | 0 | int8* sgn = sng_uptr.get(); |
61 | 0 | auto max = DecimalV2Value::get_max_decimal(); |
62 | 0 | auto min = DecimalV2Value::get_min_decimal(); |
63 | |
|
64 | 0 | for (int i = 0; i < size; i++) { |
65 | 0 | sgn[i] = ((DecimalV2Value(a[i]).value() > 0) && (DecimalV2Value(b[i]).value() > 0)) || |
66 | 0 | ((DecimalV2Value(a[i]).value() < 0) && |
67 | 0 | (DecimalV2Value(b[i]).value() < 0)) |
68 | 0 | ? 1 |
69 | 0 | : ((DecimalV2Value(a[i]).value() == 0) || (DecimalV2Value(b[i]).value() == 0)) |
70 | 0 | ? 0 |
71 | 0 | : -1; |
72 | 0 | } |
73 | |
|
74 | 0 | for (int i = 0; i < size; i++) { |
75 | 0 | if constexpr (check_overflow) { |
76 | 0 | int128_t i128_mul_result; |
77 | 0 | if (common::mul_overflow(DecimalV2Value(a[i]).value(), DecimalV2Value(b[i]).value(), |
78 | 0 | i128_mul_result)) { |
79 | 0 | THROW_DECIMAL_BINARY_OP_OVERFLOW_EXCEPTION( |
80 | 0 | DecimalV2Value(a[i]).to_string(), "multiply", |
81 | 0 | DecimalV2Value(b[i]).to_string(), |
82 | 0 | DecimalV2Value(i128_mul_result).to_string(), "decimalv2"); |
83 | 0 | } |
84 | 0 | c[i] = (i128_mul_result - sgn[i]) / DecimalV2Value::ONE_BILLION + sgn[i]; |
85 | 0 | if (c[i].value > max.value() || c[i].value < min.value()) { |
86 | 0 | THROW_DECIMAL_BINARY_OP_OVERFLOW_EXCEPTION( |
87 | 0 | DecimalV2Value(a[i]).to_string(), "multiply", |
88 | 0 | DecimalV2Value(b[i]).to_string(), |
89 | 0 | DecimalV2Value(i128_mul_result).to_string(), "decimalv2"); |
90 | 0 | } |
91 | 0 | } else { |
92 | 0 | c[i] = (DecimalV2Value(a[i]).value() * DecimalV2Value(b[i]).value() - sgn[i]) / |
93 | 0 | DecimalV2Value::ONE_BILLION + |
94 | 0 | sgn[i]; |
95 | 0 | } |
96 | 0 | } |
97 | 0 | } Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE20ELS2_20EE13vector_vectorILb1EEEvPKNS0_7DecimalInEES8_PS6_m Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE20ELS2_20EE13vector_vectorILb0EEEvPKNS0_7DecimalInEES8_PS6_m |
98 | | |
99 | | /// Apply operation and check overflow. It's used for Decimal operations. @returns true if overflowed, false otherwise. |
100 | | template <PrimitiveType Result = ResultType> |
101 | 0 | static inline bool apply(A a, B b, typename PrimitiveTypeTraits<Result>::CppNativeType& c) { |
102 | 0 | return common::mul_overflow( |
103 | 0 | static_cast<typename PrimitiveTypeTraits<Result>::CppNativeType>(a), b, c); |
104 | 0 | } Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE28ELS2_28EE5applyILS2_28EEEbiiRNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE29ELS2_29EE5applyILS2_29EEEbllRNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE20ELS2_20EE5applyILS2_20EEEbnnRNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE30ELS2_30EE5applyILS2_30EEEbnnRNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE Unexecuted instantiation: _ZN5doris10vectorized12MultiplyImplILNS_13PrimitiveTypeE35ELS2_35EE5applyILS2_35EEEbN4wide7integerILm256EiEES7_RNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE |
105 | | }; |
106 | | |
107 | | struct NameMultiply { |
108 | | static constexpr auto name = "multiply"; |
109 | | }; |
110 | | using FunctionMultiply = FunctionBinaryArithmetic<MultiplyImpl, NameMultiply, false>; |
111 | | |
112 | 1 | void register_function_multiply(SimpleFunctionFactory& factory) { |
113 | 1 | factory.register_function<FunctionMultiply>(); |
114 | 1 | } |
115 | | |
116 | | } // namespace doris::vectorized |