bon j'ai testé les ifs, avec 20 ifs, il ne fait pas de table
int main(int argc, char *argv[]){
asm(" ; BEFORE SWITCH ");
switch(argc){
case 1:
return 15;
case 2:
return 42;
case 3:
return 27;
case 4:
return 30;
case 5:
return 18;
case 6:
return 22;
case 7:
return 26;
case 8:
return 28;
case 9:
return 71;
case 10:
return 12;
case 11:
return 150;
case 12:
return 420;
case 13:
return 270;
case 14:
return 300;
case 15:
return 180;
case 16:
return 220;
case 17:
return 260;
case 18:
return 280;
case 19:
return 710;
case 20:
return 120;
}
asm(" ; AFTER SWITCH ");
asm(" ; BEFORE IFS ");
if(argc == 1)
return 15;
if(argc == 2)
return 42;
if(argc == 3)
return 27;
if(argc == 4)
return 30;
if(argc == 5)
return 18;
if(argc == 6)
return 22;
if(argc == 7)
return 26;
if(argc == 8)
return 28;
if(argc == 9)
return 71;
if(argc == 10)
return 12;
if(argc == 11)
return 150;
if(argc == 12)
return 420;
if(argc == 13)
return 270;
if(argc == 14)
return 300;
if(argc == 15)
return 180;
if(argc == 16)
return 220;
if(argc == 17)
return 260;
if(argc == 18)
return 280;
if(argc == 19)
return 710;
if(argc == 20)
return 120;
asm(" ; AFTER IFS ");
}
.file "switch.c"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl 8(%ebp), %edx
andl $-16, %esp
#APP
; BEFORE SWITCH
#NO_APP
cmpl $20, %edx
ja .L2
jmp *.L23(,%edx,4)
.section .rodata
.align 4
.align 4
.L23:
.long .L2
.long .L3
.long .L4
.long .L5
.long .L6
.long .L7
.long .L8
.long .L9
.long .L10
.long .L11
.long .L12
.long .L13
.long .L14
.long .L15
.long .L16
.long .L17
.long .L18
.long .L19
.long .L20
.long .L21
.long .L22
.text
.L3:
movl $15, %eax
.p2align 4,,15
.L1:
leave
ret
.p2align 4,,7
.L2:
#APP
; AFTER SWITCH
; BEFORE IFS
#NO_APP
cmpl $1, %edx
movl $15, %eax
je .L1
cmpl $2, %edx
movl $42, %eax
je .L1
cmpl $3, %edx
movl $27, %eax
je .L1
cmpl $4, %edx
movl $30, %eax
je .L1
cmpl $5, %edx
movl $18, %eax
je .L1
cmpl $6, %edx
movl $22, %eax
je .L1
cmpl $7, %edx
movl $26, %eax
je .L1
cmpl $8, %edx
movl $28, %eax
je .L1
cmpl $9, %edx
movl $71, %eax
je .L1
cmpl $10, %edx
movl $12, %eax
je .L1
cmpl $11, %edx
movl $150, %eax
je .L1
cmpl $12, %edx
movl $420, %eax
je .L1
cmpl $13, %edx
movl $270, %eax
je .L1
cmpl $14, %edx
movl $300, %eax
je .L1
cmpl $15, %edx
movl $180, %eax
je .L1
cmpl $16, %edx
movl $220, %eax
je .L1
cmpl $17, %edx
movl $260, %eax
je .L1
cmpl $18, %edx
movl $280, %eax
je .L1
cmpl $19, %edx
movl $710, %eax
je .L1
cmpl $20, %edx
movl $120, %eax
je .L1
#APP
; AFTER IFS
#NO_APP
jmp .L1
.L4:
movl $42, %eax
jmp .L1
.L5:
movl $27, %eax
jmp .L1
.L6:
movl $30, %eax
jmp .L1
.L7:
movl $18, %eax
jmp .L1
.L8:
movl $22, %eax
jmp .L1
.L9:
movl $26, %eax
jmp .L1
.L10:
movl $28, %eax
jmp .L1
.L11:
movl $71, %eax
jmp .L1
.L12:
movl $12, %eax
jmp .L1
.L13:
movl $150, %eax
jmp .L1
.L14:
movl $420, %eax
jmp .L1
.L15:
movl $270, %eax
jmp .L1
.L16:
movl $300, %eax
jmp .L1
.L17:
movl $180, %eax
jmp .L1
.L18:
movl $220, %eax
jmp .L1
.L19:
movl $260, %eax
jmp .L1
.L20:
movl $280, %eax
jmp .L1
.L21:
movl $710, %eax
jmp .L1
.L22:
movl $120, %eax
jmp .L1
.size main, .-main
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.6 (Gentoo 3.3.6, ssp-3.3.6-1.0, pie-8.7.8)"