RV32IMV平台下__udivdi3函数未定义问题求实现代码
解决RV32IMV平台下__udivdi3未定义的链接错误
在基于FPGA的RV32IMV核心上开发C代码,使用支持RISC-V向量intrinsic的LLVM编译器时,出现如下链接错误:
error: undefined symbol: __udivdi3
这是因为RV32IMV属于32位RISC-V架构,默认标准库未包含64位无符号整数除法的辅助函数__udivdi3,需要自行实现该函数并添加到项目中。
__udivdi3函数实现
以下是适配RV32架构的__udivdi3实现,用于计算两个64位无符号整数的商:
#include <stdint.h> uint64_t __udivdi3(uint64_t num, uint64_t den) { uint64_t quot = 0, qbit = 1; if (den == 0) { // 除零错误处理,可根据项目需求自定义行为 return 0; } // 将除数左移,直到其最高位与被除数最高位对齐 while ((int64_t)den >= 0 && den < num) { den <<= 1; qbit <<= 1; } while (qbit) { if (den <= num) { num -= den; quot += qbit; } den >>= 1; qbit >>= 1; } return quot; }
补充:已验证可用的memcpy实现
你已经实现的memcpy可继续使用,这里补充标准要求的返回值以适配规范:
void* memcpy(void* dest, const void* src, size_t n) { for (size_t i = 0; i < n; i++) { ((char*)dest)[i] = ((char*)src)[i]; } return dest; }
内容的提问来源于stack exchange,提问作者Seyed Kian
相关产品推荐
相关产品推荐

