Проблема совместимости FPU с приложением, скомпилированным Delphi 7, выполняемым в Windows 11 ARM64.
Я тестирую совместимость 32-разрядного приложения x86, скомпилированного с помощью Delphi 7 и работающего в Windows 11 ARM64.
Функции RTL и обе возвращают неверные значения при использовании сInt64
.
Например :IntToHex($FF00FF55AA55AA)
возвращает '00FF00FF55AA55A8' иIntToHex($123456789ABCDEF)
возвращает '0123456789ABCDE0'.
Ошибочная реализация, похоже, находится в функции, вызываемойIntToHex()
иIntToStr()
, реализация которого зависит от FPU.
Для более коротких целых чисел (<= 32 бита) функции вызываютSysUtils.CvtInt
, который работает корректно и не зависит от FPU.
Обратная операцияStrToInt()
тоже работает корректно и не использует FPU.
Итак, я думаю, что проблема связана либо с глючной эмуляцией FPU на ARM64, либо с неправильным использованием FPU в функциях RTL, которые работали на существующих процессорах.
сейчас пытаюсь заменитьCvtInt64
реализацию с альтернативной, не использующей FPU.
Кто-нибудь знает о такой реализации и как использовать ее для замены оригинала?SysUtils.CvtInt64
?
Есть ли способ сообщить о проблеме, связанной с эмуляцией FPU в Windows 11 ARM64, в Microsoft?