GCC 4.4: Avoid range check on switch/case statement in gcc?

前端 未结 6 1215
自闭症患者
自闭症患者 2021-02-05 13:11

This is only an issue on GCC versions prior to 4.4, this was fixed in GCC 4.5.

Is it possible to tell the compiler the variable used in a switch fits within the provided

6条回答
  •  星月不相逢
    2021-02-05 14:04

    I tried compiling something simple and comparable with -O5 and -fno-inline (my f0-f7 functions were trivial) and it generated this:

    
     8048420:   55                      push   %ebp ;; function preamble
     8048421:   89 e5                   mov    %esp,%ebp ;; Yeah, yeah, it's a function.
     8048423:   83 ec 04                sub    $0x4,%esp ;; do stuff with the stack
     8048426:   8b 45 08                mov    0x8(%ebp),%eax ;; x86 sucks, we get it
     8048429:   83 e0 07                and    $0x7,%eax ;; Do the (a & 0x7)
     804842c:   ff 24 85 a0 85 04 08    jmp    *0x80485a0(,%eax,4) ;; Jump table!
     8048433:   90                      nop
     8048434:   8d 74 26 00             lea    0x0(%esi,%eiz,1),%esi
     8048438:   8d 45 08                lea    0x8(%ebp),%eax
     804843b:   89 04 24                mov    %eax,(%esp)
     804843e:   e8 bd ff ff ff          call   8048400 
     8048443:   8b 45 08                mov    0x8(%ebp),%eax
     8048446:   c9                      leave  
    

    Did you try playing with optimization levels?

提交回复
热议问题