C code x86 asm MIPS asm x86 asm -O1 MIPS asm -O1 x86 asm -O4 MIPS asm -O4
#include
#include

int main(int argc, char *argv[]) {
     int r = 0;
     switch (argc) {
     case 164:
	  r = 10;
	  break;
     case 168246:
	  r = 11;
	  break;
     case 1000:
	  r = 45;
	  break;
     case 10052:
	  r = 39;
	  break;
     case 8636:
	  r = 14;
	  break;
     case 296:
	  r = 2;
	  break;
     default:
	  r = 1;
     }


     return r;
}
	.file	"switch2.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	$0, -8(%ebp)
	movl	(%ecx), %ecx
	movl	%ecx, -24(%ebp)
	cmpl	$1000, -24(%ebp)
	je	.L5
	cmpl	$1000, -24(%ebp)
	jg	.L9
	cmpl	$164, -24(%ebp)
	je	.L3
	cmpl	$296, -24(%ebp)
	je	.L4
	jmp	.L2
.L9:
	cmpl	$10052, -24(%ebp)
	je	.L7
	cmpl	$168246, -24(%ebp)
	je	.L8
	cmpl	$8636, -24(%ebp)
	je	.L6
	jmp	.L2
.L3:
	movl	$10, -8(%ebp)
	jmp	.L10
.L8:
	movl	$11, -8(%ebp)
	jmp	.L10
.L5:
	movl	$45, -8(%ebp)
	jmp	.L10
.L7:
	movl	$39, -8(%ebp)
	jmp	.L10
.L6:
	movl	$14, -8(%ebp)
	jmp	.L10
.L4:
	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 "switch2.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)
	sw	$2,12($fp)
	li	$2,1000			# 0x3e8
	lw	$3,12($fp)
	beq	$3,$2,$L5
	lw	$3,12($fp)
	slt	$2,$3,1001
	beq	$2,$0,$L10
	li	$2,164			# 0xa4
	lw	$3,12($fp)
	beq	$3,$2,$L3
	li	$2,296			# 0x128
	lw	$3,12($fp)
	beq	$3,$2,$L8
	b	$L9
$L10:
	li	$2,10052			# 0x2744
	lw	$3,12($fp)
	beq	$3,$2,$L6
	lw	$3,12($fp)
	slt	$2,$3,10053
	beq	$2,$0,$L11
	li	$2,8636			# 0x21bc
	lw	$3,12($fp)
	beq	$3,$2,$L7
	b	$L9
$L11:
	li	$2,131072			# 0x20000
	ori	$2,$2,0x9136
	lw	$3,12($fp)
	beq	$3,$2,$L4
	b	$L9
$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	"switch2.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	$45, %eax
	cmpl	$1000, %edx
	je	.L10
	cmpl	$1000, %edx
	jg	.L9
	movb	$10, %al
	cmpl	$164, %edx
	je	.L10
	cmpl	$296, %edx
	.p2align 4,,3
	jne	.L2
	.p2align 4,,5
	jmp	.L4
.L9:
	movl	$39, %eax
	cmpl	$10052, %edx
	.p2align 4,,5
	je	.L10
	movb	$11, %al
	cmpl	$168246, %edx
	.p2align 4,,3
	je	.L10
	cmpl	$8636, %edx
	jne	.L2
	.p2align 4,,5
	jmp	.L6
.L4:
	movl	$2, %eax
	.p2align 4,,7
	jmp	.L10
.L2:
	movl	$1, %eax
	.p2align 4,,7
	jmp	.L10
