【问题标题】:M68k-elf-gcc Floating Point IssuesM68k-elf-gcc 浮点问题
【发布时间】:2019-02-21 16:18:11
【问题描述】:

我正在尝试为 68000 处理器构建温度控制应用程序。我目前正在使用 GCC 8.2.0。我正在使用 -msoft-float 标志进行编译。但是,浮点库例程似乎被破坏了。示例:

'000174f4 <__ltdf2>:'
   '174f4:  4e56 0000       linkw %fp,#0'
   '174f8:  4878 0001       pea 1 <ADD>'
   '174fc:  2f2e 0014       movel %fp@(20),%sp@-'
   '17500:  2f2e 0010       movel %fp@(16),%sp@-'
   '17504:  2f2e 000c       movel %fp@(12),%sp@-'
   '17508:  2f2e 0008       movel %fp@(8),%sp@-'
   '1750c:  61ff            bsrs 1750d <__ltdf2+0x19>'
   '1750e:  ffff            .short 0xffff'
   '17510:  fd94            .short 0xfd94'
   '17512:  4e5e            unlk %fp'
   '17514:  4e75            rts'
   '17516:  4e71            nop'

有人可以解释为什么会生成此代码或这里发生了什么吗? 68000 不会分支到奇数地址。

更新 我一直在研究这个,问题似乎是在链接过程中注入的。从 libgcc.a 中转储此函数的代码显示如下:

`00000000 <__ltdf2>:`
  ` 0:   4e56 0000           linkw %fp,#0`
  `4:   4878 0001            pea 1 <__ltdf2+0x1>`
  ` 8:   2f2e 0014           movel %fp@(20),%sp@-`
  ` c:   2f2e 0010           movel %fp@(16),%sp@-`
  `10:   2f2e 000c           movel %fp@(12),%sp@-`
  `14:   2f2e 0008           movel %fp@(8),%sp@-`
  `18:   61ff 0000 0000      bsrl 1a <__ltdf2+0x1a>`
  `1e:   4e5e                unlk %fp`
 ` 20:   4e75                      rts`

所以链接器必须尝试填写分支偏移量并搞砸。由于这个函数的来源是一串宏,我不确定它真正想分支到哪里。

【问题讨论】:

    标签: gcc 68000 embedded-control


    【解决方案1】:

    在 MC68020 及更高版本上,brabsrbcc 后跟 32 位位移,如果 8 位位移为 0xff。在您的情况下,这没有意义,因为 0xfffffd94 适合 16 位。

    如果您没有 68020 或更高版本,请确保为 68000 编译(并且您的 softfloat-library 已编译)。

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2017-10-09
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 2016-08-28
      • 2016-06-04
      相关资源
      最近更新 更多