#ifndef GEMMLOWP_INTERNAL_DISPATCH_GEMM_SHAPE_H_
#define GEMMLOWP_INTERNAL_DISPATCH_GEMM_SHAPE_H_
#include "../internal/kernel_default.h"
#include "../public/map.h"
#include "../public/output_stages.h"
#include "multi_thread_gemm.h"
namespace gemmlowp {
template <typename T>
struct TransposeImpl { … };
TransposeType;
template <typename T>
TransposeType<T> Transpose(const T& t) { … }
template <MapOrder Order>
struct TransposeMapOrder { … };
template <VectorShape Shape>
struct TransposeVectorShape { … };
TransposeImpl<VectorMap<Scalar, Shape>>;
TransposeImpl<MatrixMap<Scalar, Order>>;
TransposeImpl<OutputStageQuantizeDownInt32ToUint8ScalePC<Shape>>;
TransposeImpl<OutputStageScaleInt32ByFixedPointAndExponentPC<Shape>>;
TransposeImpl<OutputStageBiasAddition<VectorMapType>>;
inline std::tuple<> TransposeTuple(const std::tuple<>& t) { … }
template <typename T0>
std::tuple<TransposeType<T0>> TransposeTuple(const std::tuple<T0>& t) { … }
template <typename T0, typename T1>
std::tuple<TransposeType<T0>, TransposeType<T1>> TransposeTuple(
const std::tuple<T0, T1>& t) { … }
template <typename T0, typename T1, typename T2>
std::tuple<TransposeType<T0>, TransposeType<T1>, TransposeType<T2>>
TransposeTuple(const std::tuple<T0, T1, T2>& t) { … }
template <typename T0, typename T1, typename T2, typename T3>
std::tuple<TransposeType<T0>, TransposeType<T1>, TransposeType<T2>,
TransposeType<T3>>
TransposeTuple(const std::tuple<T0, T1, T2, T3>& t) { … }
template <typename T0, typename T1, typename T2, typename T3, typename T4>
std::tuple<TransposeType<T0>, TransposeType<T1>, TransposeType<T2>,
TransposeType<T3>, TransposeType<T4>>
TransposeTuple(const std::tuple<T0, T1, T2, T3, T4>& t) { … }
template <typename T0, typename T1, typename T2, typename T3, typename T4,
typename T5>
std::tuple<TransposeType<T0>, TransposeType<T1>, TransposeType<T2>,
TransposeType<T3>, TransposeType<T4>, TransposeType<T5>>
TransposeTuple(const std::tuple<T0, T1, T2, T3, T4, T5>& t) { … }
template <typename InputScalar, typename OutputScalar, typename BitDepthParams,
MapOrder LhsOrder, MapOrder RhsOrder, MapOrder ResultOrder,
typename LhsOffset, typename RhsOffset, typename OutputPipelineType,
typename GemmContextType>
void DispatchGemmShape(GemmContextType* context,
const MatrixMap<const InputScalar, LhsOrder>& lhs,
const MatrixMap<const InputScalar, RhsOrder>& rhs,
MatrixMap<OutputScalar, ResultOrder>* result,
const LhsOffset& lhs_offset, const RhsOffset& rhs_offset,
const OutputPipelineType& output_pipeline) { … }
}
#endif