.L6:
	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 "switch2.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
	li	$2,1000			# 0x3e8
	.set	noreorder
	.set	nomacro
	beq	$4,$2,$L2
	li	$3,45			# 0x2d
	.set	macro
	.set	reorder

	slt	$2,$4,1001
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L10
	li	$2,10052			# 0x2744
	.set	macro
	.set	reorder

	li	$2,164			# 0xa4
	.set	noreorder
	.set	nomacro
	beq	$4,$2,$L2
	li	$3,10			# 0xa
	.set	macro
	.set	reorder

	li	$2,296			# 0x128
	.set	noreorder
	.set	nomacro
	beq	$4,$2,$L2
	li	$3,2			# 0x2
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	b	$L2
	li	$3,1			# 0x1
	.set	macro
	.set	reorder

$L10:
	.set	noreorder
	.set	nomacro
	beq	$4,$2,$L2
	li	$3,39			# 0x27
	.set	macro
	.set	reorder

	slt	$2,$4,10053
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L11
	li	$2,131072			# 0x20000
	.set	macro
	.set	reorder

	li	$2,8636			# 0x21bc
	.set	noreorder
	.set	nomacro
	beq	$4,$2,$L2
	li	$3,14			# 0xe
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	b	$L2
	li	$3,1			# 0x1
	.set	macro
	.set	reorder

$L11:
	ori	$2,$2,0x9136
	.set	noreorder
	.set	nomacro
	beq	$4,$2,$L2
	li	$3,11			# 0xb
	.set	macro
	.set	reorder

	li	$3,1			# 0x1
$L2:
	.set	noreorder
	.set	nomacro
	j	$31
	move	$2,$3
	.set	macro
	.set	reorder

	.end	main
	.ident	"GCC: (GNU) 3.4.5"
	.file	"switch2.c"
	.text
	.p2align 4,,15
.globl main
	.type	main, @function
main:
	leal	4(%esp), %ecx
	andl	$-16, %esp
	pushl	-4(%ecx)
	movl	$45, %eax
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ecx
	movl	(%ecx), %edx
	cmpl	$1000, %edx
	je	.L10
	jle	.L13
	cmpl	$10052, %edx
	movl	$39, %eax
	je	.L10
	cmpl	$168246, %edx
	movb	$11, %al
	.p2align 4,,3
	je	.L10
	cmpl	$8636, %edx
	jne	.L2
	movl	$14, %eax
	.p2align 4,,7
.L10:
	popl	%ecx
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
	.p2align 4,,7
.L13:
	cmpl	$164, %edx
	movb	$10, %al
	je	.L10
	cmpl	$296, %edx
	je	.L14
.L2:
	popl	%ecx
	movl	$1, %eax
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
.L14:
	movl	$2, %eax
	.p2align 4,,2
	jmp	.L10
	.size	main, .-main
	.ident	"GCC: (GNU) 4.1.2 20080704 ...
	.section	.note.GNU-stack,"",@progb...
	.file	1 "switch2.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
	.set	nomacro
	
	li	$2,1000			# 0x3e8
	beq	$4,$2,$L2
	li	$3,45			# 0x2d

	slt	$3,$4,1001
	beq	$3,$0,$L10
	li	$7,10052			# 0x2744

	li	$5,164			# 0xa4
	beq	$4,$5,$L2
	li	$3,10			# 0xa

	li	$6,296			# 0x128
	beq	$4,$6,$L13
	nop

$L9:
	li	$3,1			# 0x1
$L2:
	j	$31
	move	$2,$3

$L10:
	beq	$4,$7,$L2
	li	$3,39			# 0x27

	slt	$8,$4,10053
	beq	$8,$0,$L11
	li	$11,131072			# 0x20000

	li	$9,8636			# 0x21bc
	bne	$4,$9,$L9
	nop

	li	$3,14			# 0xe
	j	$31
	move	$2,$3

$L11:
	ori	$10,$11,0x9136
	beq	$4,$10,$L2
	li	$3,11			# 0xb

	b	$L2
	li	$3,1			# 0x1

$L13:
	li	$3,2			# 0x2
	j	$31
	move	$2,$3

	.set	macro
	.set	reorder
	.end	main
	.ident	"GCC: (GNU) 3.4.5"