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

Jindroush jindroush na seznam.cz
Středa Listopad 8 19:47:42 CET 2023


Toto je ale velmi vtipne, ten rozdil!
To vypada, jako by si optimalizator v tom druhem pripade nedokazal dat 
dohromady, ze bb.b[0...3] je totez jako bb.w32, jako prosty alias, takze 
to provedl ve dvou nezavislych operacich.
V prvnim pripade mezivysledek rovnou pouzil v druhem radku.

A protoze jsem na mnoooohoregistrove architekture nikdy nic nedelal - 
proc v druhem pripade pouziva r20, r18, r19, r24 pro ten prvni radek, a 
ne porad dokola jen jeden registr? To uz tam je pouzit nejaky 
pipelining, takze ty instrukce jedou paralelne? (takze by jim sdileni 
registru zpusobovalo cekani?)

J.


On 08.11.2023 19:34, Jan Waclawek wrote:
>
> Pricom odvolavam co som odvolal. Skusil som niekolko sposobov na niekolkych
> verziach gcc, a "optimalne" fungoval naozaj len ten cez type punning cez
> pretypovanie smernika...
>
>    b1 = *(uint32_t*)&rx[3];
>    c = b1;
>
>    27 0018 8091 0000 		lds r24,rx+3
>    28 001c 9091 0000 		lds r25,rx+3+1
>    29 0020 A091 0000 		lds r26,rx+3+2
>    30 0024 B091 0000 		lds r27,rx+3+3
>    31 0028 8093 0000 		sts b1,r24
>    32 002c 9093 0000 		sts b1+1,r25
>    33 0030 A093 0000 		sts b1+2,r26
>    34 0034 B093 0000 		sts b1+3,r27
>    35 0038 8093 0000 		sts c,r24
>    36 003c 9093 0000 		sts c+1,r25
>    37 0040 A093 0000 		sts c+2,r26
>    38 0044 B093 0000 		sts c+3,r27
>
>    bb.b[0] = rx[3]; bb.b[1] = rx[4]; bb.b[2] = rx[5]; bb.b[3] = rx[6];
>    c = bb.w32;
>
>    39 0048 4091 0000 		lds r20,rx+3
>    40 004c 4093 0000 		sts bb,r20
>    41 0050 2091 0000 		lds r18,rx+4
>    42 0054 2093 0000 		sts bb+1,r18
>    43 0058 3091 0000 		lds r19,rx+5
>    44 005c 3093 0000 		sts bb+2,r19
>    45 0060 8091 0000 		lds r24,rx+6
>    46 0064 8093 0000 		sts bb+3,r24
>    47 0068 C090 0000 		lds r12,bb
>    48 006c D090 0000 		lds r13,bb+1
>    49 0070 E090 0000 		lds r14,bb+2
>    50 0074 F090 0000 		lds r15,bb+3
>    51 0078 C092 0000 		sts c,r12
>    52 007c D092 0000 		sts c+1,r13
>    53 0080 E092 0000 		sts c+2,r14
>    54 0084 F092 0000 		sts c+3,r15
>

-- 
Jindroush <jindroush na seznam.cz>



Další informace o konferenci Hw-list