使用软件浮点库将GCC移植到新目标

问题描述

我目前正在尝试通过GCC内部使用浮点算术运算,将GCC-9.2.0编译器移植到类似于MIPS架构的新体系结构“ SPIM”:4.2浮点仿真例程([https://reurl.cc/Q3Y1jM])并在QtSpim模拟器上运行。

由于我要使用软浮点进行构建,因此我已在[gcc / config.gcc libgcc / config.host libgcc / config / spim /]下添加/修改了一些文件,并使用配置选项--with-构建了GCC。 float = soft。

我将以下代码用作测试用例:

void main(){
    float a = 10.1111;
    float b = 20.1111;
    float c = a + b;
}

通常,对于“ float c = a + b;”,应调用“ __addsf3”。但是在编译时发生内部编译器错误

0x91dcc1 emit_library_call_value_1(int,rtx_def*,libcall_type,machine_mode,int,std::pair<rtx_def*,machine_mode>*)
         ../../gcc-9.2.0/gcc/calls.c:4966

这种情况的汇编代码尚未完成:

.file   "float-add.c"
        .text
        .globl __addsf3

据我所知,GCC会为RTL指令进行模式匹配。匹配时,它将逐行输出该模式的汇编代码

我想我可能无法在某些特定模式下为RTL指令提供足够的模式。还有其他人建议我在某些特定模式下为RTL指令提供属性模式。这意味着我需要在机器描述文件(例如target.md)中提供它。而且我应该在callgen中为它们中的每个发出libcall。但是我不知道如何使用软浮点库以及如何为RTL指令生成模式以为代码生成发出libcall。 如果有人可以给我一些建议?我将对此深表感谢。谢谢。 抱歉,如果我不清楚,我将在此说明。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)