Привет, я запускаю простую программу для тестирования модуля с плавающей запятой на Imx6.sabre_lite
double z = 2.2250738585072014e-308;
double x = 3.0594765554474019e-308;
double ans = x-z;
Теперь ans
оказывается равным нулю, тогда как на архитектуре x86 он не равен нулю (8.344026969402e-309 # DEN), я предполагаю, что есть некоторая проблема с точностью, например, блок ARM FPU на cortex-A9 (IMX.6 Sabre) не работает » Я поддерживаю такие расчеты, но по каким-то причинам я не могу это проверить. Я использую следующие флаги сборки для компиляции.
-mfloat-abi=hard -mfpu=neon-vfpv3
Я искал другие ответы, и все они, похоже, указывают на то, что Neon поддерживает только числа с плавающей запятой одинарной точности на Aarch32, но я прочитал в следующем документе для cortex-A9 https://developer.arm.com/documentation/ddi0409/i/preface/about-this-book Хотя SIMD только для чисел с плавающей запятой одинарной точности, VFPv3 поддерживает числа с плавающей запятой двойной точности, так что не понимаю, в чем проблема. Сгенерированный код сборки выглядит следующим образом
21 double z = 2.2250738585072014e-308;
1009baa8: mov r2, #0
1009baac: mov r3, #1048576 ; 0x100000
1009bab0: strd r2, [r11, #-12]
22 double x = 3.0594765554474019e-308;
1009bab4: mov r2, #0
1009bab8: mov r3, #1441792 ; 0x160000
1009babc: strd r2, [r11, #-20] ; 0xffffffec
23 double ans = x-z;
1009bac0: vldr d17, [r11, #-20] ; 0xffffffec
1009bac4: vldr d16, [r11, #-12]
1009bac8: vsub.f64 d16, d17, d16
1009bacc: vstr d16, [r11, #-28] ; 0xffffffe4
Эта инструкция, которая выполняет вычитание vsub.f64 d16, d17, d16
, является vsub.f64 инструкцией VFP.
VFP
неNEON
, хотя у них общий регистрационный банк и некоторые инструкции. И да,vsub.f64
- этоVFP
инструкция. - person Jake 'Alquimista' LEE   schedule 02.03.2021-mfpu=neon-vfpv3
. Флаг упоминает как neon, так и vfpv3, которые из них включаются. - person Fahad Mubeen   schedule 03.03.2021VFP
неNEON
заставили меня поискать и прийти к этому ответу stackoverflow.com/questions/66102892/ - person Fahad Mubeen   schedule 03.03.2021