C code x86 asm MIPS asm x86 asm -O1 MIPS asm -O1 x86 asm -O4 MIPS asm -O4
int main(){}

int foo(int count) 
{
  
     int s = 0;
     s += s;
     if (count)
     {
       int k[count];
       s+= k[0];
     } else {
       int k = 4;
       s+= k;
     }
     return s;
}
	.file	"frame_pointer.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
	popl	%ecx
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
	.size	main, .-main
.globl foo
	.type	foo, @function
foo:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$24, %esp
	movl	$0, -8(%ebp)
	movl	-8(%ebp), %eax
	addl	%eax, -8(%ebp)
	cmpl	$0, 8(%ebp)
	je	.L4
	movl	%esp, %eax
	movl	%eax, %edx
	movl	8(%ebp), %eax
	sall	$2, %eax
	addl	$15, %eax
	addl	$15, %eax
	shrl	$4, %eax
	sall	$4, %eax
	subl	%eax, %esp
	movl	%esp, -20(%ebp)
	movl	-20(%ebp), %eax
	addl	$15, %eax
	shrl	$4, %eax
	sall	$4, %eax
	movl	%eax, -20(%ebp)
	movl	-20(%ebp), %eax
	movl	%eax, -12(%ebp)
	movl	-12(%ebp), %eax
	movl	(%eax), %eax
	addl	%eax, -8(%ebp)
	movl	%edx, %esp
	jmp	.L6
.L4:
	movl	$4, -4(%ebp)
	movl	-4(%ebp), %eax
	addl	%eax, -8(%ebp)
.L6:
	movl	-8(%ebp), %eax
	leave
	ret
	.size	foo, .-foo
	.ident	"GCC: (GNU) 4.1.2 20080704 ...
	.section	.note.GNU-stack,"",@progb...
	.file	1 "frame_pointer.c"
	.section .mdebug.abi32
	.previous
	.abicalls
	.text
	.align	2
	.globl	main
	.ent	main
	.type	main, @function
main:
	.frame	$fp,8,$31		# vars= 0, regs=...
	.mask	0x40000000,-8
	.fmask	0x00000000,0
	.set	noreorder
	.cpload	$25
	.set	reorder
	addiu	$sp,$sp,-8
	sw	$fp,0($sp)
	move	$fp,$sp
	move	$sp,$fp
	lw	$fp,0($sp)
	addiu	$sp,$sp,8
	j	$31
	.end	main
	.align	2
	.globl	foo
	.ent	foo
	.type	foo, @function
foo:
	.frame	$fp,40,$31		# vars= 8, regs...
	.mask	0x40000000,-8
	.fmask	0x00000000,0
	.set	noreorder
	.cpload	$25
	.set	reorder
	addiu	$sp,$sp,-40
	sw	$fp,32($sp)
	move	$fp,$sp
	sw	$4,40($fp)
	sw	$0,8($fp)
	lw	$3,8($fp)
	lw	$2,8($fp)
	addu	$2,$3,$2
	sw	$2,8($fp)
	lw	$2,40($fp)
	beq	$2,$0,$L3
	move	$4,$sp
	lw	$2,40($fp)
	sll	$2,$2,2
	addiu	$2,$2,7
	addiu	$2,$2,7
	srl	$2,$2,3
	sll	$2,$2,3
	subu	$sp,$sp,$2
	move	$2,$sp
	addiu	$2,$2,7
	srl	$2,$2,3
	sll	$2,$2,3
	lw	$3,8($fp)
	lw	$2,0($2)
	addu	$2,$3,$2
	sw	$2,8($fp)
	move	$sp,$4
	b	$L4
$L3:
	li	$2,4			# 0x4
	sw	$2,12($fp)
	lw	$3,8($fp)
	lw	$2,12($fp)
	addu	$2,$3,$2
	sw	$2,8($fp)
$L4:
	lw	$2,8($fp)
	move	$sp,$fp
	lw	$fp,32($sp)
	addiu	$sp,$sp,40
	j	$31
	.end	foo
	.ident	"GCC: (GNU) 3.4.5"
	.file	"frame_pointer.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
	popl	%ecx
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
	.size	main, .-main
