gpt4 book ai didi

c - 如何使用 ia16-elf-g++ 编译器生成 fpu 代码(未模拟)?

转载 作者:行者123 更新时间:2023-12-02 22:28:04 26 4
gpt4 key购买 nike

我已经下载了 Sourcery IA16 compiler ,这是一个针对 16 位目标的 GNU C++ 编译器,并且它可以工作(尽管它不支持远指针,并且在内联 asm 寄存器分配方面存在一些故障,等等)。

但是当我在 C 中声明一个 float 变量时,编译器会说:

/tmp/ccBB3kEN.o: In function `foo()':
(.text+0x38): undefined reference to `__floatsisf'
/tmp/ccBB3kEN.o: In function `foo()':
(.text+0x44): undefined reference to `__mulsf3'
/tmp/ccBB3kEN.o: In function `foo()':
(.text+0x4c): undefined reference to `__fixsfsi'

如图所示,默认情况下,它想要使用soft-fpu,所以我认为,我应该添加一些编译器选项来生成 native FPU代码。但我失败了。

现在我正在使用编译器选项-march=i80186,帮助说明我应该向其添加一些后缀:

-march=CPU[,+EXTENSION...]
Igenerate code for CPU and EXTENSION, CPU is one of:
generic32, generic64, i386, i486, i586, i686,
pentium, pentiumpro, pentiumii, pentiumiii, pentium4,
prescott, nocona, core, core2, corei7, l1om, k1om,
iamcu, k6, k6_2, athlon, opteron, k8, amdfam10,
bdver1, bdver2, bdver3, bdver4, znver1, btver1,
btver2
EXTENSION is combination of:
8087, 287, 387, no87, mmx, nommx, sse, sse2, sse3,
(etc.)

看起来帮助文本不适用于 IA16,因为它不包含 16 位 CPU(但包含 32/64 位 CPU),并且扩展也不起作用,我已经尝试过 -行军=i8086,8087:

ia16-elf-g++: error: unrecognized command line option '-march=i8086,8087

其他选项,例如 -mhard-float 也不起作用。

ia16-elf-g++: error: unrecognized command line option '-mhard-float'

我的问题是:如何为此编译器设置 8086 + 8087 目标?如果不支持,是否有其他 C/C++ 编译器可以使用 FPU 代码生成 MS-DOS .com 输出(在 Linux 或 MacOS 平台上)?

最佳答案

文档位于 path/to/share/doc/sourceryg++-ia16-elf/man/man1/ia16-elf-g++.1

如果目标模拟器或设备不是 80{{,1}8{6,8},286} :-mfpmath=80387

请注意,ia16-elf-g{++,cc} 默认情况下会生成微型模型 .COM 文件。

您还可以尝试 -march=i8086+8087,但这可能仅适用于 as

关于c - 如何使用 ia16-elf-g++ 编译器生成 fpu 代码(未模拟)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com