реклама на сайте
подробности

 
 
8 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> GCC ARM - не имплементируются функции SIN, COS, arm-none-eabi
__inline__
сообщение Oct 1 2017, 07:34
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Здравствуйте.

Скачал и поставил, затем ребутнул (для переменных окружения) GCC-тулчейн: gcc-arm-none-eabi-6-2017-q2-update-win32.exe

Затем написал программу тект ниже:

Код
#include <math.h>

float a=1.2F;
float b=3.21F;
float c=0.0F;

void main(void)
{
c=sin(a+b);
b=cos(a+c);
}


Построил бинарник и все необходимые файлы командами:
Код
arm-none-eabi-gcc -std=c99 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv4 -c fpu.c -o fpu.elf -lm
arm-none-eabi-objdump -D fpu.elf > fpu.asm
arm-none-eabi-objcopy -O binary fpu.elf fpu.bin


При просмотре листинга видно, что функции sin( ) и cos( ) НЕ ИМПЛЕМЕНТИРОВАЛИСЬ, вместо них стоит переход:
Код
18:    e3403000     movt    r3, #0
  1c:    edd37a00     vldr    s15, [r3]
  20:    ee777a27     vadd.f32    s15, s14, s15
  24:    eef70ae7     vcvt.f64.f32    d16, s15
  28:    eeb00b60     vmov.f64    d0, d16
  2c:    ebfffffe     bl    0 <sin> ----------------------------- !!! нет вызова
  30:    eef00b40     vmov.f64    d16, d0
  34:    eef77be0     vcvt.f32.f64    s15, d16
  38:    e3003000     movw    r3, #0
  3c:    e3403000     movt    r3, #0
  40:    edc37a00     vstr    s15, [r3]
  44:    e3003000     movw    r3, #0
  48:    e3403000     movt    r3, #0
  4c:    ed937a00     vldr    s14, [r3]
  50:    e3003000     movw    r3, #0
  54:    e3403000     movt    r3, #0
  58:    edd37a00     vldr    s15, [r3]
  5c:    ee777a27     vadd.f32    s15, s14, s15
  60:    eef70ae7     vcvt.f64.f32    d16, s15
  64:    eeb00b60     vmov.f64    d0, d16
  68:    ebfffffe     bl    0 <cos> ----------------------------- !!! нет вызова


Других тулчейнов нет, пробовал soft-fpu, ничего не меняется, функции из math.h не имплементируются вообще!

Залез в папки тулчейна, так там libm.a несколько штук:

...\GCCARM\arm-none-eabi\lib\libm.a
...\GCCARM\arm-none-eabi\lib\thumb\libm.a
...\GCCARM\arm-none-eabi\lib\thumb\v7-ar\libm.a
...\GCCARM\arm-none-eabi\lib\thumb\v7-ar\fpv3\hard\libm.a
...\GCCARM\arm-none-eabi\lib\hard\libm.a

У меня нет слов, одни эмоции (касаемо GCC тулчейна)!

Помогите плиз, нужен хардварный синус/косинус для ядра Cortex-A7, VFPv4 или NEON - для floating point, как решить проблему?
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2017, 08:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(__inline__ @ Oct 1 2017, 10:34) *
Скачал и поставил, затем ребутнул (для переменных окружения) GCC-тулчейн: gcc-arm-none-eabi-6-2017-q2-update-win32.exe
...
Помогите плиз, нужен хардварный синус/косинус для ядра Cortex-A7, VFPv4 или NEON - для floating point, как решить проблему?

Во-первых, не то скачали. Там английским по белому написано "Arm Cortex-M and Cortex-R". То есть дальше его ковырять нет смысла. Ищите правильный gcc.

Попробуйте вот это.
Go to the top of the page
 
+Quote Post
__inline__
сообщение Oct 1 2017, 08:40
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Цитата(scifi @ Oct 1 2017, 08:00) *
Попробуйте вот это.


Там 4 тулчейна и все оканчиваются на eabi, тоесть привязано к операционной системе. Мне надо под железо писать, какой из этих тулчейнов сойдёт?

