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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:50:32