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

求ARM clang下aeabi_ldivmod与__divmoddi4内建函数的接口定义

关于ARM嵌入式编译中__divmoddi4与aeabi_ldivmod的接口及源码问题

1. __divmoddi4的源码与寄存器接口

__divmoddi4是compiler-rt项目中的通用64位有符号除法取模实现,可在该项目的lib/builtins目录下找到其C语言实现文件divmoddi4.c;若需ARM架构的汇编实现,可查看对应ARM子架构的内置函数目录(若未找到特定汇编版本,通用C实现会被编译使用)。

其ARM平台的寄存器调用规则严格遵循AAPCS(ARM架构过程调用标准):

  • 输入参数:
    • 64位被除数:高32位存入R1,低32位存入R0
    • 64位除数:高32位存入R3,低32位存入R2
  • 输出结果:
    • 64位商:高32位存于R1,低32位存于R0
    • 64位余数:高32位存于R3,低32位存于R2

2. aeabi_ldivmod的接口

aeabi_ldivmod是遵循**AEABI(ARM嵌入式应用二进制接口)**标准的封装函数,其接口可结合标准规范与你找到的汇编源码推导:

  • 输入参数(寄存器传递):
    • 64位被除数:高32位在R1,低32位在R0
    • 64位除数:高32位在R3,低32位在R2
    • 余数输出指针(int64_t*):作为第三个参数,若寄存器资源不足则通过栈传递(可从你找到的汇编源码中r4保存余数指针的逻辑验证)
  • 输出逻辑:
    • 64位商:以R1:R0组合作为返回值(符合AAPCS的64位返回规则)
    • 64位余数:由__divmoddi4计算后,写入输入时指定的输出指针指向的内存地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:49:51