静态函数用于具有外部链接的内联函数 - 同时尝试在内联函数中使用加载指令

static function is used in an inline function with external linkage - while trying to use load instruction inside an inline function

提问人:Srihari S 提问时间:9/13/2023 最后编辑:Peter CordesSrihari S 更新时间:9/13/2023 访问量:57

问:

我最近在为我的工作使用 clang 编译器。我遇到了以下问题,我在gcc或msvc编译器中都没有遇到

test_newer.c:8:32: fatal error: static function '_mm_loadu_epi8' is used in an inline function with external linkage [-Wstatic-in-inline]
            __m128i testing1 = _mm_loadu_epi8(a); 

以下代码片段复制了相同的问题

#include <stdio.h>
#include <immintrin.h>

#define __forceinline __attribute__((always_inline)) inline

__forceinline void testing() {
            unsigned char a[16] = {3, 4, 2, 5, 3, 2, 1, 2, 5, 6, 7, 9, 10, 11, 3, 4};
            __m128i testing1 = _mm_loadu_epi8(a);
            printf("Sample print\n");
}

int main() {
    testing();
    return 0;
}

这是我用来编译文件的命令——

clang -march=skylake-avx512 -O2 -c -Werror -Wall -Wextra -Wno-reserved-identifier -Weverything -Wfatal-errors test_newer.c -o file1

对于加载时面临的问题,是否还有其他替代方法,同时保留与命令行中使用的相同标志?谢谢

C Clang Simd 内部函数 AVX512

评论

3赞 pmacfarlane 9/13/2023
有没有理由不是?让它能解决问题吗?testing()staticstatic
1赞 0___________ 9/13/2023
我投票关闭这个问题,因为它无法复制 godbolt.org/z/o49sdG434
0赞 0___________ 9/13/2023
或仅发出代码的编译 godbolt.org/z/d4PYGW44r
0赞 Peter Cordes 9/13/2023
你用什么理由代替这里?参见 _mm512_load_epi32 和 _mm512_load_si512 有什么区别?您使用的是什么有此问题的 clang 版本?内部函数 like 不应该被定义为 。_mm_loadu_epi8_mm_loadu_si128_mm_loadu_epi8staticimmintrin.h
2赞 Peter Cordes 9/13/2023
哦,我的错误,在我的 Arch Linux 系统(带有 clang 15)上,声明了内部函数。您是否破坏了标头,因此这些函数最终声明为但不是?但即使这样也不会产生相同的错误:godbolt.org/z/5PTzhhvox 双下划线关键字 like 和 are reserved 用于实现;不要为它们发明自己的用途,只使用诸如 或 来访问已知扩展之类的东西。static __inline__#define __inline__ /* something */staticinline__forceinline__inline____attribute____asm__

答: 暂无答案