arm_neon.h 是如何生成或维护的?

发布于 2025-01-13 00:33:47 字数 425 浏览 0 评论 0原文

Android NDK中有arm_neon.h

$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/include/arm_neon.h

arm_neon.h 内容非常长(对我来说),比如说,在 NDK-r21e 中,有 73681 行:

在此处输入图像描述

我想知道 Clang 编译器是如何生成arm_neon.h 的?它是由某些脚本生成的吗? (抱歉我对LLVM知识匮乏)

There is arm_neon.h in Android NDK:

$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/include/arm_neon.h

The arm_neon.h content is very long (for me), say, in NDK-r21e, with 73681 lines:

enter image description here

I wonder how is the arm_neon.h generated from Clang compiler ? Is it generated from some scripts? (Sorry for my poor knowledge for LLVM)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

老子叫无熙 2025-01-20 00:33:47

对于Clang编译器,有arm_neon.td作为源文件,CMake生成arm_neon.h文件。

准确地说:

  • llvm-project/clang/include/clang/Basic/arm_neon.td
  • llvm-project/clang/lib/Headers/CMakeLists.txt ,提供:
# Generate header files and copy them to the build directory
if(ARM IN_LIST LLVM_TARGETS_TO_BUILD OR AArch64 IN_LIST LLVM_TARGETS_TO_BUILD)
  # Generate arm_neon.h
  clang_generate_header(-gen-arm-neon arm_neon.td arm_neon.h)
  # Generate arm_fp16.h
  clang_generate_header(-gen-arm-fp16 arm_fp16.td arm_fp16.h)
  # Generate arm_sve.h
  clang_generate_header(-gen-arm-sve-header arm_sve.td arm_sve.h)
  # Generate arm_bf16.h
  clang_generate_header(-gen-arm-bf16 arm_bf16.td arm_bf16.h)
  # Generate arm_mve.h
  clang_generate_header(-gen-arm-mve-header arm_mve.td arm_mve.h)
  # Generate arm_cde.h
  clang_generate_header(-gen-arm-cde-header arm_cde.td arm_cde.h)
endif()
  • 从 git 提交历史记录来看,早期没有 arm_neon.td
    输入图片此处描述

For Clang compiler, there is arm_neon.td as source file, and CMake generates arm_neon.h file.

To be precise:

  • there is llvm-project/clang/include/clang/Basic/arm_neon.td
  • there is llvm-project/clang/lib/Headers/CMakeLists.txt, providing:
# Generate header files and copy them to the build directory
if(ARM IN_LIST LLVM_TARGETS_TO_BUILD OR AArch64 IN_LIST LLVM_TARGETS_TO_BUILD)
  # Generate arm_neon.h
  clang_generate_header(-gen-arm-neon arm_neon.td arm_neon.h)
  # Generate arm_fp16.h
  clang_generate_header(-gen-arm-fp16 arm_fp16.td arm_fp16.h)
  # Generate arm_sve.h
  clang_generate_header(-gen-arm-sve-header arm_sve.td arm_sve.h)
  # Generate arm_bf16.h
  clang_generate_header(-gen-arm-bf16 arm_bf16.td arm_bf16.h)
  # Generate arm_mve.h
  clang_generate_header(-gen-arm-mve-header arm_mve.td arm_mve.h)
  # Generate arm_cde.h
  clang_generate_header(-gen-arm-cde-header arm_cde.td arm_cde.h)
endif()
  • From the git commit history, there wasn't arm_neon.td in the early times:
    enter image description here
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文