diff options
Diffstat (limited to 'flang/include')
-rw-r--r-- | flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h | 24 | ||||
-rw-r--r-- | flang/include/flang/Runtime/reduce.h | 425 |
2 files changed, 315 insertions, 134 deletions
diff --git a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h index 99161c5..809d5b8 100644 --- a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h +++ b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h @@ -53,10 +53,10 @@ namespace fir::runtime { using TypeBuilderFunc = mlir::Type (*)(mlir::MLIRContext *); using FuncTypeBuilderFunc = mlir::FunctionType (*)(mlir::MLIRContext *); -#define REDUCTION_OPERATION_MODEL(T) \ +#define REDUCTION_REF_OPERATION_MODEL(T) \ template <> \ constexpr TypeBuilderFunc \ - getModel<Fortran::runtime::ReductionOperation<T>>() { \ + getModel<Fortran::runtime::ReferenceReductionOperation<T>>() { \ return [](mlir::MLIRContext *context) -> mlir::Type { \ TypeBuilderFunc f{getModel<T>()}; \ auto refTy = fir::ReferenceType::get(f(context)); \ @@ -480,18 +480,18 @@ constexpr TypeBuilderFunc getModel<void>() { }; } -REDUCTION_OPERATION_MODEL(std::int8_t) -REDUCTION_OPERATION_MODEL(std::int16_t) -REDUCTION_OPERATION_MODEL(std::int32_t) -REDUCTION_OPERATION_MODEL(std::int64_t) -REDUCTION_OPERATION_MODEL(Fortran::common::int128_t) +REDUCTION_REF_OPERATION_MODEL(std::int8_t) +REDUCTION_REF_OPERATION_MODEL(std::int16_t) +REDUCTION_REF_OPERATION_MODEL(std::int32_t) +REDUCTION_REF_OPERATION_MODEL(std::int64_t) +REDUCTION_REF_OPERATION_MODEL(Fortran::common::int128_t) -REDUCTION_OPERATION_MODEL(float) -REDUCTION_OPERATION_MODEL(double) -REDUCTION_OPERATION_MODEL(long double) +REDUCTION_REF_OPERATION_MODEL(float) +REDUCTION_REF_OPERATION_MODEL(double) +REDUCTION_REF_OPERATION_MODEL(long double) -REDUCTION_OPERATION_MODEL(std::complex<float>) -REDUCTION_OPERATION_MODEL(std::complex<double>) +REDUCTION_REF_OPERATION_MODEL(std::complex<float>) +REDUCTION_REF_OPERATION_MODEL(std::complex<double>) REDUCTION_CHAR_OPERATION_MODEL(char) REDUCTION_CHAR_OPERATION_MODEL(char16_t) diff --git a/flang/include/flang/Runtime/reduce.h b/flang/include/flang/Runtime/reduce.h index 975aa6dea..60f54c3 100644 --- a/flang/include/flang/Runtime/reduce.h +++ b/flang/include/flang/Runtime/reduce.h @@ -28,7 +28,9 @@ namespace Fortran::runtime { class Descriptor; -template <typename T> using ReductionOperation = T (*)(const T *, const T *); +template <typename T> +using ReferenceReductionOperation = T (*)(const T *, const T *); +template <typename T> using ValueReductionOperation = T (*)(T, T); template <typename CHAR> using ReductionCharOperation = void (*)(CHAR *hiddenResult, std::size_t resultLen, const CHAR *x, const CHAR *y, std::size_t xLen, @@ -38,185 +40,364 @@ using ReductionDerivedTypeOperation = void (*)( extern "C" { -std::int8_t RTDECL(ReduceInteger1)(const Descriptor &, - ReductionOperation<std::int8_t>, const char *source, int line, int dim = 0, - const Descriptor *mask = nullptr, const std::int8_t *identity = nullptr, - bool ordered = true); -void RTDECL(ReduceInteger1Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::int8_t>, const char *source, int line, int dim, +std::int8_t RTDECL(ReduceInteger1Ref)(const Descriptor &, + ReferenceReductionOperation<std::int8_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int8_t *identity = nullptr, bool ordered = true); +std::int8_t RTDECL(ReduceInteger1Value)(const Descriptor &, + ValueReductionOperation<std::int8_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int8_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger1DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<std::int8_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int8_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger1DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<std::int8_t>, const char *source, int line, int dim, const Descriptor *mask = nullptr, const std::int8_t *identity = nullptr, bool ordered = true); -std::int16_t RTDECL(ReduceInteger2)(const Descriptor &, - ReductionOperation<std::int16_t>, const char *source, int line, int dim = 0, - const Descriptor *mask = nullptr, const std::int16_t *identity = nullptr, - bool ordered = true); -void RTDECL(ReduceInteger2Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::int16_t>, const char *source, int line, int dim, - const Descriptor *mask = nullptr, const std::int16_t *identity = nullptr, - bool ordered = true); -std::int32_t RTDECL(ReduceInteger4)(const Descriptor &, - ReductionOperation<std::int32_t>, const char *source, int line, int dim = 0, - const Descriptor *mask = nullptr, const std::int32_t *identity = nullptr, - bool ordered = true); -void RTDECL(ReduceInteger4Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::int32_t>, const char *source, int line, int dim, - const Descriptor *mask = nullptr, const std::int32_t *identity = nullptr, - bool ordered = true); -std::int64_t RTDECL(ReduceInteger8)(const Descriptor &, - ReductionOperation<std::int64_t>, const char *source, int line, int dim = 0, - const Descriptor *mask = nullptr, const std::int64_t *identity = nullptr, - bool ordered = true); -void RTDECL(ReduceInteger8Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::int64_t>, const char *source, int line, int dim, - const Descriptor *mask = nullptr, const std::int64_t *identity = nullptr, - bool ordered = true); +std::int16_t RTDECL(ReduceInteger2Ref)(const Descriptor &, + ReferenceReductionOperation<std::int16_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int16_t *identity = nullptr, bool ordered = true); +std::int16_t RTDECL(ReduceInteger2Value)(const Descriptor &, + ValueReductionOperation<std::int16_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int16_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger2DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<std::int16_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int16_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger2DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<std::int16_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int16_t *identity = nullptr, bool ordered = true); +std::int32_t RTDECL(ReduceInteger4Ref)(const Descriptor &, + ReferenceReductionOperation<std::int32_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int32_t *identity = nullptr, bool ordered = true); +std::int32_t RTDECL(ReduceInteger4Value)(const Descriptor &, + ValueReductionOperation<std::int32_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int32_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger4DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<std::int32_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int32_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger4DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<std::int32_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int32_t *identity = nullptr, bool ordered = true); +std::int64_t RTDECL(ReduceInteger8Ref)(const Descriptor &, + ReferenceReductionOperation<std::int64_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int64_t *identity = nullptr, bool ordered = true); +std::int64_t RTDECL(ReduceInteger8Value)(const Descriptor &, + ValueReductionOperation<std::int64_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int64_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger8DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<std::int64_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int64_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger8DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<std::int64_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int64_t *identity = nullptr, bool ordered = true); #ifdef __SIZEOF_INT128__ -common::int128_t RTDECL(ReduceInteger16)(const Descriptor &, - ReductionOperation<common::int128_t>, const char *source, int line, +common::int128_t RTDECL(ReduceInteger16Ref)(const Descriptor &, + ReferenceReductionOperation<common::int128_t>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const common::int128_t *identity = nullptr, bool ordered = true); -void RTDECL(ReduceInteger16Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<common::int128_t>, const char *source, int line, int dim, - const Descriptor *mask = nullptr, +common::int128_t RTDECL(ReduceInteger16Value)(const Descriptor &, + ValueReductionOperation<common::int128_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const common::int128_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger16DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<common::int128_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const common::int128_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceInteger16DimValue)(Descriptor &result, + const Descriptor &array, ValueReductionOperation<common::int128_t>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, const common::int128_t *identity = nullptr, bool ordered = true); #endif // REAL/COMPLEX(2 & 3) return 32-bit float results for the caller to downconvert -float RTDECL(ReduceReal2)(const Descriptor &, ReductionOperation<float>, - const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, +float RTDECL(ReduceReal2Ref)(const Descriptor &, + ReferenceReductionOperation<float>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, const float *identity = nullptr, bool ordered = true); -void RTDECL(ReduceReal2Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<float>, const char *source, int line, int dim, +float RTDECL(ReduceReal2Value)(const Descriptor &, + ValueReductionOperation<float>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const float *identity = nullptr, bool ordered = true); -float RTDECL(ReduceReal3)(const Descriptor &, ReductionOperation<float>, - const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, +void RTDECL(ReduceReal2DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<float>, const char *source, int line, int dim, + const Descriptor *mask = nullptr, const float *identity = nullptr, + bool ordered = true); +void RTDECL(ReduceReal2DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<float>, const char *source, int line, int dim, + const Descriptor *mask = nullptr, const float *identity = nullptr, + bool ordered = true); +float RTDECL(ReduceReal3Ref)(const Descriptor &, + ReferenceReductionOperation<float>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, const float *identity = nullptr, bool ordered = true); -void RTDECL(ReduceReal3Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<float>, const char *source, int line, int dim, +float RTDECL(ReduceReal3Value)(const Descriptor &, + ValueReductionOperation<float>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const float *identity = nullptr, bool ordered = true); -float RTDECL(ReduceReal4)(const Descriptor &, ReductionOperation<float>, - const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, +void RTDECL(ReduceReal3DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<float>, const char *source, int line, int dim, + const Descriptor *mask = nullptr, const float *identity = nullptr, + bool ordered = true); +void RTDECL(ReduceReal3DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<float>, const char *source, int line, int dim, + const Descriptor *mask = nullptr, const float *identity = nullptr, + bool ordered = true); +float RTDECL(ReduceReal4Ref)(const Descriptor &, + ReferenceReductionOperation<float>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, const float *identity = nullptr, bool ordered = true); -void RTDECL(ReduceReal4Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<float>, const char *source, int line, int dim, +float RTDECL(ReduceReal4Value)(const Descriptor &, + ValueReductionOperation<float>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const float *identity = nullptr, bool ordered = true); -double RTDECL(ReduceReal8)(const Descriptor &, ReductionOperation<double>, - const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, +void RTDECL(ReduceReal4DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<float>, const char *source, int line, int dim, + const Descriptor *mask = nullptr, const float *identity = nullptr, + bool ordered = true); +void RTDECL(ReduceReal4DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<float>, const char *source, int line, int dim, + const Descriptor *mask = nullptr, const float *identity = nullptr, + bool ordered = true); +double RTDECL(ReduceReal8Ref)(const Descriptor &, + ReferenceReductionOperation<double>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, const double *identity = nullptr, bool ordered = true); -void RTDECL(ReduceReal8Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<double>, const char *source, int line, int dim, +double RTDECL(ReduceReal8Value)(const Descriptor &, + ValueReductionOperation<double>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const double *identity = nullptr, bool ordered = true); -#if LDBL_MANT_DIG == 64 -long double RTDECL(ReduceReal10)(const Descriptor &, - ReductionOperation<long double>, const char *source, int line, int dim = 0, - const Descriptor *mask = nullptr, const long double *identity = nullptr, +void RTDECL(ReduceReal8DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<double>, const char *source, int line, int dim, + const Descriptor *mask = nullptr, const double *identity = nullptr, bool ordered = true); -void RTDECL(ReduceReal10Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<long double>, const char *source, int line, int dim, +void RTDECL(ReduceReal8DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<double>, const char *source, int line, int dim, + const Descriptor *mask = nullptr, const double *identity = nullptr, + bool ordered = true); +#if LDBL_MANT_DIG == 64 +long double RTDECL(ReduceReal10Ref)(const Descriptor &, + ReferenceReductionOperation<long double>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const long double *identity = nullptr, bool ordered = true); +long double RTDECL(ReduceReal10Value)(const Descriptor &, + ValueReductionOperation<long double>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const long double *identity = nullptr, bool ordered = true); +void RTDECL(ReduceReal10DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<long double>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const long double *identity = nullptr, bool ordered = true); +void RTDECL(ReduceReal10DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<long double>, const char *source, int line, int dim, const Descriptor *mask = nullptr, const long double *identity = nullptr, bool ordered = true); #endif #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 -CppFloat128Type RTDECL(ReduceReal16)(const Descriptor &, - ReductionOperation<CppFloat128Type>, const char *source, int line, +CppFloat128Type RTDECL(ReduceReal16Ref)(const Descriptor &, + ReferenceReductionOperation<CppFloat128Type>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const CppFloat128Type *identity = nullptr, bool ordered = true); -void RTDECL(ReduceReal16Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<CppFloat128Type>, const char *source, int line, int dim, - const Descriptor *mask = nullptr, const CppFloat128Type *identity = nullptr, - bool ordered = true); +CppFloat128Type RTDECL(ReduceReal16Value)(const Descriptor &, + ValueReductionOperation<CppFloat128Type>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const CppFloat128Type *identity = nullptr, bool ordered = true); +void RTDECL(ReduceReal16DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<CppFloat128Type>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const CppFloat128Type *identity = nullptr, bool ordered = true); +void RTDECL(ReduceReal16DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<CppFloat128Type>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const CppFloat128Type *identity = nullptr, bool ordered = true); #endif -void RTDECL(CppReduceComplex2)(std::complex<float> &, const Descriptor &, - ReductionOperation<std::complex<float>>, const char *source, int line, +void RTDECL(CppReduceComplex2Ref)(std::complex<float> &, const Descriptor &, + ReferenceReductionOperation<std::complex<float>>, const char *source, + int line, int dim = 0, const Descriptor *mask = nullptr, + const std::complex<float> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex2Value)(std::complex<float> &, const Descriptor &, + ValueReductionOperation<std::complex<float>>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const std::complex<float> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex2Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::complex<float>>, const char *source, int line, - int dim, const Descriptor *mask = nullptr, +void RTDECL(CppReduceComplex2DimRef)(Descriptor &result, + const Descriptor &array, ReferenceReductionOperation<std::complex<float>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, + const std::complex<float> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex2DimValue)(Descriptor &result, + const Descriptor &array, ValueReductionOperation<std::complex<float>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, const std::complex<float> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex3)(std::complex<float> &, const Descriptor &, - ReductionOperation<std::complex<float>>, const char *source, int line, +void RTDECL(CppReduceComplex3Ref)(std::complex<float> &, const Descriptor &, + ReferenceReductionOperation<std::complex<float>>, const char *source, + int line, int dim = 0, const Descriptor *mask = nullptr, + const std::complex<float> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex3Value)(std::complex<float> &, const Descriptor &, + ValueReductionOperation<std::complex<float>>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const std::complex<float> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex3Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::complex<float>>, const char *source, int line, - int dim, const Descriptor *mask = nullptr, +void RTDECL(CppReduceComplex3DimRef)(Descriptor &result, + const Descriptor &array, ReferenceReductionOperation<std::complex<float>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, + const std::complex<float> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex3DimValue)(Descriptor &result, + const Descriptor &array, ValueReductionOperation<std::complex<float>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, const std::complex<float> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex4)(std::complex<float> &, const Descriptor &, - ReductionOperation<std::complex<float>>, const char *source, int line, +void RTDECL(CppReduceComplex4Ref)(std::complex<float> &, const Descriptor &, + ReferenceReductionOperation<std::complex<float>>, const char *source, + int line, int dim = 0, const Descriptor *mask = nullptr, + const std::complex<float> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex4Value)(std::complex<float> &, const Descriptor &, + ValueReductionOperation<std::complex<float>>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const std::complex<float> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex4Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::complex<float>>, const char *source, int line, - int dim, const Descriptor *mask = nullptr, +void RTDECL(CppReduceComplex4DimRef)(Descriptor &result, + const Descriptor &array, ReferenceReductionOperation<std::complex<float>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, const std::complex<float> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex8)(std::complex<double> &, const Descriptor &, - ReductionOperation<std::complex<double>>, const char *source, int line, +void RTDECL(CppReduceComplex4DimValue)(Descriptor &result, + const Descriptor &array, ValueReductionOperation<std::complex<float>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, + const std::complex<float> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex8Ref)(std::complex<double> &, const Descriptor &, + ReferenceReductionOperation<std::complex<double>>, const char *source, + int line, int dim = 0, const Descriptor *mask = nullptr, + const std::complex<double> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex8Value)(std::complex<double> &, const Descriptor &, + ValueReductionOperation<std::complex<double>>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const std::complex<double> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex8Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::complex<double>>, const char *source, int line, - int dim, const Descriptor *mask = nullptr, +void RTDECL(CppReduceComplex8DimRef)(Descriptor &result, + const Descriptor &array, ReferenceReductionOperation<std::complex<double>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, + const std::complex<double> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex8DimValue)(Descriptor &result, + const Descriptor &array, ValueReductionOperation<std::complex<double>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, const std::complex<double> *identity = nullptr, bool ordered = true); #if LDBL_MANT_DIG == 64 -void RTDECL(CppReduceComplex10)(std::complex<long double> &, const Descriptor &, - ReductionOperation<std::complex<long double>>, const char *source, int line, - int dim = 0, const Descriptor *mask = nullptr, +void RTDECL(CppReduceComplex10Ref)(std::complex<long double> &, + const Descriptor &, ReferenceReductionOperation<std::complex<long double>>, + const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const std::complex<long double> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex10Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::complex<long double>>, const char *source, int line, - int dim, const Descriptor *mask = nullptr, +void RTDECL(CppReduceComplex10Value)(std::complex<long double> &, + const Descriptor &, ValueReductionOperation<std::complex<long double>>, + const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, + const std::complex<long double> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex10DimRef)(Descriptor &result, + const Descriptor &array, + ReferenceReductionOperation<std::complex<long double>>, const char *source, + int line, int dim, const Descriptor *mask = nullptr, + const std::complex<long double> *identity = nullptr, bool ordered = true); +void RTDECL(CppReduceComplex10DimValue)(Descriptor &result, + const Descriptor &array, ValueReductionOperation<std::complex<long double>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, const std::complex<long double> *identity = nullptr, bool ordered = true); #endif #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 -void RTDECL(CppReduceComplex16)(std::complex<CppFloat128Type> &, - const Descriptor &, ReductionOperation<std::complex<CppFloat128Type>>, +void RTDECL(CppReduceComplex16Ref)(std::complex<CppFloat128Type> &, + const Descriptor &, + ReferenceReductionOperation<std::complex<CppFloat128Type>>, const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, const std::complex<CppFloat128Type> *identity = nullptr, bool ordered = true); -void RTDECL(CppReduceComplex16Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::complex<CppFloat128Type>>, const char *source, +void RTDECL(CppReduceComplex16Value)(std::complex<CppFloat128Type> &, + const Descriptor &, ValueReductionOperation<std::complex<CppFloat128Type>>, + const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, + const std::complex<CppFloat128Type> *identity = nullptr, + bool ordered = true); +void RTDECL(CppReduceComplex16DimRef)(Descriptor &result, + const Descriptor &array, + ReferenceReductionOperation<std::complex<CppFloat128Type>>, + const char *source, int line, int dim, const Descriptor *mask = nullptr, + const std::complex<CppFloat128Type> *identity = nullptr, + bool ordered = true); +void RTDECL(CppReduceComplex16DimValue)(Descriptor &result, + const Descriptor &array, + ValueReductionOperation<std::complex<CppFloat128Type>>, const char *source, int line, int dim, const Descriptor *mask = nullptr, const std::complex<CppFloat128Type> *identity = nullptr, bool ordered = true); #endif -bool RTDECL(ReduceLogical1)(const Descriptor &, ReductionOperation<std::int8_t>, - const char *source, int line, int dim = 0, const Descriptor *mask = nullptr, +bool RTDECL(ReduceLogical1Ref)(const Descriptor &, + ReferenceReductionOperation<std::int8_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int8_t *identity = nullptr, bool ordered = true); +bool RTDECL(ReduceLogical1Value)(const Descriptor &, + ValueReductionOperation<std::int8_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int8_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceLogical1DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<std::int8_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, const std::int8_t *identity = nullptr, bool ordered = true); -void RTDECL(ReduceLogical1Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::int8_t>, const char *source, int line, int dim, +void RTDECL(ReduceLogical1DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<std::int8_t>, const char *source, int line, int dim, const Descriptor *mask = nullptr, const std::int8_t *identity = nullptr, bool ordered = true); -bool RTDECL(ReduceLogical2)(const Descriptor &, - ReductionOperation<std::int16_t>, const char *source, int line, int dim = 0, - const Descriptor *mask = nullptr, const std::int16_t *identity = nullptr, - bool ordered = true); -void RTDECL(ReduceLogical2Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::int16_t>, const char *source, int line, int dim, - const Descriptor *mask = nullptr, const std::int16_t *identity = nullptr, - bool ordered = true); -bool RTDECL(ReduceLogical4)(const Descriptor &, - ReductionOperation<std::int32_t>, const char *source, int line, int dim = 0, - const Descriptor *mask = nullptr, const std::int32_t *identity = nullptr, - bool ordered = true); -void RTDECL(ReduceLogical4Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::int32_t>, const char *source, int line, int dim, - const Descriptor *mask = nullptr, const std::int32_t *identity = nullptr, - bool ordered = true); -bool RTDECL(ReduceLogical8)(const Descriptor &, - ReductionOperation<std::int64_t>, const char *source, int line, int dim = 0, - const Descriptor *mask = nullptr, const std::int64_t *identity = nullptr, - bool ordered = true); -void RTDECL(ReduceLogical8Dim)(Descriptor &result, const Descriptor &array, - ReductionOperation<std::int64_t>, const char *source, int line, int dim, - const Descriptor *mask = nullptr, const std::int64_t *identity = nullptr, - bool ordered = true); +bool RTDECL(ReduceLogical2Ref)(const Descriptor &, + ReferenceReductionOperation<std::int16_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int16_t *identity = nullptr, bool ordered = true); +bool RTDECL(ReduceLogical2Value)(const Descriptor &, + ValueReductionOperation<std::int16_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int16_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceLogical2DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<std::int16_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int16_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceLogical2DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<std::int16_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int16_t *identity = nullptr, bool ordered = true); +bool RTDECL(ReduceLogical4Ref)(const Descriptor &, + ReferenceReductionOperation<std::int32_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int32_t *identity = nullptr, bool ordered = true); +bool RTDECL(ReduceLogical4Value)(const Descriptor &, + ValueReductionOperation<std::int32_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int32_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceLogical4DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<std::int32_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int32_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceLogical4DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<std::int32_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int32_t *identity = nullptr, bool ordered = true); +bool RTDECL(ReduceLogical8Ref)(const Descriptor &, + ReferenceReductionOperation<std::int64_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int64_t *identity = nullptr, bool ordered = true); +bool RTDECL(ReduceLogical8Value)(const Descriptor &, + ValueReductionOperation<std::int64_t>, const char *source, int line, + int dim = 0, const Descriptor *mask = nullptr, + const std::int64_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceLogical8DimRef)(Descriptor &result, const Descriptor &array, + ReferenceReductionOperation<std::int64_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int64_t *identity = nullptr, bool ordered = true); +void RTDECL(ReduceLogical8DimValue)(Descriptor &result, const Descriptor &array, + ValueReductionOperation<std::int64_t>, const char *source, int line, + int dim, const Descriptor *mask = nullptr, + const std::int64_t *identity = nullptr, bool ordered = true); void RTDECL(ReduceChar1)(char *result, const Descriptor &array, ReductionCharOperation<char>, const char *source, int line, int dim = 0, |