#include
#include
int main(int argc, char *argv[]) {
int r = 0;
switch (argc) {
case 0:
r = 10;
break;
case 1:
r = 11;
break;
case 2:
r = 45;
break;
case 3:
r = 39;
break;
case 4:
r = 14;
break;
case 5:
r = 2;
break;
default:
r = 1;
}
return r;
}
| .file "switch.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
movl %ecx, -24(%ebp)
movl $0, -8(%ebp)
movl -24(%ebp), %eax
cmpl $5, (%eax)
ja .L2
movl -24(%ebp), %edx
movl (%edx), %eax
sall $2, %eax
movl .L9(%eax), %eax
jmp *%eax
.section .rodata
.align 4
.align 4
.L9:
.long .L3
.long .L4
.long .L5
.long .L6
.long .L7
.long .L8
.text
.L3:
movl $10, -8(%ebp)
jmp .L10
.L4:
movl $11, -8(%ebp)
jmp .L10
.L5:
movl $45, -8(%ebp)
jmp .L10
.L6:
movl $39, -8(%ebp)
jmp .L10
.L7:
movl $14, -8(%ebp)
jmp .L10
.L8:
movl $2, -8(%ebp)
jmp .L10
.L2:
movl $1, -8(%ebp)
.L10:
movl -8(%ebp), %eax
addl $20, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20080704 ...
.section .note.GNU-stack,"",@progb...
| .file 1 "switch.c"
.section .mdebug.abi32
.previous
.abicalls
.text
.align 2
.globl main
.ent main
.type main, @function
main:
.frame $fp,24,$31 # vars= 8, regs...
.mask 0x40000000,-8
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set reorder
addiu $sp,$sp,-24
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp)
sw $5,28($fp)
sw $0,8($fp)
lw $2,24($fp)
sltu $2,$2,6
beq $2,$0,$L9
lw $2,24($fp)
sll $3,$2,2
la $2,$L10
addu $2,$3,$2
lw $2,0($2)
addu $2,$2,$28
j $2
.rdata
.align 2
$L10:
.gpword $L3
.gpword $L4
.gpword $L5
.gpword $L6
.gpword $L7
.gpword $L8
.text
$L3:
li $2,10 # 0xa
sw $2,8($fp)
b $L2
$L4:
li $2,11 # 0xb
sw $2,8($fp)
b $L2
$L5:
li $2,45 # 0x2d
sw $2,8($fp)
b $L2
$L6:
li $2,39 # 0x27
sw $2,8($fp)
b $L2
$L7:
li $2,14 # 0xe
sw $2,8($fp)
b $L2
$L8:
li $2,2 # 0x2
sw $2,8($fp)
b $L2
$L9:
li $2,1 # 0x1
sw $2,8($fp)
$L2:
lw $2,8($fp)
move $sp,$fp
lw $fp,16($sp)
addiu $sp,$sp,24
j $31
.end main
.ident "GCC: (GNU) 3.4.5"
| .file "switch.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
movl (%ecx), %edx
movl $1, %eax
cmpl $5, %edx
ja .L10
jmp *.L9(,%edx,4)
.section .rodata
.align 4
.align 4
.L9:
.long .L3
.long .L4
.long .L5
.long .L6
.long .L7
.long .L8
.text
.L8:
movl $2, %eax
jmp .L10
.L3:
movl $10, %eax
.p2align 4,,7
jmp .L10
.L4:
movl $11, %eax
.p2align 4,,5
jmp .L10
.L5:
movl $45, %eax
.p2align 4,,5
jmp .L10
.L6:
movl $39, %eax
.p2align 4,,5
jmp .L10
.L7:
movl $14, %eax
.L10:
popl %ecx
popl %ebp
leal -4(%ecx), %esp
.p2align 4,,1
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20080704 ...
.section .note.GNU-stack,"",@progb...
| .file 1 "switch.c"
.section .mdebug.abi32
.previous
.abicalls
.text
.align 2
.globl main
.ent main
.type main, @function
main:
.frame $sp,0,$31 # vars= 0, regs=...
.mask 0x00000000,0
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set reorder
sltu $2,$4,6
.set noreorder
.set nomacro
beq $2,$0,$L2
li $3,1 # 0x1
.set macro
.set reorder
sll $2,$4,2
la $3,$L10
addu $2,$2,$3
lw $2,0($2)
addu $2,$2,$28
j $2
.rdata
.align 2
$L10:
.gpword $L3
.gpword $L4
.gpword $L5
.gpword $L6
.gpword $L7
.gpword $L8
.text
$L3:
.set noreorder
.set nomacro
b $L2
li $3,10 # 0xa
.set macro
.set reorder
$L4:
.set noreorder
.set nomacro
b $L2
li $3,11 # 0xb
.set macro
.set reorder
$L5:
.set noreorder
.set nomacro
b $L2
li $3,45 # 0x2d
.set macro
.set reorder
$L6:
.set noreorder
.set nomacro
b $L2
li $3,39 # 0x27
.set macro
.set reorder
$L7:
.set noreorder
.set nomacro
b $L2
li $3,14 # 0xe
.set macro
.set reorder
$L8:
li $3,2 # 0x2
$L2:
.set noreorder
.set nomacro
j $31
move $2,$3
.set macro
.set reorder
.end main
.ident "GCC: (GNU) 3.4.5"
| .file "switch.c"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
movl $1, %eax
pushl %ebp
movl %esp, %ebp
pushl %ecx
movl (%ecx), %edx
cmpl $5, %edx
ja .L10
jmp *.L9(,%edx,4)
.section .rodata
.align 4
.align 4
.L9:
.long .L3
.long .L4
.long .L5
.long .L6
.long .L7
.long .L8
.text
.L7:
movl $14, %eax
.p2align 4,,7
.L10:
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.L3:
movl $10, %eax
.p2align 4,,4
jmp .L10
.L8:
movl $2, %eax
.p2align 4,,2
jmp .L10
.L6:
movl $39, %eax
.p2align 4,,5
jmp .L10
.L5:
movl $45, %eax
.p2align 4,,5
jmp .L10
.L4:
movl $11, %eax
.p2align 4,,5
jmp .L10
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20080704 ...
.section .note.GNU-stack,"",@progb...
| .file 1 "switch.c"
.section .mdebug.abi32
.previous
.abicalls
.text
.align 2
.globl main
.ent main
.type main, @function
main:
.frame $sp,0,$31 # vars= 0, regs=...
.mask 0x00000000,0
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set nomacro
sltu $2,$4,6
beq $2,$0,$L2
li $3,1 # 0x1
lw $8,%got($L10)($28)
sll $6,$4,2
addiu $7,$8,%lo($L10)
addu $5,$6,$7
lw $3,0($5)
nop
addu $4,$3,$28
j $4
nop
.rdata
.align 2
$L10:
.gpword $L3
.gpword $L4
.gpword $L5
.gpword $L6
.gpword $L7
.gpword $L8
.text
$L8:
li $3,2 # 0x2
$L2:
j $31
move $2,$3
$L3:
li $3,10 # 0xa
j $31
move $2,$3
$L4:
li $3,11 # 0xb
j $31
move $2,$3
$L5:
li $3,45 # 0x2d
j $31
move $2,$3
$L6:
li $3,39 # 0x27
j $31
move $2,$3
$L7:
li $3,14 # 0xe
j $31
move $2,$3
.set macro
.set reorder
.end main
.ident "GCC: (GNU) 3.4.5"
|