ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
8 мая
1374952 Топик полностью
Eddy_Em (23.11.2023 23:38, просмотров: 133) ответил BlackMorda на Ассемблер ARM прямо не узнать :-)
Вот, зашел на одноплатник с ARM64. 

Код под x86_64:

.LFB39:
    .cfi_startproc
    cmpl    $4, %edi
    ja  .L2
    movl    %edi, %edi
    leaq    .L4(%rip), %rdx
    movslq  (%rdx,%rdi,4), %rax
    addq    %rdx, %rax
    jmp *%rax
    .section    .rodata
    .align 4
    .align 4
.L4:
    .long   .L9-.L4
    .long   .L7-.L4
    .long   .L6-.L4
    .long   .L5-.L4
    .long   .L3-.L4
    .text
.L2:
    movl    $0, %eax
    ret
.L7:
...

и армовский:

.LFB39:
    .cfi_startproc
    mov w1, w0
    cmp w0, 2
    beq .L4
    bls .L8
    mov w0, 4
    cmp w1, 3
    beq .L1
    cmp w1, w0
    mov w0, 5
    csel    w0, w0, wzr, eq
    b   .L1
.L8:
    cmp w0, 0
    cset    w0, ne
    add w0, w0, 1
.L1:
    ret

Реально, фигня какая-то: gcc под армом на О1 ни хрена не пооптимизировал!

А на O0 вообще адскую портянку на арме нагенерил:

f1:
.LFB6:
        .cfi_startproc
        sub     sp, sp, #32
        .cfi_def_cfa_offset 32
        str     w0, [sp, 12]
        str     wzr, [sp, 28]
        ldr     w0, [sp, 12]
        cmp     w0, 4
        beq     .L2
        ldr     w0, [sp, 12]
        cmp     w0, 4
        bhi     .L3
        ldr     w0, [sp, 12]
        cmp     w0, 3
        beq     .L4
        ldr     w0, [sp, 12]
        cmp     w0, 3
        bhi     .L3
        ldr     w0, [sp, 12]
        cmp     w0, 2
        beq     .L5
        ldr     w0, [sp, 12]
        cmp     w0, 2
        bhi     .L3
        ldr     w0, [sp, 12]
        cmp     w0, 0
        beq     .L6
        ldr     w0, [sp, 12]
        cmp     w0, 1
        beq     .L7
        b       .L3
.L6:
        mov     w0, 1
        str     w0, [sp, 28]
        b       .L3
.L7:
        mov     w0, 2
        str     w0, [sp, 28]
        b       .L3
.L5:
        mov     w0, 3
        str     w0, [sp, 28]
        b       .L3
.L4:
        mov     w0, 4
        str     w0, [sp, 28]
        b       .L3
.L2:
        mov     w0, 5
        str     w0, [sp, 28]
        nop
.L3:
        ldr     w0, [sp, 28]
        add     sp, sp, 32
        .cfi_def_cfa_offset 0
        ret
        .cfi_endproc
eddy-em.livejournal.com github.com/eddyem