Float na 8bit - minitest
Pavel Hudeček
edizon na seznam.cz
Středa Duben 24 01:10:08 CEST 2024
Ještě jsem přidal inicializaci hodin na 24 MHz.
PORTC.OUTTGL = 255;
PORTC.OUTTGL = 255;
PORTC.OUTTGL = 255;
PORTC.OUTTGL = 255;
PORTC.OUTTGL = 255;
PORTC.OUTTGL = 255;
Dělá dle očekávání 12 MHz.
A tady původní program bez a s různými výpočty:
//------------- // CLK 24 MHz - C3 461,6 kHz
//*x = *a / *b; // CLK 24 MHz - C3 41,6 kHz
//*x = *a * *b; // CLK 24 MHz - C3 99 kHz
//*x = *a + *b; // CLK 24 MHz - C3 128,3 kHz
//*x = *a - *b; // CLK 24 MHz - C3 127,6 kHz
//*x = *a * 0.99 - *b; // CLK 24 MHz - C3 76,6 kHz
//*x = *a * 1.01 - *b; // CLK 24 MHz - C3 72,5 kHz
//*x = log(*a * 1.01 - *b); // CLK 24 MHz - C3 9 kHz
//*x = log(*a * 1.01 / *b); // CLK 24 MHz - C3 8,2 kHz
*x = sin(*a * 1.01 / *b); // CLK 24 MHz - C3 9,5 kHz
Frekvence na C3 jsou nejnižší, u dělení a logaritmu byl při hmatání na
porty rozptyl asi 1:2 a při asi chybné hodnotě razantní zryhclení, třeba
z 9 na 75 kHz.
Poslední build se sinem:
Program Memory Usage : 1618 bytes 2,5 % Full
Data Memory Usage : 18 bytes 0,2 % Full
Log * o ~100B kratší.
Log / o ~100B delší.
Varianta *x = *a * 0.99 - *b;
Program Memory Usage : 1082 bytes 1,7 % Full
Data Memory Usage : 18 bytes 0,2 % Full
Varianta *x = *a * 1.01 - *b;
Stejná délka, ale pomalejší
Ty poslední 2 odpovídaj mému nejčastějšímu typu výpočtu:
ADC * cal1 + cal2
PH
Dne 24.04.2024 v 0:10 Pavel Hudeček napsal(a):
> Tak jsem to zkusil:
>
> 1. Porty A a D přijmou 4B float hodnot a, b
> 2. Nahodí port C na 255
> 3. Spočítá x = a/b
> 4. Shodí port C na poslední idx
> 5. Pošle 4B float hodnoty x na port F
>
> Před příjmem a vysíláním posílá idx na port C
>
> (nebude fungovat úplně dobře, port F nemá všechny bity použitelné pro
> výstup a port D nemá nohu 0)
>
> ---------------
> #include <avr/io.h> // AVR64DD32
>
> uint8_t arrB[12];
> float *a = (float*)&arrB[0];
> float *b = (float*)&arrB[4];
> float *x = (float*)&arrB[8];
> uint8_t idx;
>
> int main(void) {
>
> PORTC.DIR = 255;
> PORTF.DIR = 255;
>
> while (1) {
> idx=0;
>
> PORTC.OUT = idx;
> arrB[idx]=PORTA.IN; arrB[idx+4]=PORTD.IN; idx++;
> PORTC.OUT = idx;
> arrB[idx]=PORTA.IN; arrB[idx+4]=PORTD.IN; idx++;
> PORTC.OUT = idx;
> arrB[idx]=PORTA.IN; arrB[idx+4]=PORTD.IN; idx++;
> PORTC.OUT = idx;
> arrB[idx]=PORTA.IN; arrB[idx+4]=PORTD.IN; idx++;
>
> PORTC.OUT = 255;
> *x = *a / *b;
>
> PORTC.OUT = idx;
> PORTF.OUT = arrB[idx+4]; idx++;
> PORTC.OUT = idx;
> PORTF.OUT = arrB[idx+4]; idx++;
> PORTC.OUT = idx;
> PORTF.OUT = arrB[idx+4]; idx++;
> PORTC.OUT = idx;
> PORTF.OUT = arrB[idx+4]; idx++;
> }
> }
> ----------------
> Program Memory Usage : 836 bytes 1,3 % Full
> Data Memory Usage : 18 bytes 0,2 % Full
> -------------------
> Hodiny jsou takhle nejspíš 24/6 = 4 MHz.
> Porty ve vzduchu.
>
> Na C3 je asi 20µs stav 0 a pak něco přes 125µs 0.
> (vyšší bity nejsou vyvedeny)
> Osciloskop hlásí 7,11 kHz.
>
> Na C0 synchronně s C3 objeví 0, pak jsou celkem 3 pulzy, poslední
> vzestupná asi 4µs před C0.
> První 010 trvá malinko přes 5µs, zbytek je delší a všechny trochu plavou.
>
> Hmatání na vstupní porty nemá na C0 a C3 vliv, ale způsobuje
> poblikávání LEDky na F5.
> ...
> Aha tak má vliv, po hmatání je 6,92 kHz:-)
>
> A takhle dopad LSS fajl:
> --------------------
> mini-float-test-avr64dd32.elf: file format elf32-avr
>
> Sections:
> Idx Name Size VMA LMA File off Algn
> 0 .data 00000006 00806000 0000033e 000003d2 2**0
> CONTENTS, ALLOC, LOAD, DATA
> 1 .text 0000033e 00000000 00000000 00000094 2**1
> CONTENTS, ALLOC, LOAD, READONLY, CODE
> 2 .bss 0000000c 00806006 00806006 000003d8 2**0
> ALLOC
> 3 .comment 00000030 00000000 00000000 000003d8 2**0
> CONTENTS, READONLY
> 4 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 00000408 2**2
> CONTENTS, READONLY
> 5 .debug_info 00001fac 00000000 00000000 00000444 2**0
> CONTENTS, READONLY, DEBUGGING
> 6 .debug_abbrev 00001dfe 00000000 00000000 000023f0 2**0
> CONTENTS, READONLY, DEBUGGING
> 7 .debug_line 0000016f 00000000 00000000 000041ee 2**0
> CONTENTS, READONLY, DEBUGGING
> 8 .debug_str 00000dee 00000000 00000000 0000435d 2**0
> CONTENTS, READONLY, DEBUGGING
>
> Disassembly of section .text:
>
> 00000000 <__vectors>:
> 0: 0c 94 48 00 jmp 0x90 ; 0x90 <__ctors_end>
> 4: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 8: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 10: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 14: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 18: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 1c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 20: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 24: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 28: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 2c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 30: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 34: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 38: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 3c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 40: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 44: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 48: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 4c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 50: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 54: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 58: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 5c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 60: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 64: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 68: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 6c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 70: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 74: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 78: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 7c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 80: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 84: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 88: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
> 8c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
>
> 00000090 <__ctors_end>:
> 90: 11 24 eor r1, r1
> 92: 1f be out 0x3f, r1 ; 63
> 94: cf ef ldi r28, 0xFF ; 255
> 96: cd bf out 0x3d, r28 ; 61
> 98: df e7 ldi r29, 0x7F ; 127
> 9a: de bf out 0x3e, r29 ; 62
>
> 0000009c <__do_copy_data>:
> 9c: 10 e6 ldi r17, 0x60 ; 96
> 9e: a0 e0 ldi r26, 0x00 ; 0
> a0: b0 e6 ldi r27, 0x60 ; 96
> a2: ee e3 ldi r30, 0x3E ; 62
> a4: f3 e0 ldi r31, 0x03 ; 3
> a6: 02 c0 rjmp .+4 ; 0xac <__do_copy_data+0x10>
> a8: 05 90 lpm r0, Z+
> aa: 0d 92 st X+, r0
> ac: a6 30 cpi r26, 0x06 ; 6
> ae: b1 07 cpc r27, r17
> b0: d9 f7 brne .-10 ; 0xa8 <__do_copy_data+0xc>
>
> 000000b2 <__do_clear_bss>:
> b2: 20 e6 ldi r18, 0x60 ; 96
> b4: a6 e0 ldi r26, 0x06 ; 6
> b6: b0 e6 ldi r27, 0x60 ; 96
> b8: 01 c0 rjmp .+2 ; 0xbc <.do_clear_bss_start>
>
> 000000ba <.do_clear_bss_loop>:
> ba: 1d 92 st X+, r1
>
> 000000bc <.do_clear_bss_start>:
> bc: a2 31 cpi r26, 0x12 ; 18
> be: b2 07 cpc r27, r18
> c0: e1 f7 brne .-8 ; 0xba <.do_clear_bss_loop>
> c2: 0e 94 67 00 call 0xce ; 0xce <main>
> c6: 0c 94 9d 01 jmp 0x33a ; 0x33a <_exit>
>
> 000000ca <__bad_interrupt>:
> ca: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
>
> 000000ce <main>:
> ce: 8f ef ldi r24, 0xFF ; 255
> d0: 80 93 40 04 sts 0x0440, r24 ; 0x800440
> <__TEXT_REGION_LENGTH__+0x7f0440>
> d4: 80 93 a0 04 sts 0x04A0, r24 ; 0x8004a0
> <__TEXT_REGION_LENGTH__+0x7f04a0>
> d8: 00 91 00 60 lds r16, 0x6000 ; 0x806000
> <__DATA_REGION_ORIGIN__>
> dc: 10 91 01 60 lds r17, 0x6001 ; 0x806001
> <__DATA_REGION_ORIGIN__+0x1>
> e0: e0 90 04 60 lds r14, 0x6004 ; 0x806004 <a>
> e4: f0 90 05 60 lds r15, 0x6005 ; 0x806005 <a+0x1>
> e8: c0 90 02 60 lds r12, 0x6002 ; 0x806002 <b>
> ec: d0 90 03 60 lds r13, 0x6003 ; 0x806003 <b+0x1>
> f0: 66 24 eor r6, r6
> f2: 63 94 inc r6
> f4: 82 e0 ldi r24, 0x02 ; 2
> f6: 78 2e mov r7, r24
> f8: 93 e0 ldi r25, 0x03 ; 3
> fa: 89 2e mov r8, r25
> fc: 99 24 eor r9, r9
> fe: 9a 94 dec r9
> 100: 24 e0 ldi r18, 0x04 ; 4
> 102: a2 2e mov r10, r18
> 104: 35 e0 ldi r19, 0x05 ; 5
> 106: b3 2e mov r11, r19
> 108: d6 e0 ldi r29, 0x06 ; 6
> 10a: c7 e0 ldi r28, 0x07 ; 7
> 10c: 10 92 44 04 sts 0x0444, r1 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 110: 80 91 08 04 lds r24, 0x0408 ; 0x800408
> <__TEXT_REGION_LENGTH__+0x7f0408>
> 114: 80 93 06 60 sts 0x6006, r24 ; 0x806006 <__data_end>
> 118: 80 91 68 04 lds r24, 0x0468 ; 0x800468
> <__TEXT_REGION_LENGTH__+0x7f0468>
> 11c: 80 93 0a 60 sts 0x600A, r24 ; 0x80600a <__data_end+0x4>
> 120: 60 92 44 04 sts 0x0444, r6 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 124: 80 91 08 04 lds r24, 0x0408 ; 0x800408
> <__TEXT_REGION_LENGTH__+0x7f0408>
> 128: 80 93 07 60 sts 0x6007, r24 ; 0x806007 <__data_end+0x1>
> 12c: 80 91 68 04 lds r24, 0x0468 ; 0x800468
> <__TEXT_REGION_LENGTH__+0x7f0468>
> 130: 80 93 0b 60 sts 0x600B, r24 ; 0x80600b <__data_end+0x5>
> 134: 70 92 44 04 sts 0x0444, r7 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 138: 80 91 08 04 lds r24, 0x0408 ; 0x800408
> <__TEXT_REGION_LENGTH__+0x7f0408>
> 13c: 80 93 08 60 sts 0x6008, r24 ; 0x806008 <__data_end+0x2>
> 140: 80 91 68 04 lds r24, 0x0468 ; 0x800468
> <__TEXT_REGION_LENGTH__+0x7f0468>
> 144: 80 93 0c 60 sts 0x600C, r24 ; 0x80600c <__data_end+0x6>
> 148: 80 92 44 04 sts 0x0444, r8 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 14c: 80 91 08 04 lds r24, 0x0408 ; 0x800408
> <__TEXT_REGION_LENGTH__+0x7f0408>
> 150: 80 93 09 60 sts 0x6009, r24 ; 0x806009 <__data_end+0x3>
> 154: 80 91 68 04 lds r24, 0x0468 ; 0x800468
> <__TEXT_REGION_LENGTH__+0x7f0468>
> 158: 80 93 0d 60 sts 0x600D, r24 ; 0x80600d <__data_end+0x7>
> 15c: 90 92 44 04 sts 0x0444, r9 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 160: f6 01 movw r30, r12
> 162: 20 81 ld r18, Z
> 164: 31 81 ldd r19, Z+1 ; 0x01
> 166: 42 81 ldd r20, Z+2 ; 0x02
> 168: 53 81 ldd r21, Z+3 ; 0x03
> 16a: f7 01 movw r30, r14
> 16c: 60 81 ld r22, Z
> 16e: 71 81 ldd r23, Z+1 ; 0x01
> 170: 82 81 ldd r24, Z+2 ; 0x02
> 172: 93 81 ldd r25, Z+3 ; 0x03
> 174: 0e 94 da 00 call 0x1b4 ; 0x1b4 <__divsf3>
> 178: f8 01 movw r30, r16
> 17a: 60 83 st Z, r22
> 17c: 71 83 std Z+1, r23 ; 0x01
> 17e: 82 83 std Z+2, r24 ; 0x02
> 180: 93 83 std Z+3, r25 ; 0x03
> 182: a0 92 44 04 sts 0x0444, r10 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 186: 80 91 0e 60 lds r24, 0x600E ; 0x80600e <__data_end+0x8>
> 18a: 80 93 a4 04 sts 0x04A4, r24 ; 0x8004a4
> <__TEXT_REGION_LENGTH__+0x7f04a4>
> 18e: b0 92 44 04 sts 0x0444, r11 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 192: 80 91 0f 60 lds r24, 0x600F ; 0x80600f <__data_end+0x9>
> 196: 80 93 a4 04 sts 0x04A4, r24 ; 0x8004a4
> <__TEXT_REGION_LENGTH__+0x7f04a4>
> 19a: d0 93 44 04 sts 0x0444, r29 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 19e: 80 91 10 60 lds r24, 0x6010 ; 0x806010 <__data_end+0xa>
> 1a2: 80 93 a4 04 sts 0x04A4, r24 ; 0x8004a4
> <__TEXT_REGION_LENGTH__+0x7f04a4>
> 1a6: c0 93 44 04 sts 0x0444, r28 ; 0x800444
> <__TEXT_REGION_LENGTH__+0x7f0444>
> 1aa: 80 91 11 60 lds r24, 0x6011 ; 0x806011 <__data_end+0xb>
> 1ae: 80 93 a4 04 sts 0x04A4, r24 ; 0x8004a4
> <__TEXT_REGION_LENGTH__+0x7f04a4>
> 1b2: ac cf rjmp .-168 ; 0x10c
> <__EEPROM_REGION_LENGTH__+0xc>
>
> 000001b4 <__divsf3>:
> 1b4: 0e 94 ee 00 call 0x1dc ; 0x1dc <__divsf3x>
> 1b8: 0c 94 63 01 jmp 0x2c6 ; 0x2c6 <__fp_round>
> 1bc: 0e 94 5c 01 call 0x2b8 ; 0x2b8 <__fp_pscB>
> 1c0: 58 f0 brcs .+22 ; 0x1d8 <__divsf3+0x24>
> 1c2: 0e 94 55 01 call 0x2aa ; 0x2aa <__fp_pscA>
> 1c6: 40 f0 brcs .+16 ; 0x1d8 <__divsf3+0x24>
> 1c8: 29 f4 brne .+10 ; 0x1d4 <__divsf3+0x20>
> 1ca: 5f 3f cpi r21, 0xFF ; 255
> 1cc: 29 f0 breq .+10 ; 0x1d8 <__divsf3+0x24>
> 1ce: 0c 94 4c 01 jmp 0x298 ; 0x298 <__fp_inf>
> 1d2: 51 11 cpse r21, r1
> 1d4: 0c 94 97 01 jmp 0x32e ; 0x32e <__fp_szero>
> 1d8: 0c 94 52 01 jmp 0x2a4 ; 0x2a4 <__fp_nan>
>
> 000001dc <__divsf3x>:
> 1dc: 0e 94 74 01 call 0x2e8 ; 0x2e8 <__fp_split3>
> 1e0: 68 f3 brcs .-38 ; 0x1bc <__divsf3+0x8>
>
> 000001e2 <__divsf3_pse>:
> 1e2: 99 23 and r25, r25
> 1e4: b1 f3 breq .-20 ; 0x1d2 <__divsf3+0x1e>
> 1e6: 55 23 and r21, r21
> 1e8: 91 f3 breq .-28 ; 0x1ce <__divsf3+0x1a>
> 1ea: 95 1b sub r25, r21
> 1ec: 55 0b sbc r21, r21
> 1ee: bb 27 eor r27, r27
> 1f0: aa 27 eor r26, r26
> 1f2: 62 17 cp r22, r18
> 1f4: 73 07 cpc r23, r19
> 1f6: 84 07 cpc r24, r20
> 1f8: 38 f0 brcs .+14 ; 0x208 <__divsf3_pse+0x26>
> 1fa: 9f 5f subi r25, 0xFF ; 255
> 1fc: 5f 4f sbci r21, 0xFF ; 255
> 1fe: 22 0f add r18, r18
> 200: 33 1f adc r19, r19
> 202: 44 1f adc r20, r20
> 204: aa 1f adc r26, r26
> 206: a9 f3 breq .-22 ; 0x1f2 <__divsf3_pse+0x10>
> 208: 35 d0 rcall .+106 ; 0x274 <__divsf3_pse+0x92>
> 20a: 0e 2e mov r0, r30
> 20c: 3a f0 brmi .+14 ; 0x21c <__divsf3_pse+0x3a>
> 20e: e0 e8 ldi r30, 0x80 ; 128
> 210: 32 d0 rcall .+100 ; 0x276 <__divsf3_pse+0x94>
> 212: 91 50 subi r25, 0x01 ; 1
> 214: 50 40 sbci r21, 0x00 ; 0
> 216: e6 95 lsr r30
> 218: 00 1c adc r0, r0
> 21a: ca f7 brpl .-14 ; 0x20e <__divsf3_pse+0x2c>
> 21c: 2b d0 rcall .+86 ; 0x274 <__divsf3_pse+0x92>
> 21e: fe 2f mov r31, r30
> 220: 29 d0 rcall .+82 ; 0x274 <__divsf3_pse+0x92>
> 222: 66 0f add r22, r22
> 224: 77 1f adc r23, r23
> 226: 88 1f adc r24, r24
> 228: bb 1f adc r27, r27
> 22a: 26 17 cp r18, r22
> 22c: 37 07 cpc r19, r23
> 22e: 48 07 cpc r20, r24
> 230: ab 07 cpc r26, r27
> 232: b0 e8 ldi r27, 0x80 ; 128
> 234: 09 f0 breq .+2 ; 0x238 <__divsf3_pse+0x56>
> 236: bb 0b sbc r27, r27
> 238: 80 2d mov r24, r0
> 23a: bf 01 movw r22, r30
> 23c: ff 27 eor r31, r31
> 23e: 93 58 subi r25, 0x83 ; 131
> 240: 5f 4f sbci r21, 0xFF ; 255
> 242: 3a f0 brmi .+14 ; 0x252 <__divsf3_pse+0x70>
> 244: 9e 3f cpi r25, 0xFE ; 254
> 246: 51 05 cpc r21, r1
> 248: 78 f0 brcs .+30 ; 0x268 <__divsf3_pse+0x86>
> 24a: 0c 94 4c 01 jmp 0x298 ; 0x298 <__fp_inf>
> 24e: 0c 94 97 01 jmp 0x32e ; 0x32e <__fp_szero>
> 252: 5f 3f cpi r21, 0xFF ; 255
> 254: e4 f3 brlt .-8 ; 0x24e <__divsf3_pse+0x6c>
> 256: 98 3e cpi r25, 0xE8 ; 232
> 258: d4 f3 brlt .-12 ; 0x24e <__divsf3_pse+0x6c>
> 25a: 86 95 lsr r24
> 25c: 77 95 ror r23
> 25e: 67 95 ror r22
> 260: b7 95 ror r27
> 262: f7 95 ror r31
> 264: 9f 5f subi r25, 0xFF ; 255
> 266: c9 f7 brne .-14 ; 0x25a <__divsf3_pse+0x78>
> 268: 88 0f add r24, r24
> 26a: 91 1d adc r25, r1
> 26c: 96 95 lsr r25
> 26e: 87 95 ror r24
> 270: 97 f9 bld r25, 7
> 272: 08 95 ret
> 274: e1 e0 ldi r30, 0x01 ; 1
> 276: 66 0f add r22, r22
> 278: 77 1f adc r23, r23
> 27a: 88 1f adc r24, r24
> 27c: bb 1f adc r27, r27
> 27e: 62 17 cp r22, r18
> 280: 73 07 cpc r23, r19
> 282: 84 07 cpc r24, r20
> 284: ba 07 cpc r27, r26
> 286: 20 f0 brcs .+8 ; 0x290 <__divsf3_pse+0xae>
> 288: 62 1b sub r22, r18
> 28a: 73 0b sbc r23, r19
> 28c: 84 0b sbc r24, r20
> 28e: ba 0b sbc r27, r26
> 290: ee 1f adc r30, r30
> 292: 88 f7 brcc .-30 ; 0x276 <__divsf3_pse+0x94>
> 294: e0 95 com r30
> 296: 08 95 ret
>
> 00000298 <__fp_inf>:
> 298: 97 f9 bld r25, 7
> 29a: 9f 67 ori r25, 0x7F ; 127
> 29c: 80 e8 ldi r24, 0x80 ; 128
> 29e: 70 e0 ldi r23, 0x00 ; 0
> 2a0: 60 e0 ldi r22, 0x00 ; 0
> 2a2: 08 95 ret
>
> 000002a4 <__fp_nan>:
> 2a4: 9f ef ldi r25, 0xFF ; 255
> 2a6: 80 ec ldi r24, 0xC0 ; 192
> 2a8: 08 95 ret
>
> 000002aa <__fp_pscA>:
> 2aa: 00 24 eor r0, r0
> 2ac: 0a 94 dec r0
> 2ae: 16 16 cp r1, r22
> 2b0: 17 06 cpc r1, r23
> 2b2: 18 06 cpc r1, r24
> 2b4: 09 06 cpc r0, r25
> 2b6: 08 95 ret
>
> 000002b8 <__fp_pscB>:
> 2b8: 00 24 eor r0, r0
> 2ba: 0a 94 dec r0
> 2bc: 12 16 cp r1, r18
> 2be: 13 06 cpc r1, r19
> 2c0: 14 06 cpc r1, r20
> 2c2: 05 06 cpc r0, r21
> 2c4: 08 95 ret
>
> 000002c6 <__fp_round>:
> 2c6: 09 2e mov r0, r25
> 2c8: 03 94 inc r0
> 2ca: 00 0c add r0, r0
> 2cc: 11 f4 brne .+4 ; 0x2d2 <__fp_round+0xc>
> 2ce: 88 23 and r24, r24
> 2d0: 52 f0 brmi .+20 ; 0x2e6 <__fp_round+0x20>
> 2d2: bb 0f add r27, r27
> 2d4: 40 f4 brcc .+16 ; 0x2e6 <__fp_round+0x20>
> 2d6: bf 2b or r27, r31
> 2d8: 11 f4 brne .+4 ; 0x2de <__fp_round+0x18>
> 2da: 60 ff sbrs r22, 0
> 2dc: 04 c0 rjmp .+8 ; 0x2e6 <__fp_round+0x20>
> 2de: 6f 5f subi r22, 0xFF ; 255
> 2e0: 7f 4f sbci r23, 0xFF ; 255
> 2e2: 8f 4f sbci r24, 0xFF ; 255
> 2e4: 9f 4f sbci r25, 0xFF ; 255
> 2e6: 08 95 ret
>
> 000002e8 <__fp_split3>:
> 2e8: 57 fd sbrc r21, 7
> 2ea: 90 58 subi r25, 0x80 ; 128
> 2ec: 44 0f add r20, r20
> 2ee: 55 1f adc r21, r21
> 2f0: 59 f0 breq .+22 ; 0x308 <__fp_splitA+0x10>
> 2f2: 5f 3f cpi r21, 0xFF ; 255
> 2f4: 71 f0 breq .+28 ; 0x312 <__fp_splitA+0x1a>
> 2f6: 47 95 ror r20
>
> 000002f8 <__fp_splitA>:
> 2f8: 88 0f add r24, r24
> 2fa: 97 fb bst r25, 7
> 2fc: 99 1f adc r25, r25
> 2fe: 61 f0 breq .+24 ; 0x318 <__fp_splitA+0x20>
> 300: 9f 3f cpi r25, 0xFF ; 255
> 302: 79 f0 breq .+30 ; 0x322 <__fp_splitA+0x2a>
> 304: 87 95 ror r24
> 306: 08 95 ret
> 308: 12 16 cp r1, r18
> 30a: 13 06 cpc r1, r19
> 30c: 14 06 cpc r1, r20
> 30e: 55 1f adc r21, r21
> 310: f2 cf rjmp .-28 ; 0x2f6 <__fp_split3+0xe>
> 312: 46 95 lsr r20
> 314: f1 df rcall .-30 ; 0x2f8 <__fp_splitA>
> 316: 08 c0 rjmp .+16 ; 0x328 <__fp_splitA+0x30>
> 318: 16 16 cp r1, r22
> 31a: 17 06 cpc r1, r23
> 31c: 18 06 cpc r1, r24
> 31e: 99 1f adc r25, r25
> 320: f1 cf rjmp .-30 ; 0x304 <__fp_splitA+0xc>
> 322: 86 95 lsr r24
> 324: 71 05 cpc r23, r1
> 326: 61 05 cpc r22, r1
> 328: 08 94 sec
> 32a: 08 95 ret
>
> 0000032c <__fp_zero>:
> 32c: e8 94 clt
>
> 0000032e <__fp_szero>:
> 32e: bb 27 eor r27, r27
> 330: 66 27 eor r22, r22
> 332: 77 27 eor r23, r23
> 334: cb 01 movw r24, r22
> 336: 97 f9 bld r25, 7
> 338: 08 95 ret
>
> 0000033a <_exit>:
> 33a: f8 94 cli
>
> 0000033c <__stop_program>:
> 33c: ff cf rjmp .-2 ; 0x33c <__stop_program>
> -----------------------
>
> PH
>
> Dne 23.04.2024 v 18:23 Martin Záruba napsal(a):
>> Spíš myslím, že podstatné je umět si představit, jak i jednoduchý kód
>> v C vytvoří mnoho strojových instrukcí. Skoro si netroufám představit
>> si, co je výsledkem, pokud bych použil float.
>
> _______________________________________________
> HW-list mailing list - sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240424/047b2622/attachment.htm>
Další informace o konferenci Hw-list