GCC CM4 FPU - sqrtf

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Neděle Únor 12 00:07:38 CET 2017


Tak uz jsem na to prisel, EmBitz ma sve mouchy a asi pri prenosu 
projektu mezi verzemi tam zustalo zapomenute -O0 ktere prebilo -Ojine....
Uz to preklada nadherne (stejne jako na prikladu od p. Mraze) ;-)

Dne 11.02.2017 v 23:17 Jaroslav Buchta napsal(a):
> Zajimave, muzete poslat options ktere pouziva prekladac a linker?
>
> Dne 11.02.2017 v 20:51 Miroslav Mraz napsal(a):
>> Asi to záleží na verzi překladače. Mě to do paměti neukládá (-Os). 
>> Gcc version 6.2.1 20161205.
>>
>> 20000446:    eddd 5a00     vldr    s11, [sp]
>> 2000044a:    ed9d 6a00     vldr    s12, [sp]
>> 2000044e:    eddd 7a01     vldr    s15, [sp, #4]
>> 20000452:    ed9d 5a01     vldr    s10, [sp, #4]
>> 20000456:    eddd 6a02     vldr    s13, [sp, #8]
>> 2000045a:    ed9d 7a02     vldr    s14, [sp, #8]
>> ------- tohle jsou inline nepodstatné věci z kontextu programu
>> 2000045e:    4a0c          ldr    r2, [pc, #48]    ; (20000490 
>> 20000460:    480c ldr    r0, [pc, #48]    ; (20000494 20000462: 
>> 490d          ldr    r1, [pc, #52]    ; (20000498
>> ------- konec nepodstatných věcí
>>   float amp = (ph1*ph1 + ph2*ph2 + ph3*ph3) * 2.0;
>> 20000464:    ee67 7a85     vmul.f32    s15, s15, s10
>> 20000468:    eee5 7a86     vfma.f32    s15, s11, s12
>> 2000046c:    eee6 7a87     vfma.f32    s15, s13, s14
>> 20000470:    ee77 7aa7     vadd.f32    s15, s15, s15
>>   asm ("vsqrt.f32 %0, %1" : "=w" (y) : "w" (x));
>> 20000474:    eef1 7ae7     vsqrt.f32    s15, s15
>>   y = _sqrt (amp);
>> ------- tady na konci to uloží, ale něco s tím udělat musí, že
>> 20000478:    edcd 7a03     vstr    s15, [sp, #12]
>>   (void) y;
>>
>> Zdroj jsem ještě pro jistotu zkomplikoval
>>
>> static inline float _sqrt (float x) {
>>   float y;
>>   asm ("vsqrt.f32 %0, %1" : "=w" (y) : "w" (x));
>>   return y;
>> }
>> static void test_func (void) {
>>   volatile float ph1=0.0f, ph2=1.0f, ph3=2.0f, y;
>>   float amp = (ph1*ph1 + ph2*ph2 + ph3*ph3) * 2.0;
>>   y = _sqrt (amp);
>>   (void) y;
>> }
>>
>> Mrazík
>>
>> Dne 11.2.2017 v 19:46 Jaroslav Buchta napsal(a):
>>> Jeste jedna podotazka, stve me, ze prekladac kazdy mezivysledek 
>>> strka do
>>> pameti, napr. takto
>>>
>>> (786)          amp = (ph1*ph1 + ph2*ph2 + ph3*ph3) * 2.0; 
>>> //-fno-math-errno
>>> 080017E8    vldr    s14, [r7, #56]    ; 0x38
>>> 080017EC    vldr    s15, [r7, #56]    ; 0x38
>>> 080017F0    vmul.f32    s14, s14, s15
>>> 080017F4    vldr    s13, [r7, #52]    ; 0x34
>>> 080017F8    vldr    s15, [r7, #52]    ; 0x34
>>> 080017FC    vmul.f32    s15, s13, s15
>>> 08001800    vadd.f32    s14, s14, s15
>>> 08001804    vldr    s13, [r7, #48]    ; 0x30
>>> 08001808    vldr    s15, [r7, #48]    ; 0x30
>>> 0800180C    vmul.f32    s15, s13, s15
>>> 08001810    vadd.f32    s15, s14, s15
>>> 08001814    vadd.f32    s15, s15, s15
>>> *08001818    vstr    s15, [r7, #44]    ; 0x2c**
>>> **(787)          asm volatile  ("vsqrt.f32 %0, %1" : "=w" (amp) : "w"
>>> (amp) );**
>>> **0800181C    vldr    s15, [r7, #44]    ; 0x2c**
>>> *08001820    vsqrt.f32    s15, s15
>>> 08001824    vstr    s15, [r7, #44]    ; 0x2c
>>>
>>> program vypada takto:
>>>          float amp;
>>> ...
>>>         amp = (ph1*ph1 + ph2*ph2 + ph3*ph3) * 2.0;
>>>         asm volatile  ("vsqrt.f32 %0, %1" : "=w" (amp) : "w" (amp) );
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list




Další informace o konferenci Hw-list