Разработка в Win32, целевая платформа Cortex-A7.

gcc-linaro-6.3.1-2017.05-i686-mingw32_arm-eabi.tar.xz 23-May-2017 08:39 388.7M open
gcc-linaro-6.3.1-2017.05-i686_arm-eabi.tar.xz 23-May-2017 08:39 263.8M open
gcc-linaro-6.3.1-2017.05-x86_64_arm-eabi.tar.xz 23-May-2017 08:39 248.1M open
sysroot-newlib-linaro-2017.05-arm-eabi.tar.xz 23-May-2017 08:39 44.2M open
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2017, 08:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Вот здесь разъясняют. Видимо, вам надо arm-eabihf, но такого там нет. Пичалька crying.gif
Вероятно, придётся собирать тулчейн самостоятельно.
Go to the top of the page
 
+Quote Post
__inline__
сообщение Oct 1 2017, 08:47
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



тот тулчейн что я скачал в ридмишнике написано :

Цитата
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a | armv7-ar |
|(No FP) | | /thumb |
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=softfp| armv7-ar |
|(Soft FP) | -mfpu=vfpv3-d16 | /thumb |
| | | /softfp |
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=hard | armv7-ar |
|(Hard FP) | -mfpu=vfpv3-d16 | /thumb |
| | | /fpu |
--------------------------------------------------------------------


Я правильно думаю, что -march=armv7-a - это Cortex-A7 ?
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2017, 08:49
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(__inline__ @ Oct 1 2017, 11:47) *
Я правильно думаю, что -march=armv7-a - это Cortex-A7 ?

Здесь написано.
Go to the top of the page
 
+Quote Post
__inline__
сообщение Oct 1 2017, 08:57
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Цитата(scifi @ Oct 1 2017, 08:49) *
Здесь написано.


Спасибо! sm.gif

Глянул:
Цитата
ARMv7-A => ARM Cortex-A5, ARM Cortex-A7, ARM Cortex-A8, ARM Cortex-A9, ARM Cortex-A12, ARM Cortex-A15, ARM Cortex-A17


Значит тот тулчейн который я скачал тоже подходит!

Вызвал раздельно компиляцию и линковку, появился sin, cos, но вызовы ОЧЕНЬ стрёмные, Hard FPU тут даже и не пахнет:

Код
000081b4 <main>:
    81b4:    e92d4800     push    {fp, lr}
    81b8:    e28db004     add    fp, sp, #4
    81bc:    e30a3de4     movw    r3, #44516; 0xade4
    81c0:    e3403001     movt    r3, #1
    81c4:    ed937a00     vldr    s14, [r3]
    81c8:    e30a3de8     movw    r3, #44520; 0xade8
    81cc:    e3403001     movt    r3, #1
    81d0:    edd37a00     vldr    s15, [r3]
    81d4:    ee777a27     vadd.f32    s15, s14, s15
    81d8:    eeb00a67     vmov.f32    s0, s15
    81dc:    fa000005     blx    81f8 <sinf>
    81e0:    eef07a40     vmov.f32    s15, s0
    81e4:    e30b364c     movw    r3, #46668; 0xb64c
    81e8:    e3403001     movt    r3, #1
    81ec:    edc37a00     vstr    s15, [r3]
    81f0:    e320f000     nop    {0}
    81f4:    e8bd8800     pop    {fp, pc}