.globl foo
	.type	foo, @function
foo:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$8, %esp
	movl	8(%ebp), %edx
	movl	$4, %ecx
	testl	%edx, %edx
	je	.L6
	movl	%esp, %eax
	leal	30(,%edx,4), %edx
	andl	$-16, %edx
	subl	%edx, %esp
	leal	15(%esp), %edx
	andl	$-16, %edx
	movl	(%edx), %ecx
	movl	%eax, %esp
.L6:
	movl	%ecx, %eax
	leave
	ret
	.size	foo, .-foo
	.ident	"GCC: (GNU) 4.1.2 20080704 ...
	.section	.note.GNU-stack,"",@progb...
	.file	1 "frame_pointer.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
	j	$31
	.end	main
	.align	2
	.globl	foo
	.ent	foo
	.type	foo, @function
foo:
	.frame	$fp,24,$31		# vars= 0, regs...
	.mask	0x40000000,-8
	.fmask	0x00000000,0
	.set	noreorder
	.cpload	$25
	.set	reorder
	addiu	$sp,$sp,-24
	sw	$fp,16($sp)
	move	$fp,$sp
	move	$2,$0
	.set	noreorder
	.set	nomacro
	beq	$4,$0,$L4
	addiu	$2,$2,4
	.set	macro
	.set	reorder

	move	$3,$sp
	sll	$2,$4,2
	addiu	$2,$2,14
	srl	$2,$2,3
	sll	$2,$2,3
	subu	$sp,$sp,$2
	lw	$2,0($sp)
	move	$sp,$3
$L4:
	move	$sp,$fp
	lw	$fp,16($sp)
	.set	noreorder
	.set	nomacro
	j	$31
	addiu	$sp,$sp,24
	.set	macro
	.set	reorder

	.end	foo
	.ident	"GCC: (GNU) 3.4.5"
	.file	"frame_pointer.c"
	.text
	.p2align 4,,15
.globl main
	.type	main, @function
main:
	leal	4(%esp), %ecx
	andl	$-16, %esp
	pushl	-4(%ecx)
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ecx
	popl	%ecx
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
	.size	main, .-main
	.p2align 4,,15
.globl foo
	.type	foo, @function
foo:
	pushl	%ebp
	movl	$4, %ecx
	movl	%esp, %ebp
	subl	$8, %esp
	movl	8(%ebp), %edx
	testl	%edx, %edx
	je	.L6
	leal	30(,%edx,4), %edx
	movl	%esp, %eax
	andl	$-16, %edx
	subl	%edx, %esp
	leal	15(%esp), %edx
	andl	$-16, %edx
	movl	(%edx), %ecx
	movl	%eax, %esp
.L6:
	leave
	movl	%ecx, %eax
	ret
	.size	foo, .-foo
	.ident	"GCC: (GNU) 4.1.2 20080704 ...
	.section	.note.GNU-stack,"",@progb...
	.file	1 "frame_pointer.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
	
	j	$31
	nop

	.set	macro
	.set	reorder
	.end	main
	.align	2
	.globl	foo
	.ent	foo
	.type	foo, @function
foo:
	.frame	$fp,24,$31		# vars= 0, regs...
	.mask	0x40000000,-8
	.fmask	0x00000000,0
	.set	noreorder
	.set	nomacro
	
	sll	$6,$4,2
	addiu	$3,$6,14
	addiu	$sp,$sp,-24
	srl	$2,$3,3
	sw	$fp,16($sp)
	move	$5,$sp
	move	$fp,$sp
	sll	$2,$2,3
	beq	$4,$0,$L4
	li	$3,4			# 0x4

	subu	$sp,$sp,$2
	lw	$3,0($sp)
	move	$sp,$5
$L4:
	move	$sp,$fp
	lw	$fp,16($sp)
	move	$2,$3
	j	$31
	addiu	$sp,$sp,24

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