//===---------------------------------------------------------------------===//
-int func(int a, int b) { if (a & 0x80) b |= 0x80; else b &= 0x80; return b; }
+int func(int a, int b) { if (a & 0x80) b |= 0x80; else b &= ~0x80; return b; }
Current:
+
movb %sil, %al
- andb $-128, %sil
+ andb $127, %sil
orb $-128, %al
testb %dil, %dil
js LBB1_2
LBB1_2:
movsbl %al, %eax
+
Better:
movl %esi, %eax
orl $-128, %eax
- andl $-128, %esi
+ andl $127, %esi
testb %dil, %dil
cmovns %esi, %eax
movsbl %al,%eax