M68k-elf-gcc Проблемы с плавающей точкой - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь создать приложение для контроля температуры для процессора 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`

Таким образом, компоновщик должен пытаться заполнить смещение ветви и испортить.Поскольку источником этой функции является строка макросов, я не уверен, куда она действительно хотела перейти.

1 Ответ

0 голосов
/ 22 февраля 2019

На MC68020 и позже, bra, bsr и bcc сопровождаются 32-битным смещением, если 8-битное смещение 0xff.В вашем случае это не имеет смысла, так как 0xfffffd94 будет вписываться в 16 бит.

Обязательно скомпилируйте (и что ваша библиотека softfloat скомпилирована) для 68000, если у вас нет 68020 или новее.

...