gpt4 book ai didi

c - 如何在 C 编译器的 ASM 输出中启用 DIV 指令

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:47 26 4
gpt4 key购买 nike

我正在使用 vbcc 编译器将我的 C 代码翻译成 Motorola 68000 ASM。

无论出于何种原因,每次我在代码中使用除法(只是整数,而不是 float )时,编译器只会将以下 stub 插入 ASM 输出(我在每次重新编译时生成):

public  __ldivs
jsr __ldivs

我明确搜索了 DIVS/DIVU 的所有变体,但每次都只有上面那个 stub 。代码本身有效(我在目标设备上对其进行了调试),因此最终代码确实包含 DIV 指令,只是没有中间输出。

因为这是最昂贵的指令并且它在一个内部循环中,我真的必须尝试调整代码以获得它的最大性能。

但是,如果我没有看到生成的 ASM 代码,我将无法执行此操作。任何想法如何启用它?编译器手册没有指定任何类似的东西,所以显然必须有一些其他的 - 可能是常见的 - 更高的原则在起作用?

最佳答案

来自vbcc compiler system Volker Barthelmann 的手册:

4.1 Additional options

This backend provides the following additional options:
  • -cpu=n Generate code for cpu n (e.g. -cpu=68020), default: 68000.
...

4.5 CPUs

The values of -cpu=n have those e ffects:
...
n>=68020
  • 32bit multiplication/division/modulo is done with the mul?.l, div?.l anddiv?l.l instructions.

原来的 68000 CPU 不支持 32 位除法,只有 16 位除法,所以默认情况下 vbcc 不生成 32 位除法指令。

关于c - 如何在 C 编译器的 ASM 输出中启用 DIV 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32853039/

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