Имеем такой кусок:
#include <stdio.h>
extern void underflow(void) __attribute__((noreturn));
unsigned foo(unsigned a, unsigned b)
{
unsigned r = a - b;
if (r > a)
{
printf("underflow");
}
return r;
}
int main(){
foo(1, 2);
return 0;
}
Функция foo дает в этих ваших gcc:
pushq %rbx
movl %edi, %ebx
subl %esi, %ebx
cmpl %edi, %ebx
jbe .LBB0_2
Как заставить это говнецо выдавать нормальный код (хотя бы как у gcc 4.4.7):
pushq %rbx
subl %esi, %edi
j(n)c .L2