* Copyright (c) 2026 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
#if !defined(ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS)
#warning \
"impl/c_api/reg_base_impl/sync_intf_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."
#define ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
#define UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
#endif
#ifndef IMPL_C_API_REG_BASE_IMPL_SYNC_INTF_IMPL_H
#define IMPL_C_API_REG_BASE_IMPL_SYNC_INTF_IMPL_H
#include "impl/c_api/reg_base_impl/utils_impl.h"
#if defined(__NPU_ARCH__) && (__NPU_ARCH__ == 3510)
#include "impl/c_api/reg_base_impl/npu_arch_3510/sync_intf_impl.h"
#endif
__aicore__ inline void asc_sync_notify_impl_aic(pipe_t pipe, pipe_t tpipe, event_t id)
{
if (pipe == pipe_t::PIPE_S) {
if (tpipe == pipe_t::PIPE_MTE2) {
set_flag(pipe_t::PIPE_S, pipe_t::PIPE_MTE2, id);
} else if (tpipe == pipe_t::PIPE_FIX) {
set_flag(pipe_t::PIPE_S, pipe_t::PIPE_FIX, id);
}
} else if (pipe == pipe_t::PIPE_M) {
if (tpipe == pipe_t::PIPE_MTE1) {
set_flag(pipe_t::PIPE_M, pipe_t::PIPE_MTE1, id);
} else if (tpipe == pipe_t::PIPE_FIX) {
set_flag(pipe_t::PIPE_M, pipe_t::PIPE_FIX, id);
}
} else if (pipe == pipe_t::PIPE_MTE1) {
if (tpipe == pipe_t::PIPE_M) {
set_flag(pipe_t::PIPE_MTE1, pipe_t::PIPE_M, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
set_flag(pipe_t::PIPE_MTE1, pipe_t::PIPE_MTE2, id);
} else if (tpipe == pipe_t::PIPE_FIX) {
set_flag(pipe_t::PIPE_MTE1, pipe_t::PIPE_FIX, id);
}
} else if (pipe == pipe_t::PIPE_MTE2) {
if (tpipe == pipe_t::PIPE_S) {
set_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_MTE1) {
set_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_MTE1, id);
} else if (tpipe == pipe_t::PIPE_FIX) {
set_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_FIX, id);
}
} else if (pipe == pipe_t::PIPE_FIX) {
if (tpipe == pipe_t::PIPE_S) {
set_flag(pipe_t::PIPE_FIX, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_M) {
set_flag(pipe_t::PIPE_FIX, pipe_t::PIPE_M, id);
} else if (tpipe == pipe_t::PIPE_MTE1) {
set_flag(pipe_t::PIPE_FIX, pipe_t::PIPE_MTE1, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
set_flag(pipe_t::PIPE_FIX, pipe_t::PIPE_MTE2, id);
}
}
}
__aicore__ inline void asc_sync_notify_impl_aiv(pipe_t pipe, pipe_t tpipe, event_t id)
{
if (pipe == pipe_t::PIPE_S) {
if (tpipe == pipe_t::PIPE_V) {
set_flag(pipe_t::PIPE_S, pipe_t::PIPE_V, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
set_flag(pipe_t::PIPE_S, pipe_t::PIPE_MTE2, id);
} else if (tpipe == pipe_t::PIPE_MTE3) {
set_flag(pipe_t::PIPE_S, pipe_t::PIPE_MTE3, id);
}
} else if (pipe == pipe_t::PIPE_V) {
if (tpipe == pipe_t::PIPE_S) {
set_flag(pipe_t::PIPE_V, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
set_flag(pipe_t::PIPE_V, pipe_t::PIPE_MTE2, id);
} else if (tpipe == pipe_t::PIPE_MTE3) {
set_flag(pipe_t::PIPE_V, pipe_t::PIPE_MTE3, id);
}
} else if (pipe == pipe_t::PIPE_MTE2) {
if (tpipe == pipe_t::PIPE_S) {
set_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_V) {
set_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_V, id);
} else if (tpipe == pipe_t::PIPE_MTE3) {
set_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_MTE3, id);
}
} else if (pipe == pipe_t::PIPE_MTE3) {
if (tpipe == pipe_t::PIPE_S) {
set_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_V) {
set_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_V, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
set_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_MTE2, id);
}
}
}
__aicore__ inline void asc_sync_wait_impl_aic(pipe_t pipe, pipe_t tpipe, event_t id)
{
if (pipe == pipe_t::PIPE_S) {
if (tpipe == pipe_t::PIPE_MTE2) {
wait_flag(pipe_t::PIPE_S, pipe_t::PIPE_MTE2, id);
} else if (tpipe == pipe_t::PIPE_FIX) {
wait_flag(pipe_t::PIPE_S, pipe_t::PIPE_FIX, id);
}
} else if (pipe == pipe_t::PIPE_M) {
if (tpipe == pipe_t::PIPE_MTE1) {
wait_flag(pipe_t::PIPE_M, pipe_t::PIPE_MTE1, id);
} else if (tpipe == pipe_t::PIPE_FIX) {
wait_flag(pipe_t::PIPE_M, pipe_t::PIPE_FIX, id);
}
} else if (pipe == pipe_t::PIPE_MTE1) {
if (tpipe == pipe_t::PIPE_M) {
wait_flag(pipe_t::PIPE_MTE1, pipe_t::PIPE_M, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
wait_flag(pipe_t::PIPE_MTE1, pipe_t::PIPE_MTE2, id);
} else if (tpipe == pipe_t::PIPE_FIX) {
wait_flag(pipe_t::PIPE_MTE1, pipe_t::PIPE_FIX, id);
}
} else if (pipe == pipe_t::PIPE_MTE2) {
if (tpipe == pipe_t::PIPE_S) {
wait_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_MTE1) {
wait_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_MTE1, id);
} else if (tpipe == pipe_t::PIPE_FIX) {
wait_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_FIX, id);
}
} else if (pipe == pipe_t::PIPE_FIX) {
if (tpipe == pipe_t::PIPE_S) {
wait_flag(pipe_t::PIPE_FIX, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_M) {
wait_flag(pipe_t::PIPE_FIX, pipe_t::PIPE_M, id);
} else if (tpipe == pipe_t::PIPE_MTE1) {
wait_flag(pipe_t::PIPE_FIX, pipe_t::PIPE_MTE1, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
wait_flag(pipe_t::PIPE_FIX, pipe_t::PIPE_MTE2, id);
}
}
}
__aicore__ inline void asc_sync_wait_impl_aiv(pipe_t pipe, pipe_t tpipe, event_t id)
{
if (pipe == pipe_t::PIPE_S) {
if (tpipe == pipe_t::PIPE_V) {
wait_flag(pipe_t::PIPE_S, pipe_t::PIPE_V, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
wait_flag(pipe_t::PIPE_S, pipe_t::PIPE_MTE2, id);
} else if (tpipe == pipe_t::PIPE_MTE3) {
wait_flag(pipe_t::PIPE_S, pipe_t::PIPE_MTE3, id);
}
} else if (pipe == pipe_t::PIPE_V) {
if (tpipe == pipe_t::PIPE_S) {
wait_flag(pipe_t::PIPE_V, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
wait_flag(pipe_t::PIPE_V, pipe_t::PIPE_MTE2, id);
} else if (tpipe == pipe_t::PIPE_MTE3) {
wait_flag(pipe_t::PIPE_V, pipe_t::PIPE_MTE3, id);
}
} else if (pipe == pipe_t::PIPE_MTE2) {
if (tpipe == pipe_t::PIPE_S) {
wait_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_V) {
wait_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_V, id);
} else if (tpipe == pipe_t::PIPE_MTE3) {
wait_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_MTE3, id);
}
} else if (pipe == pipe_t::PIPE_MTE3) {
if (tpipe == pipe_t::PIPE_S) {
wait_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_S, id);
} else if (tpipe == pipe_t::PIPE_V) {
wait_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_V, id);
} else if (tpipe == pipe_t::PIPE_MTE2) {
wait_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_MTE2, id);
}
}
}
__aicore__ inline void asc_lock(pipe_t pipe, uint8_t mutex_id, const asc_mutex_execute_mode mode)
{
if (mode == ASC_LOCK_BLOCK) {
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
get_buf(pipe_t::PIPE_S, mutex_id, false);
} else if (pipe == pipe_t::PIPE_M) {
get_buf(pipe_t::PIPE_M, mutex_id, false);
} else if (pipe == pipe_t::PIPE_MTE1) {
get_buf(pipe_t::PIPE_MTE1, mutex_id, false);
} else if (pipe == pipe_t::PIPE_MTE2) {
get_buf(pipe_t::PIPE_MTE2, mutex_id, false);
} else if (pipe == pipe_t::PIPE_FIX) {
get_buf(pipe_t::PIPE_FIX, mutex_id, false);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
get_buf(pipe_t::PIPE_S, mutex_id, false);
} else if (pipe == pipe_t::PIPE_MTE2) {
get_buf(pipe_t::PIPE_MTE2, mutex_id, false);
} else if (pipe == pipe_t::PIPE_MTE3) {
get_buf(pipe_t::PIPE_MTE3, mutex_id, false);
} else if (pipe == pipe_t::PIPE_V) {
get_buf(pipe_t::PIPE_V, mutex_id, false);
}
}
} else {
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
get_buf(pipe_t::PIPE_S, mutex_id, true);
} else if (pipe == pipe_t::PIPE_M) {
get_buf(pipe_t::PIPE_M, mutex_id, true);
} else if (pipe == pipe_t::PIPE_MTE1) {
get_buf(pipe_t::PIPE_MTE1, mutex_id, true);
} else if (pipe == pipe_t::PIPE_MTE2) {
get_buf(pipe_t::PIPE_MTE2, mutex_id, true);
} else if (pipe == pipe_t::PIPE_FIX) {
get_buf(pipe_t::PIPE_FIX, mutex_id, true);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
get_buf(pipe_t::PIPE_S, mutex_id, true);
} else if (pipe == pipe_t::PIPE_MTE2) {
get_buf(pipe_t::PIPE_MTE2, mutex_id, true);
} else if (pipe == pipe_t::PIPE_MTE3) {
get_buf(pipe_t::PIPE_MTE3, mutex_id, true);
} else if (pipe == pipe_t::PIPE_V) {
get_buf(pipe_t::PIPE_V, mutex_id, true);
}
}
}
}
__aicore__ inline void asc_lock(pipe_t pipe, uint8_t mutex_id) { asc_lock(pipe, mutex_id, ASC_LOCK_BLOCK); }
__aicore__ inline void asc_unlock(pipe_t pipe, uint8_t mutex_id, const asc_mutex_execute_mode mode)
{
if (mode == ASC_LOCK_BLOCK) {
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
rls_buf(pipe_t::PIPE_S, mutex_id, false);
} else if (pipe == pipe_t::PIPE_M) {
rls_buf(pipe_t::PIPE_M, mutex_id, false);
} else if (pipe == pipe_t::PIPE_MTE1) {
rls_buf(pipe_t::PIPE_MTE1, mutex_id, false);
} else if (pipe == pipe_t::PIPE_MTE2) {
rls_buf(pipe_t::PIPE_MTE2, mutex_id, false);
} else if (pipe == pipe_t::PIPE_FIX) {
rls_buf(pipe_t::PIPE_FIX, mutex_id, false);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
rls_buf(pipe_t::PIPE_S, mutex_id, false);
} else if (pipe == pipe_t::PIPE_MTE2) {
rls_buf(pipe_t::PIPE_MTE2, mutex_id, false);
} else if (pipe == pipe_t::PIPE_MTE3) {
rls_buf(pipe_t::PIPE_MTE3, mutex_id, false);
} else if (pipe == pipe_t::PIPE_V) {
rls_buf(pipe_t::PIPE_V, mutex_id, false);
}
}
} else {
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
rls_buf(pipe_t::PIPE_S, mutex_id, true);
} else if (pipe == pipe_t::PIPE_M) {
rls_buf(pipe_t::PIPE_M, mutex_id, true);
} else if (pipe == pipe_t::PIPE_MTE1) {
rls_buf(pipe_t::PIPE_MTE1, mutex_id, true);
} else if (pipe == pipe_t::PIPE_MTE2) {
rls_buf(pipe_t::PIPE_MTE2, mutex_id, true);
} else if (pipe == pipe_t::PIPE_FIX) {
rls_buf(pipe_t::PIPE_FIX, mutex_id, true);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
rls_buf(pipe_t::PIPE_S, mutex_id, true);
} else if (pipe == pipe_t::PIPE_MTE2) {
rls_buf(pipe_t::PIPE_MTE2, mutex_id, true);
} else if (pipe == pipe_t::PIPE_MTE3) {
rls_buf(pipe_t::PIPE_MTE3, mutex_id, true);
} else if (pipe == pipe_t::PIPE_V) {
rls_buf(pipe_t::PIPE_V, mutex_id, true);
}
}
}
}
__aicore__ inline void asc_unlock(pipe_t pipe, uint8_t mutex_id) { asc_unlock(pipe, mutex_id, ASC_LOCK_BLOCK); }
__aicore__ inline void asc_sync_vec(int id)
{
set_flag(pipe_t::PIPE_V, pipe_t::PIPE_MTE2, static_cast<event_t>(id));
set_flag(pipe_t::PIPE_V, pipe_t::PIPE_MTE3, static_cast<event_t>(id));
set_flag(pipe_t::PIPE_V, pipe_t::PIPE_S, static_cast<event_t>(id));
wait_flag(pipe_t::PIPE_V, pipe_t::PIPE_MTE2, static_cast<event_t>(id));
wait_flag(pipe_t::PIPE_V, pipe_t::PIPE_MTE3, static_cast<event_t>(id));
wait_flag(pipe_t::PIPE_V, pipe_t::PIPE_S, static_cast<event_t>(id));
}
__aicore__ inline void asc_sync_pipe(pipe_t pipe)
{
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_M) {
pipe_barrier(pipe_t::PIPE_M);
} else if (pipe == pipe_t::PIPE_MTE1) {
pipe_barrier(pipe_t::PIPE_MTE1);
} else if (pipe == pipe_t::PIPE_MTE2) {
pipe_barrier(pipe_t::PIPE_MTE2);
} else if (pipe == pipe_t::PIPE_ALL) {
pipe_barrier(pipe_t::PIPE_ALL);
} else if (pipe == pipe_t::PIPE_FIX) {
pipe_barrier(pipe_t::PIPE_FIX);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_MTE2) {
pipe_barrier(pipe_t::PIPE_MTE2);
} else if (pipe == pipe_t::PIPE_MTE3) {
pipe_barrier(pipe_t::PIPE_MTE3);
} else if (pipe == pipe_t::PIPE_ALL) {
pipe_barrier(pipe_t::PIPE_ALL);
}
}
}
__aicore__ inline void asc_sync_notify(pipe_t pipe, pipe_t tpipe, event_t id)
{
if ASC_IS_AIC {
asc_sync_notify_impl_aic(pipe, tpipe, id);
} else if ASC_IS_AIV {
asc_sync_notify_impl_aiv(pipe, tpipe, id);
}
}
__aicore__ inline void asc_sync_wait(pipe_t pipe, pipe_t tpipe, event_t id)
{
if ASC_IS_AIC {
asc_sync_wait_impl_aic(pipe, tpipe, id);
} else if ASC_IS_AIV {
asc_sync_wait_impl_aiv(pipe, tpipe, id);
}
}
__aicore__ inline void asc_sync_mte3(int id)
{
set_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_MTE2, static_cast<event_t>(id));
set_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_V, static_cast<event_t>(id));
wait_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_MTE2, static_cast<event_t>(id));
wait_flag(pipe_t::PIPE_MTE3, pipe_t::PIPE_V, static_cast<event_t>(id));
pipe_barrier(pipe_t::PIPE_MTE3);
}
__aicore__ inline void asc_sync_mte2(int id)
{
set_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_MTE3, static_cast<event_t>(id));
set_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_V, static_cast<event_t>(id));
wait_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_MTE3, static_cast<event_t>(id));
wait_flag(pipe_t::PIPE_MTE2, pipe_t::PIPE_V, static_cast<event_t>(id));
pipe_barrier(pipe_t::PIPE_MTE2);
}
__aicore__ inline void asc_sync() { pipe_barrier(pipe_t::PIPE_ALL); }
__aicore__ inline void asc_sync_block_arrive(pipe_t pipe, int64_t flag_id)
{
constexpr uint16_t SYNC_MODE_SHIFT_VALUE = 4;
constexpr uint16_t SYNC_FLAG_SHIFT_VALUE = 8;
uint16_t mode = 0x02;
uint64_t config = (0x1 + ((mode & 0x3) << SYNC_MODE_SHIFT_VALUE) + ((flag_id & 0xf) << SYNC_FLAG_SHIFT_VALUE));
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_M) {
ffts_cross_core_sync(pipe_t::PIPE_M, config);
} else if (pipe == pipe_t::PIPE_MTE1) {
ffts_cross_core_sync(pipe_t::PIPE_MTE1, config);
} else if (pipe == pipe_t::PIPE_MTE2) {
ffts_cross_core_sync(pipe_t::PIPE_MTE2, config);
} else if (pipe == pipe_t::PIPE_FIX) {
ffts_cross_core_sync(pipe_t::PIPE_FIX, config);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_MTE2) {
ffts_cross_core_sync(pipe_t::PIPE_MTE2, config);
} else if (pipe == pipe_t::PIPE_MTE3) {
ffts_cross_core_sync(pipe_t::PIPE_MTE3, config);
} else if (pipe == pipe_t::PIPE_V) {
ffts_cross_core_sync(pipe_t::PIPE_V, config);
}
}
}
__aicore__ inline void asc_sync_subblock_arrive(pipe_t pipe, int64_t flag_id)
{
constexpr uint16_t SYNC_MODE_SHIFT_VALUE = 4;
constexpr uint16_t SYNC_FLAG_SHIFT_VALUE = 8;
uint16_t mode = 0x01;
uint64_t config = (0x1 + ((mode & 0x3) << SYNC_MODE_SHIFT_VALUE) + ((flag_id & 0xf) << SYNC_FLAG_SHIFT_VALUE));
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_M) {
ffts_cross_core_sync(pipe_t::PIPE_M, config);
} else if (pipe == pipe_t::PIPE_MTE1) {
ffts_cross_core_sync(pipe_t::PIPE_MTE1, config);
} else if (pipe == pipe_t::PIPE_MTE2) {
ffts_cross_core_sync(pipe_t::PIPE_MTE2, config);
} else if (pipe == pipe_t::PIPE_FIX) {
ffts_cross_core_sync(pipe_t::PIPE_FIX, config);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_MTE2) {
ffts_cross_core_sync(pipe_t::PIPE_MTE2, config);
} else if (pipe == pipe_t::PIPE_MTE3) {
ffts_cross_core_sync(pipe_t::PIPE_MTE3, config);
} else if (pipe == pipe_t::PIPE_V) {
ffts_cross_core_sync(pipe_t::PIPE_V, config);
}
}
}
__aicore__ inline void asc_sync_inter_arrive(pipe_t pipe, int64_t flag_id)
{
constexpr uint16_t SYNC_MODE_SHIFT_VALUE = 4;
constexpr uint16_t SYNC_FLAG_SHIFT_VALUE = 8;
uint16_t mode = 0x00;
uint64_t config = (0x1 + ((mode & 0x3) << SYNC_MODE_SHIFT_VALUE) + ((flag_id & 0xf) << SYNC_FLAG_SHIFT_VALUE));
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_M) {
ffts_cross_core_sync(pipe_t::PIPE_M, config);
} else if (pipe == pipe_t::PIPE_MTE1) {
ffts_cross_core_sync(pipe_t::PIPE_MTE1, config);
} else if (pipe == pipe_t::PIPE_MTE2) {
ffts_cross_core_sync(pipe_t::PIPE_MTE2, config);
} else if (pipe == pipe_t::PIPE_FIX) {
ffts_cross_core_sync(pipe_t::PIPE_FIX, config);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_MTE2) {
ffts_cross_core_sync(pipe_t::PIPE_MTE2, config);
} else if (pipe == pipe_t::PIPE_MTE3) {
ffts_cross_core_sync(pipe_t::PIPE_MTE3, config);
} else if (pipe == pipe_t::PIPE_V) {
ffts_cross_core_sync(pipe_t::PIPE_V, config);
}
}
}
__aicore__ inline void asc_sync_data_barrier(mem_dsb_t arg)
{
if ASC_IS_AIV {
if (arg == mem_dsb_t::DSB_ALL) {
dsb(mem_dsb_t::DSB_ALL);
} else if (arg == mem_dsb_t::DSB_DDR) {
dsb(mem_dsb_t::DSB_DDR);
} else if (arg == mem_dsb_t::DSB_UB) {
dsb(mem_dsb_t::DSB_UB);
} else if (arg == mem_dsb_t::DSB_SEQ) {
dsb(mem_dsb_t::DSB_SEQ);
}
} else if ASC_IS_AIC {
if (arg == mem_dsb_t::DSB_ALL) {
dsb(mem_dsb_t::DSB_ALL);
} else if (arg == mem_dsb_t::DSB_DDR) {
dsb(mem_dsb_t::DSB_DDR);
} else if (arg == mem_dsb_t::DSB_SEQ) {
dsb(mem_dsb_t::DSB_SEQ);
}
}
}
__aicore__ inline void asc_sync_intra_arrive(pipe_t pipe, uint64_t sync_id)
{
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
set_intra_block(pipe_t::PIPE_S, sync_id);
} else if (pipe == pipe_t::PIPE_M) {
set_intra_block(pipe_t::PIPE_M, sync_id);
} else if (pipe == pipe_t::PIPE_MTE1) {
set_intra_block(pipe_t::PIPE_MTE1, sync_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
set_intra_block(pipe_t::PIPE_MTE2, sync_id);
} else if (pipe == pipe_t::PIPE_FIX) {
set_intra_block(pipe_t::PIPE_FIX, sync_id);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
set_intra_block(pipe_t::PIPE_S, sync_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
set_intra_block(pipe_t::PIPE_MTE2, sync_id);
} else if (pipe == pipe_t::PIPE_MTE3) {
set_intra_block(pipe_t::PIPE_MTE3, sync_id);
} else if (pipe == pipe_t::PIPE_V) {
set_intra_block(pipe_t::PIPE_V, sync_id);
}
}
}
__aicore__ inline void asc_sync_intra_wait(pipe_t pipe, uint64_t sync_id)
{
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
wait_intra_block(pipe_t::PIPE_S, sync_id);
} else if (pipe == pipe_t::PIPE_M) {
wait_intra_block(pipe_t::PIPE_M, sync_id);
} else if (pipe == pipe_t::PIPE_MTE1) {
wait_intra_block(pipe_t::PIPE_MTE1, sync_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
wait_intra_block(pipe_t::PIPE_MTE2, sync_id);
} else if (pipe == pipe_t::PIPE_FIX) {
wait_intra_block(pipe_t::PIPE_FIX, sync_id);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
wait_intra_block(pipe_t::PIPE_S, sync_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
wait_intra_block(pipe_t::PIPE_MTE2, sync_id);
} else if (pipe == pipe_t::PIPE_MTE3) {
wait_intra_block(pipe_t::PIPE_MTE3, sync_id);
} else if (pipe == pipe_t::PIPE_V) {
wait_intra_block(pipe_t::PIPE_V, sync_id);
}
}
}
__aicore__ inline void asc_sync_subblock_wait(pipe_t pipe, int64_t flag_id)
{
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
wait_flag_dev(pipe_t::PIPE_S, flag_id);
} else if (pipe == pipe_t::PIPE_M) {
wait_flag_dev(pipe_t::PIPE_M, flag_id);
} else if (pipe == pipe_t::PIPE_MTE1) {
wait_flag_dev(pipe_t::PIPE_MTE1, flag_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
wait_flag_dev(pipe_t::PIPE_MTE2, flag_id);
} else if (pipe == pipe_t::PIPE_FIX) {
wait_flag_dev(pipe_t::PIPE_FIX, flag_id);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
wait_flag_dev(pipe_t::PIPE_S, flag_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
wait_flag_dev(pipe_t::PIPE_MTE2, flag_id);
} else if (pipe == pipe_t::PIPE_MTE3) {
wait_flag_dev(pipe_t::PIPE_MTE3, flag_id);
} else if (pipe == pipe_t::PIPE_V) {
wait_flag_dev(pipe_t::PIPE_V, flag_id);
}
}
}
__aicore__ inline void asc_sync_inter_wait(pipe_t pipe, int64_t flag_id)
{
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
wait_flag_dev(pipe_t::PIPE_S, flag_id);
} else if (pipe == pipe_t::PIPE_M) {
wait_flag_dev(pipe_t::PIPE_M, flag_id);
} else if (pipe == pipe_t::PIPE_MTE1) {
wait_flag_dev(pipe_t::PIPE_MTE1, flag_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
wait_flag_dev(pipe_t::PIPE_MTE2, flag_id);
} else if (pipe == pipe_t::PIPE_FIX) {
wait_flag_dev(pipe_t::PIPE_FIX, flag_id);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
wait_flag_dev(pipe_t::PIPE_S, flag_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
wait_flag_dev(pipe_t::PIPE_MTE2, flag_id);
} else if (pipe == pipe_t::PIPE_MTE3) {
wait_flag_dev(pipe_t::PIPE_MTE3, flag_id);
} else if (pipe == pipe_t::PIPE_V) {
wait_flag_dev(pipe_t::PIPE_V, flag_id);
}
}
}
__aicore__ inline void asc_sync_block_wait(pipe_t pipe, int64_t flag_id)
{
if ASC_IS_AIC {
if (pipe == pipe_t::PIPE_S) {
wait_flag_dev(pipe_t::PIPE_S, flag_id);
} else if (pipe == pipe_t::PIPE_M) {
wait_flag_dev(pipe_t::PIPE_M, flag_id);
} else if (pipe == pipe_t::PIPE_MTE1) {
wait_flag_dev(pipe_t::PIPE_MTE1, flag_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
wait_flag_dev(pipe_t::PIPE_MTE2, flag_id);
} else if (pipe == pipe_t::PIPE_FIX) {
wait_flag_dev(pipe_t::PIPE_FIX, flag_id);
}
} else if ASC_IS_AIV {
if (pipe == pipe_t::PIPE_S) {
wait_flag_dev(pipe_t::PIPE_S, flag_id);
} else if (pipe == pipe_t::PIPE_MTE2) {
wait_flag_dev(pipe_t::PIPE_MTE2, flag_id);
} else if (pipe == pipe_t::PIPE_MTE3) {
wait_flag_dev(pipe_t::PIPE_MTE3, flag_id);
} else if (pipe == pipe_t::PIPE_V) {
wait_flag_dev(pipe_t::PIPE_V, flag_id);
}
}
}
#endif
#if defined(UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC)
#undef ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS
#undef UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC
#endif