You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arm架构上是否存在__yield()内置intrinsic函数?

__yield()是Arm官方编译器(Arm Compiler 5/6,即armcc/armclang)的内置原语,GCC 7.3.1版本确实没有该符号定义,和你使用的ARMv7-A架构无关,是编译器实现差异导致的问题。

  • 该函数的定位和x86下的_mm_pause()完全一致,属于处理器指令级的轻量让出操作,仅会让当前核心暂停数个时钟周期,不会触发操作系统线程调度,所以你找到的__gnu_parallel::__yield(本质是sched_yield()系统调用包装)确实不是目标实现。
  • GCC从12版本开始新增了等价的内置函数__builtin_arm_yield(),如果可以升级编译器版本可以直接使用该函数替代。
  • 低版本GCC下兼容ARMv7-A架构的实现可以直接用内联汇编实现,对应代码如下:
#if defined(__arm__) && defined(__GNUC__)
    __asm__ __volatile__ ("yield" ::: "memory");
#endif

如果要完整适配多编译器的ARM架构yield逻辑,可以参考以下兼容写法:

#if defined(__arm__)
# if defined(__ARMCC_VERSION) || defined(__clang__)
    // 适配Arm官方编译器、Arm Clang
    __yield();
# elif defined(__GNUC__)
#  if __GNUC__ >= 12
    // 适配GCC 12及以上版本
    __builtin_arm_yield();
#  else
    // 适配GCC 12以下版本
    __asm__ __volatile__ ("yield" ::: "memory");
#  endif
# endif
#endif

内容的提问来源于stack exchange,提问作者Jan Hudec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:07