* Copyright (c) 2026 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
*\file kernel_operator_macro_bitmode_intf.h
*\brief
*/
#if defined(__NPU_COMPILER_INTERNAL_PURE_SIMT__)
#error "kernel_operator_macro_bitmode_intf.h cannot be used with compile flag --enable-simt enabled."
#endif
#if !defined(__ASCENDC_INCLUDE_INTERNAL_HEADERS__)
#define __ASCENDC_INCLUDE_INTERNAL_HEADERS__
#define __UNDEF_ASCENDC_INCLUDE_INTERNAL_HEADERS_KERNEL_OPERATOR_MACRO_BITMODE_INTF_H__
#endif
#ifndef ASCENDC_MODULE_OPERATOR_MACRO_BITMODE_INTERFACE_H
#define ASCENDC_MODULE_OPERATOR_MACRO_BITMODE_INTERFACE_H
#if defined(__NPU_ARCH__) && \
(__NPU_ARCH__ == 5101 || __NPU_ARCH__ == 5161 || __NPU_ARCH__ == 5165 || __NPU_ARCH__ == 5163)
#include "kernel_struct_macro.h"
#include "../../impl/basic_api/kernel_operator_macro_bitmode_struct.h"
namespace AscendC {
class ConvKernelBitModeParams {
public:
__aicore__ inline ConvKernelBitModeParams();
__aicore__ inline ConvKernelBitModeParams(const ConvKernelParams& convKernelParams);
__aicore__ inline void SetWStride(uint8_t wStride_);
__aicore__ inline void SetHStride(uint8_t hStride_);
__aicore__ inline void SetWKernel(uint16_t wKernel_);
__aicore__ inline void SetHKernel(uint16_t hKernel_);
__aicore__ inline void SetWDilation(uint8_t wDilation_);
__aicore__ inline void SetHDilation(uint8_t hDilation_);
__aicore__ inline void SetKernelNum(uint16_t kernelNum_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint8_t GetWStride() const;
__aicore__ inline uint8_t GetHStride() const;
__aicore__ inline uint16_t GetWKernel() const;
__aicore__ inline uint16_t GetHKernel() const;
__aicore__ inline uint8_t GetWDilation() const;
__aicore__ inline uint8_t GetHDilation() const;
__aicore__ inline uint16_t GetKernelNum() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ConvKernelBitModeConfig0 config0BitMode;
};
};
class ConvFMatrixBitModeParams {
public:
__aicore__ inline ConvFMatrixBitModeParams();
__aicore__ inline ConvFMatrixBitModeParams(const ConvFMatrixParams& convFMatrixParams);
__aicore__ inline void SetWFmap(uint16_t wFmap_);
__aicore__ inline void SetHFmap(uint16_t hFmap_);
__aicore__ inline void SetLeftPaddingSize(uint8_t leftPaddingSize_);
__aicore__ inline void SetRightPaddingSize(uint8_t rightPaddingSize_);
__aicore__ inline void SetTopPaddingSize(uint8_t topPaddingSize_);
__aicore__ inline void SetBottomPaddingSize(uint8_t bottomPaddingSize_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint16_t GetWFmap() const;
__aicore__ inline uint16_t GetHFmap() const;
__aicore__ inline uint8_t GetLeftPaddingSize() const;
__aicore__ inline uint8_t GetRightPaddingSize() const;
__aicore__ inline uint8_t GetTopPaddingSize() const;
__aicore__ inline uint8_t GetBottomPaddingSize() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ConvFMatrixBitModeConfig0 config0BitMode;
};
};
class ConvFMatrixStepPosBitModeParams {
public:
__aicore__ inline ConvFMatrixStepPosBitModeParams();
__aicore__ inline ConvFMatrixStepPosBitModeParams(const ConvFMatrixStepPosParams& convFMatrixStepPosParams);
__aicore__ inline void SetWStartPos(uint16_t wStartPos_);
__aicore__ inline void SetHStartPos(uint16_t hStartPos_);
__aicore__ inline void SetWStep(uint16_t wStep_);
__aicore__ inline void SetHStep(uint16_t hStep_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint16_t GetWStartPos() const;
__aicore__ inline uint16_t GetHStartPos() const;
__aicore__ inline uint16_t GetWStep() const;
__aicore__ inline uint16_t GetHStep() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ConvFMatrixStepPosBitModeConfig0 config0BitMode;
};
};
class ConvFMatrixDual0BitModeParams {
public:
__aicore__ inline ConvFMatrixDual0BitModeParams();
__aicore__ inline ConvFMatrixDual0BitModeParams(const ConvFMatrixDual0Params& convFMatrixDual0Params);
__aicore__ inline void SetSecondAddr(uint32_t secondAddr_);
__aicore__ inline void SetSecondH(uint16_t secondH_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint32_t GetSecondAddr() const;
__aicore__ inline uint16_t GetSecondH() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ConvFMatrixDual0BitModeConfig0 config0BitMode;
};
};
class ConvFMatrixDual1BitModeParams {
public:
__aicore__ inline ConvFMatrixDual1BitModeParams();
__aicore__ inline ConvFMatrixDual1BitModeParams(const ConvFMatrixDual1Params& convFMatrixDual1Params);
__aicore__ inline void SetFirstStride(uint16_t firstStride_);
__aicore__ inline void SetSecondStride(uint16_t secondStride_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint16_t GetFirstStride() const;
__aicore__ inline uint16_t GetSecondStride() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ConvFMatrixDual1BitModeConfig0 config0BitMode;
};
};
template <typename T>
class ConvPaddingBitModeParams {
public:
__aicore__ inline ConvPaddingBitModeParams();
__aicore__ inline ConvPaddingBitModeParams(const ConvPaddingParams<T>& convPaddingParams);
__aicore__ inline void SetPaddingValue(T paddingValue_);
__aicore__ inline void SetPaddingMode(uint8_t paddingMode_);
__aicore__ inline void SetPaddingAddr(uint16_t paddingAddr_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline T GetPaddingValue() const;
__aicore__ inline uint8_t GetPaddingMode() const;
__aicore__ inline uint16_t GetPaddingAddr() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ConvPaddingBitModeConfig0<T> config0BitMode;
};
};
class FixPipeConfigBitModeParams {
public:
__aicore__ inline FixPipeConfigBitModeParams();
__aicore__ inline FixPipeConfigBitModeParams(const FixPipeConfigParams& fixPipeConfigParams);
__aicore__ inline void SetPreReluAddr(uint8_t preReluAddr_);
__aicore__ inline void SetPreQuantAddr(uint8_t preQuantAddr_);
__aicore__ inline void SetPostQuantAddr(uint8_t postQuantAddr_);
__aicore__ inline void SetAntiquantAddr(uint8_t antiquantAddr_);
__aicore__ inline void SetShiftValue(uint8_t shiftValue_);
__aicore__ inline void SetRestorationCtrl(uint8_t restorationCtrl_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint8_t GetPreReluAddr() const;
__aicore__ inline uint8_t GetPreQuantAddr() const;
__aicore__ inline uint8_t GetPostQuantAddr() const;
__aicore__ inline uint8_t GetAntiquantAddr() const;
__aicore__ inline uint8_t GetShiftValue() const;
__aicore__ inline uint8_t GetRestorationCtrl() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct FixPipeConfigBitModeConfig0 config0BitMode;
};
};
class FixPipeReluAlphaBitModeParams {
public:
__aicore__ inline FixPipeReluAlphaBitModeParams();
__aicore__ inline FixPipeReluAlphaBitModeParams(const FixPipeReluAlphaParams& fixPipeReluAlphaParams);
__aicore__ inline void SetLut(lut_mode_t lut_);
__aicore__ inline void SetPreValue(uint32_t preValue_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline lut_mode_t GetLut() const;
__aicore__ inline uint32_t GetPreValue() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct FixPipeReluAlphaBitModeConfig0 config0BitMode;
};
};
class FixPipeAddrBitModeParams {
public:
__aicore__ inline FixPipeAddrBitModeParams();
__aicore__ inline FixPipeAddrBitModeParams(const FixPipeAddrParams& fixPipeAddrParams);
__aicore__ inline void SetC0Indicator(bool c0Indicator_);
__aicore__ inline void SetEltSrcAddr(uint32_t eltSrcAddr_);
__aicore__ inline void SetSrcStride1(uint32_t srcStride1_);
__aicore__ inline void SetSrcStride2(uint32_t srcStride2_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline bool GetC0Indicator() const;
__aicore__ inline uint32_t GetEltSrcAddr() const;
__aicore__ inline uint32_t GetSrcStride1() const;
__aicore__ inline uint32_t GetSrcStride2() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct FixPipeAddrBitModeConfig0 config0BitMode;
};
};
class ConvStrideBitModeParams {
public:
__aicore__ inline ConvStrideBitModeParams();
__aicore__ inline ConvStrideBitModeParams(const ConvStrideParams& convStrideParams);
__aicore__ inline void SetLoop3DstStride(uint16_t loop3DstStride_);
__aicore__ inline void SetLoop4DstStride(uint16_t loop4DstStride_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint16_t GetLoop3DstStride() const;
__aicore__ inline uint16_t GetLoop4DstStride() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ConvStrideBitModeConfig0 config0BitMode;
};
};
class MatrixParaBitModeParams {
public:
__aicore__ inline MatrixParaBitModeParams();
__aicore__ inline MatrixParaBitModeParams(const MatrixParaParams& matrixParaParams);
__aicore__ inline void SetM(uint16_t m_);
__aicore__ inline void SetK(uint16_t k_);
__aicore__ inline void SetGroupK(uint16_t groupK_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint16_t GetM() const;
__aicore__ inline uint16_t GetK() const;
__aicore__ inline uint16_t GetGroupK() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct MatrixParaBitModeConfig0 config0BitMode;
};
};
class MmadStrideParaBitModeParams {
public:
__aicore__ inline MmadStrideParaBitModeParams();
__aicore__ inline MmadStrideParaBitModeParams(const MmadStrideParaParams& mmadStrideParaParams);
__aicore__ inline void SetLoop4SrcStride(uint16_t loop4SrcStride_);
__aicore__ inline void SetLoop4DstStride(uint16_t loop4DstStride_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint16_t GetLoop4SrcStride() const;
__aicore__ inline uint16_t GetLoop4DstStride() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct MmadStrideParaBitModeConfig0 config0BitMode;
};
};
class ItaMaxAddrBitModeParams {
public:
__aicore__ inline ItaMaxAddrBitModeParams();
__aicore__ inline ItaMaxAddrBitModeParams(const ItaMaxAddrParaParams& itaMaxAddrParaParams);
__aicore__ inline void SetHmaxAddr(uint16_t hmaxAddr_);
__aicore__ inline void SetTmaxAddr(uint16_t tmaxAddr_);
__aicore__ inline void SetDmaxAddr(uint16_t dmaxAddr_);
__aicore__ inline void SetM0nStride(uint16_t m0nStride_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint16_t GetHmaxAddr() const;
__aicore__ inline uint16_t GetTmaxAddr() const;
__aicore__ inline uint16_t GetDmaxAddr() const;
__aicore__ inline uint16_t GetM0nStride() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ItaMaxAddrBitModeConfig0 config0BitMode;
};
};
class MatrixMxParaBitModeParams {
public:
__aicore__ inline MatrixMxParaBitModeParams();
__aicore__ inline MatrixMxParaBitModeParams(const MatrixMxParaParams& matrixMxParaParams);
__aicore__ inline void SetAMxAddr(uint32_t aMxAddr_);
__aicore__ inline void SetBMxAddr(uint32_t bMxAddr_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline uint32_t GetAMxAddr() const;
__aicore__ inline uint32_t GetBMxAddr() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct MatrixMxParaBitModeConfig0 config0BitMode;
};
};
class ConvFixBitModeParams {
public:
__aicore__ inline ConvFixBitModeParams();
__aicore__ inline ConvFixBitModeParams(const ConvFixParams& convFixParams);
__aicore__ inline void SetBiasMatrixInitVal(bool biasMatrixInitVal_);
__aicore__ inline void SetBiasMatrixBroadcast(bool biasMatrixBroadcast_);
__aicore__ inline void SetPreQuantMode(pre_quant_t preQuantMode_);
__aicore__ inline void SetPreReluMode(pre_relu_t preReluMode_);
__aicore__ inline void SetPostQuantMode(post_quant_t postQuantMode_);
__aicore__ inline void SetactPostMode(uint8_t actPostMode_);
__aicore__ inline void SetPreClipReluMode(uint8_t preClipReluMode_);
__aicore__ inline void SetEltwiseOp(eltwise_op_t eltwiseOp_);
__aicore__ inline void SetEltwiseAntiqEnable(bool eltwiseAntiqEnable_);
__aicore__ inline void SetEltwiseBroadcastEnable(bool eltwiseBroadcastEnable_);
__aicore__ inline void SetLsbMask(lsb_mask_t lsbMask_);
__aicore__ inline void SetDualSrcEnable(bool dualSrcEnable_);
__aicore__ inline void SetCompactEnable(bool compactEnable_);
__aicore__ inline void SetDependEnable(bool dependEnable_);
__aicore__ inline void SetInstrId(instr_id_t instrId_);
__aicore__ inline void SetPostProcHalfEnable(bool postProcHalfEnable_);
__aicore__ inline void SetNbrcBiasCtrl(bool nbrcBiasCtrl_);
__aicore__ inline void SetCin(uint16_t cin_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline bool GetBiasMatrixInitVal() const;
__aicore__ inline bool GetBiasMatrixBroadcast() const;
__aicore__ inline pre_quant_t GetPreQuantMode() const;
__aicore__ inline pre_relu_t GetPreReluMode() const;
__aicore__ inline post_quant_t GetPostQuantMode() const;
__aicore__ inline uint8_t GetactPostMode() const;
__aicore__ inline uint8_t GetPreClipReluMode() const;
__aicore__ inline eltwise_op_t GetEltwiseOp() const;
__aicore__ inline bool GetEltwiseAntiqEnable() const;
__aicore__ inline bool GetEltwiseBroadcastEnable() const;
__aicore__ inline lsb_mask_t GetLsbMask() const;
__aicore__ inline bool GetDualSrcEnable() const;
__aicore__ inline bool GetCompactEnable() const;
__aicore__ inline bool GetDependEnable() const;
__aicore__ inline instr_id_t GetInstrId() const;
__aicore__ inline bool GetPostProcHalfEnable() const;
__aicore__ inline bool GetNbrcBiasCtrl() const;
__aicore__ inline uint16_t GetCin() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct ConvFixBitModeConfig0 config0BitMode;
};
};
class MmadFixBitModeParams {
public:
__aicore__ inline MmadFixBitModeParams();
__aicore__ inline MmadFixBitModeParams(const MmadFixParams& mmadFixParams);
__aicore__ inline void SetBiasMatrixInitVal(bool biasMatrixInitVal_);
__aicore__ inline void SetBiasMatrixBroadcast(bool biasMatrixBroadcast_);
__aicore__ inline void SetPreQuantMode(pre_quant_t preQuantMode_);
__aicore__ inline void SetPreReluMode(pre_relu_t preReluMode_);
__aicore__ inline void SetPostQuantMode(post_quant_t postQuantMode_);
__aicore__ inline void SetactPostMode(uint8_t actPostMode_);
__aicore__ inline void SetPreClipReluMode(uint8_t preClipReluMode_);
__aicore__ inline void SetEltwiseOp(eltwise_op_t eltwiseOp_);
__aicore__ inline void SetEltwiseAntiqEnable(bool eltwiseAntiqEnable_);
__aicore__ inline void SetEltwiseBroadcastEnable(bool eltwiseBroadcastEnable_);
__aicore__ inline void SetItaEnable(bool itaEnable_);
__aicore__ inline void SetBiasS32Enable(bool biasS32Enable_);
__aicore__ inline void SetHmaxEnable(bool hmaxEnable_);
__aicore__ inline void SetLsbMask(lsb_mask_t lsbMask_);
__aicore__ inline void SetGemvCtrl(bool gemvCtrl_);
__aicore__ inline void SetGroupMode(uint8_t groupMode_);
__aicore__ inline void SetDependEnable(bool dependEnable_);
__aicore__ inline void SetInstrId(instr_id_t instrId_);
__aicore__ inline void SetPostProcHalfEnable(bool postProcHalfEnable_);
__aicore__ inline void SetLayoutCtrl(bool layoutCtrl_);
__aicore__ inline void SetN(uint16_t n_);
__aicore__ inline void SetConfig0(uint64_t config0_);
__aicore__ inline bool GetBiasMatrixInitVal() const;
__aicore__ inline bool GetBiasMatrixBroadcast() const;
__aicore__ inline pre_quant_t GetPreQuantMode() const;
__aicore__ inline pre_relu_t GetPreReluMode() const;
__aicore__ inline post_quant_t GetPostQuantMode() const;
__aicore__ inline uint8_t GetactPostMode() const;
__aicore__ inline uint8_t GetPreClipReluMode() const;
__aicore__ inline eltwise_op_t GetEltwiseOp() const;
__aicore__ inline bool GetEltwiseAntiqEnable() const;
__aicore__ inline bool GetEltwiseBroadcastEnable() const;
__aicore__ inline bool GetItaEnable() const;
__aicore__ inline bool GetBiasS32Enable() const;
__aicore__ inline bool GetHmaxEnable() const;
__aicore__ inline lsb_mask_t GetLsbMask() const;
__aicore__ inline bool GetGemvCtrl() const;
__aicore__ inline uint8_t GetGroupMode() const;
__aicore__ inline bool GetDependEnable() const;
__aicore__ inline instr_id_t GetInstrId() const;
__aicore__ inline bool GetPostProcHalfEnable() const;
__aicore__ inline bool GetLayoutCtrl() const;
__aicore__ inline uint16_t GetN() const;
__aicore__ inline uint64_t GetConfig0() const;
private:
union {
uint64_t config0;
struct MmadFixBitModeConfig0 config0BitMode;
};
};
}
#if defined(__NPU_ARCH__)
#include "../../impl/basic_api/kernel_operator_macro_bitmode_intf_impl.h"
#endif
#endif
#endif
#if defined(__UNDEF_ASCENDC_INCLUDE_INTERNAL_HEADERS_KERNEL_OPERATOR_MACRO_BITMODE_INTF_H__)
#undef __ASCENDC_INCLUDE_INTERNAL_HEADERS__
#undef __UNDEF_ASCENDC_INCLUDE_INTERNAL_HEADERS_KERNEL_OPERATOR_MACRO_BITMODE_INTF_H__
#endif