000081f8 <sinf>:
    81f8:    ee10 3a10     vmov    r3, s0
    81fc:    f640 72d8     movw    r2, #4056; 0xfd8
    8200:    f6c3 7249     movt    r2, #16201; 0x3f49
    8204:    b500          push    {lr}
    8206:    b083          sub    sp, #12
    8208:    f023 4300     bic.w    r3, r3, #2147483648; 0x80000000
    820c:    4293          cmp    r3, r2
    820e:    dd1a          ble.n    8246 <sinf+0x4e>
    8210:    f1b3 4fff     cmp.w    r3, #2139095040; 0x7f800000
    8214:    db04          blt.n    8220 <sinf+0x28>
    8216:    ee30 0a40     vsub.f32    s0, s0, s0
    821a:    b003          add    sp, #12
    821c:    f85d fb04     ldr.w    pc, [sp], #4
    8220:    4668          mov    r0, sp
    8222:    f000 f833     bl    828c <__ieee754_rem_pio2f>
    8226:    f000 0003     and.w    r0, r0, #3
    822a:    2801          cmp    r0, #1
    822c:    d01d          beq.n    826a <sinf+0x72>
    822e:    2802          cmp    r0, #2
    8230:    d011          beq.n    8256 <sinf+0x5e>
    8232:    b308          cbz    r0, 8278 <sinf+0x80>
    8234:    eddd 0a01     vldr    s1, [sp, #4]
    8238:    ed9d 0a00     vldr    s0, [sp]
    823c:    f000 f960     bl    8500 <__kernel_cosf>
    8240:    eeb1 0a40     vneg.f32    s0, s0
    8244:    e7e9          b.n    821a <sinf+0x22>
    8246:    2000          movs    r0, #0
    8248:    eddf 0a0f     vldr    s1, [pc, #60]; 8288 <sinf+0x90>
    824c:    f000 fd08     bl    8c60 <__kernel_sinf>
    8250:    b003          add    sp, #12
    8252:    f85d fb04     ldr.w    pc, [sp], #4
    8256:    2001          movs    r0, #1
    8258:    eddd 0a01     vldr    s1, [sp, #4]
    825c:    ed9d 0a00     vldr    s0, [sp]
    8260:    f000 fcfe     bl    8c60 <__kernel_sinf>
    8264:    eeb1 0a40     vneg.f32    s0, s0
    8268:    e7d7          b.n    821a <sinf+0x22>
    826a:    eddd 0a01     vldr    s1, [sp, #4]
    826e:    ed9d 0a00     vldr    s0, [sp]
    8272:    f000 f945     bl    8500 <__kernel_cosf>
    8276:    e7d0          b.n    821a <sinf+0x22>
    8278:    2001          movs    r0, #1
    827a:    eddd 0a01     vldr    s1, [sp, #4]
    827e:    ed9d 0a00     vldr    s0, [sp]
    8282:    f000 fced     bl    8c60 <__kernel_sinf>
    8286:    e7c8          b.n    821a <sinf+0x22>
    8288:    00000000     andeq    r0, r0, r0

00008500 <__kernel_cosf>:
    8500:    ee10 3a10     vmov    r3, s0
    8504:    f023 4300     bic.w    r3, r3, #2147483648; 0x80000000
    8508:    f1b3 5f48     cmp.w    r3, #838860800; 0x32000000
    850c:    da2c          bge.n    8568 <__kernel_cosf+0x68>
    850e:    eefd 7ac0     vcvt.s32.f32    s15, s0
    8512:    ee17 3a90     vmov    r3, s15
    8516:    2b00          cmp    r3, #0
    8518:    d067          beq.n    85ea <__kernel_cosf+0xea>
    851a:    ee20 7a00     vmul.f32    s14, s0, s0
    851e:    eddf 7a34     vldr    s15, [pc, #208]; 85f0 <__kernel_cosf+0xf0>
    8522:    ed9f 5a34     vldr    s10, [pc, #208]; 85f4 <__kernel_cosf+0xf4>
    8526:    eddf 5a34     vldr    s11, [pc, #208]; 85f8 <__kernel_cosf+0xf8>
    852a:    ed9f 6a34     vldr    s12, [pc, #208]; 85fc <__kernel_cosf+0xfc>
    852e:    ee07 5a27     vmla.f32    s10, s14, s15
    8532:    eddf 7a33     vldr    s15, [pc, #204]; 8600 <__kernel_cosf+0x100>
    8536:    eddf 6a33     vldr    s13, [pc, #204]; 8604 <__kernel_cosf+0x104>
    853a:    ee55 5a07     vnmls.f32    s11, s10, s14
    853e:    ee05 6a87     vmla.f32    s12, s11, s14
    8542:    ee56 7a07     vnmls.f32    s15, s12, s14
    8546:    ee47 6a87     vmla.f32    s13, s15, s14
    854a:    ee66 6a87     vmul.f32    s13, s13, s14
    854e:    ee20 0a20     vmul.f32    s0, s0, s1
    8552:    ee17 0a26     vnmls.f32    s0, s14, s13
    8556:    eef6 7a00     vmov.f32    s15, #96; 0x3f000000  0.5
    855a:    ee17 0a27     vnmls.f32    s0, s14, s15
    855e:    eef7 7a00     vmov.f32    s15, #112; 0x3f800000  1.0
    8562:    ee37 0ac0     vsub.f32    s0, s15, s0
    8566:    4770          bx    lr
    8568:    ee20 7a00     vmul.f32    s14, s0, s0
    856c:    f649 1299     movw    r2, #39321; 0x9999
    8570:    eddf 7a1f     vldr    s15, [pc, #124]; 85f0 <__kernel_cosf+0xf0>
    8574:    f6c3 6299     movt    r2, #16025; 0x3e99
    8578:    4293          cmp    r3, r2
    857a:    ed9f 5a1e     vldr    s10, [pc, #120]; 85f4 <__kernel_cosf+0xf4>
    857e:    eddf 5a1e     vldr    s11, [pc, #120]; 85f8 <__kernel_cosf+0xf8>
    8582:    ed9f 6a1e     vldr    s12, [pc, #120]; 85fc <__kernel_cosf+0xfc>
    8586:    ee07 5a27     vmla.f32    s10, s14, s15
    858a:    eddf 7a1d     vldr    s15, [pc, #116]; 8600 <__kernel_cosf+0x100>
    858e:    eddf 6a1d     vldr    s13, [pc, #116]; 8604 <__kernel_cosf+0x104>
    8592:    ee55 5a07     vnmls.f32    s11, s10, s14
    8596:    ee05 6a87     vmla.f32    s12, s11, s14
    859a:    ee56 7a07     vnmls.f32    s15, s12, s14
    859e:    ee47 6a87     vmla.f32    s13, s15, s14
    85a2:    ee66 6a87     vmul.f32    s13, s13, s14
    85a6:    ddd2          ble.n    854e <__kernel_cosf+0x4e>
    85a8:    2200          movs    r2, #0
    85aa:    f6c3 7248     movt    r2, #16200; 0x3f48
    85ae:    4293          cmp    r3, r2
    85b0:    bfdc          itt    le
    85b2:    f103 437f     addle.w    r3, r3, #4278190080; 0xff000000
    85b6:    ee07 3a90     vmovle    s15, r3
    85ba:    ee20 0a20     vmul.f32    s0, s0, s1
    85be:    bfd4          ite    le
    85c0:    eeb7 6a00     vmovle.f32    s12, #112; 0x3f800000  1.0
    85c4:    eef5 7a02     vmovgt.f32    s15, #82; 0x3e900000  0.2812500
    85c8:    eef6 5a00     vmov.f32    s11, #96; 0x3f000000  0.5
    85cc:    bfd8          it    le
    85ce:    ee36 6a67     vsuble.f32    s12, s12, s15
    85d2:    ee17 0a26     vnmls.f32    s0, s14, s13
    85d6:    ee57 7a25     vnmls.f32    s15, s14, s11
    85da:    bfc8          it    gt
    85dc:    eeb6 6a07     vmovgt.f32    s12, #103; 0x3f380000  0.7187500
    85e0:    ee37 0ac0     vsub.f32    s0, s15, s0
    85e4:    ee36 0a40     vsub.f32    s0, s12, s0
    85e8:    4770          bx    lr
    85ea:    eeb7 0a00     vmov.f32    s0, #112; 0x3f800000  1.0
    85ee:    4770          bx    lr
    85f0:    ad47d74e     stclge    7, cr13, [r7, #-312]; 0xfffffec8
    85f4:    310f74f6     strdcc    r7, [pc, -r6]
    85f8:    3493f27c     ldrcc    pc, [r3], #636; 0x27c
    85fc:    37d00d01     ldrbcc    r0, [r0, r1, lsl #26]
    8600:    3ab60b61     bcc    fed8b38c <_stack+0xfed0b38c>
    8604:    3d2aaaab     vstmdbcc    sl!, {s20-s190}


Это просто абзац!

Билдил этими командами:

Код
arm-none-eabi-gcc -std=c99 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv4 -c fpu.c

arm-none-eabi-gcc --specs=rdimon.specs -march=armv7-a -mfloat-abi=hard -mfpu=vfpv4 -o fpu.elf fpu.o -lm

arm-none-eabi-objdump -D fpu.elf > fpu.asm

arm-none-eabi-objcopy -O binary fpu.elf fpu.bin


Куда дальше рыть?
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2017, 08:59
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(__inline__ @ Oct 1 2017, 11:57) *
Куда дальше рыть?

Цитата(scifi @ Oct 1 2017, 11:45) *
Вероятно, придётся собирать тулчейн самостоятельно.

Тот же линаро вроде бы публикует скрипты для сборки. Ещё рассказывают про buildroot и всё такое.

Есть ещё Sysprogs, но я не знаю, есть ли там hardfloat.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 1 2017, 09:06
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(__inline__ @ Oct 1 2017, 11:57) *
Hard FPU тут даже и не пахнет:

Шок-абзац, ага. А команды вида vXXX.f32 - это что, как думаете?
Go to the top of the page
 
+Quote Post
__inline__
сообщение Oct 1 2017, 09:11
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Тут пишут https://habrahabr.ru/post/319736/ , что:
Цитата
*eabihf — это почти то же самое, что и eabi, с разницей в реализации ABI вызова функций с плавающей точкой. hf — расшифровывается как hard float

Так может разница лишь в реализации вызова функций с FP?

Есть ли ещё какие-нибудь компиляторы для Cortex-A7, кроме вышеупомянутых?

И вообще GNU - дрянь ещё та... Писал во многих средах: Keil ARM MDK, IAR, Visual DSP, Visual C,.... - нигде такого гемора как с GNU нет
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2017, 09:14
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(__inline__ @ Oct 1 2017, 10:34) *
Помогите плиз, нужен хардварный синус/косинус для ядра Cortex-A7, VFPv4 или NEON - для floating point, как решить проблему?

Что такое "хардварный синус/косинус"? Вычисление одной инструкцией? Такое вообще существует в природе?

Цитата(__inline__ @ Oct 1 2017, 12:11) *
И вообще GNU - дрянь ещё та... Писал во многих средах: Keil ARM MDK, IAR, Visual DSP, Visual C,.... - нигде такого гемора как с GNU нет

Мыши плакали, кололись, но продолжали жрать кактус. Ну и используйте всё вышеупомянутое, кто же мешает?
Go to the top of the page
 
+Quote Post
__inline__
сообщение Oct 1 2017, 09:18
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Цитата(aaarrr @ Oct 1 2017, 09:06) *
Шок-абзац, ага. А команды вида vXXX.f32 - это что, как думаете?

Это то что мне надо, и я это видел. Вопрос ни к ним, а к реализации синуса/косинуса. Почему так фигово реализовано? Я подозреваю, что из-за неправильных ключей компилятора/линковщика и отсутствия явно заданных путей. Одних только libm.a - куча и какая из них используется???

И с адреса 0x8000 программа пошла, хотя для линковщика ниче не указано, и _exit() понадобился... Одно г_вно честное слово...

Цитата(scifi @ Oct 1 2017, 09:14) *
Что такое "хардварный синус/косинус"? Вычисление одной инструкцией? Такое вообще существует в природе?


Существует: начиная ещё с древних со-процессоров x87 intel: fsin,fcos.

Цитата(scifi @ Oct 1 2017, 09:14) *
Мыши плакали, кололись, но продолжали жрать кактус. Ну и используйте всё вышеупомянутое, кто же мешает?


Мешает отсутствие альтернативы. С удовольствием писал бы в Keil ARM MDK, но там нет Coretex-A7 без привязки к контроллеру.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2017, 09:20
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(__inline__ @ Oct 1 2017, 12:18) *
Существует: начиная ещё с древних со-процессоров x87 intel: fsin,fcos.

Хорошо, уточняю: у Cortex-A7 есть такие инструкции?

Update:

Похоже, аффтар слился. Обкакал GNU, а оказалось, что это его собственное недомыслие. Бывает, чо.
Go to the top of the page
 
+Quote Post
__inline__
сообщение Oct 1 2017, 09:34
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Цитата(scifi @ Oct 1 2017, 09:20) *
Хорошо, уточняю: у Cortex-A7 есть такие инструкции?

Подозреваю, что нет. Но я не дурак и вижу, что sin() и cos() по своему объёму не внушают быстродействия. А значит, не все ключи оптимизации задействованы или нужно другую либу math подключить. Вот я и хочу выяснить, есть ли более лучший вариант реализации или мне пасти нечего?

В ряд Тейлора и то быстрее было бы.

Ещё раз прогнал код, на этот раз проверил ещё умножение и корень - эти работают как надо:

Код
#include <fastmath.h>

float a=1.2F;
float b=3.21F;
float c=0.0F;

void main(void)
{
c=a+b;
a=b*c;
b=sinf(a);
c=sqrtf(b);
}

void _exit(int i)
{
while(1);
}


00008030 <main>:
    8030:    b538          push    {r3, r4, r5, lr}
    8032:    f249 642c     movw    r4, #38444; 0x962c
    8036:    f2c0 0401     movt    r4, #1
    803a:    f649 2588     movw    r5, #39560; 0x9a88
    803e:    f2c0 0501     movt    r5, #1
    8042:    ed2d 8b02     vpush    {d8}
    8046:    edd4 7a00     vldr    s15, [r4]
    804a:    ed94 7a01     vldr    s14, [r4, #4]
    804e:    ee37 7a87     vadd.f32    s14, s15, s14         ------------OK
    8052:    ee67 7a87     vmul.f32    s15, s15, s14        ------------OK
    8056:    ed85 7a00     vstr    s14, [r5]
    805a:    eeb0 0a67     vmov.f32    s0, s15
    805e:    edc4 7a01     vstr    s15, [r4, #4]
    8062:    f000 f89d     bl    81a0 <sinf>         ---------- VERY BAD !!!
    8066:    eeb5 0a40     vcmp.f32    s0, #0.0
    806a:    ed84 0a00     vstr    s0, [r4]
    806e:    eeb1 8ac0     vsqrt.f32    s16, s0     ------------OK


Напрягает наличие процедуры _exit() и программа слинковалась для адреса 0x8000.
Можно ли как-то избавиться от _exit() и слинковать для адреса 0, не прибегая к линкерным скриптам? (я это могу сделать, только не даёт покоя вопрос, почему в первом случае слинковалось без мусора с с 0? (см. первый пост))
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2017, 09:49
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(__inline__ @ Oct 1 2017, 12:34) *
Подозреваю, что нет. Но я не дурак и вижу, что sin() и cos() по своему объёму не внушают быстродействия. А значит, не все ключи оптимизации задействованы или нужно другую либу math подключить. Вот я и хочу выяснить, есть ли более лучший вариант реализации или мне пасти нечего?

Кому-то нужно быстродействие в ущерб точности, кому-то - точность в ущерб быстродействию. Не исключено, что та же glibc всё делает быстро, но это уже линух. А вот newlib, скорее, будет напирать на точность.
Короче, сделайте свой синус, кто же мешает? Подсунуть свою функцию вместо библиотечной - дело нехитрое, ЕМНИП.
Go to the top of the page
 
+Quote Post

8 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01549 секунд с 7
ELECTRONIX ©2004-2016