LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

https://godbolt.org/z/TbcqMfT99

это clang, он вроде попроще код(прям как на асме пишут) генерит для проверок-то

функция

int over(int fn, int fnn, int fnnn) {
    return fn + fnn + fnnn*100;
}

с проверкой int переполнения

over(int, int, int):
 add    edi,esi
 jo     10 <over(int, int, int)+0x10>
 imul   eax,edx,0x64
 jo     14 <over(int, int, int)+0x14>
 add    edi,eax
 jo     10 <over(int, int, int)+0x10>
 mov    eax,edi
 ret
 ud1    eax,DWORD PTR [eax]
 ud1    eax,DWORD PTR [eax+0xc]

без проверки

over(int, int, int):
 imul   eax,edx,0x64
 add    eax,edi
 add    eax,esi
 ret

понятно что джентельмены будут предпочитать с проверками не связываться.

Исходная версия alysnix, :

https://godbolt.org/z/TbcqMfT99

это clang, он вроде попроще код(прям как на асме пишут) генерит для проверок-то

функция

int over(int fn, int fnn, int fnnn) {
    return fn + fnn + fnnn*100;
}

с проверкой int переполнения

over(int, int, int):
 add    edi,esi
 jo     10 <over(int, int, int)+0x10>
 imul   eax,edx,0x64
 jo     14 <over(int, int, int)+0x14>
 add    edi,eax
 jo     10 <over(int, int, int)+0x10>
 mov    eax,edi
 ret
 ud1    eax,DWORD PTR [eax]
 ud1    eax,DWORD PTR [eax+0xc]

без проверки

over(int, int, int):
 imul   eax,edx,0x64
 add    eax,edi
 add    eax,esi
 ret