Here is the whole output file (sorry for taking up so much space ^^). I noticed some kind of huge lookup table at the bottom (L287). That may make the switch fast, but quite large.
Code:
TITLE E:\Programming\Cpp\Test\SwitchIfTest.cpp
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS
$$SYMBOLS SEGMENT BYTE USE32 'DEBSYM'
$$SYMBOLS ENDS
$$TYPES SEGMENT BYTE USE32 'DEBTYP'
$$TYPES ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
; COMDAT _main
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC _main
; COMDAT _main
_TEXT SEGMENT
_Alpha$ = -4
_main PROC NEAR ; COMDAT
; File E:\Programming\Cpp\Test\SwitchIfTest.cpp
; Line 2
push ebp
mov ebp, esp
sub esp, 72 ; 00000048H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-72]
mov ecx, 18 ; 00000012H
mov eax, -858993460 ; ccccccccH
rep stosd
; Line 3
mov DWORD PTR _Alpha$[ebp], 0
; Line 6
cmp DWORD PTR _Alpha$[ebp], 1
jne SHORT $L268
; Line 8
mov DWORD PTR _Alpha$[ebp], 0
; Line 10
jmp SHORT $L274
$L268:
cmp DWORD PTR _Alpha$[ebp], 10 ; 0000000aH
jne SHORT $L270
; Line 12
mov DWORD PTR _Alpha$[ebp], 0
; Line 14
jmp SHORT $L274
$L270:
cmp DWORD PTR _Alpha$[ebp], 56 ; 00000038H
jne SHORT $L272
; Line 16
mov DWORD PTR _Alpha$[ebp], 0
; Line 18
jmp SHORT $L274
$L272:
cmp DWORD PTR _Alpha$[ebp], 128 ; 00000080H
jne SHORT $L274
; Line 20
mov DWORD PTR _Alpha$[ebp], 0
$L274:
; Line 25
mov eax, DWORD PTR _Alpha$[ebp]
mov DWORD PTR -8+[ebp], eax
mov ecx, DWORD PTR -8+[ebp]
sub ecx, 1
mov DWORD PTR -8+[ebp], ecx
cmp DWORD PTR -8+[ebp], 127 ; 0000007fH
ja SHORT $L276
mov eax, DWORD PTR -8+[ebp]
xor edx, edx
mov dl, BYTE PTR $L287[eax]
jmp DWORD PTR $L288[edx*4]
$L279:
; Line 27
mov DWORD PTR _Alpha$[ebp], 0
; Line 28
jmp SHORT $L276
$L280:
; Line 31
mov DWORD PTR _Alpha$[ebp], 0
; Line 32
jmp SHORT $L276
$L281:
; Line 35
mov DWORD PTR _Alpha$[ebp], 0
; Line 36
jmp SHORT $L276
$L282:
; Line 39
mov DWORD PTR _Alpha$[ebp], 0
$L276:
; Line 43
xor eax, eax
; Line 44
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
$L288:
DD $L279
DD $L280
DD $L281
DD $L282
DD $L276
$L287:
DB 0
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 1
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 2
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 4
DB 3
_main ENDP
_TEXT ENDS
END