已合并
add memory base capi #744
chenkunjie创建于 3月5日
add memory base capi #744
已合并
chenkunjie创建于 3月5日
38 个文件变更+5674-210
@@ -1047,6 +1047,30 @@ __aicore__ inline void asc_fill_l1_sync(__cbuf__ bfloat16_t* dst, bfloat16_t val
1047{1047{
1048 asc_fill_l1_sync_impl(dst, value, config);1048 asc_fill_l1_sync_impl(dst, value, config);
1049}1049}
1050+ 
1051+__aicore__ inline void asc_fill_l1(__cbuf__ bfloat16_t* dst, half value,
1052+ const asc_fill_value_config& config)
1053+{
1054+ asc_fill_l1_impl(dst, value, config);
1055+}
1056+ 
1057+__aicore__ inline void asc_fill_l1_sync(__cbuf__ bfloat16_t* dst, half value,
1058+ const asc_fill_value_config& config)
1059+{
1060+ asc_fill_l1_sync_impl(dst, value, config);
1061+}
1062+ 
1063+__aicore__ inline void asc_fill_l1(__cbuf__ bfloat16_t* dst, uint32_t value,
1064+ const asc_fill_value_config& config)
1065+{
1066+ asc_fill_l1_impl(dst, value, config);
1067+}
1068+ 
1069+__aicore__ inline void asc_fill_l1_sync(__cbuf__ bfloat16_t* dst, uint32_t value,
1070+ const asc_fill_value_config& config)
1071+{
1072+ asc_fill_l1_sync_impl(dst, value, config);
1073+}
1050// ==========asc_copy_l12l0b_trans=========1074// ==========asc_copy_l12l0b_trans=========
1051__aicore__ inline void asc_copy_l12l0b_trans(__cb__ half* dst, __cbuf__ half* src, uint16_t index_id, uint8_t repeat,1075__aicore__ inline void asc_copy_l12l0b_trans(__cb__ half* dst, __cbuf__ half* src, uint16_t index_id, uint8_t repeat,
1052 uint16_t src_stride, uint16_t dst_stride, bool addrmode,1076 uint16_t src_stride, uint16_t dst_stride, bool addrmode,
@@ -216,6 +216,38 @@ __aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ bfloat16_t* dst, bfloat16_
216 asc_sync_post_process();216 asc_sync_post_process();
217}217}
218 218 
219+// create_cbuf_matrix_h
220+__aicore__ inline void asc_fill_l1_impl(__cbuf__ bfloat16_t* dst, half value,
221+ const asc_fill_value_config& config)
222+{
223+ if ASC_IS_AIC {
224+ create_cbuf_matrix_h(dst, config.config, value);
225+ }
226+}
227+ 
228+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ bfloat16_t* dst, half value,
229+ const asc_fill_value_config& config)
230+{
231+ asc_fill_l1_impl(dst, value, config);
232+ asc_sync_post_process();
233+}
234+ 
235+// create_cbuf_matrix_ui
236+__aicore__ inline void asc_fill_l1_impl(__cbuf__ bfloat16_t* dst, uint32_t value,
237+ const asc_fill_value_config& config)
238+{
239+ if ASC_IS_AIC {
240+ create_cbuf_matrix_ui(dst, config.config, value);
241+ }
242+}
243+ 
244+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ bfloat16_t* dst, uint32_t value,
245+ const asc_fill_value_config& config)
246+{
247+ asc_fill_l1_impl(dst, value, config);
248+ asc_sync_post_process();
249+}
250+ 
219#endif251#endif
220 252 
221#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)253#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
Mimpl/c_api/instr_impl/npu_arch_3510/atomic_impl.h+22-0文件内容审核中,请稍后刷新重试
@@ -0,0 +1,39 @@
1+/**
2+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+/* !
12+ * \file asc_set_atomic_add_int16_impl.h
13+ * \brief
14+ */
15+ 
16+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
17+#warning \
18+ "impl/c_api/instr_impl/npu_arch_3510/atomic_impl/asc_set_atomic_add_int16_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
19+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
20+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
21+#endif
22+ 
23+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_ATOMIC_IMPL_ASC_SET_ATOMIC_ADD_INT16_IMPL_H
24+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_ATOMIC_IMPL_ASC_SET_ATOMIC_ADD_INT16_IMPL_H
25+ 
26+#include "instr_impl/npu_arch_3510/utils_impl.h"
27+ 
28+__aicore__ inline void asc_set_atomic_add_int16_impl()
29+{
30+ set_atomic_add();
31+ set_atomic_s16();
32+}
33+ 
34+#endif
35+ 
36+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
37+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
38+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
39+#endif
@@ -0,0 +1,34 @@
1+/**
2+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
12+#warning \
13+ "impl/c_api/instr_impl/npu_arch_3510/atomic_impl/asc_set_atomic_add_int8_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
14+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
15+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
16+#endif
17+ 
18+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_ATOMIC_IMPL_ASC_SET_ATOMIC_ADD_INT8_IMPL_H
19+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_ATOMIC_IMPL_ASC_SET_ATOMIC_ADD_INT8_IMPL_H
20+ 
21+#include "instr_impl/npu_arch_3510/utils_impl.h"
22+ 
23+__aicore__ inline void asc_set_atomic_add_int8_impl()
24+{
25+ set_atomic_add();
26+ set_atomic_s8();
27+}
28+ 
29+#endif
30+ 
31+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
32+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
33+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
34+#endif
@@ -0,0 +1,39 @@
1+/**
2+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+/* !
12+ * \file asc_set_atomic_add_int_impl.h
13+ * \brief
14+ */
15+ 
16+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
17+#warning \
18+ "impl/c_api/instr_impl/npu_arch_3510/atomic_impl/asc_set_atomic_add_int_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
19+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
20+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
21+#endif
22+ 
23+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_ATOMIC_IMPL_ASC_SET_ATOMIC_ADD_INT_IMPL_H
24+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_ATOMIC_IMPL_ASC_SET_ATOMIC_ADD_INT_IMPL_H
25+ 
26+#include "instr_impl/npu_arch_3510/utils_impl.h"
27+ 
28+__aicore__ inline void asc_set_atomic_add_int_impl()
29+{
30+ set_atomic_add();
31+ set_atomic_s32();
32+}
33+ 
34+#endif
35+ 
36+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
37+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
38+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
39+#endif
CANN-robotCANN-robot
CANN-robotCANN-robot3月5日
代码结构与可维护性: 文件末尾缺少换行符,不符合POSIX标准。虽然这在大多数编译器中不会导致错误,但某些工具(如diff、patch)或版本控制系统可能会产生警告或意外行为。
问题类型: 代码结构与可维护性
文件路径: impl/c_api/instr_impl/npu_arch_3510/atomic_impl/asc_set_atomic_add_int_impl.h
行号: 39
问题代码:
#endif
修改建议:
在文件末尾添加一个空行(换行符),确保文件以换行符结束。
---
此评论由代码审查工具自动生成
likedislike
CANN-robotCANN-robot3月5日
代码规范: 文件末尾缺少换行符(根据diff提示"\ No newline at end of file")。虽然这在大多数情况下不会导致功能问题,但不符合POSIX标准,且某些工具(如某些编译器、文本处理工具)可能会产生警告或行为不一致。
问题类型: 代码规范
文件路径: impl/c_api/instr_impl/npu_arch_3510/atomic_impl/asc_set_atomic_add_int_impl.h
行号: 39
问题代码:
#endif
修改建议:
在文件末尾添加一个空行,确保以换行符结束。
---
此评论由代码审查工具自动生成
likedislike
@@ -17,7 +17,8 @@
17#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_GM2L1_IMPL_H17#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_GM2L1_IMPL_H
18#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_GM2L1_IMPL_H18#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_GM2L1_IMPL_H
19 19 
20-#include "instr_impl/npu_arch_3510/utils_impl/utils_impl.h"20+#include "instr_impl/npu_arch_3510/utils_impl.h"
21+ 
21__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ void* dst, __gm__ void* src, uint32_t n_burst, uint32_t len_burst, uint8_t pad_func_mode,22__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ void* dst, __gm__ void* src, uint32_t n_burst, uint32_t len_burst, uint8_t pad_func_mode,
22 uint64_t src_stride, uint32_t dst_stride)23 uint64_t src_stride, uint32_t dst_stride)
23{24{
@@ -32,9 +33,250 @@ __aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ void* dst, __gm__ void*
32 asc_copy_gm2l1_impl(dst, src, n_burst, len_burst, pad_func_mode, src_stride, dst_stride);33 asc_copy_gm2l1_impl(dst, src, n_burst, len_burst, pad_func_mode, src_stride, dst_stride);
33 asc_sync_post_process();34 asc_sync_post_process();
34}35}
36+ 
37+// bfloat16_t
38+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ bfloat16_t *dst, __gm__ bfloat16_t *src, uint32_t m_start_position, uint32_t k_start_position,
39+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
40+{
41+ if ASC_IS_AIC {
42+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
43+ }
44+}
45+ 
46+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ bfloat16_t *dst, __gm__ bfloat16_t *src, uint32_t m_start_position, uint32_t k_start_position,
47+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
48+{
49+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
50+ asc_sync_post_process();
51+}
52+ 
53+// float
54+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ float *dst, __gm__ float *src, uint32_t m_start_position, uint32_t k_start_position,
55+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
56+{
57+ if ASC_IS_AIC {
58+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
59+ }
60+}
61+ 
62+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ float *dst, __gm__ float *src, uint32_t m_start_position, uint32_t k_start_position,
63+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
64+{
65+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
66+ asc_sync_post_process();
67+}
68+ 
69+// float8_e4m3_t
70+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ float8_e4m3_t *dst, __gm__ float8_e4m3_t *src, uint32_t m_start_position, uint32_t k_start_position,
71+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
72+{
73+ if ASC_IS_AIC {
74+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
75+ }
76+}
77+ 
78+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ float8_e4m3_t *dst, __gm__ float8_e4m3_t *src, uint32_t m_start_position, uint32_t k_start_position,
79+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
80+{
81+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
82+ asc_sync_post_process();
83+}
84+ 
85+// float8_e5m2_t
86+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ float8_e5m2_t *dst, __gm__ float8_e5m2_t *src, uint32_t m_start_position, uint32_t k_start_position,
87+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
88+{
89+ if ASC_IS_AIC {
90+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
91+ }
92+}
93+ 
94+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ float8_e5m2_t *dst, __gm__ float8_e5m2_t *src, uint32_t m_start_position, uint32_t k_start_position,
95+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
96+{
97+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
98+ asc_sync_post_process();
99+}
100+ 
101+// half
102+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ half *dst, __gm__ half *src, uint32_t m_start_position, uint32_t k_start_position,
103+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
104+{
105+ if ASC_IS_AIC {
106+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
107+ }
108+}
109+ 
110+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ half *dst, __gm__ half *src, uint32_t m_start_position, uint32_t k_start_position,
111+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
112+{
113+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
114+ asc_sync_post_process();
115+}
116+ 
117+// hifloat8_t
118+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ hifloat8_t *dst, __gm__ hifloat8_t *src, uint32_t m_start_position, uint32_t k_start_position,
119+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
120+{
121+ if ASC_IS_AIC {
122+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
123+ }
124+}
125+ 
126+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ hifloat8_t *dst, __gm__ hifloat8_t *src, uint32_t m_start_position, uint32_t k_start_position,
127+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
128+{
129+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
130+ asc_sync_post_process();
131+}
132+ 
133+// int16_t
134+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ int16_t *dst, __gm__ int16_t *src, uint32_t m_start_position, uint32_t k_start_position,
135+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
136+{
137+ if ASC_IS_AIC {
138+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
139+ }
140+}
141+ 
142+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ int16_t *dst, __gm__ int16_t *src, uint32_t m_start_position, uint32_t k_start_position,
143+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
144+{
145+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
146+ asc_sync_post_process();
147+}
148+ 
149+// int32_t
150+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ int32_t *dst, __gm__ int32_t *src, uint32_t m_start_position, uint32_t k_start_position,
151+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
152+{
153+ if ASC_IS_AIC {
154+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
155+ }
156+}
157+ 
158+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ int32_t *dst, __gm__ int32_t *src, uint32_t m_start_position, uint32_t k_start_position,
159+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
160+{
161+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
162+ asc_sync_post_process();
163+}
164+ 
165+// int8_t
166+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ int8_t *dst, __gm__ int8_t *src, uint32_t m_start_position, uint32_t k_start_position,
167+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
168+{
169+ if ASC_IS_AIC {
170+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
171+ }
172+}
173+ 
174+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ int8_t *dst, __gm__ int8_t *src, uint32_t m_start_position, uint32_t k_start_position,
175+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
176+{
177+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
178+ asc_sync_post_process();
179+}
180+ 
181+// uint16_t
182+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ uint16_t *dst, __gm__ uint16_t *src, uint32_t m_start_position, uint32_t k_start_position,
183+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
184+{
185+ if ASC_IS_AIC {
186+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
187+ }
188+}
189+ 
190+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ uint16_t *dst, __gm__ uint16_t *src, uint32_t m_start_position, uint32_t k_start_position,
191+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
192+{
193+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
194+ asc_sync_post_process();
195+}
196+ 
197+// uint32_t
198+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ uint32_t *dst, __gm__ uint32_t *src, uint32_t m_start_position, uint32_t k_start_position,
199+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
200+{
201+ if ASC_IS_AIC {
202+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
203+ }
204+}
205+ 
206+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ uint32_t *dst, __gm__ uint32_t *src, uint32_t m_start_position, uint32_t k_start_position,
207+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
208+{
209+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
210+ asc_sync_post_process();
211+}
212+ 
213+// uint8_t
214+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ uint8_t *dst, __gm__ uint8_t *src, uint32_t m_start_position, uint32_t k_start_position,
215+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
216+{
217+ if ASC_IS_AIC {
218+ load_gm_to_cbuf_2dv2(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
219+ }
220+}
221+ 
222+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ uint8_t *dst, __gm__ uint8_t *src, uint32_t m_start_position, uint32_t k_start_position,
223+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
224+{
225+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
226+ asc_sync_post_process();
227+}
228+ 
229+// float4_e1m2x2_t
230+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ float4_e1m2x2_t *dst, __gm__ float4_e1m2x2_t *src, uint32_t m_start_position, uint32_t k_start_position,
231+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
232+{
233+ if ASC_IS_AIC {
234+ load_gm_to_cbuf_2dv2_s4(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
235+ }
236+}
237+ 
238+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ float4_e1m2x2_t *dst, __gm__ float4_e1m2x2_t *src, uint32_t m_start_position, uint32_t k_start_position,
239+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
240+{
241+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
242+ asc_sync_post_process();
243+}
244+ 
245+// float4_e2m1x2_t
246+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ float4_e2m1x2_t *dst, __gm__ float4_e2m1x2_t *src, uint32_t m_start_position, uint32_t k_start_position,
247+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
248+{
249+ if ASC_IS_AIC {
250+ load_gm_to_cbuf_2dv2_s4(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
251+ }
252+}
253+ 
254+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ float4_e2m1x2_t *dst, __gm__ float4_e2m1x2_t *src, uint32_t m_start_position, uint32_t k_start_position,
255+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
256+{
257+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
258+ asc_sync_post_process();
259+}
260+ 
261+// void
262+__aicore__ inline void asc_copy_gm2l1_impl(__cbuf__ void *dst, __gm__ void *src, uint32_t m_start_position, uint32_t k_start_position,
263+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
264+{
265+ if ASC_IS_AIC {
266+ load_gm_to_cbuf_2dv2_s4(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, 0, decomp_mode, l2_cache_ctl);
267+ }
268+}
269+ 
270+__aicore__ inline void asc_copy_gm2l1_sync_impl(__cbuf__ void *dst, __gm__ void *src, uint32_t m_start_position, uint32_t k_start_position,
271+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl)
272+{
273+ asc_copy_gm2l1_impl(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl);
274+ asc_sync_post_process();
275+}
276+ 
35#endif277#endif
36 278 
37#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)279#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
38#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS280#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
39#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC281#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
40-#endif282+#endif
@@ -0,0 +1,531 @@
1+/**
2+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
12+#warning "impl/c_api/instr_impl/npu_arch_3510/cube_datamove_impl/asc_copy_l0c2gm_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
13+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
14+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
15+#endif
16+ 
17+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L0C2GM_IMPL_H
18+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L0C2GM_IMPL_H
19+ 
20+#include "instr_impl/npu_arch_3510/utils_impl.h"
21+ 
22+// bfloat16_t float
23+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ bfloat16_t *dst_addr, __cc__ float *src_addr,
24+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
25+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
26+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
27+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
28+ bool broadcast_en, bool NZ2DN_en)
29+{
30+ if ASC_IS_AIC {
31+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
32+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
33+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
34+ }
35+}
36+ 
37+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ bfloat16_t* dst_addr, __cc__ float* src_addr,
38+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
39+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
40+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
41+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
42+ bool broadcast_en, bool NZ2DN_en)
43+{
44+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
45+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
46+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
47+ asc_sync_post_process();
48+}
49+ 
50+// half float
51+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ half *dst_addr, __cc__ float *src_addr,
52+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
53+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
54+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
55+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
56+ bool broadcast_en, bool NZ2DN_en)
57+{
58+ if ASC_IS_AIC {
59+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
60+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
61+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
62+ }
63+}
64+ 
65+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ half* dst_addr, __cc__ float* src_addr,
66+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
67+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
68+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
69+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
70+ bool broadcast_en, bool NZ2DN_en)
71+{
72+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
73+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
74+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
75+ asc_sync_post_process();
76+}
77+ 
78+// float8_e4m3_t float
79+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ float8_e4m3_t *dst_addr, __cc__ float *src_addr,
80+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
81+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
82+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
83+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
84+ bool broadcast_en, bool NZ2DN_en)
85+{
86+ if ASC_IS_AIC {
87+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
88+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
89+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
90+ }
91+}
92+ 
93+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ float8_e4m3_t* dst_addr, __cc__ float* src_addr,
94+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
95+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
96+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
97+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
98+ bool broadcast_en, bool NZ2DN_en)
99+{
100+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
101+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
102+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
103+ asc_sync_post_process();
104+}
105+ 
106+// float8_e5m2_t float
107+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ float8_e5m2_t *dst_addr, __cc__ float *src_addr,
108+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
109+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
110+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
111+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
112+ bool broadcast_en, bool NZ2DN_en)
113+{
114+ if ASC_IS_AIC {
115+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
116+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
117+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
118+ }
119+}
120+ 
121+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ float8_e5m2_t* dst_addr, __cc__ float* src_addr,
122+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
123+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
124+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
125+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
126+ bool broadcast_en, bool NZ2DN_en)
127+{
128+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
129+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
130+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
131+ asc_sync_post_process();
132+}
133+ 
134+// hifloat8_t float
135+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ hifloat8_t *dst_addr, __cc__ float *src_addr,
136+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
137+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
138+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
139+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
140+ bool broadcast_en, bool NZ2DN_en)
141+{
142+ if ASC_IS_AIC {
143+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
144+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
145+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
146+ }
147+}
148+ 
149+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ hifloat8_t* dst_addr, __cc__ float* src_addr,
150+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
151+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
152+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
153+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
154+ bool broadcast_en, bool NZ2DN_en)
155+{
156+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
157+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
158+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
159+ asc_sync_post_process();
160+}
161+ 
162+// int8 float
163+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ int8_t *dst_addr, __cc__ float *src_addr,
164+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
165+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
166+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
167+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
168+ bool broadcast_en, bool NZ2DN_en)
169+{
170+ if ASC_IS_AIC {
171+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
172+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
173+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
174+ }
175+}
176+ 
177+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ int8_t* dst_addr, __cc__ float* src_addr,
178+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
179+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
180+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
181+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
182+ bool broadcast_en, bool NZ2DN_en)
183+{
184+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
185+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
186+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
187+ asc_sync_post_process();
188+}
189+ 
190+// uint8 float
191+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ uint8_t *dst_addr, __cc__ float *src_addr,
192+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
193+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
194+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
195+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
196+ bool broadcast_en, bool NZ2DN_en)
197+{
198+ if ASC_IS_AIC {
199+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
200+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
201+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
202+ }
203+}
204+ 
205+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ uint8_t* dst_addr, __cc__ float* src_addr,
206+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
207+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
208+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
209+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
210+ bool broadcast_en, bool NZ2DN_en)
211+{
212+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
213+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
214+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
215+ asc_sync_post_process();
216+}
217+ 
218+// float float
219+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ float *dst_addr, __cc__ float *src_addr,
220+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
221+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
222+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
223+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
224+ bool broadcast_en, bool NZ2DN_en)
225+{
226+ if ASC_IS_AIC {
227+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
228+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
229+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
230+ }
231+}
232+ 
233+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ float* dst_addr, __cc__ float* src_addr,
234+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
235+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
236+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
237+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
238+ bool broadcast_en, bool NZ2DN_en)
239+{
240+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
241+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
242+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
243+ asc_sync_post_process();
244+}
245+ 
246+// bfloat16_t int32_t
247+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ bfloat16_t *dst_addr, __cc__ int32_t *src_addr,
248+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
249+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
250+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
251+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
252+ bool broadcast_en, bool NZ2DN_en)
253+{
254+ if ASC_IS_AIC {
255+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
256+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
257+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
258+ }
259+}
260+ 
261+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ bfloat16_t* dst_addr, __cc__ int32_t* src_addr,
262+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
263+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
264+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
265+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
266+ bool broadcast_en, bool NZ2DN_en)
267+{
268+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
269+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
270+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
271+ asc_sync_post_process();
272+}
273+ 
274+// half int32_t
275+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ half *dst_addr, __cc__ int32_t *src_addr,
276+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
277+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
278+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
279+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
280+ bool broadcast_en, bool NZ2DN_en)
281+{
282+ if ASC_IS_AIC {
283+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
284+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
285+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
286+ }
287+}
288+ 
289+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ half* dst_addr, __cc__ int32_t* src_addr,
290+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
291+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
292+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
293+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
294+ bool broadcast_en, bool NZ2DN_en)
295+{
296+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
297+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
298+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
299+ asc_sync_post_process();
300+}
301+ 
302+// float8_e4m3_t int32_t
303+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ float8_e4m3_t *dst_addr, __cc__ int32_t *src_addr,
304+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
305+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
306+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
307+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
308+ bool broadcast_en, bool NZ2DN_en)
309+{
310+ if ASC_IS_AIC {
311+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
312+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
313+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
314+ }
315+}
316+ 
317+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ float8_e4m3_t* dst_addr, __cc__ int32_t* src_addr,
318+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
319+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
320+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
321+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
322+ bool broadcast_en, bool NZ2DN_en)
323+{
324+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
325+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
326+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
327+ asc_sync_post_process();
328+}
329+ 
330+// float8_e5m2_t int32_t
331+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ float8_e5m2_t *dst_addr, __cc__ int32_t *src_addr,
332+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
333+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
334+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
335+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
336+ bool broadcast_en, bool NZ2DN_en)
337+{
338+ if ASC_IS_AIC {
339+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
340+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
341+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
342+ }
343+}
344+ 
345+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ float8_e5m2_t* dst_addr, __cc__ int32_t* src_addr,
346+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
347+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
348+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
349+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
350+ bool broadcast_en, bool NZ2DN_en)
351+{
352+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
353+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
354+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
355+ asc_sync_post_process();
356+}
357+ 
358+// hifloat8_t int32_t
359+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ hifloat8_t *dst_addr, __cc__ int32_t *src_addr,
360+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
361+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
362+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
363+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
364+ bool broadcast_en, bool NZ2DN_en)
365+{
366+ if ASC_IS_AIC {
367+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
368+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
369+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
370+ }
371+}
372+ 
373+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ hifloat8_t* dst_addr, __cc__ int32_t* src_addr,
374+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
375+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
376+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
377+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
378+ bool broadcast_en, bool NZ2DN_en)
379+{
380+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
381+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
382+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
383+ asc_sync_post_process();
384+}
385+ 
386+// int8 int32_t
387+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ int8_t *dst_addr, __cc__ int32_t *src_addr,
388+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
389+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
390+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
391+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
392+ bool broadcast_en, bool NZ2DN_en)
393+{
394+ if ASC_IS_AIC {
395+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
396+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
397+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
398+ }
399+}
400+ 
401+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ int8_t* dst_addr, __cc__ int32_t* src_addr,
402+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
403+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
404+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
405+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
406+ bool broadcast_en, bool NZ2DN_en)
407+{
408+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
409+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
410+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
411+ asc_sync_post_process();
412+}
413+ 
414+// uint8 int32_t
415+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ uint8_t *dst_addr, __cc__ int32_t *src_addr,
416+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
417+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
418+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
419+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
420+ bool broadcast_en, bool NZ2DN_en)
421+{
422+ if ASC_IS_AIC {
423+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
424+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
425+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
426+ }
427+}
428+ 
429+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ uint8_t* dst_addr, __cc__ int32_t* src_addr,
430+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
431+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
432+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
433+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
434+ bool broadcast_en, bool NZ2DN_en)
435+{
436+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
437+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
438+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
439+ asc_sync_post_process();
440+}
441+ 
442+// int32_t int32_t
443+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ int32_t *dst_addr, __cc__ int32_t *src_addr,
444+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
445+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
446+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
447+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
448+ bool broadcast_en, bool NZ2DN_en)
449+{
450+ if ASC_IS_AIC {
451+ copy_matrix_cc_to_gm(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
452+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
453+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
454+ }
455+}
456+ 
457+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ int32_t* dst_addr, __cc__ int32_t* src_addr,
458+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
459+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
460+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
461+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
462+ bool broadcast_en, bool NZ2DN_en)
463+{
464+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
465+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
466+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
467+ asc_sync_post_process();
468+}
469+ 
470+// void float
471+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ void *dst_addr, __cc__ float *src_addr,
472+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
473+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
474+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
475+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
476+ bool broadcast_en, bool NZ2DN_en)
477+{
478+ if ASC_IS_AIC {
479+ copy_matrix_cc_to_gm_s4(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
480+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
481+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
482+ }
483+}
484+ 
485+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ void* dst_addr, __cc__ float* src_addr,
486+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
487+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
488+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
489+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
490+ bool broadcast_en, bool NZ2DN_en)
491+{
492+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
493+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
494+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
495+ asc_sync_post_process();
496+}
497+ 
498+// void int32_t
499+__aicore__ inline void asc_copy_l0c2gm_impl(__gm__ void *dst_addr, __cc__ int32_t *src_addr,
500+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
501+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
502+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
503+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
504+ bool broadcast_en, bool NZ2DN_en)
505+{
506+ if ASC_IS_AIC {
507+ copy_matrix_cc_to_gm_s4(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
508+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post, clip_relu_post,
509+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
510+ }
511+}
512+ 
513+__aicore__ inline void asc_copy_l0c2gm_sync_impl(__gm__ void* dst_addr, __cc__ int32_t* src_addr,
514+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
515+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
516+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
517+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
518+ bool broadcast_en, bool NZ2DN_en)
519+{
520+ asc_copy_l0c2gm_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
521+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post,
522+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
523+ asc_sync_post_process();
524+}
525+ 
526+#endif
527+ 
528+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
529+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
530+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
531+#endif
@@ -141,6 +141,60 @@ __aicore__ inline void asc_copy_l0c2l1_impl(__cbuf__ int32_t* dst, __cc__ int32_
141 }141 }
142}142}
143 143 
144+// void float
145+__aicore__ inline void asc_copy_l0c2l1_impl(__cbuf__ void *dst_addr, __cc__ float *src_addr, uint16_t n_size,
146+ uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre,
147+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
148+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
149+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
150+{
151+ if ASC_IS_AIC {
152+ copy_matrix_cc_to_cbuf_s4(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
153+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post),
154+ relu_post, clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en,
155+ broadcast_en, NZ2DN_en);
156+ }
157+}
158+ 
159+__aicore__ inline void asc_copy_l0c2l1_sync_impl(__cbuf__ void *dst_addr, __cc__ float *src_addr, uint16_t n_size,
160+ uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre,
161+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
162+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
163+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
164+{
165+ asc_copy_l0c2l1_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
166+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
167+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
168+ asc_sync_post_process();
169+}
170+ 
171+// void int32_t
172+__aicore__ inline void asc_copy_l0c2l1_impl(__cbuf__ void *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size,
173+ uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre,
174+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
175+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
176+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
177+{
178+ if ASC_IS_AIC {
179+ copy_matrix_cc_to_cbuf_s4(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
180+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post),
181+ relu_post, clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en,
182+ broadcast_en, NZ2DN_en);
183+ }
184+}
185+ 
186+__aicore__ inline void asc_copy_l0c2l1_sync_impl(__cbuf__ void *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size,
187+ uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre,
188+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
189+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
190+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
191+{
192+ asc_copy_l0c2l1_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre,
193+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
194+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
195+ asc_sync_post_process();
196+}
197+ 
144#endif198#endif
145 199 
146#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)200#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
@@ -0,0 +1,513 @@
1+/**
2+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
12+#warning "impl/c_api/instr_impl/npu_arch_3510/cube_datamove_impl/asc_copy_l0c2ub_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
13+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
14+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
15+#endif
16+ 
17+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L0C2UB_IMPL_H
18+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L0C2UB_IMPL_H
19+ 
20+#include "instr_impl/npu_arch_3510/utils_impl.h"
21+ 
22+// bfloat16_t float
23+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ bfloat16_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
24+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
25+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
26+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
27+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
28+{
29+ if ASC_IS_AIC {
30+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
31+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
32+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
33+ 
34+ }
35+}
36+ 
37+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ bfloat16_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
38+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
39+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
40+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
41+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
42+{
43+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
44+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
45+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
46+ asc_sync_post_process();
47+}
48+ 
49+// half float
50+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ half *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
51+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
52+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
53+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
54+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
55+{
56+ if ASC_IS_AIC {
57+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
58+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
59+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
60+ 
61+ }
62+}
63+ 
64+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ half* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
65+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
66+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
67+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
68+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
69+{
70+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
71+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
72+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
73+ asc_sync_post_process();
74+}
75+ 
76+// float8_e4m3_t float
77+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ float8_e4m3_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
78+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
79+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
80+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
81+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
82+{
83+ if ASC_IS_AIC {
84+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
85+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
86+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
87+ 
88+ }
89+}
90+ 
91+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ float8_e4m3_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
92+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
93+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
94+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
95+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
96+{
97+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
98+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
99+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
100+ asc_sync_post_process();
101+}
102+ 
103+// float8_e5m2_t float
104+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ float8_e5m2_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
105+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
106+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
107+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
108+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
109+{
110+ if ASC_IS_AIC {
111+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
112+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
113+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
114+ 
115+ }
116+}
117+ 
118+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ float8_e5m2_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
119+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
120+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
121+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
122+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
123+{
124+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
125+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
126+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
127+ asc_sync_post_process();
128+}
129+ 
130+// hifloat8_t float
131+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ hifloat8_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
132+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
133+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
134+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
135+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
136+{
137+ if ASC_IS_AIC {
138+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
139+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
140+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
141+ 
142+ }
143+}
144+ 
145+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ hifloat8_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
146+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
147+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
148+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
149+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
150+{
151+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
152+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
153+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
154+ asc_sync_post_process();
155+}
156+ 
157+// int8 float
158+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ int8_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
159+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
160+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
161+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
162+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
163+{
164+ if ASC_IS_AIC {
165+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
166+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
167+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
168+ 
169+ }
170+}
171+ 
172+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ int8_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
173+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
174+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
175+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
176+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
177+{
178+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
179+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
180+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
181+ asc_sync_post_process();
182+}
183+ 
184+// uint8 float
185+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ uint8_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
186+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
187+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
188+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
189+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
190+{
191+ if ASC_IS_AIC {
192+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
193+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
194+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
195+ 
196+ }
197+}
198+ 
199+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ uint8_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
200+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
201+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
202+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
203+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
204+{
205+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
206+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
207+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
208+ asc_sync_post_process();
209+}
210+ 
211+// float float
212+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ float *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
213+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
214+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
215+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
216+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
217+{
218+ if ASC_IS_AIC {
219+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
220+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
221+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
222+ 
223+ }
224+}
225+ 
226+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ float* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
227+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
228+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
229+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
230+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
231+{
232+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
233+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
234+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
235+ asc_sync_post_process();
236+}
237+ 
238+// bfloat16_t int32_t
239+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ bfloat16_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
240+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
241+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
242+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
243+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
244+{
245+ if ASC_IS_AIC {
246+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
247+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
248+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
249+ 
250+ }
251+}
252+ 
253+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ bfloat16_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
254+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
255+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
256+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
257+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
258+{
259+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
260+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
261+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
262+ asc_sync_post_process();
263+}
264+ 
265+// half int32_t
266+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ half *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
267+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
268+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
269+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
270+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
271+{
272+ if ASC_IS_AIC {
273+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
274+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
275+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
276+ 
277+ }
278+}
279+ 
280+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ half* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
281+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
282+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
283+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
284+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
285+{
286+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
287+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
288+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
289+ asc_sync_post_process();
290+}
291+ 
292+// float8_e4m3_t int32_t
293+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ float8_e4m3_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
294+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
295+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
296+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
297+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
298+{
299+ if ASC_IS_AIC {
300+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
301+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
302+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
303+ 
304+ }
305+}
306+ 
307+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ float8_e4m3_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
308+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
309+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
310+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
311+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
312+{
313+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
314+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
315+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
316+ asc_sync_post_process();
317+}
318+ 
319+// float8_e5m2_t int32_t
320+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ float8_e5m2_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
321+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
322+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
323+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
324+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
325+{
326+ if ASC_IS_AIC {
327+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
328+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
329+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
330+ 
331+ }
332+}
333+ 
334+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ float8_e5m2_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
335+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
336+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
337+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
338+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
339+{
340+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
341+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
342+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
343+ asc_sync_post_process();
344+}
345+ 
346+// hifloat8_t int32_t
347+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ hifloat8_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
348+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
349+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
350+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
351+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
352+{
353+ if ASC_IS_AIC {
354+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
355+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
356+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
357+ 
358+ }
359+}
360+ 
361+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ hifloat8_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
362+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
363+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
364+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
365+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
366+{
367+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
368+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
369+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
370+ asc_sync_post_process();
371+}
372+ 
373+// int8 int32_t
374+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ int8_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
375+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
376+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
377+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
378+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
379+{
380+ if ASC_IS_AIC {
381+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
382+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
383+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
384+ 
385+ }
386+}
387+ 
388+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ int8_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
389+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
390+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
391+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
392+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
393+{
394+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
395+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
396+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
397+ asc_sync_post_process();
398+}
399+ 
400+// uint8 int32_t
401+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ uint8_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
402+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
403+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
404+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
405+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
406+{
407+ if ASC_IS_AIC {
408+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
409+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
410+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
411+ 
412+ }
413+}
414+ 
415+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ uint8_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
416+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
417+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
418+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
419+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
420+{
421+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
422+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
423+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
424+ asc_sync_post_process();
425+}
426+ 
427+// int32_t int32_t
428+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ int32_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
429+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
430+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
431+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
432+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
433+{
434+ if ASC_IS_AIC {
435+ copy_matrix_cc_to_ub(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
436+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
437+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
438+ 
439+ }
440+}
441+ 
442+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ int32_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
443+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
444+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
445+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
446+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
447+{
448+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
449+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
450+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
451+ asc_sync_post_process();
452+}
453+ 
454+// void float
455+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ void *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
456+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
457+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
458+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
459+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
460+{
461+ if ASC_IS_AIC {
462+ copy_matrix_cc_to_ub_s4(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
463+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
464+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
465+ 
466+ }
467+}
468+ 
469+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ void* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
470+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
471+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
472+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
473+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
474+{
475+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
476+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
477+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
478+ asc_sync_post_process();
479+}
480+ 
481+// void int32_t
482+__aicore__ inline void asc_copy_l0c2ub_impl(__ubuf__ void *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
483+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
484+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
485+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
486+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
487+{
488+ if ASC_IS_AIC {
489+ copy_matrix_cc_to_ub_s4(dst_addr, src_addr, 0, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
490+ unit_flag_ctl, static_cast<QuantMode_t>(quant_pre), relu_pre, split_en, NZ2ND_en, static_cast<QuantMode_post>(quant_post), relu_post,
491+ clip_relu_post, loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
492+ 
493+ }
494+}
495+ 
496+__aicore__ inline void asc_copy_l0c2ub_sync_impl(__ubuf__ void* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
497+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
498+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
499+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
500+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en)
501+{
502+ asc_copy_l0c2ub_impl(dst_addr, src_addr, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre,
503+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, loop_enhance_en,
504+ eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, broadcast_en, NZ2DN_en);
505+ asc_sync_post_process();
506+}
507+ 
508+#endif
509+ 
510+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
511+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
512+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
513+#endif
@@ -0,0 +1,127 @@
1+/**
2+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
12+#warning "impl/c_api/instr_impl/npu_arch_3510/cube_datamove_impl/asc_copy_l12bt_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
13+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
14+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
15+#endif
16+ 
17+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L12BT_IMPL_H
18+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L12BT_IMPL_H
19+ 
20+#include "instr_impl/npu_arch_3510/utils_impl.h"
21+ 
22+// ========== void -> uint64_t ==========
23+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ void* src, uint16_t conv_control, uint16_t n_burst,
24+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap)
25+{
26+ if ASC_IS_AIC {
27+ copy_cbuf_to_bt(dst, src, conv_control, n_burst, len_burst, source_gap, dst_gap);
28+ }
29+}
30+ 
31+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ void* src, uint32_t size)
32+{
33+ asc_copy_l12bt_impl(dst, src, 0, 1, size / ASC_C_API_ONE_DATABLOCK_SIZE, 0, 0);
34+}
35+ 
36+__aicore__ inline void asc_copy_l12bt_sync_impl(uint64_t dst, __cbuf__ void* src, uint32_t size)
37+{
38+ asc_copy_l12bt_impl(dst, src, size);
39+ asc_sync_post_process();
40+}
41+ 
42+// ========== bfloat16_t -> uint64_t ==========
43+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ bfloat16_t* src, uint16_t conv_control, uint16_t n_burst,
44+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap)
45+{
46+ if ASC_IS_AIC {
47+ copy_cbuf_to_bt(dst, src, conv_control, n_burst, len_burst, source_gap, dst_gap);
48+ }
49+}
50+ 
51+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ bfloat16_t* src, uint32_t size)
52+{
53+ asc_copy_l12bt_impl(dst, src, 0, 1, size / ASC_C_API_ONE_DATABLOCK_SIZE, 0, 0);
54+}
55+ 
56+__aicore__ inline void asc_copy_l12bt_sync_impl(uint64_t dst, __cbuf__ bfloat16_t* src, uint32_t size)
57+{
58+ asc_copy_l12bt_impl(dst, src, size);
59+ asc_sync_post_process();
60+}
61+ 
62+// ========== half -> uint64_t ==========
63+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ half* src, uint16_t conv_control, uint16_t n_burst,
64+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap)
65+{
66+ if ASC_IS_AIC {
67+ copy_cbuf_to_bt(dst, src, conv_control, n_burst, len_burst, source_gap, dst_gap);
68+ }
69+}
70+ 
71+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ half* src, uint32_t size)
72+{
73+ asc_copy_l12bt_impl(dst, src, 0, 1, size / ASC_C_API_ONE_DATABLOCK_SIZE, 0, 0);
74+}
75+ 
76+__aicore__ inline void asc_copy_l12bt_sync_impl(uint64_t dst, __cbuf__ half* src, uint32_t size)
77+{
78+ asc_copy_l12bt_impl(dst, src, size);
79+ asc_sync_post_process();
80+}
81+ 
82+// ========== float -> uint64_t ==========
83+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ float* src, uint16_t conv_control, uint16_t n_burst,
84+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap)
85+{
86+ if ASC_IS_AIC {
87+ copy_cbuf_to_bt(dst, src, conv_control, n_burst, len_burst, source_gap, dst_gap);
88+ }
89+}
90+ 
91+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ float* src, uint32_t size)
92+{
93+ asc_copy_l12bt_impl(dst, src, 0, 1, size / ASC_C_API_ONE_DATABLOCK_SIZE, 0, 0);
94+}
95+ 
96+__aicore__ inline void asc_copy_l12bt_sync_impl(uint64_t dst, __cbuf__ float* src, uint32_t size)
97+{
98+ asc_copy_l12bt_impl(dst, src, size);
99+ asc_sync_post_process();
100+}
101+ 
102+// ========== int32_t -> uint64_t ==========
103+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ int32_t* src, uint16_t conv_control, uint16_t n_burst,
104+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap)
105+{
106+ if ASC_IS_AIC {
107+ copy_cbuf_to_bt(dst, src, conv_control, n_burst, len_burst, source_gap, dst_gap);
108+ }
109+}
110+ 
111+__aicore__ inline void asc_copy_l12bt_impl(uint64_t dst, __cbuf__ int32_t* src, uint32_t size)
112+{
113+ asc_copy_l12bt_impl(dst, src, 0, 1, size / ASC_C_API_ONE_DATABLOCK_SIZE, 0, 0);
114+}
115+ 
116+__aicore__ inline void asc_copy_l12bt_sync_impl(uint64_t dst, __cbuf__ int32_t* src, uint32_t size)
117+{
118+ asc_copy_l12bt_impl(dst, src, size);
119+ asc_sync_post_process();
120+}
121+ 
122+#endif
123+ 
124+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
125+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
126+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
127+#endif
Aimpl/c_api/instr_impl/npu_arch_3510/cube_datamove_impl/asc_copy_l12fb_impl.h+46-0文件内容审核中,请稍后刷新重试
@@ -0,0 +1,46 @@
1+/**
2+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
12+#warning "impl/c_api/instr_impl/npu_arch_3510/cube_datamove_impl/asc_copy_l12fb_v2_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
13+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
14+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
15+#endif
16+ 
17+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L12FB_V2_IMPL_H
18+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L12FB_V2_IMPL_H
19+ 
20+#include "instr_impl/npu_arch_3510/utils_impl.h"
21+ 
22+__aicore__ inline void asc_copy_l12fb_v2_impl(__fbuf__ void * dst, __cbuf__ void * src, uint16_t burst_num,
23+ uint16_t burst_len, uint16_t src_stride, uint16_t dst_stride)
24+{
25+ if ASC_IS_AIC {
26+ copy_cbuf_to_fbuf_v2(dst, src, burst_num, burst_len, src_stride, dst_stride);
27+ }
28+}
29+ 
30+__aicore__ inline void asc_copy_l12fb_v2_impl(__fbuf__ void* dst, __cbuf__ void* src, uint32_t size)
31+{
32+ asc_copy_l12fb_v2_impl(dst, src, 1, size / ASC_C_API_ONE_DATABLOCK_SIZE, 0, 0);
33+}
34+ 
35+__aicore__ inline void asc_copy_l12fb_v2_sync_impl(__fbuf__ void* dst, __cbuf__ void* src, uint32_t size)
36+{
37+ asc_copy_l12fb_v2_impl(dst, src, size);
38+ asc_sync_post_process();
39+}
40+ 
41+#endif
42+ 
43+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
44+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
45+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
46+#endif
@@ -0,0 +1,42 @@
1+/**
2+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
12+#warning "impl/c_api/instr_impl/npu_arch_3510/cube_datamove_impl/asc_copy_l12ub_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
13+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
14+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
15+#endif
16+ 
17+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L12UB_IMPL_H
18+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_COPY_L12UB_IMPL_H
19+ 
20+#include "instr_impl/npu_arch_3510/utils_impl.h"
21+ 
22+__aicore__ inline void asc_copy_l12ub_impl(__ubuf__ void *dst_addr, __cbuf__ void *src_addr, bool sub_blockid,
23+ uint16_t burst_num, uint16_t burst_len, uint16_t src_gap, uint16_t dst_gap)
24+{
25+ if ASC_IS_AIC {
26+ copy_cbuf_to_ubuf(dst_addr, src_addr, sub_blockid, burst_num, burst_len, src_gap, dst_gap);
27+ }
28+}
29+ 
30+__aicore__ inline void asc_copy_l12ub_sync_impl(__ubuf__ void *dst_addr, __cbuf__ void *src_addr, bool sub_blockid,
31+ uint16_t burst_num, uint16_t burst_len, uint16_t src_gap, uint16_t dst_gap)
32+{
33+ asc_copy_l12ub_impl(dst_addr, src_addr, sub_blockid, burst_num, burst_len, src_gap, dst_gap);
34+ asc_sync_post_process();
35+}
36+ 
37+#endif
38+ 
39+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
40+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
41+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
42+#endif
@@ -0,0 +1,256 @@
1+/**
2+ * Copyright (c) 2025 Huawei Technologies Co., Ltd.
3+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+ * CANN Open Software License Agreement Version 2.0 (the "License").
5+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+/* !
12+ * \file asc_fill_l1_impl.h
13+ * \brief
14+ */
15+ 
16+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
17+#warning "impl/c_api/instr_impl/npu_arch_3510/npu_arch_3510/cube_datamove_impl/asc_fill_l1_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
18+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
19+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
20+#endif
21+ 
22+#ifndef IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_FILL_L1_IMPL_H
23+#define IMPL_C_API_INSTR_IMPL_NPU_ARCH_3510_CUBE_DATAMOVE_IMPL_ASC_FILL_L1_IMPL_H
24+ 
25+#include "instr_impl/npu_arch_3510/utils_impl.h"
26+ 
27+// asc_fill_l1_value half
28+__aicore__ inline void asc_fill_l1_impl(__cbuf__ half* dst, half value, const asc_fill_value_config& config)
29+{
30+ if ASC_IS_AIC {
31+ create_cbuf_matrix(dst, config.config, value);
32+ }
33+}
34+ 
35+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ half* dst, half value, const asc_fill_value_config& config)
36+{
37+ asc_fill_l1_impl(dst, value, config);
38+ asc_sync_post_process();
39+}
40+ 
41+__aicore__ inline void asc_fill_l1_impl(__cbuf__ half* dst, uint32_t value, const asc_fill_value_config& config)
42+{
43+ if ASC_IS_AIC {
44+ create_cbuf_matrix(dst, config.config, value);
45+ }
46+}
47+ 
48+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ half* dst, uint32_t value,
49+ const asc_fill_value_config& config)
50+{
51+ asc_fill_l1_impl(dst, value, config);
52+ asc_sync_post_process();
53+}
54+ 
55+// asc_fill_l1_value float
56+__aicore__ inline void asc_fill_l1_impl(__cbuf__ float* dst, half value, const asc_fill_value_config& config)
57+{
58+ if ASC_IS_AIC {
59+ create_cbuf_matrix(dst, config.config, value);
60+ }
61+}
62+ 
63+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ float* dst, half value, const asc_fill_value_config& config)
64+{
65+ asc_fill_l1_impl(dst, value, config);
66+ asc_sync_post_process();
67+}
68+ 
69+__aicore__ inline void asc_fill_l1_impl(__cbuf__ float* dst, uint32_t value, const asc_fill_value_config& config)
70+{
71+ if ASC_IS_AIC {
72+ create_cbuf_matrix(dst, config.config, value);
73+ }
74+}
75+ 
76+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ float* dst, uint32_t value,
77+ const asc_fill_value_config& config)
78+{
79+ asc_fill_l1_impl(dst, value, config);
80+ asc_sync_post_process();
81+}
82+ 
83+// asc_fill_l1_value int16_t
84+__aicore__ inline void asc_fill_l1_impl(__cbuf__ int16_t* dst, half value, const asc_fill_value_config& config)
85+{
86+ if ASC_IS_AIC {
87+ create_cbuf_matrix(dst, config.config, value);
88+ }
89+}
90+ 
91+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ int16_t* dst, half value,
92+ const asc_fill_value_config& config)
93+{
94+ asc_fill_l1_impl(dst, value, config);
95+ asc_sync_post_process();
96+}
97+ 
98+__aicore__ inline void asc_fill_l1_impl(__cbuf__ int16_t* dst, uint32_t value,
99+ const asc_fill_value_config& config)
100+{
101+ if ASC_IS_AIC {
102+ create_cbuf_matrix(dst, config.config, value);
103+ }
104+}
105+ 
106+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ int16_t* dst, uint32_t value,
107+ const asc_fill_value_config& config)
108+{
109+ asc_fill_l1_impl(dst, value, config);
110+ asc_sync_post_process();
111+}
112+ 
113+// asc_fill_l1_value int32_t
114+__aicore__ inline void asc_fill_l1_impl(__cbuf__ int32_t* dst, half value, const asc_fill_value_config& config)
115+{
116+ if ASC_IS_AIC {
117+ create_cbuf_matrix(dst, config.config, value);
118+ }
119+}
120+ 
121+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ int32_t* dst, half value,
122+ const asc_fill_value_config& config)
123+{
124+ asc_fill_l1_impl(dst, value, config);
125+ asc_sync_post_process();
126+}
127+ 
128+__aicore__ inline void asc_fill_l1_impl(__cbuf__ int32_t* dst, uint32_t value,
129+ const asc_fill_value_config& config)
130+{
131+ if ASC_IS_AIC {
132+ create_cbuf_matrix(dst, config.config, value);
133+ }
134+}
135+ 
136+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ int32_t* dst, uint32_t value,
137+ const asc_fill_value_config& config)
138+{
139+ asc_fill_l1_impl(dst, value, config);
140+ asc_sync_post_process();
141+}
142+ 
143+// asc_fill_l1_value uint16_t
144+__aicore__ inline void asc_fill_l1_impl(__cbuf__ uint16_t* dst, half value, const asc_fill_value_config& config)
145+{
146+ if ASC_IS_AIC {
147+ create_cbuf_matrix(dst, config.config, value);
148+ }
149+}
150+ 
151+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ uint16_t* dst, half value,
152+ const asc_fill_value_config& config)
153+{
154+ asc_fill_l1_impl(dst, value, config);
155+ asc_sync_post_process();
156+}
157+ 
158+__aicore__ inline void asc_fill_l1_impl(__cbuf__ uint16_t* dst, uint32_t value,
159+ const asc_fill_value_config& config)
160+{
161+ if ASC_IS_AIC {
162+ create_cbuf_matrix(dst, config.config, value);
163+ }
164+}
165+ 
166+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ uint16_t* dst, uint32_t value,
167+ const asc_fill_value_config& config)
168+{
169+ asc_fill_l1_impl(dst, value, config);
170+ asc_sync_post_process();
171+}
172+ 
173+// asc_fill_l1_value uint32_t
174+__aicore__ inline void asc_fill_l1_impl(__cbuf__ uint32_t* dst, half value, const asc_fill_value_config& config)
175+{
176+ if ASC_IS_AIC {
177+ create_cbuf_matrix(dst, config.config, value);
178+ }
179+}
180+ 
181+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ uint32_t* dst, half value,
182+ const asc_fill_value_config& config)
183+{
184+ asc_fill_l1_impl(dst, value, config);
185+ asc_sync_post_process();
186+}
187+ 
188+__aicore__ inline void asc_fill_l1_impl(__cbuf__ uint32_t* dst, uint32_t value,
189+ const asc_fill_value_config& config)
190+{
191+ if ASC_IS_AIC {
192+ create_cbuf_matrix(dst, config.config, value);
193+ }
194+}
195+ 
196+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ uint32_t* dst, uint32_t value,
197+ const asc_fill_value_config& config)
198+{
199+ asc_fill_l1_impl(dst, value, config);
200+ asc_sync_post_process();
201+}
202+ 
203+// asc_fill_l1_value bfloat16_t
204+__aicore__ inline void asc_fill_l1_impl(__cbuf__ bfloat16_t* dst, bfloat16_t value,
205+ const asc_fill_value_config& config)
206+{
207+ if ASC_IS_AIC {
208+ create_cbuf_matrix_bf16(dst, config.config, value);
209+ }
210+}
211+ 
212+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ bfloat16_t* dst, bfloat16_t value,
213+ const asc_fill_value_config& config)
214+{
215+ asc_fill_l1_impl(dst, value, config);
216+ asc_sync_post_process();
217+}
218+ 
219+// create_cbuf_matrix_h
220+__aicore__ inline void asc_fill_l1_impl(__cbuf__ bfloat16_t* dst, half value,
221+ const asc_fill_value_config& config)
222+{
223+ if ASC_IS_AIC {
224+ create_cbuf_matrix_h(dst, config.config, value);
225+ }
226+}
227+ 
228+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ bfloat16_t* dst, half value,
229+ const asc_fill_value_config& config)
230+{
231+ asc_fill_l1_impl(dst, value, config);
232+ asc_sync_post_process();
233+}
234+ 
235+// create_cbuf_matrix_ui
236+__aicore__ inline void asc_fill_l1_impl(__cbuf__ bfloat16_t* dst, uint32_t value,
237+ const asc_fill_value_config& config)
238+{
239+ if ASC_IS_AIC {
240+ create_cbuf_matrix_ui(dst, config.config, value);
241+ }
242+}
243+ 
244+__aicore__ inline void asc_fill_l1_sync_impl(__cbuf__ bfloat16_t* dst, uint32_t value,
245+ const asc_fill_value_config& config)
246+{
247+ asc_fill_l1_impl(dst, value, config);
248+ asc_sync_post_process();
249+}
250+ 
251+#endif
252+ 
253+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
254+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
255+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
256+#endif
@@ -22,6 +22,8 @@
22#include "instr_impl/npu_arch_3510/sys_var_impl/asc_get_vf_len_impl.h"22#include "instr_impl/npu_arch_3510/sys_var_impl/asc_get_vf_len_impl.h"
23#include "instr_impl/npu_arch_3510/sys_var_impl/asc_get_arch_ver_impl.h"23#include "instr_impl/npu_arch_3510/sys_var_impl/asc_get_arch_ver_impl.h"
24#include "instr_impl/npu_arch_3510/sys_var_impl/asc_get_core_id_impl.h"24#include "instr_impl/npu_arch_3510/sys_var_impl/asc_get_core_id_impl.h"
25+#include "instr_impl/npu_arch_3510/sys_var_impl/asc_set_l0c2gm_channel_para_impl.h"
26+#include "instr_impl/npu_arch_3510/sys_var_impl/asc_set_l3d_rpt_b_impl.h"
25 27 
26__aicore__ inline int64_t asc_get_ar_spr()28__aicore__ inline int64_t asc_get_ar_spr()
27{29{
@@ -78,4 +80,15 @@ __aicore__ inline int64_t asc_get_core_id()
78{80{
79 return asc_get_core_id_impl();81 return asc_get_core_id_impl();
80}82}
81-#endif83+ 
84+__aicore__ inline void asc_set_l0c2gm_channel_para(uint64_t config)
85+{
86+ asc_set_l0c2gm_channel_para_impl(config);
87+}
88+ 
89+__aicore__ inline void asc_set_l3d_rpt_b(uint64_t config)
90+{
91+ asc_set_l3d_rpt_b_impl(config);
92+}
93+ 
94+#endif
@@ -0,0 +1,32 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
12+#warning \
13+ "impl/c_api/instr_impl/npu_arch_3510/sys_var_impl/asc_set_l0c2gm_channel_para_impl.h is an internal header file and must not be used directly. Functions or variables defined in this file maybe removed in the future. Please use "#include "c_api/asc_simd.h"" and use public functions or variables defined in interface headers files."
14+#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
15+#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
16+#endif
17+ 
18+#ifndef IMPL_CAPI_INSTR_IMPL_NPU_ARCH_3510_SYS_VAR_IMPL_ASC_L0C2GM_CHANNEL_PARA_IMPL_H
19+#define IMPL_CAPI_INSTR_IMPL_NPU_ARCH_3510_SYS_VAR_IMPL_ASC_L0C2GM_CHANNEL_PARA_IMPL_H
20+ 
21+#include "instr_impl/npu_arch_3510/utils_impl.h"
22+ 
23+__aicore__ inline void asc_set_l0c2gm_channel_para_impl(uint64_t config)
24+{
25+ set_channel_para(config);
26+}
27+#endif
28+ 
29+#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
30+#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
31+#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
32+#endif
Aimpl/c_api/instr_impl/npu_arch_3510/sys_var_impl/asc_set_l3d_rpt_b_impl.h+32-0文件内容审核中,请稍后刷新重试
@@ -30,6 +30,12 @@ __aicore__ inline void asc_set_atomic_add_float();
30 30 
31__aicore__ inline void asc_set_atomic_max_float16();31__aicore__ inline void asc_set_atomic_max_float16();
32 32 
33+__aicore__ inline void asc_set_atomic_add_int();
34+ 
35+__aicore__ inline void asc_set_atomic_add_int8();
36+ 
37+__aicore__ inline void asc_set_atomic_add_int16();
38+ 
33#if defined(__NPU_ARCH__) && (__NPU_ARCH__ == 2201)39#if defined(__NPU_ARCH__) && (__NPU_ARCH__ == 2201)
34 40 
35__aicore__ inline void asc_set_atomic_none();41__aicore__ inline void asc_set_atomic_none();
@@ -42,12 +48,6 @@ __aicore__ inline void asc_set_atomic_add_bfloat();
42 48 
43__aicore__ inline void asc_set_atomic_add_float16();49__aicore__ inline void asc_set_atomic_add_float16();
44 50 
45-__aicore__ inline void asc_set_atomic_add_int();
46- 
47-__aicore__ inline void asc_set_atomic_add_int8();
48- 
49-__aicore__ inline void asc_set_atomic_add_int16();
50- 
51__aicore__ inline void asc_set_atomic_max_bfloat();51__aicore__ inline void asc_set_atomic_max_bfloat();
52 52 
53__aicore__ inline void asc_set_atomic_max_float();53__aicore__ inline void asc_set_atomic_max_float();
@@ -31,6 +31,190 @@ __aicore__ inline void asc_set_l13d_rpt(asc_load3d_v2_config& config);
31 31 
32__aicore__ inline void asc_set_l13d_fmatrix(asc_l13d_fmatrix_config& config);32__aicore__ inline void asc_set_l13d_fmatrix(asc_l13d_fmatrix_config& config);
33 33 
34+// ==========asc_copy_l12fb==========
35+__aicore__ inline void asc_copy_l12fb(__fbuf__ void* dst, __cbuf__ void* src, uint16_t burst_num, uint16_t burst_len,
36+ uint16_t src_gap_size, uint16_t dst_gap_size);
37+ 
38+__aicore__ inline void asc_copy_l12fb(__fbuf__ void* dst, __cbuf__ void* src, uint32_t size);
39+ 
40+__aicore__ inline void asc_copy_l12fb_sync(__fbuf__ void* dst, __cbuf__ void* src, uint32_t size);
41+ 
42+//=============asc_copy_l12bt===============
43+// void -> uint64_t
44+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ void* src, uint16_t conv_control, uint16_t n_burst,
45+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap);
46+ 
47+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ void* src, uint32_t size);
48+ 
49+__aicore__ inline void asc_copy_l12bt_sync(uint64_t dst, __cbuf__ void* src, uint32_t size);
50+ 
51+// ==========asc_fill_l0a(half/float/int16_t/int32_t/uint16_t/uint32_t/bfloat16_t)==========
52+__aicore__ inline void asc_fill_l0a(__ca__ half* dst, half value, const asc_fill_value_config& config);
53+ 
54+__aicore__ inline void asc_fill_l0a_sync(__ca__ half* dst, half value, const asc_fill_value_config& config);
55+ 
56+__aicore__ inline void asc_fill_l0a(__ca__ half* dst, uint32_t value, const asc_fill_value_config& config);
57+ 
58+__aicore__ inline void asc_fill_l0a_sync(__ca__ half* dst, uint32_t value, const asc_fill_value_config& config);
59+ 
60+__aicore__ inline void asc_fill_l0a(__ca__ float* dst, half value, const asc_fill_value_config& config);
61+ 
62+__aicore__ inline void asc_fill_l0a_sync(__ca__ float* dst, half value, const asc_fill_value_config& config);
63+ 
64+__aicore__ inline void asc_fill_l0a(__ca__ float* dst, uint32_t value, const asc_fill_value_config& config);
65+ 
66+__aicore__ inline void asc_fill_l0a_sync(__ca__ float* dst, uint32_t value, const asc_fill_value_config& config);
67+ 
68+__aicore__ inline void asc_fill_l0a(__ca__ int16_t* dst, half value, const asc_fill_value_config& config);
69+ 
70+__aicore__ inline void asc_fill_l0a_sync(__ca__ int16_t* dst, half value, const asc_fill_value_config& config);
71+ 
72+__aicore__ inline void asc_fill_l0a(__ca__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
73+ 
74+__aicore__ inline void asc_fill_l0a_sync(__ca__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
75+ 
76+__aicore__ inline void asc_fill_l0a(__ca__ int32_t* dst, half value, const asc_fill_value_config& config);
77+ 
78+__aicore__ inline void asc_fill_l0a_sync(__ca__ int32_t* dst, half value, const asc_fill_value_config& config);
79+ 
80+__aicore__ inline void asc_fill_l0a(__ca__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
81+ 
82+__aicore__ inline void asc_fill_l0a_sync(__ca__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
83+ 
84+__aicore__ inline void asc_fill_l0a(__ca__ uint16_t* dst, half value, const asc_fill_value_config& config);
85+ 
86+__aicore__ inline void asc_fill_l0a_sync(__ca__ uint16_t* dst, half value, const asc_fill_value_config& config);
87+ 
88+__aicore__ inline void asc_fill_l0a(__ca__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
89+ 
90+__aicore__ inline void asc_fill_l0a_sync(__ca__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
91+ 
92+__aicore__ inline void asc_fill_l0a(__ca__ uint32_t* dst, half value, const asc_fill_value_config& config);
93+ 
94+__aicore__ inline void asc_fill_l0a_sync(__ca__ uint32_t* dst, half value, const asc_fill_value_config& config);
95+ 
96+__aicore__ inline void asc_fill_l0a(__ca__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
97+ 
98+__aicore__ inline void asc_fill_l0a_sync(__ca__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
99+ 
100+__aicore__ inline void asc_fill_l0a(__ca__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
101+ 
102+__aicore__ inline void asc_fill_l0a_sync(__ca__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
103+ 
104+// ==========asc_fill_l0b(half/float/int16_t/int32_t/uint16_t/uint32_t/bfloat16_t)==========
105+__aicore__ inline void asc_fill_l0b(__cb__ half* dst, half value, const asc_fill_value_config& config);
106+ 
107+__aicore__ inline void asc_fill_l0b_sync(__cb__ half* dst, half value, const asc_fill_value_config& config);
108+ 
109+__aicore__ inline void asc_fill_l0b(__cb__ half* dst, uint32_t value, const asc_fill_value_config& config);
110+ 
111+__aicore__ inline void asc_fill_l0b_sync(__cb__ half* dst, uint32_t value, const asc_fill_value_config& config);
112+ 
113+__aicore__ inline void asc_fill_l0b(__cb__ float* dst, half value, const asc_fill_value_config& config);
114+ 
115+__aicore__ inline void asc_fill_l0b_sync(__cb__ float* dst, half value, const asc_fill_value_config& config);
116+ 
117+__aicore__ inline void asc_fill_l0b(__cb__ float* dst, uint32_t value, const asc_fill_value_config& config);
118+ 
119+__aicore__ inline void asc_fill_l0b_sync(__cb__ float* dst, uint32_t value, const asc_fill_value_config& config);
120+ 
121+__aicore__ inline void asc_fill_l0b(__cb__ int16_t* dst, half value, const asc_fill_value_config& config);
122+ 
123+__aicore__ inline void asc_fill_l0b_sync(__cb__ int16_t* dst, half value, const asc_fill_value_config& config);
124+ 
125+__aicore__ inline void asc_fill_l0b(__cb__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
126+ 
127+__aicore__ inline void asc_fill_l0b_sync(__cb__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
128+ 
129+__aicore__ inline void asc_fill_l0b(__cb__ int32_t* dst, half value, const asc_fill_value_config& config);
130+ 
131+__aicore__ inline void asc_fill_l0b_sync(__cb__ int32_t* dst, half value, const asc_fill_value_config& config);
132+ 
133+__aicore__ inline void asc_fill_l0b(__cb__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
134+ 
135+__aicore__ inline void asc_fill_l0b_sync(__cb__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
136+ 
137+__aicore__ inline void asc_fill_l0b(__cb__ uint16_t* dst, half value, const asc_fill_value_config& config);
138+ 
139+__aicore__ inline void asc_fill_l0b_sync(__cb__ uint16_t* dst, half value, const asc_fill_value_config& config);
140+ 
141+__aicore__ inline void asc_fill_l0b(__cb__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
142+ 
143+__aicore__ inline void asc_fill_l0b_sync(__cb__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
144+ 
145+__aicore__ inline void asc_fill_l0b(__cb__ uint32_t* dst, half value, const asc_fill_value_config& config);
146+ 
147+__aicore__ inline void asc_fill_l0b_sync(__cb__ uint32_t* dst, half value, const asc_fill_value_config& config);
148+ 
149+__aicore__ inline void asc_fill_l0b(__cb__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
150+ 
151+__aicore__ inline void asc_fill_l0b_sync(__cb__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
152+ 
153+__aicore__ inline void asc_fill_l0b(__cb__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
154+ 
155+__aicore__ inline void asc_fill_l0b_sync(__cb__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
156+ 
157+// ==========asc_fill_l1(half/float/int16_t/int32_t/uint16_t/uint32_t/bfloat16_t)==========
158+__aicore__ inline void asc_fill_l1(__cbuf__ half* dst, half value, const asc_fill_value_config& config);
159+ 
160+__aicore__ inline void asc_fill_l1_sync(__cbuf__ half* dst, half value, const asc_fill_value_config& config);
161+ 
162+__aicore__ inline void asc_fill_l1(__cbuf__ half* dst, uint32_t value, const asc_fill_value_config& config);
163+ 
164+__aicore__ inline void asc_fill_l1_sync(__cbuf__ half* dst, uint32_t value, const asc_fill_value_config& config);
165+ 
166+__aicore__ inline void asc_fill_l1(__cbuf__ float* dst, half value, const asc_fill_value_config& config);
167+ 
168+__aicore__ inline void asc_fill_l1_sync(__cbuf__ float* dst, half value, const asc_fill_value_config& config);
169+ 
170+__aicore__ inline void asc_fill_l1(__cbuf__ float* dst, uint32_t value, const asc_fill_value_config& config);
171+ 
172+__aicore__ inline void asc_fill_l1_sync(__cbuf__ float* dst, uint32_t value, const asc_fill_value_config& config);
173+ 
174+__aicore__ inline void asc_fill_l1(__cbuf__ int16_t* dst, half value, const asc_fill_value_config& config);
175+ 
176+__aicore__ inline void asc_fill_l1_sync(__cbuf__ int16_t* dst, half value, const asc_fill_value_config& config);
177+ 
178+__aicore__ inline void asc_fill_l1(__cbuf__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
179+ 
180+__aicore__ inline void asc_fill_l1_sync(__cbuf__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
181+ 
182+__aicore__ inline void asc_fill_l1(__cbuf__ int32_t* dst, half value, const asc_fill_value_config& config);
183+ 
184+__aicore__ inline void asc_fill_l1_sync(__cbuf__ int32_t* dst, half value, const asc_fill_value_config& config);
185+ 
186+__aicore__ inline void asc_fill_l1(__cbuf__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
187+ 
188+__aicore__ inline void asc_fill_l1_sync(__cbuf__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
189+ 
190+__aicore__ inline void asc_fill_l1(__cbuf__ uint16_t* dst, half value, const asc_fill_value_config& config);
191+ 
192+__aicore__ inline void asc_fill_l1_sync(__cbuf__ uint16_t* dst, half value, const asc_fill_value_config& config);
193+ 
194+__aicore__ inline void asc_fill_l1(__cbuf__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
195+ 
196+__aicore__ inline void asc_fill_l1_sync(__cbuf__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
197+ 
198+__aicore__ inline void asc_fill_l1(__cbuf__ uint32_t* dst, half value, const asc_fill_value_config& config);
199+ 
200+__aicore__ inline void asc_fill_l1_sync(__cbuf__ uint32_t* dst, half value, const asc_fill_value_config& config);
201+ 
202+__aicore__ inline void asc_fill_l1(__cbuf__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
203+ 
204+__aicore__ inline void asc_fill_l1_sync(__cbuf__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
205+ 
206+__aicore__ inline void asc_fill_l1(__cbuf__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
207+ 
208+__aicore__ inline void asc_fill_l1_sync(__cbuf__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
209+ 
210+__aicore__ inline void asc_fill_l1(__cbuf__ bfloat16_t* dst, half value, const asc_fill_value_config& config);
211+ 
212+__aicore__ inline void asc_fill_l1_sync(__cbuf__ bfloat16_t* dst, half value, const asc_fill_value_config& config);
213+ 
214+__aicore__ inline void asc_fill_l1(__cbuf__ bfloat16_t* dst, uint32_t value, const asc_fill_value_config& config);
215+ 
216+__aicore__ inline void asc_fill_l1_sync(__cbuf__ bfloat16_t* dst, uint32_t value, const asc_fill_value_config& config);
217+ 
34#if defined(__NPU_ARCH__) && (__NPU_ARCH__ == 2201)218#if defined(__NPU_ARCH__) && (__NPU_ARCH__ == 2201)
35 219 
36// ==========asc_copy_gm2l1==========220// ==========asc_copy_gm2l1==========
@@ -202,14 +386,6 @@ __aicore__ inline void asc_copy_gm2l1_nd2nz_sync(__cbuf__ uint32_t* dst, __gm__
202 uint16_t n_value, uint16_t d_value, uint16_t src_nd_matrix_stride, uint16_t src_d_value, uint16_t dst_nz_c0_stride,386 uint16_t n_value, uint16_t d_value, uint16_t src_nd_matrix_stride, uint16_t src_d_value, uint16_t dst_nz_c0_stride,
203 uint16_t dst_nz_n_stride, uint16_t dst_nz_matrix_stride);387 uint16_t dst_nz_n_stride, uint16_t dst_nz_matrix_stride);
204 388 
205-// ==========asc_copy_l12fb==========
206-__aicore__ inline void asc_copy_l12fb(__fbuf__ void* dst, __cbuf__ void* src, uint16_t burst_num, uint16_t burst_len,
207- uint16_t src_gap_size, uint16_t dst_gap_size);
208- 
209-__aicore__ inline void asc_copy_l12fb(__fbuf__ void* dst, __cbuf__ void* src, uint32_t size);
210- 
211-__aicore__ inline void asc_copy_l12fb_sync(__fbuf__ void* dst, __cbuf__ void* src, uint32_t size);
212- 
213// ==========asc_copy_l12l0b, 2D, int4b_t/uint8_t/int8_t/half/bfloat16_t/uint32_t/int32_t/float==========389// ==========asc_copy_l12l0b, 2D, int4b_t/uint8_t/int8_t/half/bfloat16_t/uint32_t/int32_t/float==========
214__aicore__ inline void asc_copy_l12l0b(__cb__ int4b_t* dst, __cbuf__ int4b_t* src,390__aicore__ inline void asc_copy_l12l0b(__cb__ int4b_t* dst, __cbuf__ int4b_t* src,
215 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap);391 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap);
@@ -528,188 +704,6 @@ __aicore__ inline void asc_load_image_to_cbuf_sync(__cbuf__ int8_t* dst, uint16_
528 uint16_t hor_start_pos, uint16_t ver_start_pos, uint16_t src_hor_size, uint8_t top_pad_size, uint8_t bot_pad_size,704 uint16_t hor_start_pos, uint16_t ver_start_pos, uint16_t src_hor_size, uint8_t top_pad_size, uint8_t bot_pad_size,
529 uint16_t left_pad_size, uint16_t right_pad_size);705 uint16_t left_pad_size, uint16_t right_pad_size);
530 706 
531-// ==========asc_fill_l0a(half/float/int16_t/int32_t/uint16_t/uint32_t/bfloat16_t)==========
532-__aicore__ inline void asc_fill_l0a(__ca__ half* dst, half value, const asc_fill_value_config& config);
533- 
534-__aicore__ inline void asc_fill_l0a_sync(__ca__ half* dst, half value, const asc_fill_value_config& config);
535- 
536-__aicore__ inline void asc_fill_l0a(__ca__ half* dst, uint32_t value, const asc_fill_value_config& config);
537- 
538-__aicore__ inline void asc_fill_l0a_sync(__ca__ half* dst, uint32_t value, const asc_fill_value_config& config);
539- 
540-__aicore__ inline void asc_fill_l0a(__ca__ float* dst, half value, const asc_fill_value_config& config);
541- 
542-__aicore__ inline void asc_fill_l0a_sync(__ca__ float* dst, half value, const asc_fill_value_config& config);
543- 
544-__aicore__ inline void asc_fill_l0a(__ca__ float* dst, uint32_t value, const asc_fill_value_config& config);
545- 
546-__aicore__ inline void asc_fill_l0a_sync(__ca__ float* dst, uint32_t value, const asc_fill_value_config& config);
547- 
548-__aicore__ inline void asc_fill_l0a(__ca__ int16_t* dst, half value, const asc_fill_value_config& config);
549- 
550-__aicore__ inline void asc_fill_l0a_sync(__ca__ int16_t* dst, half value, const asc_fill_value_config& config);
551- 
552-__aicore__ inline void asc_fill_l0a(__ca__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
553- 
554-__aicore__ inline void asc_fill_l0a_sync(__ca__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
555- 
556-__aicore__ inline void asc_fill_l0a(__ca__ int32_t* dst, half value, const asc_fill_value_config& config);
557- 
558-__aicore__ inline void asc_fill_l0a_sync(__ca__ int32_t* dst, half value, const asc_fill_value_config& config);
559- 
560-__aicore__ inline void asc_fill_l0a(__ca__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
561- 
562-__aicore__ inline void asc_fill_l0a_sync(__ca__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
563- 
564-__aicore__ inline void asc_fill_l0a(__ca__ uint16_t* dst, half value, const asc_fill_value_config& config);
565- 
566-__aicore__ inline void asc_fill_l0a_sync(__ca__ uint16_t* dst, half value, const asc_fill_value_config& config);
567- 
568-__aicore__ inline void asc_fill_l0a(__ca__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
569- 
570-__aicore__ inline void asc_fill_l0a_sync(__ca__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
571- 
572-__aicore__ inline void asc_fill_l0a(__ca__ uint32_t* dst, half value, const asc_fill_value_config& config);
573- 
574-__aicore__ inline void asc_fill_l0a_sync(__ca__ uint32_t* dst, half value, const asc_fill_value_config& config);
575- 
576-__aicore__ inline void asc_fill_l0a(__ca__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
577- 
578-__aicore__ inline void asc_fill_l0a_sync(__ca__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
579- 
580-__aicore__ inline void asc_fill_l0a(__ca__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
581- 
582-__aicore__ inline void asc_fill_l0a_sync(__ca__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
583- 
584-__aicore__ inline void asc_fill_l0a(__ca__ bfloat16_t* dst, half value, const asc_fill_value_config& config);
585- 
586-__aicore__ inline void asc_fill_l0a_sync(__ca__ bfloat16_t* dst, half value, const asc_fill_value_config& config);
587- 
588-__aicore__ inline void asc_fill_l0a(__ca__ bfloat16_t* dst, uint32_t value, const asc_fill_value_config& config);
589- 
590-__aicore__ inline void asc_fill_l0a_sync(__ca__ bfloat16_t* dst, uint32_t value, const asc_fill_value_config& config);
591- 
592-// ==========asc_fill_l0b(half/float/int16_t/int32_t/uint16_t/uint32_t/bfloat16_t)==========
593-__aicore__ inline void asc_fill_l0b(__cb__ half* dst, half value, const asc_fill_value_config& config);
594- 
595-__aicore__ inline void asc_fill_l0b_sync(__cb__ half* dst, half value, const asc_fill_value_config& config);
596- 
597-__aicore__ inline void asc_fill_l0b(__cb__ half* dst, uint32_t value, const asc_fill_value_config& config);
598- 
599-__aicore__ inline void asc_fill_l0b_sync(__cb__ half* dst, uint32_t value, const asc_fill_value_config& config);
600- 
601-__aicore__ inline void asc_fill_l0b(__cb__ float* dst, half value, const asc_fill_value_config& config);
602- 
603-__aicore__ inline void asc_fill_l0b_sync(__cb__ float* dst, half value, const asc_fill_value_config& config);
604- 
605-__aicore__ inline void asc_fill_l0b(__cb__ float* dst, uint32_t value, const asc_fill_value_config& config);
606- 
607-__aicore__ inline void asc_fill_l0b_sync(__cb__ float* dst, uint32_t value, const asc_fill_value_config& config);
608- 
609-__aicore__ inline void asc_fill_l0b(__cb__ int16_t* dst, half value, const asc_fill_value_config& config);
610- 
611-__aicore__ inline void asc_fill_l0b_sync(__cb__ int16_t* dst, half value, const asc_fill_value_config& config);
612- 
613-__aicore__ inline void asc_fill_l0b(__cb__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
614- 
615-__aicore__ inline void asc_fill_l0b_sync(__cb__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
616- 
617-__aicore__ inline void asc_fill_l0b(__cb__ int32_t* dst, half value, const asc_fill_value_config& config);
618- 
619-__aicore__ inline void asc_fill_l0b_sync(__cb__ int32_t* dst, half value, const asc_fill_value_config& config);
620- 
621-__aicore__ inline void asc_fill_l0b(__cb__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
622- 
623-__aicore__ inline void asc_fill_l0b_sync(__cb__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
624- 
625-__aicore__ inline void asc_fill_l0b(__cb__ uint16_t* dst, half value, const asc_fill_value_config& config);
626- 
627-__aicore__ inline void asc_fill_l0b_sync(__cb__ uint16_t* dst, half value, const asc_fill_value_config& config);
628- 
629-__aicore__ inline void asc_fill_l0b(__cb__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
630- 
631-__aicore__ inline void asc_fill_l0b_sync(__cb__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
632- 
633-__aicore__ inline void asc_fill_l0b(__cb__ uint32_t* dst, half value, const asc_fill_value_config& config);
634- 
635-__aicore__ inline void asc_fill_l0b_sync(__cb__ uint32_t* dst, half value, const asc_fill_value_config& config);
636- 
637-__aicore__ inline void asc_fill_l0b(__cb__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
638- 
639-__aicore__ inline void asc_fill_l0b_sync(__cb__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
640- 
641-__aicore__ inline void asc_fill_l0b(__cb__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
642- 
643-__aicore__ inline void asc_fill_l0b_sync(__cb__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
644- 
645-__aicore__ inline void asc_fill_l0b(__cb__ bfloat16_t* dst, half value, const asc_fill_value_config& config);
646- 
647-__aicore__ inline void asc_fill_l0b_sync(__cb__ bfloat16_t* dst, half value, const asc_fill_value_config& config);
648- 
649-__aicore__ inline void asc_fill_l0b(__cb__ bfloat16_t* dst, uint32_t value, const asc_fill_value_config& config);
650- 
651-__aicore__ inline void asc_fill_l0b_sync(__cb__ bfloat16_t* dst, uint32_t value, const asc_fill_value_config& config);
652- 
653-// ==========asc_fill_l1(half/float/int16_t/int32_t/uint16_t/uint32_t/bfloat16_t)==========
654-__aicore__ inline void asc_fill_l1(__cbuf__ half* dst, half value, const asc_fill_value_config& config);
655- 
656-__aicore__ inline void asc_fill_l1_sync(__cbuf__ half* dst, half value, const asc_fill_value_config& config);
657- 
658-__aicore__ inline void asc_fill_l1(__cbuf__ half* dst, uint32_t value, const asc_fill_value_config& config);
659- 
660-__aicore__ inline void asc_fill_l1_sync(__cbuf__ half* dst, uint32_t value, const asc_fill_value_config& config);
661- 
662-__aicore__ inline void asc_fill_l1(__cbuf__ float* dst, half value, const asc_fill_value_config& config);
663- 
664-__aicore__ inline void asc_fill_l1_sync(__cbuf__ float* dst, half value, const asc_fill_value_config& config);
665- 
666-__aicore__ inline void asc_fill_l1(__cbuf__ float* dst, uint32_t value, const asc_fill_value_config& config);
667- 
668-__aicore__ inline void asc_fill_l1_sync(__cbuf__ float* dst, uint32_t value, const asc_fill_value_config& config);
669- 
670-__aicore__ inline void asc_fill_l1(__cbuf__ int16_t* dst, half value, const asc_fill_value_config& config);
671- 
672-__aicore__ inline void asc_fill_l1_sync(__cbuf__ int16_t* dst, half value, const asc_fill_value_config& config);
673- 
674-__aicore__ inline void asc_fill_l1(__cbuf__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
675- 
676-__aicore__ inline void asc_fill_l1_sync(__cbuf__ int16_t* dst, uint32_t value, const asc_fill_value_config& config);
677- 
678-__aicore__ inline void asc_fill_l1(__cbuf__ int32_t* dst, half value, const asc_fill_value_config& config);
679- 
680-__aicore__ inline void asc_fill_l1_sync(__cbuf__ int32_t* dst, half value, const asc_fill_value_config& config);
681- 
682-__aicore__ inline void asc_fill_l1(__cbuf__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
683- 
684-__aicore__ inline void asc_fill_l1_sync(__cbuf__ int32_t* dst, uint32_t value, const asc_fill_value_config& config);
685- 
686-__aicore__ inline void asc_fill_l1(__cbuf__ uint16_t* dst, half value, const asc_fill_value_config& config);
687- 
688-__aicore__ inline void asc_fill_l1_sync(__cbuf__ uint16_t* dst, half value, const asc_fill_value_config& config);
689- 
690-__aicore__ inline void asc_fill_l1(__cbuf__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
691- 
692-__aicore__ inline void asc_fill_l1_sync(__cbuf__ uint16_t* dst, uint32_t value, const asc_fill_value_config& config);
693- 
694-__aicore__ inline void asc_fill_l1(__cbuf__ uint32_t* dst, half value, const asc_fill_value_config& config);
695- 
696-__aicore__ inline void asc_fill_l1_sync(__cbuf__ uint32_t* dst, half value, const asc_fill_value_config& config);
697- 
698-__aicore__ inline void asc_fill_l1(__cbuf__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
699- 
700-__aicore__ inline void asc_fill_l1_sync(__cbuf__ uint32_t* dst, uint32_t value, const asc_fill_value_config& config);
701- 
702-__aicore__ inline void asc_fill_l1(__cbuf__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
703- 
704-__aicore__ inline void asc_fill_l1_sync(__cbuf__ bfloat16_t* dst, bfloat16_t value, const asc_fill_value_config& config);
705- 
706-__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ void* src, uint16_t conv_control, uint16_t n_burst,
707- uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap);
708- 
709-__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ void* src, uint32_t size);
710- 
711-__aicore__ inline void asc_copy_l12bt_sync(uint64_t dst, __cbuf__ void* src, uint32_t size);
712- 
713__aicore__ inline void asc_set_l0c_copy_prequant(uint64_t config);707__aicore__ inline void asc_set_l0c_copy_prequant(uint64_t config);
714 708 
715__aicore__ inline void asc_set_l0c_copy_params(uint16_t nd_num, uint16_t src_nd_stride, uint16_t dst_nd_stride);709__aicore__ inline void asc_set_l0c_copy_params(uint16_t nd_num, uint16_t src_nd_stride, uint16_t dst_nd_stride);
@@ -1283,6 +1277,7 @@ __aicore__ inline void asc_copy_gm2l1_nd2nz_sync(__cbuf__ uint16_t* dst, __gm__
1283 uint32_t d_value, uint64_t loop4_src_stride, bool smallc0_en);1277 uint32_t d_value, uint64_t loop4_src_stride, bool smallc0_en);
1284 1278 
1285__aicore__ inline void asc_copy_gm2l1_nd2nz(__cbuf__ uint32_t* dst, __gm__ uint32_t* src, uint64_t loop1_src_stride, uint8_t l2_cache_ctl, uint16_t n_value,1279__aicore__ inline void asc_copy_gm2l1_nd2nz(__cbuf__ uint32_t* dst, __gm__ uint32_t* src, uint64_t loop1_src_stride, uint8_t l2_cache_ctl, uint16_t n_value,
1280+ 
1286 uint32_t d_value, uint64_t loop4_src_stride, bool smallc0_en);1281 uint32_t d_value, uint64_t loop4_src_stride, bool smallc0_en);
1287 1282 
1288__aicore__ inline void asc_copy_gm2l1_nd2nz_sync(__cbuf__ uint32_t* dst, __gm__ uint32_t* src, uint64_t loop1_src_stride, uint8_t l2_cache_ctl, uint16_t n_value,1283__aicore__ inline void asc_copy_gm2l1_nd2nz_sync(__cbuf__ uint32_t* dst, __gm__ uint32_t* src, uint64_t loop1_src_stride, uint8_t l2_cache_ctl, uint16_t n_value,
@@ -1300,6 +1295,675 @@ __aicore__ inline void asc_copy_gm2l1(__cbuf__ void* dst, __gm__ void* src, uint
1300 1295 
1301__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ void* dst, __gm__ void* src, uint32_t n_burst, uint32_t len_burst, uint8_t pad_func_mode,1296__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ void* dst, __gm__ void* src, uint32_t n_burst, uint32_t len_burst, uint8_t pad_func_mode,
1302 uint64_t src_stride, uint32_t dst_stride);1297 uint64_t src_stride, uint32_t dst_stride);
1298+ 
1299+//=============asc_copy_l12bt===============
1300+// bfloat16_t -> uint64_t
1301+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ bfloat16_t* src, uint16_t conv_control, uint16_t n_burst,
1302+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap);
1303+ 
1304+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ bfloat16_t* src, uint32_t size);
1305+ 
1306+__aicore__ inline void asc_copy_l12bt_sync(uint64_t dst, __cbuf__ bfloat16_t* src, uint32_t size);
1307+ 
1308+// half -> uint64_t
1309+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ half* src, uint16_t conv_control, uint16_t n_burst,
1310+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap);
1311+ 
1312+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ half* src, uint32_t size);
1313+ 
1314+__aicore__ inline void asc_copy_l12bt_sync(uint64_t dst, __cbuf__ half* src, uint32_t size);
1315+ 
1316+// float -> uint64_t
1317+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ float* src, uint16_t conv_control, uint16_t n_burst,
1318+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap);
1319+ 
1320+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ float* src, uint32_t size);
1321+ 
1322+__aicore__ inline void asc_copy_l12bt_sync(uint64_t dst, __cbuf__ float* src, uint32_t size);
1323+ 
1324+// int32_t -> uint64_t
1325+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ int32_t* src, uint16_t conv_control, uint16_t n_burst,
1326+ uint16_t len_burst, uint16_t source_gap, uint16_t dst_gap);
1327+ 
1328+__aicore__ inline void asc_copy_l12bt(uint64_t dst, __cbuf__ int32_t* src, uint32_t size);
1329+ 
1330+__aicore__ inline void asc_copy_l12bt_sync(uint64_t dst, __cbuf__ int32_t* src, uint32_t size);
1331+ 
1332+// =============asc_copy_l12fb_v2===============
1333+__aicore__ inline void asc_copy_l12fb_v2(__fbuf__ void * dst, __cbuf__ void * src, uint16_t burst_num,
1334+ uint16_t burst_len, uint16_t src_stride, uint16_t dst_stride);
1335+ 
1336+__aicore__ inline void asc_copy_l12fb_v2(__fbuf__ void* dst, __cbuf__ void* src, uint32_t size);
1337+ 
1338+__aicore__ inline void asc_copy_l12fb_v2_sync(__fbuf__ void* dst, __cbuf__ void* src, uint32_t size);
1339+ 
1340+// =============asc_copy_l12ub===============
1341+__aicore__ inline void asc_copy_l12ub(__ubuf__ void * dst_addr, __cbuf__ void * src_addr, bool sub_blockid,
1342+ uint16_t burst_num, uint16_t burst_len, uint16_t src_gap, uint16_t dst_gap);
1343+ 
1344+__aicore__ inline void asc_copy_l12ub_sync(__ubuf__ void * dst_addr, __cbuf__ void * src_addr, bool sub_blockid,
1345+ uint16_t burst_num, uint16_t burst_len, uint16_t src_gap, uint16_t dst_gap);
1346+ 
1347+//=============asc_copy_l0c2l1===============
1348+__aicore__ inline void asc_copy_l0c2l1(__cbuf__ void *dst_addr, __cc__ float *src_addr, uint16_t n_size,
1349+ uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre,
1350+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1351+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1352+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1353+ 
1354+__aicore__ inline void asc_copy_l0c2l1_sync(__cbuf__ void *dst_addr, __cc__ float *src_addr, uint16_t n_size,
1355+ uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre,
1356+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1357+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1358+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1359+ 
1360+__aicore__ inline void asc_copy_l0c2l1(__cbuf__ void *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size,
1361+ uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre,
1362+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1363+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1364+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1365+ 
1366+__aicore__ inline void asc_copy_l0c2l1_sync(__cbuf__ void *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size,
1367+ uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre,
1368+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1369+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1370+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1371+ 
1372+// ==========asc_copy_l0c2gm===========
1373+// bfloat16_t float
1374+__aicore__ inline void asc_copy_l0c2gm(__gm__ bfloat16_t *dst_addr, __cc__ float *src_addr,
1375+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1376+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1377+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1378+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1379+ bool broadcast_en, bool NZ2DN_en);
1380+ 
1381+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ bfloat16_t* dst_addr, __cc__ float* src_addr,
1382+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1383+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1384+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1385+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1386+ bool broadcast_en, bool NZ2DN_en);
1387+ 
1388+// half float
1389+__aicore__ inline void asc_copy_l0c2gm(__gm__ half *dst_addr, __cc__ float *src_addr,
1390+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1391+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1392+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1393+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1394+ bool broadcast_en, bool NZ2DN_en);
1395+ 
1396+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ half* dst_addr, __cc__ float* src_addr,
1397+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1398+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1399+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1400+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1401+ bool broadcast_en, bool NZ2DN_en);
1402+ 
1403+// float8_e4m3_t float
1404+__aicore__ inline void asc_copy_l0c2gm(__gm__ float8_e4m3_t *dst_addr, __cc__ float *src_addr,
1405+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1406+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1407+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1408+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1409+ bool broadcast_en, bool NZ2DN_en);
1410+ 
1411+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ float8_e4m3_t* dst_addr, __cc__ float* src_addr,
1412+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1413+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1414+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1415+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1416+ bool broadcast_en, bool NZ2DN_en);
1417+ 
1418+// float8_e5m2_t float
1419+__aicore__ inline void asc_copy_l0c2gm(__gm__ float8_e5m2_t *dst_addr, __cc__ float *src_addr,
1420+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1421+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1422+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1423+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1424+ bool broadcast_en, bool NZ2DN_en);
1425+ 
1426+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ float8_e5m2_t* dst_addr, __cc__ float* src_addr,
1427+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1428+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1429+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1430+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1431+ bool broadcast_en, bool NZ2DN_en);
1432+ 
1433+// hifloat8_t float
1434+__aicore__ inline void asc_copy_l0c2gm(__gm__ hifloat8_t *dst_addr, __cc__ float *src_addr,
1435+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1436+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1437+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1438+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1439+ bool broadcast_en, bool NZ2DN_en);
1440+ 
1441+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ hifloat8_t* dst_addr, __cc__ float* src_addr,
1442+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1443+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1444+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1445+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1446+ bool broadcast_en, bool NZ2DN_en);
1447+ 
1448+// int8_t float
1449+__aicore__ inline void asc_copy_l0c2gm(__gm__ int8_t *dst_addr, __cc__ float *src_addr,
1450+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1451+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1452+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1453+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1454+ bool broadcast_en, bool NZ2DN_en);
1455+ 
1456+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ int8_t* dst_addr, __cc__ float* src_addr,
1457+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1458+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1459+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1460+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1461+ bool broadcast_en, bool NZ2DN_en);
1462+ 
1463+// uint8_t float
1464+__aicore__ inline void asc_copy_l0c2gm(__gm__ uint8_t *dst_addr, __cc__ float *src_addr,
1465+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1466+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1467+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1468+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1469+ bool broadcast_en, bool NZ2DN_en);
1470+ 
1471+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ uint8_t* dst_addr, __cc__ float* src_addr,
1472+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1473+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1474+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1475+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1476+ bool broadcast_en, bool NZ2DN_en);
1477+ 
1478+// float float
1479+__aicore__ inline void asc_copy_l0c2gm(__gm__ float *dst_addr, __cc__ float *src_addr,
1480+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1481+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1482+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1483+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1484+ bool broadcast_en, bool NZ2DN_en);
1485+ 
1486+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ float* dst_addr, __cc__ float* src_addr,
1487+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1488+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1489+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1490+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1491+ bool broadcast_en, bool NZ2DN_en);
1492+ 
1493+// bfloat16_t int32_t
1494+__aicore__ inline void asc_copy_l0c2gm(__gm__ bfloat16_t *dst_addr, __cc__ int32_t *src_addr,
1495+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1496+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1497+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1498+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1499+ bool broadcast_en, bool NZ2DN_en);
1500+ 
1501+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ bfloat16_t* dst_addr, __cc__ int32_t* src_addr,
1502+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1503+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1504+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1505+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1506+ bool broadcast_en, bool NZ2DN_en);
1507+// half int32_t
1508+__aicore__ inline void asc_copy_l0c2gm(__gm__ half *dst_addr, __cc__ int32_t *src_addr,
1509+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1510+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1511+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1512+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1513+ bool broadcast_en, bool NZ2DN_en);
1514+ 
1515+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ half* dst_addr, __cc__ int32_t* src_addr,
1516+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1517+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1518+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1519+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1520+ bool broadcast_en, bool NZ2DN_en);
1521+ 
1522+// float8_e4m3_t int32_t
1523+__aicore__ inline void asc_copy_l0c2gm(__gm__ float8_e4m3_t *dst_addr, __cc__ int32_t *src_addr,
1524+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1525+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1526+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1527+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1528+ bool broadcast_en, bool NZ2DN_en);
1529+ 
1530+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ float8_e4m3_t* dst_addr, __cc__ int32_t* src_addr,
1531+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1532+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1533+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1534+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1535+ bool broadcast_en, bool NZ2DN_en);
1536+ 
1537+// float8_e5m2_t int32_t
1538+__aicore__ inline void asc_copy_l0c2gm(__gm__ float8_e5m2_t *dst_addr, __cc__ int32_t *src_addr,
1539+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1540+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1541+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1542+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1543+ bool broadcast_en, bool NZ2DN_en);
1544+ 
1545+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ float8_e5m2_t* dst_addr, __cc__ int32_t* src_addr,
1546+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1547+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1548+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1549+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1550+ bool broadcast_en, bool NZ2DN_en);
1551+ 
1552+// hifloat8_t int32_t
1553+__aicore__ inline void asc_copy_l0c2gm(__gm__ hifloat8_t *dst_addr, __cc__ int32_t *src_addr,
1554+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1555+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1556+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1557+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1558+ bool broadcast_en, bool NZ2DN_en);
1559+ 
1560+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ hifloat8_t* dst_addr, __cc__ int32_t* src_addr,
1561+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1562+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1563+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1564+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1565+ bool broadcast_en, bool NZ2DN_en);
1566+ 
1567+// int8_t int32_t
1568+__aicore__ inline void asc_copy_l0c2gm(__gm__ int8_t *dst_addr, __cc__ int32_t *src_addr,
1569+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1570+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1571+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1572+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1573+ bool broadcast_en, bool NZ2DN_en);
1574+ 
1575+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ int8_t* dst_addr, __cc__ int32_t* src_addr,
1576+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1577+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1578+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1579+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1580+ bool broadcast_en, bool NZ2DN_en);
1581+ 
1582+// uint8_t int32_t
1583+__aicore__ inline void asc_copy_l0c2gm(__gm__ uint8_t *dst_addr, __cc__ int32_t *src_addr,
1584+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1585+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1586+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1587+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1588+ bool broadcast_en, bool NZ2DN_en);
1589+ 
1590+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ uint8_t* dst_addr, __cc__ int32_t* src_addr,
1591+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1592+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1593+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1594+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1595+ bool broadcast_en, bool NZ2DN_en);
1596+ 
1597+// int32_t int32_t
1598+__aicore__ inline void asc_copy_l0c2gm(__gm__ int32_t *dst_addr, __cc__ int32_t *src_addr,
1599+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1600+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1601+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1602+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1603+ bool broadcast_en, bool NZ2DN_en);
1604+ 
1605+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ int32_t* dst_addr, __cc__ int32_t* src_addr,
1606+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1607+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1608+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1609+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1610+ bool broadcast_en, bool NZ2DN_en);
1611+ 
1612+// void float
1613+__aicore__ inline void asc_copy_l0c2gm(__gm__ void *dst_addr, __cc__ float *src_addr,
1614+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1615+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1616+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1617+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1618+ bool broadcast_en, bool NZ2DN_en);
1619+ 
1620+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ void* dst_addr, __cc__ float* src_addr,
1621+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1622+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1623+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1624+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1625+ bool broadcast_en, bool NZ2DN_en);
1626+ 
1627+// void int32_t
1628+__aicore__ inline void asc_copy_l0c2gm(__gm__ void *dst_addr, __cc__ int32_t *src_addr,
1629+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1630+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1631+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1632+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1633+ bool broadcast_en, bool NZ2DN_en);
1634+ 
1635+__aicore__ inline void asc_copy_l0c2gm_sync(__gm__ void* dst_addr, __cc__ int32_t* src_addr,
1636+ uint16_t n_size, uint16_t m_size, uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl,
1637+ uint8_t clip_relu_pre, uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en,
1638+ bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en,
1639+ uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
1640+ bool broadcast_en, bool NZ2DN_en);
1641+ 
1642+// ==========asc_copy_l0c2ub===========
1643+// bfloat16_t float
1644+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ bfloat16_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1645+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1646+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1647+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1648+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1649+ 
1650+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ bfloat16_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1651+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1652+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1653+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1654+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1655+ 
1656+// half float
1657+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ half *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1658+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1659+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1660+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1661+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1662+ 
1663+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ half* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1664+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1665+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1666+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1667+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1668+ 
1669+// float8_e4m3_t float
1670+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ float8_e4m3_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1671+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1672+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1673+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1674+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1675+ 
1676+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ float8_e4m3_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1677+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1678+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1679+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1680+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1681+ 
1682+// float8_e5m2_t float
1683+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ float8_e5m2_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1684+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1685+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1686+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1687+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1688+ 
1689+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ float8_e5m2_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1690+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1691+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1692+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1693+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1694+ 
1695+// hifloat8_t float
1696+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ hifloat8_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1697+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1698+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1699+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1700+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1701+ 
1702+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ hifloat8_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1703+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1704+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1705+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1706+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1707+ 
1708+// int8 float
1709+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ int8_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1710+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1711+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1712+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1713+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1714+ 
1715+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ int8_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1716+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1717+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1718+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1719+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1720+ 
1721+// uint8 float
1722+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ uint8_t *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1723+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1724+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1725+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1726+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1727+ 
1728+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ uint8_t* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1729+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1730+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1731+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1732+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1733+ 
1734+// float float
1735+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ float *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1736+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1737+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1738+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1739+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1740+ 
1741+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ float* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1742+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1743+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1744+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1745+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1746+ 
1747+// bfloat16_t int32_t
1748+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ bfloat16_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1749+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1750+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1751+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1752+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1753+ 
1754+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ bfloat16_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1755+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1756+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1757+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1758+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1759+ 
1760+// half int32_t
1761+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ half *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1762+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1763+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1764+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1765+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1766+ 
1767+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ half* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1768+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1769+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1770+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1771+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1772+ 
1773+// float8_e4m3_t int32_t
1774+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ float8_e4m3_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1775+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1776+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1777+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1778+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1779+ 
1780+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ float8_e4m3_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1781+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1782+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1783+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1784+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1785+ 
1786+// float8_e5m2_t int32_t
1787+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ float8_e5m2_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1788+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1789+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1790+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1791+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1792+ 
1793+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ float8_e5m2_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1794+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1795+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1796+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1797+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1798+ 
1799+// hifloat8_t int32_t
1800+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ hifloat8_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1801+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1802+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1803+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1804+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1805+ 
1806+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ hifloat8_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1807+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1808+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1809+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1810+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1811+ 
1812+// int8 int32_t
1813+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ int8_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1814+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1815+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1816+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1817+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1818+ 
1819+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ int8_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1820+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1821+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1822+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1823+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1824+ 
1825+// uint8 int32_t
1826+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ uint8_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1827+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1828+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1829+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1830+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1831+ 
1832+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ uint8_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1833+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1834+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1835+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1836+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1837+ 
1838+// int32_t int32_t
1839+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ int32_t *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1840+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1841+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1842+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1843+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1844+ 
1845+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ int32_t* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1846+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1847+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1848+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1849+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1850+ 
1851+// void float
1852+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ void *dst_addr, __cc__ float *src_addr, uint16_t n_size, uint16_t m_size,
1853+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1854+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1855+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1856+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1857+ 
1858+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ void* dst_addr, __cc__ float* src_addr, uint16_t n_size, uint16_t m_size,
1859+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1860+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1861+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1862+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1863+ 
1864+// void int32_t
1865+__aicore__ inline void asc_copy_l0c2ub(__ubuf__ void *dst_addr, __cc__ int32_t *src_addr, uint16_t n_size, uint16_t m_size,
1866+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1867+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1868+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1869+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1870+ 
1871+__aicore__ inline void asc_copy_l0c2ub_sync(__ubuf__ void* dst_addr, __cc__ int32_t* src_addr, uint16_t n_size, uint16_t m_size,
1872+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre,
1873+ uint8_t unit_flag_ctl, uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post,
1874+ uint8_t relu_post, bool clip_relu_post, bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en,
1875+ bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en, bool broadcast_en, bool NZ2DN_en);
1876+ 
1877+// ==========asc_copy_gm2l1===========
1878+__aicore__ inline void asc_copy_gm2l1(__cbuf__ bfloat16_t* dst, __gm__ bfloat16_t* src, uint32_t m_start_position, uint32_t k_start_position,
1879+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1880+ 
1881+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ bfloat16_t* dst, __gm__ bfloat16_t* src, uint32_t m_start_position, uint32_t k_start_position,
1882+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1883+ 
1884+__aicore__ inline void asc_copy_gm2l1(__cbuf__ float* dst, __gm__ float* src, uint32_t m_start_position, uint32_t k_start_position,
1885+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1886+ 
1887+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ float* dst, __gm__ float* src, uint32_t m_start_position, uint32_t k_start_position,
1888+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1889+ 
1890+__aicore__ inline void asc_copy_gm2l1(__cbuf__ float8_e4m3_t* dst, __gm__ float8_e4m3_t* src, uint32_t m_start_position, uint32_t k_start_position,
1891+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1892+ 
1893+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ float8_e4m3_t* dst, __gm__ float8_e4m3_t* src, uint32_t m_start_position, uint32_t k_start_position,
1894+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1895+ 
1896+__aicore__ inline void asc_copy_gm2l1(__cbuf__ float8_e5m2_t* dst, __gm__ float8_e5m2_t* src, uint32_t m_start_position, uint32_t k_start_position,
1897+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1898+ 
1899+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ float8_e5m2_t* dst, __gm__ float8_e5m2_t* src, uint32_t m_start_position, uint32_t k_start_position,
1900+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1901+ 
1902+__aicore__ inline void asc_copy_gm2l1(__cbuf__ half* dst, __gm__ half* src, uint32_t m_start_position, uint32_t k_start_position,
1903+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1904+ 
1905+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ half* dst, __gm__ half* src, uint32_t m_start_position, uint32_t k_start_position,
1906+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1907+ 
1908+__aicore__ inline void asc_copy_gm2l1(__cbuf__ hifloat8_t* dst, __gm__ hifloat8_t* src, uint32_t m_start_position, uint32_t k_start_position,
1909+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1910+ 
1911+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ hifloat8_t* dst, __gm__ hifloat8_t* src, uint32_t m_start_position, uint32_t k_start_position,
1912+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1913+ 
1914+__aicore__ inline void asc_copy_gm2l1(__cbuf__ int16_t* dst, __gm__ int16_t* src, uint32_t m_start_position, uint32_t k_start_position,
1915+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1916+ 
1917+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ int16_t* dst, __gm__ int16_t* src, uint32_t m_start_position, uint32_t k_start_position,
1918+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1919+ 
1920+__aicore__ inline void asc_copy_gm2l1(__cbuf__ int32_t* dst, __gm__ int32_t* src, uint32_t m_start_position, uint32_t k_start_position,
1921+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1922+ 
1923+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ int32_t* dst, __gm__ int32_t* src, uint32_t m_start_position, uint32_t k_start_position,
1924+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1925+ 
1926+__aicore__ inline void asc_copy_gm2l1(__cbuf__ int8_t* dst, __gm__ int8_t* src, uint32_t m_start_position, uint32_t k_start_position,
1927+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1928+ 
1929+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ int8_t* dst, __gm__ int8_t* src, uint32_t m_start_position, uint32_t k_start_position,
1930+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1931+ 
1932+__aicore__ inline void asc_copy_gm2l1(__cbuf__ uint16_t* dst, __gm__ uint16_t* src, uint32_t m_start_position, uint32_t k_start_position,
1933+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1934+ 
1935+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ uint16_t* dst, __gm__ uint16_t* src, uint32_t m_start_position, uint32_t k_start_position,
1936+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1937+ 
1938+__aicore__ inline void asc_copy_gm2l1(__cbuf__ uint32_t* dst, __gm__ uint32_t* src, uint32_t m_start_position, uint32_t k_start_position,
1939+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1940+ 
1941+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ uint32_t* dst, __gm__ uint32_t* src, uint32_t m_start_position, uint32_t k_start_position,
1942+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1943+ 
1944+__aicore__ inline void asc_copy_gm2l1(__cbuf__ uint8_t* dst, __gm__ uint8_t* src, uint32_t m_start_position, uint32_t k_start_position,
1945+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1946+ 
1947+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ uint8_t* dst, __gm__ uint8_t* src, uint32_t m_start_position, uint32_t k_start_position,
1948+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1949+ 
1950+__aicore__ inline void asc_copy_gm2l1(__cbuf__ float4_e1m2x2_t* dst, __gm__ float4_e1m2x2_t* src, uint32_t m_start_position, uint32_t k_start_position,
1951+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1952+ 
1953+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ float4_e1m2x2_t* dst, __gm__ float4_e1m2x2_t* src, uint32_t m_start_position, uint32_t k_start_position,
1954+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1955+ 
1956+__aicore__ inline void asc_copy_gm2l1(__cbuf__ float4_e2m1x2_t* dst, __gm__ float4_e2m1x2_t* src, uint32_t m_start_position, uint32_t k_start_position,
1957+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1958+ 
1959+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ float4_e2m1x2_t* dst, __gm__ float4_e2m1x2_t* src, uint32_t m_start_position, uint32_t k_start_position,
1960+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1961+ 
1962+__aicore__ inline void asc_copy_gm2l1(__cbuf__ void* dst, __gm__ void* src, uint32_t m_start_position, uint32_t k_start_position,
1963+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1964+ 
1965+__aicore__ inline void asc_copy_gm2l1_sync(__cbuf__ void* dst, __gm__ void* src, uint32_t m_start_position, uint32_t k_start_position,
1966+ uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t decomp_mode, uint8_t l2_cache_ctl);
1303#endif1967#endif
1304 1968 
1305#endif1969#endif
@@ -69,6 +69,11 @@ __aicore__ inline void asc_get_arch_ver(uint32_t& coreVersion);
69 69 
70__aicore__ inline int64_t asc_get_core_id();70__aicore__ inline int64_t asc_get_core_id();
71 71 
72+__aicore__ inline void asc_set_l0c2gm_channel_para(uint64_t config);
73+ 
74+__aicore__ inline void asc_set_l3d_rpt_b(uint64_t config);
75+ 
76+ 
72#endif77#endif
73 78 
74#endif79#endif
@@ -89,4 +89,6 @@ TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, ui
89TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint16_t, uint32_t);89TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint16_t, uint32_t);
90TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint32_t, half);90TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint32_t, half);
91TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint32_t, uint32_t);91TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint32_t, uint32_t);
92-TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix_bf16, bfloat16_t, bfloat16_t);92+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix_bf16, bfloat16_t, bfloat16_t);
93+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix_h, bfloat16_t, half);
94+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix_ui, bfloat16_t, uint32_t);
@@ -0,0 +1,35 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+#include "c_api/utils_intf.h"
16+ 
17+class TestSimdAtomicSetAtomicAddInt : public testing::Test {
18+protected:
19+ void SetUp() {}
20+ void TearDown() {}
21+};
22+ 
23+TEST_F(TestSimdAtomicSetAtomicAddInt, set_atomic_add_int_Succ)
24+{
25+ MOCKER(set_atomic_add, void(void))
26+ .times(1)
27+ .will(ignoreReturnValue());
28+
29+ MOCKER(set_atomic_s32, void(void))
30+ .times(1)
31+ .will(ignoreReturnValue());
32+
33+ asc_set_atomic_add_int();
34+ GlobalMockObject::verify();
35+}
@@ -0,0 +1,35 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+#include "c_api/utils_intf.h"
16+ 
17+class TestSimdAtomicSetAtomicAddInt16 : public testing::Test {
18+protected:
19+ void SetUp() {}
20+ void TearDown() {}
21+};
22+ 
23+TEST_F(TestSimdAtomicSetAtomicAddInt16, set_atomic_add_int16_Succ)
24+{
25+ MOCKER(set_atomic_add, void(void))
26+ .times(1)
27+ .will(ignoreReturnValue());
28+
29+ MOCKER(set_atomic_s16, void(void))
30+ .times(1)
31+ .will(ignoreReturnValue());
32+
33+ asc_set_atomic_add_int16();
34+ GlobalMockObject::verify();
35+}
@@ -0,0 +1,35 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+#include "c_api/utils_intf.h"
16+ 
17+class TestSimdAtomicSetAtomicAddInt8 : public testing::Test {
18+protected:
19+ void SetUp() {}
20+ void TearDown() {}
21+};
22+ 
23+TEST_F(TestSimdAtomicSetAtomicAddInt8, set_atomic_add_int8_Succ)
24+{
25+ MOCKER(set_atomic_add, void(void))
26+ .times(1)
27+ .will(ignoreReturnValue());
28+
29+ MOCKER(set_atomic_s8, void(void))
30+ .times(1)
31+ .will(ignoreReturnValue());
32+
33+ asc_set_atomic_add_int8();
34+ GlobalMockObject::verify();
35+}
@@ -8,11 +8,88 @@
8* See LICENSE in the root of the software repository for the full text of the License.8* See LICENSE in the root of the software repository for the full text of the License.
9*/9*/
10 10 
11+ 
11#include <gtest/gtest.h>12#include <gtest/gtest.h>
12#include <mockcpp/mockcpp.hpp>13#include <mockcpp/mockcpp.hpp>
13#include "c_api/stub/cce_stub.h"14#include "c_api/stub/cce_stub.h"
14#include "c_api/asc_simd.h"15#include "c_api/asc_simd.h"
15 16 
17+class TestCubeDatamoveCopyGM2L1 : public testing::Test {
18+ protected:
19+ void SetUp() {
20+ g_coreType = C_API_AIC_TYPE;
21+ }
22+ void TearDown() {
23+ g_coreType = C_API_AIV_TYPE;
24+ }
25+ };
26+ 
27+template<typename DTYPE>
28+void load_gm_to_cbuf_2dv2_Stub(__cbuf__ DTYPE* dst_in, __gm__ DTYPE* src_in, uint32_t m_start_position_in,
29+ uint32_t k_start_position_in, uint16_t dst_stride_in, uint16_t m_step_in,
30+ uint16_t k_step_in, uint8_t sid_in, uint8_t decomp_mode_in, uint8_t l2_cache_ctl_in)
31+{
32+ __cbuf__ DTYPE* dst = reinterpret_cast<__cbuf__ DTYPE*>(1);
33+ __gm__ DTYPE* src = reinterpret_cast<__gm__ DTYPE*>(2);
34+ uint32_t m_start_position = 3;
35+ uint32_t k_start_position = 4;
36+ uint16_t dst_stride = 5;
37+ uint16_t m_step = 6;
38+ uint16_t k_step = 7;
39+ uint8_t sid = 0;
40+ uint8_t decomp_mode = 8;
41+ uint8_t l2_cache_ctl = 9;
42+ 
43+ EXPECT_EQ(dst, dst_in);
44+ EXPECT_EQ(src, src_in);
45+ EXPECT_EQ(m_start_position, m_start_position_in);
46+ EXPECT_EQ(k_start_position, k_start_position_in);
47+ EXPECT_EQ(dst_stride, dst_stride_in);
48+ EXPECT_EQ(m_step, m_step_in);
49+ EXPECT_EQ(k_step, k_step_in);
50+ EXPECT_EQ(sid, sid_in);
51+ EXPECT_EQ(decomp_mode, decomp_mode_in);
52+ EXPECT_EQ(l2_cache_ctl, l2_cache_ctl_in);
53+}
54+ 
55+#define TEST_CUBE_DATAMOVE_GM2L1(class_name, c_api_name, cce_name, data_type) \
56+TEST_F(TestCubeDatamoveCopyGM2L1, c_api_name##_##data_type##_Succ) \
57+{ \
58+ __cbuf__ data_type * dst = reinterpret_cast<__cbuf__ data_type *>(1); \
59+ __gm__ data_type * src = reinterpret_cast<__gm__ data_type *>(2); \
60+ uint32_t m_start_position = 3; \
61+ uint32_t k_start_position = 4; \
62+ uint16_t dst_stride = 5; \
63+ uint16_t m_step = 6; \
64+ uint16_t k_step = 7; \
65+ uint8_t decomp_mode = 8; \
66+ uint8_t l2_cache_ctl = 9; \
67+ MOCKER(cce_name, void(__cbuf__ data_type*, __gm__ data_type*, uint32_t, uint32_t, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t, uint8_t)) \
68+ .times(1) \
69+ .will(invoke(&load_gm_to_cbuf_2dv2_Stub<data_type>)); \
70+ c_api_name(dst, src, m_start_position, k_start_position, dst_stride, m_step, k_step, decomp_mode, l2_cache_ctl); \
71+ GlobalMockObject::verify(); \
72+}
73+ 
74+// asc_copy_gm2l1 tests
75+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, bfloat16_t);
76+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, float);
77+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, float8_e4m3_t);
78+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, float8_e5m2_t);
79+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, half);
80+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, hifloat8_t);
81+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, int16_t);
82+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, int32_t);
83+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, int8_t);
84+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, uint16_t);
85+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, uint32_t);
86+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2, uint8_t);
87+ 
88+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2_s4, float4_e1m2x2_t);
89+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2_s4, float4_e2m1x2_t);
90+TEST_CUBE_DATAMOVE_GM2L1(GM2L1, asc_copy_gm2l1, load_gm_to_cbuf_2dv2_s4, void);
91+ 
92+ 
16__aicore__ inline void copy_gm_to_cbuf_v2_stub(__cbuf__ void* dst, __gm__ void* src, uint8_t sid, uint32_t n_burst, uint32_t len_burst, uint8_t pad_func_mode,93__aicore__ inline void copy_gm_to_cbuf_v2_stub(__cbuf__ void* dst, __gm__ void* src, uint8_t sid, uint32_t n_burst, uint32_t len_burst, uint8_t pad_func_mode,
17 uint64_t src_stride, uint32_t dst_stride) {94 uint64_t src_stride, uint32_t dst_stride) {
18 EXPECT_EQ(dst, reinterpret_cast<__cbuf__ void *>(11));95 EXPECT_EQ(dst, reinterpret_cast<__cbuf__ void *>(11));
@@ -0,0 +1,83 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#ifndef TESTS_UNIT_BASIC_API_UT_TESTCASE_C_API_NPU_ARCH_3510_UTILS_TEST_FIXPIPE_L0C2GM_INSTR_H
12+#define TESTS_UNIT_BASIC_API_UT_TESTCASE_C_API_NPU_ARCH_3510_UTILS_TEST_FIXPIPE_L0C2GM_INSTR_H
13+ 
14+#include <gtest/gtest.h>
15+#include <mockcpp/mockcpp.hpp>
16+#include "c_api/stub/cce_stub.h"
17+#include "c_api/asc_simd.h"
18+ 
19+class TestCubeDatamoveCopyL0C2GM : public testing::Test {
20+ protected:
21+ void SetUp() {
22+ g_coreType = C_API_AIC_TYPE;
23+ }
24+ void TearDown() {
25+ g_coreType = C_API_AIV_TYPE;
26+ }
27+ };
28+ 
29+#define TEST_CUBE_DATAMOVE_L0C2GM(class_name, c_api_name, cce_name, dst_data_type, src_data_type) \
30+TEST_F(TestCubeDatamoveCopyL0C2GM, c_api_name##_##dst_data_type##_##src_data_type##_Succ) \
31+{ \
32+ __cbuf__ dst_data_type * dst = reinterpret_cast<__cbuf__ dst_data_type *>(1); \
33+ __cc__ src_data_type * src = reinterpret_cast<__cc__ src_data_type *>(2); \
34+ uint16_t n_size = 3; \
35+ uint16_t m_size = 4; \
36+ uint32_t loop_dst_stride = 6; \
37+ uint16_t loop_src_stride = 7; \
38+ uint8_t l2_cache_ctl = 5; \
39+ uint8_t clip_relu_pre = 8; \
40+ uint8_t unit_flag_ctl = 10; \
41+ uint64_t quant_pre = 11; \
42+ uint8_t relu_pre = 12; \
43+ bool split_en = true; \
44+ bool NZ2ND_en = true; \
45+ uint64_t quant_post = 13; \
46+ uint8_t relu_post = 14; \
47+ bool clip_relu_post = true; \
48+ bool loop_enhance_en = true; \
49+ uint8_t eltwise_op = 15; \
50+ bool eltwise_antq_en = true; \
51+ bool loop_enhance_merge_en = true; \
52+ bool C0_pad_en = true; \
53+ bool wino_post_en = false; \
54+ bool broadcast_en = false; \
55+ bool NZ2DN_en = false; \
56+ c_api_name(dst, src, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre, \
57+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, \
58+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, \
59+ broadcast_en, NZ2DN_en); \
60+ GlobalMockObject::verify(); \
61+}
62+ 
63+#endif
64+ 
65+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, half, float);
66+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, bfloat16_t, float);
67+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, float8_e4m3_t, float);
68+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, float8_e5m2_t, float);
69+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, hifloat8_t, float);
70+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, int8_t, float);
71+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, uint8_t, float);
72+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, float, float);
73+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, half, int32_t);
74+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, bfloat16_t, int32_t);
75+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, float8_e4m3_t, int32_t);
76+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, float8_e5m2_t, int32_t);
77+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, hifloat8_t, int32_t);
78+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, int8_t, int32_t);
79+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, uint8_t, int32_t);
80+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, int32_t, int32_t);
81+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, void, float);
82+TEST_CUBE_DATAMOVE_L0C2GM(L0C2GM, asc_copy_l0c2gm, copy_matrix_cc_to_gm, void, int32_t);
83+ 
@@ -0,0 +1,84 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#ifndef TESTS_UNIT_BASIC_API_UT_TESTCASE_C_API_NPU_ARCH_3510_UTILS_TEST_FIXPIPE_L0C2UB_INSTR_H
12+#define TESTS_UNIT_BASIC_API_UT_TESTCASE_C_API_NPU_ARCH_3510_UTILS_TEST_FIXPIPE_L0C2UB_INSTR_H
13+ 
14+#include <gtest/gtest.h>
15+#include <mockcpp/mockcpp.hpp>
16+#include "c_api/stub/cce_stub.h"
17+#include "c_api/asc_simd.h"
18+ 
19+class TestCubeDatamoveCopyL0C2UB : public testing::Test { \
20+ protected:
21+ void SetUp() {
22+ g_coreType = C_API_AIC_TYPE;
23+ }
24+ void TearDown() {
25+ g_coreType = C_API_AIV_TYPE;
26+ }
27+ };
28+ 
29+#define TEST_CUBE_DATAMOVE_L0C2UB(class_name, c_api_name, cce_name, dst_data_type, src_data_type) \
30+TEST_F(TestCubeDatamoveCopyL0C2UB, c_api_name##_##dst_data_type##_##src_data_type##_Succ) \
31+{ \
32+ __ubuf__ dst_data_type * dst = reinterpret_cast<__ubuf__ dst_data_type *>(1); \
33+ __cc__ src_data_type * src = reinterpret_cast<__cc__ src_data_type *>(2); \
34+ uint16_t n_size = 3; \
35+ uint16_t m_size = 4; \
36+ uint32_t loop_dst_stride = 6; \
37+ uint16_t loop_src_stride = 7; \
38+ uint8_t dual_dst_ctl = 5; \
39+ bool sub_blockid = true; \
40+ uint8_t clip_relu_pre = 8; \
41+ uint8_t unit_flag_ctl = 10; \
42+ uint64_t quant_pre = 11; \
43+ uint8_t relu_pre = 12; \
44+ bool split_en = true; \
45+ bool NZ2ND_en = true; \
46+ uint64_t quant_post = 13; \
47+ uint8_t relu_post = 14; \
48+ bool clip_relu_post = true; \
49+ bool loop_enhance_en = true; \
50+ uint8_t eltwise_op = 15; \
51+ bool eltwise_antq_en = true; \
52+ bool loop_enhance_merge_en = true; \
53+ bool C0_pad_en = true; \
54+ bool wino_post_en = false; \
55+ bool broadcast_en = false; \
56+ bool NZ2DN_en = false; \
57+ c_api_name(dst, src, n_size, m_size, loop_dst_stride, loop_src_stride, dual_dst_ctl, sub_blockid, clip_relu_pre, \
58+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, \
59+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, \
60+ broadcast_en, NZ2DN_en); \
61+ GlobalMockObject::verify(); \
62+}
63+ 
64+#endif
65+ 
66+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, half, float);
67+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, bfloat16_t, float);
68+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, float8_e4m3_t, float);
69+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, float8_e5m2_t, float);
70+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, hifloat8_t, float);
71+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, int8_t, float);
72+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, uint8_t, float);
73+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, float, float);
74+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, half, int32_t);
75+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, bfloat16_t, int32_t);
76+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, float8_e4m3_t, int32_t);
77+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, float8_e5m2_t, int32_t);
78+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, hifloat8_t, int32_t);
79+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, int8_t, int32_t);
80+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, uint8_t, int32_t);
81+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, int32_t, int32_t);
82+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, void, float);
83+TEST_CUBE_DATAMOVE_L0C2UB(L0C2UB, asc_copy_l0c2ub, copy_matrix_cc_to_ub, void, int32_t);
84+ 
@@ -0,0 +1,104 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+ 
16+class TestCubeDatamoveCopyL12Bt : public testing::Test {
17+protected:
18+ void SetUp() {
19+ g_coreType = C_API_AIC_TYPE;
20+ }
21+ void TearDown() {
22+ g_coreType = C_API_AIV_TYPE;
23+ }
24+};
25+ 
26+namespace {
27+template<typename DTYPE>
28+void copy_cbuf_to_bt_Stub(uint64_t dst_in, __cbuf__ DTYPE* src_in, uint16_t conv_control_in, uint16_t n_burst_in,
29+ uint16_t len_burst_in, uint16_t source_gap_in, uint16_t dst_gap_in)
30+{
31+ uint64_t dst = 1;
32+ __cbuf__ void* src = reinterpret_cast<__cbuf__ void*>(2);
33+ uint16_t conv_control = 3;
34+ uint16_t n_burst = 4;
35+ uint16_t len_burst = 5;
36+ uint16_t source_gap = 6;
37+ uint16_t dst_gap = 7;
38+ EXPECT_EQ(dst, dst_in);
39+ EXPECT_EQ(src, src_in);
40+ EXPECT_EQ(conv_control, conv_control_in);
41+ EXPECT_EQ(n_burst, n_burst_in);
42+ EXPECT_EQ(len_burst, len_burst_in);
43+ EXPECT_EQ(source_gap, source_gap_in);
44+ EXPECT_EQ(dst_gap, dst_gap_in);
45+}
46+ 
47+template<typename DTYPE>
48+void copy_cbuf_to_bt_size_Stub(uint64_t dst_in, __cbuf__ DTYPE* src_in, uint16_t conv_control_in, uint16_t n_burst_in,
49+ uint16_t len_burst_in, uint16_t source_gap_in, uint16_t dst_gap_in)
50+{
51+ uint64_t dst = 1;
52+ __cbuf__ void* src = reinterpret_cast<__cbuf__ void*>(2);
53+ uint16_t conv_control = 0;
54+ uint16_t n_burst = 1;
55+ uint16_t len_burst = 44 / ASC_C_API_ONE_DATABLOCK_SIZE;
56+ uint16_t source_gap = 0;
57+ uint16_t dst_gap = 0;
58+ EXPECT_EQ(dst, dst_in);
59+ EXPECT_EQ(src, src_in);
60+ EXPECT_EQ(conv_control, conv_control_in);
61+ EXPECT_EQ(n_burst, n_burst_in);
62+ EXPECT_EQ(len_burst, len_burst_in);
63+ EXPECT_EQ(source_gap, source_gap_in);
64+ EXPECT_EQ(dst_gap, dst_gap_in);
65+}
66+ 
67+}
68+ 
69+#define TEST_CUBE_DATAMOVE_COPY_L12BT(DTYPE) \
70+TEST_F(TestCubeDatamoveCopyL12Bt, asc_copy_l12bt_##DTYPE##_Succ) \
71+{ \
72+ uint64_t dst = 1; \
73+ __cbuf__ DTYPE* src = reinterpret_cast<__cbuf__ DTYPE*>(2); \
74+ uint16_t conv_control = 3; \
75+ uint16_t n_burst = 4; \
76+ uint16_t len_burst = 5; \
77+ uint16_t source_gap = 6; \
78+ uint16_t dst_gap = 7; \
79+ \
80+ MOCKER(copy_cbuf_to_bt, void(uint64_t, __cbuf__ DTYPE*, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t)) \
81+ .times(1) \
82+ .will(invoke(&copy_cbuf_to_bt_Stub<DTYPE>)); \
83+ \
84+ asc_copy_l12bt(dst, src, conv_control, n_burst, len_burst, source_gap, dst_gap); \
85+ GlobalMockObject::verify(); \
86+} \
87+TEST_F(TestCubeDatamoveCopyL12Bt, asc_copy_l12bt_size_##DTYPE##_Succ) \
88+{ \
89+ uint64_t dst = 1; \
90+ __cbuf__ DTYPE* src = reinterpret_cast<__cbuf__ DTYPE*>(2); \
91+ uint32_t size = 44; \
92+ MOCKER(copy_cbuf_to_bt, void(uint64_t, __cbuf__ DTYPE*, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t)) \
93+ .times(1) \
94+ .will(invoke(&copy_cbuf_to_bt_size_Stub<DTYPE>)); \
95+ \
96+ asc_copy_l12bt(dst, src, size); \
97+ GlobalMockObject::verify(); \
98+}
99+ 
100+TEST_CUBE_DATAMOVE_COPY_L12BT(void)
101+TEST_CUBE_DATAMOVE_COPY_L12BT(bfloat16_t)
102+TEST_CUBE_DATAMOVE_COPY_L12BT(half)
103+TEST_CUBE_DATAMOVE_COPY_L12BT(float)
104+TEST_CUBE_DATAMOVE_COPY_L12BT(int32_t)
Atests/api/c_api/npu_arch_3510/cube_datamove/test_asc_copy_l12fb.cpp+92-0文件内容审核中,请稍后刷新重试
@@ -0,0 +1,92 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+ 
16+class TestCubeDmamoveCopyL12FbV2CAPI : public testing::Test {
17+protected:
18+ void SetUp() {
19+ g_coreType = C_API_AIC_TYPE;
20+ }
21+ void TearDown() {
22+ g_coreType = C_API_AIV_TYPE;
23+ }
24+};
25+ 
26+namespace {
27+void copy_cbuf_to_fbuf_v2_Stub(__fbuf__ void* dst_in, __cbuf__ void* src_in, uint16_t burst_num_in, uint16_t burst_len_in,
28+ uint16_t src_stride, uint16_t dst_stride)
29+{
30+ __fbuf__ void* dst = reinterpret_cast<__fbuf__ void*>(1);
31+ __cbuf__ void* src = reinterpret_cast<__cbuf__ void*>(2);
32+ uint16_t burst_num = 3;
33+ uint16_t burst_len = 4;
34+ uint16_t src_gap_size = 5;
35+ uint16_t dst_gap_size = 6;
36+ EXPECT_EQ(dst, dst_in);
37+ EXPECT_EQ(src, src_in);
38+ EXPECT_EQ(burst_num, burst_num_in);
39+ EXPECT_EQ(burst_len, burst_len_in);
40+ EXPECT_EQ(src_gap_size, src_stride);
41+ EXPECT_EQ(dst_gap_size, dst_stride);
42+}
43+ 
44+void copy_cbuf_to_fbuf_v2_size_Stub(__fbuf__ void* dst_in, __cbuf__ void* src_in, uint16_t burst_num_in, uint16_t burst_len_in,
45+ uint16_t src_stride, uint16_t dst_stride)
46+{
47+ __fbuf__ void* dst = reinterpret_cast<__fbuf__ void*>(1);
48+ __cbuf__ void* src = reinterpret_cast<__cbuf__ void*>(2);
49+ uint16_t burst_num = 1;
50+ uint16_t burst_len = 44 / ASC_C_API_ONE_DATABLOCK_SIZE;
51+ uint16_t src_gap_size = 0;
52+ uint16_t dst_gap_size = 0;
53+ EXPECT_EQ(dst, dst_in);
54+ EXPECT_EQ(src, src_in);
55+ EXPECT_EQ(burst_num, burst_num_in);
56+ EXPECT_EQ(burst_len, burst_len_in);
57+ EXPECT_EQ(src_gap_size, src_stride);
58+ EXPECT_EQ(dst_gap_size, dst_stride);
59+}
60+ 
61+}
62+ 
63+TEST_F(TestCubeDmamoveCopyL12FbV2CAPI, c_api_asc_copy_l12fb_Succ)
64+{
65+ __fbuf__ void* dst = reinterpret_cast<__fbuf__ void*>(1);
66+ __cbuf__ void* src = reinterpret_cast<__cbuf__ void*>(2);
67+ uint16_t burst_num = 3;
68+ uint16_t burst_len = 4;
69+ uint16_t src_gap_size = 5;
70+ uint16_t dst_gap_size = 6;
71+ 
72+ MOCKER(copy_cbuf_to_fbuf_v2, void(__fbuf__ void*, __cbuf__ void*, uint16_t, uint16_t, uint16_t, uint16_t))
73+ .times(1)
74+ .will(invoke(copy_cbuf_to_fbuf_v2_Stub));
75+
76+ asc_copy_l12fb_v2(dst, src, burst_num, burst_len, src_gap_size, dst_gap_size);
77+ GlobalMockObject::verify();
78+}
79+ 
80+TEST_F(TestCubeDmamoveCopyL12FbV2CAPI, c_api_asc_copy_l12fb_size_Succ)
81+{
82+ __fbuf__ void* dst = reinterpret_cast<__fbuf__ void*>(1);
83+ __cbuf__ void* src = reinterpret_cast<__cbuf__ void*>(2);
84+ uint32_t size = 44;
85+ 
86+ MOCKER(copy_cbuf_to_fbuf_v2, void(__fbuf__ void*, __cbuf__ void*, uint16_t, uint16_t, uint16_t, uint16_t))
87+ .times(1)
88+ .will(invoke(copy_cbuf_to_fbuf_v2_size_Stub));
89+
90+ asc_copy_l12fb_v2(dst, src, size);
91+ GlobalMockObject::verify();
92+}
@@ -0,0 +1,64 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+ 
16+class TestCubeDmamoveCopyL12UBCAPI : public testing::Test {
17+protected:
18+ void SetUp() {
19+ g_coreType = C_API_AIC_TYPE;
20+ }
21+ void TearDown() {
22+ g_coreType = C_API_AIV_TYPE;
23+ }
24+};
25+ 
26+namespace {
27+void copy_cbuf_to_ubuf_Stub(__ubuf__ void* dst_in, __cbuf__ void* src_in, bool sub_blockid_in,
28+ uint16_t burst_num_in, uint16_t burst_len_in, uint16_t src_gap, uint16_t dst_gap)
29+{
30+ __ubuf__ void* dst = reinterpret_cast<__ubuf__ void*>(1);
31+ __cbuf__ void* src = reinterpret_cast<__cbuf__ void*>(2);
32+ bool sub_blockid = false;
33+ uint16_t burst_num = 3;
34+ uint16_t burst_len = 4;
35+ uint16_t src_gap_size = 5;
36+ uint16_t dst_gap_size = 6;
37+ EXPECT_EQ(dst, dst_in);
38+ EXPECT_EQ(src, src_in);
39+ EXPECT_EQ(sub_blockid, sub_blockid_in);
40+ EXPECT_EQ(burst_num, burst_num_in);
41+ EXPECT_EQ(burst_len, burst_len_in);
42+ EXPECT_EQ(src_gap_size, src_gap);
43+ EXPECT_EQ(dst_gap_size, dst_gap);
44+}
45+ 
46+}
47+ 
48+TEST_F(TestCubeDmamoveCopyL12UBCAPI, c_api_asc_copy_l12ub_Succ)
49+{
50+ __ubuf__ void* dst = reinterpret_cast<__ubuf__ void*>(1);
51+ __cbuf__ void* src = reinterpret_cast<__cbuf__ void*>(2);
52+ bool sub_blockid = false;
53+ uint16_t burst_num = 3;
54+ uint16_t burst_len = 4;
55+ uint16_t src_gap_size = 5;
56+ uint16_t dst_gap_size = 6;
57+ 
58+ MOCKER(copy_cbuf_to_ubuf, void(__ubuf__ void*, __cbuf__ void*, bool, uint16_t, uint16_t, uint16_t, uint16_t))
59+ .times(1)
60+ .will(invoke(copy_cbuf_to_ubuf_Stub));
61+ 
62+ asc_copy_l12ub(dst, src, sub_blockid, burst_num, burst_len, src_gap_size, dst_gap_size);
63+ GlobalMockObject::verify();
64+}
@@ -18,7 +18,7 @@
18 18 
19#define TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(class_name, c_api_name, cce_name, dst_data_type, src_data_type) \19#define TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(class_name, c_api_name, cce_name, dst_data_type, src_data_type) \
20 \20 \
21-class TestCubeDatamove##class_name##_##dst_data_type##src_data_type : public testing::Test { \21+class TestCubeDatamove##class_name##_##dst_data_type##_##src_data_type : public testing::Test { \
22protected: \22protected: \
23 void SetUp() { \23 void SetUp() { \
24 g_coreType = C_API_AIC_TYPE; \24 g_coreType = C_API_AIC_TYPE; \
@@ -75,7 +75,7 @@ void c_api_name##_##dst_data_type##_##src_data_type##_Stub(__cbuf__ dst_data_typ
75} \75} \
76} \76} \
77 \77 \
78-TEST_F(TestCubeDatamove##class_name##_##dst_data_type##src_data_type, c_api_name_##dst_data_type##_##src_data_type##_Succ) \78+TEST_F(TestCubeDatamove##class_name##_##dst_data_type##_##src_data_type, c_api_name##dst_data_type##_##src_data_type##_Succ) \
79{ \79{ \
80 __cbuf__ dst_data_type * dst = reinterpret_cast<__cbuf__ dst_data_type *>(1); \80 __cbuf__ dst_data_type * dst = reinterpret_cast<__cbuf__ dst_data_type *>(1); \
81 __cc__ src_data_type * src = reinterpret_cast<__cc__ src_data_type *>(2); \81 __cc__ src_data_type * src = reinterpret_cast<__cc__ src_data_type *>(2); \
@@ -103,13 +103,61 @@ TEST_F(TestCubeDatamove##class_name##_##dst_data_type##src_data_type, c_api_name
103 GlobalMockObject::verify(); \103 GlobalMockObject::verify(); \
104}104}
105 105 
106+// copy_matrix_cc_to_cbuf_s4
107+#define TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_S4_INSTR(class_name, c_api_name, cce_name, dst_data_type, src_data_type) \
108+class TestCubeDatamoveS4##class_name##_##dst_data_type##_##src_data_type : public testing::Test { \
109+ protected: \
110+ void SetUp() { \
111+ g_coreType = C_API_AIC_TYPE; \
112+ } \
113+ void TearDown() { \
114+ g_coreType = C_API_AIV_TYPE; \
115+ } \
116+ }; \
117+TEST_F(TestCubeDatamoveS4##class_name##_##dst_data_type##_##src_data_type, c_api_name##_##dst_data_type##_##src_data_type##_Succ) \
118+{ \
119+ __cbuf__ dst_data_type * dst = reinterpret_cast<__cbuf__ dst_data_type *>(1); \
120+ __cc__ src_data_type * src = reinterpret_cast<__cc__ src_data_type *>(2); \
121+ uint16_t n_size = 3; \
122+ uint16_t m_size = 4; \
123+ uint32_t loop_dst_stride = 6; \
124+ uint16_t loop_src_stride = 7; \
125+ uint8_t l2_cache_ctl = 5; \
126+ uint8_t clip_relu_pre = 8; \
127+ uint8_t unit_flag_ctl = 10; \
128+ uint64_t quant_pre = 11; \
129+ uint8_t relu_pre = 12; \
130+ bool split_en = true; \
131+ bool NZ2ND_en = true; \
132+ uint64_t quant_post = 13; \
133+ uint8_t relu_post = 14; \
134+ bool clip_relu_post = true; \
135+ bool loop_enhance_en = true; \
136+ uint8_t eltwise_op = 15; \
137+ bool eltwise_antq_en = true; \
138+ bool loop_enhance_merge_en = true; \
139+ bool C0_pad_en = true; \
140+ bool wino_post_en = false; \
141+ bool broadcast_en = false; \
142+ bool NZ2DN_en = false; \
143+ c_api_name(dst, src, n_size, m_size, loop_dst_stride, loop_src_stride, l2_cache_ctl, clip_relu_pre, \
144+ unit_flag_ctl, quant_pre, relu_pre, split_en, NZ2ND_en, quant_post, relu_post, clip_relu_post, \
145+ loop_enhance_en, eltwise_op, eltwise_antq_en, loop_enhance_merge_en, C0_pad_en, wino_post_en, \
146+ broadcast_en, NZ2DN_en); \
147+ GlobalMockObject::verify(); \
148+}
149+ 
106#endif150#endif
107 151 
108-TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0c2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, half, float);152+ 
109-TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0c2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, int8_t, float);153+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, half, float);
110-TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0c2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, uint8_t, float);154+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, int8_t, float);
111-TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0c2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, float, float);155+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, uint8_t, float);
112-TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0c2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, half, int32_t);156+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, float, float);
113-TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0c2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, int8_t, int32_t);157+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, half, int32_t);
114-TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0c2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, uint8_t, int32_t);158+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, int8_t, int32_t);
115-TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0c2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, int32_t, int32_t);159+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, uint8_t, int32_t);
160+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf, int32_t, int32_t);
161+ 
162+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_S4_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf_s4, void, float);
163+TEST_CUBE_COMPUTE_FIXPIPE_L0C2L1_S4_INSTR(L0C2L1, asc_copy_l0c2l1, copy_matrix_cc_to_cbuf_s4, void, int32_t);
@@ -0,0 +1,94 @@
1+/**
2+* Copyright (c) 2025 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+ 
16+#define TEST_CUBE_DMAMOVE_FILL_L1_VALUE(class_name, c_api_name, cce_name, data_type, val_type) \
17+ \
18+class TestCubeDmamove##class_name##data_type##val_type : public testing::Test { \
19+protected: \
20+ void SetUp() { \
21+ g_coreType = C_API_AIC_TYPE; \
22+ } \
23+ void TearDown() { \
24+ g_coreType = C_API_AIV_TYPE; \
25+ } \
26+}; \
27+ \
28+namespace { \
29+ \
30+void cce_name##_##data_type##_int64_t_##val_type##_Stub(__cbuf__ data_type *dst, \
31+ int64_t repeat, val_type value) \
32+{ \
33+ EXPECT_EQ(dst, reinterpret_cast<__cbuf__ data_type *>(11)); \
34+ EXPECT_EQ(repeat, static_cast<int64_t>(0)); \
35+ EXPECT_EQ(value, static_cast<val_type>(1)); \
36+} \
37+ \
38+void cce_name##_##data_type##_##val_type##_InitFillL1ValueConfig(asc_fill_value_config &config) \
39+{ \
40+ config.repeat = static_cast<uint64_t>(0); \
41+ config.blk_num = static_cast<uint64_t>(0); \
42+ config.dst_gap = static_cast<uint64_t>(0); \
43+} \
44+ \
45+} \
46+ \
47+TEST_F(TestCubeDmamove##class_name##data_type##val_type, c_api_name##_FillValueConfig_Succ) \
48+{ \
49+ __cbuf__ data_type *dst = reinterpret_cast<__cbuf__ data_type *>(11); \
50+ val_type value = 1; \
51+ \
52+ asc_fill_value_config config; \
53+ cce_name##_##data_type##_##val_type##_InitFillL1ValueConfig(config); \
54+ \
55+ MOCKER_CPP(cce_name, void(__cbuf__ data_type *, int64_t, val_type)) \
56+ .times(1) \
57+ .will(invoke(cce_name##_##data_type##_int64_t_##val_type##_Stub)); \
58+ \
59+ c_api_name(dst, value, config); \
60+ GlobalMockObject::verify(); \
61+} \
62+ \
63+TEST_F(TestCubeDmamove##class_name##data_type##val_type, c_api_name##_sync_Succ) \
64+{ \
65+ __cbuf__ data_type *dst = reinterpret_cast<__cbuf__ data_type *>(11); \
66+ val_type value = 1; \
67+ \
68+ asc_fill_value_config config; \
69+ cce_name##_##data_type##_##val_type##_InitFillL1ValueConfig(config); \
70+ \
71+ MOCKER_CPP(cce_name, void(__cbuf__ data_type *, int64_t, val_type)) \
72+ .times(1) \
73+ .will(invoke(cce_name##_##data_type##_int64_t_##val_type##_Stub)); \
74+ \
75+ c_api_name##_sync(dst, value, config); \
76+ GlobalMockObject::verify(); \
77+} \
78+ 
79+// ==========asc_fill_l1(half/float/int16_t/int32_t/uint16_t/uint32_t/bfloat16_t)==========
80+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, half, half);
81+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, half, uint32_t);
82+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, float, half);
83+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, float, uint32_t);
84+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, int16_t, half);
85+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, int16_t, uint32_t);
86+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, int32_t, half);
87+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, int32_t, uint32_t);
88+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint16_t, half);
89+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint16_t, uint32_t);
90+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint32_t, half);
91+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix, uint32_t, uint32_t);
92+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix_bf16, bfloat16_t, bfloat16_t);
93+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix_h, bfloat16_t, half);
94+TEST_CUBE_DMAMOVE_FILL_L1_VALUE(FillL1Value, asc_fill_l1, create_cbuf_matrix_ui, bfloat16_t, uint32_t);
@@ -0,0 +1,37 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+ 
16+class TestSysVarSetL0c2gmChannelPara : public testing::Test {
17+protected:
18+ void SetUp() {}
19+ void TearDown() {}
20+};
21+ 
22+namespace {
23+void set_channel_para_stub(uint64_t config) {
24+ EXPECT_EQ(config, 135);
25+}
26+}
27+ 
28+TEST_F(TestSysVarSetL0c2gmChannelPara, c_api_get_set_l0c2gm_channel_para_Succ)
29+{
30+ int64_t input = 135;
31+ MOCKER_CPP(set_channel_para, void(uint64_t))
32+ .times(1)
33+ .will(invoke(set_channel_para_stub));
34+ asc_set_l0c2gm_channel_para(input);
35+ asc_init();
36+ GlobalMockObject::verify();
37+}
@@ -0,0 +1,37 @@
1+/**
2+* Copyright (c) 2026 Huawei Technologies Co., Ltd.
3+* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4+* CANN Open Software License Agreement Version 2.0 (the "License").
5+* Please refer to the License for details. You may not use this file except in compliance with the License.
6+* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7+* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8+* See LICENSE in the root of the software repository for the full text of the License.
9+*/
10+ 
11+#include <gtest/gtest.h>
12+#include <mockcpp/mockcpp.hpp>
13+#include "c_api/stub/cce_stub.h"
14+#include "c_api/asc_simd.h"
15+ 
16+class TestSysVarSetL3dRptB : public testing::Test {
17+protected:
18+ void SetUp() {}
19+ void TearDown() {}
20+};
21+ 
22+namespace {
23+void set_l3d_rpt_b_stub(uint64_t config) {
24+ EXPECT_EQ(config, 135);
25+}
26+}
27+ 
28+TEST_F(TestSysVarSetL3dRptB, c_api_get_set_l3d_rpt_b_Succ)
29+{
30+ int64_t input = 135;
31+ MOCKER_CPP(set_l3d_rpt_b, void(uint64_t))
32+ .times(1)
33+ .will(invoke(set_l3d_rpt_b_stub));
34+ asc_set_l3d_rpt_b(input);
35+ asc_init();
36+ GlobalMockObject::verify();
37+}
@@ -32,6 +32,313 @@ void vsts(vector_f8e8m0 src0, vector_f8e8m0 src1, __ubuf__ fp8_e8m0_t* base, int
32void vsts(vector_f4e2m1x2 src0, vector_f4e2m1x2 src1, __ubuf__ fp4x2_e2m1_t* base, int32_t offset, Literal dist, vector_bool mask, Literal mode);32void vsts(vector_f4e2m1x2 src0, vector_f4e2m1x2 src1, __ubuf__ fp4x2_e2m1_t* base, int32_t offset, Literal dist, vector_bool mask, Literal mode);
33void vsts(vector_f4e1m2x2 src0, vector_f4e1m2x2 src1, __ubuf__ fp4x2_e1m2_t* base, int32_t offset, Literal dist, vector_bool mask, Literal mode);33void vsts(vector_f4e1m2x2 src0, vector_f4e1m2x2 src1, __ubuf__ fp4x2_e1m2_t* base, int32_t offset, Literal dist, vector_bool mask, Literal mode);
34 34 
35+using float8_e4m3_t = fp8_e4m3fn_t;
36+using float8_e5m2_t = fp8_e5m2_t;
37+using float4_e1m2x2_t = fp4x2_e1m2_t;
38+using float4_e2m1x2_t = fp4x2_e2m1_t;
39+ 
40+// ==========copy_matrix_cc_to_cbuf_s4===========
41+inline void copy_matrix_cc_to_cbuf_s4(__cbuf__ void *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
42+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
43+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
44+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
45+ bool broadcast_en, bool NZ2DN_en) {}
46+ 
47+inline void copy_matrix_cc_to_cbuf_s4(__cbuf__ void *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
48+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
49+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
50+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
51+ bool broadcast_en, bool NZ2DN_en) {}
52+ 
53+// ==========copy_matrix_cc_to_gm===========
54+inline void copy_matrix_cc_to_gm(__gm__ bfloat16_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
55+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
56+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
57+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
58+ bool broadcast_en, bool NZ2DN_en) {}
59+ 
60+inline void copy_matrix_cc_to_gm(__gm__ half *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
61+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
62+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
63+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
64+ bool broadcast_en, bool NZ2DN_en) {}
65+ 
66+inline void copy_matrix_cc_to_gm(__gm__ float8_e4m3_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
67+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
68+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
69+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
70+ bool broadcast_en, bool NZ2DN_en) {}
71+ 
72+inline void copy_matrix_cc_to_gm(__gm__ float8_e5m2_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
73+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
74+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
75+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
76+ bool broadcast_en, bool NZ2DN_en) {}
77+ 
78+inline void copy_matrix_cc_to_gm(__gm__ hifloat8_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
79+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
80+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
81+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
82+ bool broadcast_en, bool NZ2DN_en) {}
83+ 
84+inline void copy_matrix_cc_to_gm(__gm__ int8_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
85+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
86+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
87+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
88+ bool broadcast_en, bool NZ2DN_en) {}
89+ 
90+inline void copy_matrix_cc_to_gm(__gm__ uint8_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
91+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
92+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
93+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
94+ bool broadcast_en, bool NZ2DN_en) {}
95+ 
96+inline void copy_matrix_cc_to_gm(__gm__ float *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
97+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
98+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
99+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
100+ bool broadcast_en, bool NZ2DN_en) {}
101+ 
102+inline void copy_matrix_cc_to_gm(__gm__ bfloat16_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
103+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
104+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
105+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
106+ bool broadcast_en, bool NZ2DN_en) {}
107+ 
108+inline void copy_matrix_cc_to_gm(__gm__ half *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
109+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
110+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
111+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
112+ bool broadcast_en, bool NZ2DN_en) {}
113+ 
114+inline void copy_matrix_cc_to_gm(__gm__ float8_e4m3_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
115+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
116+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
117+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
118+ bool broadcast_en, bool NZ2DN_en) {}
119+ 
120+inline void copy_matrix_cc_to_gm(__gm__ float8_e5m2_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
121+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
122+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
123+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
124+ bool broadcast_en, bool NZ2DN_en) {}
125+ 
126+inline void copy_matrix_cc_to_gm(__gm__ hifloat8_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
127+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
128+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
129+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
130+ bool broadcast_en, bool NZ2DN_en) {}
131+ 
132+inline void copy_matrix_cc_to_gm(__gm__ int8_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
133+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
134+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
135+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
136+ bool broadcast_en, bool NZ2DN_en) {}
137+ 
138+inline void copy_matrix_cc_to_gm(__gm__ uint8_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
139+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
140+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
141+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
142+ bool broadcast_en, bool NZ2DN_en) {}
143+ 
144+inline void copy_matrix_cc_to_gm(__gm__ int32_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
145+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
146+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
147+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
148+ bool broadcast_en, bool NZ2DN_en) {}
149+ 
150+inline void copy_matrix_cc_to_gm_s4(__gm__ void *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
151+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
152+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
153+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
154+ bool broadcast_en, bool NZ2DN_en) {}
155+ 
156+inline void copy_matrix_cc_to_gm_s4(__gm__ void *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
157+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t l2_cache_ctl, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
158+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
159+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
160+ bool broadcast_en, bool NZ2DN_en) {}
161+ 
162+// ==========copy_matrix_cc_to_ub===========
163+inline void copy_matrix_cc_to_ub(__ubuf__ bfloat16_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
164+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
165+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
166+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
167+ bool broadcast_en, bool NZ2DN_en) {}
168+ 
169+inline void copy_matrix_cc_to_ub(__ubuf__ half *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
170+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
171+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
172+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
173+ bool broadcast_en, bool NZ2DN_en) {}
174+ 
175+inline void copy_matrix_cc_to_ub(__ubuf__ float8_e4m3_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
176+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
177+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
178+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
179+ bool broadcast_en, bool NZ2DN_en) {}
180+ 
181+inline void copy_matrix_cc_to_ub(__ubuf__ float8_e5m2_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
182+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
183+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
184+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
185+ bool broadcast_en, bool NZ2DN_en) {}
186+ 
187+inline void copy_matrix_cc_to_ub(__ubuf__ hifloat8_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
188+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
189+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
190+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
191+ bool broadcast_en, bool NZ2DN_en) {}
192+ 
193+inline void copy_matrix_cc_to_ub(__ubuf__ int8_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
194+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
195+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
196+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
197+ bool broadcast_en, bool NZ2DN_en) {}
198+ 
199+inline void copy_matrix_cc_to_ub(__ubuf__ uint8_t *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
200+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
201+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
202+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
203+ bool broadcast_en, bool NZ2DN_en) {}
204+ 
205+inline void copy_matrix_cc_to_ub(__ubuf__ float *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
206+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
207+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
208+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
209+ bool broadcast_en, bool NZ2DN_en) {}
210+ 
211+inline void copy_matrix_cc_to_ub(__ubuf__ bfloat16_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
212+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
213+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
214+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
215+ bool broadcast_en, bool NZ2DN_en) {}
216+ 
217+inline void copy_matrix_cc_to_ub(__ubuf__ half *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
218+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
219+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
220+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
221+ bool broadcast_en, bool NZ2DN_en) {}
222+ 
223+inline void copy_matrix_cc_to_ub(__ubuf__ float8_e4m3_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
224+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
225+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
226+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
227+ bool broadcast_en, bool NZ2DN_en) {}
228+ 
229+inline void copy_matrix_cc_to_ub(__ubuf__ float8_e5m2_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
230+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
231+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
232+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
233+ bool broadcast_en, bool NZ2DN_en) {}
234+ 
235+inline void copy_matrix_cc_to_ub(__ubuf__ hifloat8_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
236+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
237+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
238+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
239+ bool broadcast_en, bool NZ2DN_en) {}
240+ 
241+inline void copy_matrix_cc_to_ub(__ubuf__ int8_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
242+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
243+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
244+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
245+ bool broadcast_en, bool NZ2DN_en) {}
246+ 
247+inline void copy_matrix_cc_to_ub(__ubuf__ uint8_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
248+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
249+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
250+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
251+ bool broadcast_en, bool NZ2DN_en) {}
252+ 
253+inline void copy_matrix_cc_to_ub(__ubuf__ int32_t *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
254+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
255+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
256+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
257+ bool broadcast_en, bool NZ2DN_en) {}
258+ 
259+inline void copy_matrix_cc_to_ub_s4(__ubuf__ void *dst_addr, __cc__ float *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
260+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
261+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
262+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
263+ bool broadcast_en, bool NZ2DN_en) {}
264+ 
265+inline void copy_matrix_cc_to_ub_s4(__ubuf__ void *dst_addr, __cc__ int32_t *src_addr, uint8_t sid, uint16_t n_size, uint16_t m_size,
266+ uint32_t loop_dst_stride, uint16_t loop_src_stride, uint8_t dual_dst_ctl, bool sub_blockid, uint8_t clip_relu_pre, uint8_t unit_flag_ctl,
267+ uint64_t quant_pre, uint8_t relu_pre, bool split_en, bool NZ2ND_en, uint64_t quant_post, uint8_t relu_post, bool clip_relu_post,
268+ bool loop_enhance_en, uint8_t eltwise_op, bool eltwise_antq_en, bool loop_enhance_merge_en, bool C0_pad_en, bool wino_post_en,
269+ bool broadcast_en, bool NZ2DN_en) {}
270+ 
271+// ==========load_gm_to_cbuf_2dv2===========
272+inline void load_gm_to_cbuf_2dv2(__cbuf__ bfloat16_t *dst, __gm__ bfloat16_t *src, uint32_t m_start_position,
273+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
274+ uint8_t l2_cache_ctl) {}
275+ 
276+inline void load_gm_to_cbuf_2dv2(__cbuf__ float *dst, __gm__ float *src, uint32_t m_start_position,
277+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
278+ uint8_t l2_cache_ctl) {}
279+ 
280+inline void load_gm_to_cbuf_2dv2(__cbuf__ float8_e4m3_t *dst, __gm__ float8_e4m3_t *src, uint32_t m_start_position,
281+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
282+ uint8_t l2_cache_ctl) {}
283+ 
284+inline void load_gm_to_cbuf_2dv2(__cbuf__ float8_e5m2_t *dst, __gm__ float8_e5m2_t *src, uint32_t m_start_position,
285+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
286+ uint8_t l2_cache_ctl) {}
287+ 
288+inline void load_gm_to_cbuf_2dv2(__cbuf__ half *dst, __gm__ half *src, uint32_t m_start_position,
289+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
290+ uint8_t l2_cache_ctl) {}
291+ 
292+inline void load_gm_to_cbuf_2dv2(__cbuf__ hifloat8_t *dst, __gm__ hifloat8_t *src, uint32_t m_start_position,
293+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
294+ uint8_t l2_cache_ctl) {}
295+ 
296+inline void load_gm_to_cbuf_2dv2(__cbuf__ int16_t *dst, __gm__ int16_t *src, uint32_t m_start_position,
297+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
298+ uint8_t l2_cache_ctl) {}
299+ 
300+inline void load_gm_to_cbuf_2dv2(__cbuf__ int32_t *dst, __gm__ int32_t *src, uint32_t m_start_position,
301+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
302+ uint8_t l2_cache_ctl) {}
303+ 
304+inline void load_gm_to_cbuf_2dv2(__cbuf__ int8_t *dst, __gm__ int8_t *src, uint32_t m_start_position,
305+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
306+ uint8_t l2_cache_ctl) {}
307+ 
308+inline void load_gm_to_cbuf_2dv2(__cbuf__ uint16_t *dst, __gm__ uint16_t *src, uint32_t m_start_position,
309+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
310+ uint8_t l2_cache_ctl) {}
311+ 
312+inline void load_gm_to_cbuf_2dv2(__cbuf__ uint32_t *dst, __gm__ uint32_t *src, uint32_t m_start_position,
313+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
314+ uint8_t l2_cache_ctl) {}
315+ 
316+inline void load_gm_to_cbuf_2dv2(__cbuf__ uint8_t *dst, __gm__ uint8_t *src, uint32_t m_start_position,
317+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
318+ uint8_t l2_cache_ctl) {}
319+ 
320+// ==========load_gm_to_cbuf_2dv2_s4===========
321+inline void load_gm_to_cbuf_2dv2_s4(__cbuf__ float4_e1m2x2_t *dst, __gm__ float4_e1m2x2_t *src, uint32_t m_start_position,
322+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
323+ uint8_t l2_cache_ctl) {}
324+ 
325+inline void load_gm_to_cbuf_2dv2_s4(__cbuf__ float4_e2m1x2_t *dst, __gm__ float4_e2m1x2_t *src, uint32_t m_start_position,
326+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
327+ uint8_t l2_cache_ctl) {}
328+ 
329+inline void load_gm_to_cbuf_2dv2_s4(__cbuf__ void *dst, __gm__ void *src, uint32_t m_start_position,
330+ uint32_t k_start_position, uint16_t dst_stride, uint16_t m_step, uint16_t k_step, uint8_t sid, uint8_t decomp_mode,
331+ uint8_t l2_cache_ctl) {}
332+ 
333+// ==========copy_cbuf_to_ubuf===========
334+inline void copy_cbuf_to_ubuf(__ubuf__ void *dst_addr, __cbuf__ void *src_addr, bool sub_blockid,
335+ uint16_t burst_num, uint16_t burst_len, uint16_t src_gap, uint16_t dst_gap) {}
336+ 
337+ 
338+inline void create_cbuf_matrix_h(__cbuf__ bfloat16_t *dst, int64_t repeat, half value) {}
339+ 
340+inline void create_cbuf_matrix_ui(__cbuf__ bfloat16_t *dst, int64_t repeat, uint32_t value) {}
341+ 
35inline void vmrgsort4(__ubuf__ half* dst, __ubuf__ half* src, uint8_t repeat, uint16_t regionProposalLi0,342inline void vmrgsort4(__ubuf__ half* dst, __ubuf__ half* src, uint8_t repeat, uint16_t regionProposalLi0,
36 uint16_t regionProposalLi1, uint16_t regionProposalLi2, uint16_t regionProposalLi3, bool isAllStored,343 uint16_t regionProposalLi1, uint16_t regionProposalLi2, uint16_t regionProposalLi3, bool isAllStored,
37 uint8_t maskSignal) {}344 uint8_t maskSignal) {}