ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 апреля
903187 Топик полностью
йцукен (11.02.2019 23:02, просмотров: 211) ответил Evgeny_CD на Вопрос - а насколько компиляторы умеют эффективно это использовать? Или все на intrinsic надо писать?
Вот код из "уточнённого вопроса", скомпилированный ИАРом (medium optimization). Видно, что ИАР использует UBFX и BFI.  15 void foo() 16 { 17 bbb.a0 = bbb.a1 + bbb.a2; \ foo: (+1) \ 0x0 0x.... LDR.N R1,??DataTable4 \ 0x2 0x6808 LDR R0,[R1, #+0] \ 0x4 0xF3C0 0x0280 UBFX R2,R0,#+2,#+1 \ 0x8 0xF3C0 0x00C0 UBFX R0,R0,#+3,#+1 \ 0xC 0x1882 ADDS R2,R0,R2 \ 0xE 0x6808 LDR R0,[R1, #+0] \ 0x10 0xF362 0x0001 BFI R0,R2,#+0,#+2 \ 0x14 0x6008 STR R0,[R1, #+0] 18 if ( bbb.a1 != bbb.a2 ) \ 0x16 0x4602 MOV R2,R0 \ 0x18 0xF3C2 0x0080 UBFX R0,R2,#+2,#+1 \ 0x1C 0xF3C2 0x03C0 UBFX R3,R2,#+3,#+1 \ 0x20 0x4298 CMP R0,R3 \ 0x22 0xD00D BEQ.N ??foo_0 19 { 20 bbb.a0 ++; \ 0x24 0x0890 LSRS R0,R2,#+2 \ 0x26 0x1C52 ADDS R2,R2,#+1 \ 0x28 0xF002 0x0203 AND R2,R2,#0x3 \ 0x2C 0xEA52 0x0280 ORRS R2,R2,R0, LSL #+2 \ 0x30 0x600A STR R2,[R1, #+0] 21 bbb.a0 = ccc.a5 >> 1; \ 0x32 0x0892 LSRS R2,R2,#+2 \ 0x34 0x6848 LDR R0,[R1, #+4] \ 0x36 0xF3C0 0x10C0 UBFX R0,R0,#+7,#+1 \ 0x3A 0xEA50 0x0282 ORRS R2,R0,R2, LSL #+2 \ 0x3E 0x600A STR R2,[R1, #+0] 22 } 23 }