В настоящее время я занимаюсь разработкой для платы MPC5777 с ядрами e200z7.Большинство вещей идет хорошо, но я застрял с проблемой, которая уже действительно раздражает меня.Я пытаюсь использовать операции с плавающей запятой над частями своего кода, используя поддержку встроенного оборудования.Мой набор инструментов - GCC 6.3 (powerpc-gcc), для которого я использую следующие флаги:
ASFLAGS_BASE = -g -a32 -mbooke -me500 --fatal-warnings
ARCH_FLAGS = -mpowerpc-gpopt -mfprnd -misel -m32 -mhard-float -mabi=spe -mmfpgpr -mfloat-gprs=single
Обратите внимание на флаг -mfloat-gprs=single
.Это то, что вызывает проблемы.
Когда я использую -mfloat-gprs=single
, я не могу правильно скомпилировать вещи, так как некоторые функции не реализованы:
undefined reference to `__extendsfdf2`,
undefined reference to `__adddf3`,
undefined reference to `__divdf3`,
- среди других.
Теперь, если я скомпилирую, используя -mfloat-gprs=double
, он дойдет до конца и сгенерирует все мои исполняемые файлы.НО, использование этого флага также генерирует дополнительные функции, не реализованные в e200z7.Я не могу сказать наверняка все из них, так как код становится больше, и практически невозможно отследить все сгенерированные сборки.Например, в тот момент, когда мое выполнение застревает, когда оно достигает инструкции efscfd
, которая реализуется ядром e500, которое поддерживает двойную точность с плавающей запятой, но не для e200, которое имеет поддержку только одинарной точности.
Итак, любой совет здесь был бы удивительно желанным!
Заранее спасибо,