ну вот я засунул это все в IAR 3/10 для AVR при макс оптим по size что то меня сомнения гложат
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ы 23 октября 2004 г. 15:13
В ответ на: зато офигенная оптимизация и нехрен мои сурцы всяким понимать :-) отправлено DASM 23 октября 2004 г. 15:03


u8_t result;
116
117 result = (var1 & 1 << i ? 1 : 0 ) ^ (var2 & 1 << j ? 1 : 0 );
\ 00000000 .... LDI R30,LOW(var1)
\ 00000002 .... LDI R31,(var1) >> 8
\ 00000004 8120 LD R18,Z
\ 00000006 E001 LDI R16,1
\ 00000008 E010 LDI R17,0
\ 0000000A 8142 LDD R20,Z+2
\ 0000000C ........ CALL ?S_SHL_L02
\ 00000010 2302 AND R16,R18
\ 00000012 F011 BREQ ??COOL_0
\ 00000014 E021 LDI R18,1
\ 00000016 C001 RJMP ??COOL_1
\ ??COOL_0:
\ 00000018 E020 LDI R18,0
\ ??COOL_1:
\ 0000001A 8151 LDD R21,Z+1
\ 0000001C E001 LDI R16,1
\ 0000001E E010 LDI R17,0
\ 00000020 8143 LDD R20,Z+3
\ 00000022 ........ CALL ?S_SHL_L02
\ 00000026 2305 AND R16,R21
\ 00000028 F011 BREQ ??COOL_2
\ 0000002A E001 LDI R16,1
\ 0000002C C001 RJMP ??COOL_3
\ ??COOL_2:
\ 0000002E E000 LDI R16,0
\ ??COOL_3:
\ 00000030 2702 EOR R16,R18
118
119 //result2 = ((var1 >> i ) ^ (var2 >> j )) & 1;
120
121 return result;
\ 00000032 9508 RET

u8_t result;
116
117 //result = (var1 & 1 << i ? 1 : 0 ) ^ (var2 & 1 << j ? 1 : 0 );
118
119 result = ((var1 >> i ) ^ (var2 >> j )) & 1;
120
121 return result;
\ 00000000 .... LDI R30,LOW(var1)
\ 00000002 .... LDI R31,(var1) >> 8
\ 00000004 8100 LD R16,Z
\ 00000006 E010 LDI R17,0
\ 00000008 8142 LDD R20,Z+2
\ 0000000A ........ CALL ?SS_SHR_L02
\ 0000000E 2F20 MOV R18,R16
\ 00000010 8101 LDD R16,Z+1
\ 00000012 E010 LDI R17,0
\ 00000014 8143 LDD R20,Z+3
\ 00000016 ........ CALL ?SS_SHR_L02
\ 0000001A 2702 EOR R16,R18
\ 0000001C 7001 ANDI R16,0x01
\ 0000001E 9508 RET



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru