https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66822
--- Comment #6 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to H.J. Lu from comment #5) > X86_TUNE_USE_BT also reduces code size: > > [hjl@gnu-tools-1 pr66822]$ cat y.i > void bar (void); > > void > foo (int x) > { > if (x != 2 && x != 3 && x != 10 && x != 11 && x != 17 && x != 18 && x != > 23) > bar (); > } > [hjl@gnu-tools-1 pr66822]$ make y.o > /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc > -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -O2 -m32 -miamcu > -mtune=iamcu -S -o y.s y.i > /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc > -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -O2 -m32 -miamcu > -mtune=iamcu -c -o y.o y.s > rm y.s > [hjl@gnu-tools-1 pr66822]$ objdump -dwr y.o > > y.o: file format elf32-i386 > > > Disassembly of section .text: > > 00000000 <foo>: > 0: 83 f8 17 cmp $0x17,%eax > 3: 76 0b jbe 10 <foo+0x10> > 5: e9 fc ff ff ff jmp 6 <foo+0x6> 6: R_386_PC32 bar > a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi > 10: ba 0c 0c 86 00 mov $0x860c0c,%edx > 15: 88 c1 mov %al,%cl > 17: d3 ea shr %cl,%edx > 19: 83 e2 01 and $0x1,%edx > 1c: 74 e7 je 5 <foo+0x5> > 1e: c3 ret > [hjl@gnu-tools-1 pr66822]$ /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc > -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -O2 -m32 -miamcu > -mtune=iamcu -c y.i -mtune-ctrl=use_bt > [hjl@gnu-tools-1 pr66822]$ objdump -dwr y.o > > y.o: file format elf32-i386 > > > Disassembly of section .text: > > 00000000 <foo>: > 0: 83 f8 17 cmp $0x17,%eax > 3: 76 0b jbe 10 <foo+0x10> > 5: e9 fc ff ff ff jmp 6 <foo+0x6> 6: R_386_PC32 bar > a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi > 10: ba 0c 0c 86 00 mov $0x860c0c,%edx > 15: 0f a3 c2 bt %eax,%edx > 18: 73 eb jae 5 <foo+0x5> > 1a: c3 ret > [hjl@gnu-tools-1 pr66822]$ We can reduce size further by diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index bca1fee..4f08d0a 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2556,7 +2556,7 @@ static const struct ptt processor_target_table[PROCESSOR_max] = {"i386", &i386_cost, 4, 3, 4, 3, 4}, {"i486", &i486_cost, 16, 15, 16, 15, 16}, {"pentium", &pentium_cost, 16, 7, 16, 7, 16}, - {"iamcu", &iamcu_cost, 16, 7, 16, 7, 16}, + {"iamcu", &iamcu_cost, 0, 0, 0, 0, 0}, {"pentiumpro", &pentiumpro_cost, 16, 15, 16, 10, 16}, {"pentium4", &pentium4_cost, 0, 0, 0, 0, 0}, {"nocona", &nocona_cost, 0, 0, 0, 0, 0}, and get 00000000 <foo>: 0: 83 f8 17 cmp $0x17,%eax 3: 76 05 jbe a <foo+0xa> 5: e9 fc ff ff ff jmp 6 <foo+0x6> 6: R_386_PC32 bar a: ba 0c 0c 86 00 mov $0x860c0c,%edx f: 0f a3 c2 bt %eax,%edx 12: 73 f1 jae 5 <foo+0x5> 14: c3 ret [hjl@gnu-tools-1 pr66822]$