Re: C: Arduino : Přesun pole bytů do proměnné unsigned long

Jan Waclawek konfera na efton.sk
Středa Listopad 8 20:09:42 CET 2023


Ano, rovnako to prelozi nejake gcc 8.0 s -O2 aj s -Os (rozdiel je v tom
uplnom uvode, kde je inak prelozeny cyklus ktory "cita" byty z a do rx[i];
a potom su inak alokovane registre v poslednych 2 riadkoch)

Tiez ma to prekvapilo, ale je pravda ze ked sme s AVRkami robili, tak sme
dost vela kritickych miest prepisovali do asembleru.

wek


----- Original Message ---------------
>To je opravdu se zapnutou optimalizaci? Me spis vzdycky prekvapilo, kdyz 
>jsem to jeste zkoumal, ze to prekladac pochopi a hezky nasoupe jen byty 
>na spravna mista...
>
>Dne 08.11.2023 v 19:38 Jan Waclawek napsal(a):
>>> Spí± moµná SHIFTovat a ORovat.
>>    b2 = rx[3] | (rx[4] << 8) | ((uint32_t)rx[5] << 16) | ((uint32_t)rx[6] <<
>> 24);
>>    c = b2;
>>
>>
>>    39 0048 E091 0000 		lds r30,rx+3
>>    40 004c C091 0000 		lds r28,rx+4
>>    41 0050 D0E0      		ldi r29,0
>>    42 0052 8091 0000 		lds r24,rx+5
>>    43 0056 C82E      		mov r12,r24
>>    44 0058 D12C      		mov r13,__zero_reg__
>>    45 005a F12C      		mov r15,__zero_reg__
>>    46 005c E12C      		mov r14,__zero_reg__
>>    47 005e 4091 0000 		lds r20,rx+6
>>    48 0062 50E0      		ldi r21,0
>>    49 0064 70E0      		ldi r23,0
>>    50 0066 60E0      		ldi r22,0
>>    51 0068 0091 0000 		lds r16,rx+3
>>    52 006c 1091 0000 		lds r17,rx+3+1
>>    53 0070 012E      		mov __tmp_reg__,r17
>>    54 0072 000C      		lsl r0
>>    55 0074 220B      		sbc r18,r18
>>    56 0076 330B      		sbc r19,r19
>>    57 0078 D601      		movw r26,r12
>>    58 007a 9927      		clr r25
>>    59 007c 8827      		clr r24
>>    60 007e 802B      		or r24,r16
>>    61 0080 912B      		or r25,r17
>>    62 0082 A22B      		or r26,r18
>>    63 0084 B32B      		or r27,r19
>>    64 0086 342F      		mov r19,r20
>>    65 0088 2227      		clr r18
>>    66 008a 1127      		clr r17
>>    67 008c 0027      		clr r16
>>    68 008e 802B      		or r24,r16
>>    69 0090 912B      		or r25,r17
>>    70 0092 A22B      		or r26,r18
>>    71 0094 B32B      		or r27,r19
>>    72 0096 8093 0000 		sts b2,r24
>>    73 009a 9093 0000 		sts b2+1,r25
>>    74 009e A093 0000 		sts b2+2,r26
>>    75 00a2 B093 0000 		sts b2+3,r27
>>    76 00a6 8093 0000 		sts c,r24
>>    77 00aa 9093 0000 		sts c+1,r25
>>    78 00ae A093 0000 		sts c+2,r26
>>    79 00b2 B093 0000 		sts c+3,r27
>>
>> wek



Další informace o konferenci Hw-list