首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软浮点方法的RV32E版本,如__divdi3和__mulsi3

软浮点方法的RV32E版本,如__divdi3和__mulsi3
EN

Stack Overflow用户
提问于 2018-01-09 01:26:09
回答 1查看 517关注 0票数 2

通过使用正式的riscv GitHub工具链(github.com/riscv/riscv-gnu- toolchain ),我成功地在我的Intel机器上构建了一个GitHub交叉编译器,配置如下:

代码语言:javascript
复制
./configure --prefix=/home/riscv --with-arch=rv32i --with-abi=ilp32e

ip32e为RV32E指定软浮动。这将生成一个在我的简单C源代码上工作良好的编译器。如果我拆解创建的应用程序,那么它确实遵循RV32E规范。它只为使用前16个寄存器的代码生成程序集。

我使用静态链接,它引入了预期的软浮动例程集,如__divdi3和__mulsi3。不幸的是,拉入例程使用所有32个寄存器,而不是RV32E的限制下16。因此,不是很有用!

我找不到这个静态链接的代码是从哪里来的,它是从C源代码编译的,因此没有RV32E限制而被编译吗?或者它是作为手工编码的程序集编写的,它只为完整的RV32I而不是RV32E编写?我试图在源代码中找到grep,但没有找到任何类似静态链接的实际代码。

有什么想法吗?

编辑:只要签入更多细节,编译器就不会使用前16个寄存器生成。结果发现,使用一个简单的测试例程,它只能使用前16个,但更复杂的代码也使用其他代码。也许RV32E还没有实现?

EN

回答 1

Stack Overflow用户

发布于 2018-01-09 09:10:18

configure.ac文件包含以下代码:

代码语言:javascript
复制
AS_IF([test "x$with_abi" == xdefault],
    [AS_CASE([$with_arch],
        [*rv64g* | *rv64*d*], [with_abi=lp64d],
        [*rv64*f*], [with_abi=lp64f],
        [*rv64*], [with_abi=lp64],
        [*rv32g* | *rv32*d*], [with_abi=ilp32d],
        [*rv32*f*], [with_abi=ilp32f],
        [*rv32*], [with_abi=ilp32],
        [AC_MSG_ERROR([Unknown arch])]
)])

它似乎将rv32i的输入映射到ABI ilp32,而忽略了e。因此,对...e ABI的支持似乎还没有完全实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48160285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档