// Copyright 2015 The Gemmlowp Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// bit_depth.h: defines the settins controlling LHS/RHS bit depth

#ifndef GEMMLOWP_PUBLIC_BIT_DEPTH_H_
#define GEMMLOWP_PUBLIC_BIT_DEPTH_H_

namespace gemmlowp {

// The range of allowed values for an operand.
template <int tMinValue, int tMaxValue>
struct OperandRange {
  static const int kMinValue = tMinValue;
  static const int kMaxValue = tMaxValue;
  static_assert(kMinValue < kMaxValue, "");
};

using Uint8Range = OperandRange<0, 255>;
using Uint8RangeExcludingZero = OperandRange<1, 255>;

using Int8Range = OperandRange<-128, 127>;
using Int8RangeExcludingLow = OperandRange<-127, 127>;

template <typename tLhsRange, typename tRhsRange>
struct BitDepthParams {
  using LhsRange = tLhsRange;
  using RhsRange = tRhsRange;
};

// Default: LHS and RHS are 8bit.
using DefaultL8R8BitDepthParams = BitDepthParams<Uint8Range, Uint8Range>;

// Variant: LHS may not take the value 0. This allows using
// faster kernels using signed arithmetic, see
// NEON_64bit_GEMM_Int8Operands_Int32Accumulators_AccumTwoWithin16Bits
using L8R8WithLhsNonzeroBitDepthParams =
    BitDepthParams<Uint8RangeExcludingZero, Uint8Range>;

// Signed Variant: This allows using faster kernels using signed arithmetic, see
// NEON_64bit_GEMM_Int8Operands_Int32Accumulators_AccumTwoWithin16Bits
using SignedL8R8WithLhsNonzeroBitDepthParams =
    BitDepthParams<Int8RangeExcludingLow, Int8Range>;

// Deprecated: when gemmlowp used to allow requantizing 8bit
// inputs to less-than-8-bit depths, the public setting allowing
// that was DefaultL7R5BitDepthParams. That requantization
// feature has been removed, but as the whole point of that
// requantization was to make less-than-8-bit an internal
// optimization without any impact on the API (other than lowering
// accuracy), we can temporarily support users who were using it
// by mapping it to the default 8bit behavior.
using DefaultL7R5BitDepthParams = DefaultL8R8BitDepthParams;

}  // namespace gemmlowp

#endif  // GEMMLOWP_PUBLIC_BIT_DEPTH_H_
