Информация об изменениях

Сообщение Re[4]: Очередной "шедевр" от MS от 11.03.2017 17:16

Изменено 11.03.2017 17:19 pilgrim_

Re[4]: Очередной "шедевр" от MS
Здравствуйте, rus blood, Вы писали:

RB>А это точно итоговый код?

RB>Условие (i==0) никогда не выполняется.
RB>Его не должно быть в итоговом коде, а проверка там есть.

Проверил локально, удивительно, для /O2 (для /Ox аналогично), но походу да:

x64

cl /O2 /DNDEBUG fast.cpp -o fast.exe /FA
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23918 for x64


$LL4@Measure:
; Line 22
    movd    xmm0, edi
    pshufd    xmm0, xmm0, 0
    paddd    xmm0, xmm0
    cvtdq2pd xmm0, xmm0
    mulpd    xmm0, xmm7
    call    __vdecl_sin2
    xor    eax, eax
    mov    ecx, 500                ; 000001f4H
    npad    15
$LL7@Measure:
    movups    xmm1, XMMWORD PTR ?randoms_dbl@@3PANA[rax+rbp]
    addpd    xmm1, xmm0
    addpd    xmm1, xmm6
    movups    XMMWORD PTR ?outputs_dbl@@3PANA[rax+rbp], xmm1
    add    rax, 16
    sub    rcx, 1
    jne    SHORT $LL7@Measure
; Line 23
    test    edi, edi
    jne    SHORT $LN2@Measure
    lea    rdx, OFFSET FLAT:??_C@_0BJ@JOJDFEDH@msvc?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$AA@
    lea    rcx, OFFSET FLAT:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
    call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
$LN2@Measure:
; Line 21
    inc    edi
    cmp    edi, 100000                ; 000186a0H
    jl    SHORT $LL4@Measure


x86

Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23918 for x86


$LL4@Measure:
; Line 22
    movd    xmm0, esi
    pshufd    xmm0, xmm0, 0
    paddd    xmm0, xmm0
    cvtdq2pd xmm0, xmm0
    mulpd    xmm0, XMMWORD PTR __xmm@400921fb54442d18400921fb54442d18
    call    ___vdecl_sin2
    movaps    xmm2, XMMWORD PTR __xmm@3fd80000000000003fd8000000000000
    xor    eax, eax
    npad    9
$LL7@Measure:
    movups    xmm1, XMMWORD PTR ?randoms_dbl@@3PANA[eax]
    addpd    xmm1, xmm0
    addpd    xmm1, xmm2
    movups    XMMWORD PTR ?outputs_dbl@@3PANA[eax], xmm1
    add    eax, 16                    ; 00000010H
    cmp    eax, 8000                ; 00001f40H
    jl    SHORT $LL7@Measure
; Line 23
    test    esi, esi
    jne    SHORT $LN2@Measure
    push    OFFSET ??_C@_0BJ@JOJDFEDH@msvc?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$AA@
    push    OFFSET ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
    call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
    add    esp, 8
$LN2@Measure:
; Line 21
    inc    esi
    cmp    esi, 100000                ; 000186a0H
    jl    SHORT $LL4@Measure
Re[4]: Очередной "шедевр" от MS
Здравствуйте, rus blood, Вы писали:

RB>А это точно итоговый код?

RB>Условие (i==0) никогда не выполняется.
RB>Его не должно быть в итоговом коде, а проверка там есть.

Проверил локально, удивительно, для /O2 (для /Ox аналогично), но походу да:

x64

cl /O2 /DNDEBUG fast.cpp -o fast.exe /FA
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23918 for x64


$LL4@Measure:
; Line 22
    movd    xmm0, edi
    pshufd    xmm0, xmm0, 0
    paddd    xmm0, xmm0
    cvtdq2pd xmm0, xmm0
    mulpd    xmm0, xmm7
    call    __vdecl_sin2
    xor    eax, eax
    mov    ecx, 500                ; 000001f4H
    npad    15
$LL7@Measure:
    movups    xmm1, XMMWORD PTR ?randoms_dbl@@3PANA[rax+rbp]
    addpd    xmm1, xmm0
    addpd    xmm1, xmm6
    movups    XMMWORD PTR ?outputs_dbl@@3PANA[rax+rbp], xmm1
    add    rax, 16
    sub    rcx, 1
    jne    SHORT $LL7@Measure
; Line 23
    test    edi, edi
    jne    SHORT $LN2@Measure
    lea    rdx, OFFSET FLAT:??_C@_0BJ@JOJDFEDH@msvc?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$AA@
    lea    rcx, OFFSET FLAT:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
    call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
$LN2@Measure:
; Line 21
    inc    edi
    cmp    edi, 100000                ; 000186a0H
    jl    SHORT $LL4@Measure


x86

Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23918 for x86


$LL4@Measure:
; Line 22
    movd    xmm0, esi
    pshufd    xmm0, xmm0, 0
    paddd    xmm0, xmm0
    cvtdq2pd xmm0, xmm0
    mulpd    xmm0, XMMWORD PTR __xmm@400921fb54442d18400921fb54442d18
    call    ___vdecl_sin2
    movaps    xmm2, XMMWORD PTR __xmm@3fd80000000000003fd8000000000000
    xor    eax, eax
    npad    9
$LL7@Measure:
    movups    xmm1, XMMWORD PTR ?randoms_dbl@@3PANA[eax]
    addpd    xmm1, xmm0
    addpd    xmm1, xmm2
    movups    XMMWORD PTR ?outputs_dbl@@3PANA[eax], xmm1
    add    eax, 16                    ; 00000010H
    cmp    eax, 8000                ; 00001f40H
    jl    SHORT $LL7@Measure
; Line 23
    test    esi, esi
    jne    SHORT $LN2@Measure
    push    OFFSET ??_C@_0BJ@JOJDFEDH@msvc?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$DP?$AA@
    push    OFFSET ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
    call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
    add    esp, 8
$LN2@Measure:
; Line 21
    inc    esi
    cmp    esi, 100000                ; 000186a0H
    jl    SHORT $LL4@Measure


UPD: т.е. по факту они вставили код if (true) goto next;