C code x86 asm MIPS asm x86 asm -O1 MIPS asm -O1 x86 asm -O4 MIPS asm -O4
int main(){}
struct aStruct{
     int a;
     int b;
     char c;
     long long int d;
};

int sum(struct aStruct * s) {
     
     int t = 0;
     t += s->a;
     t += s->b;
     t += s->c;
     t += s->d;


     return t;
}

	.file	"struct.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 sum
	.type	sum, @function
sum:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$16, %esp
	movl	$0, -4(%ebp)
	movl	8(%ebp), %eax
	movl	(%eax), %eax
	addl	%eax, -4(%ebp)
	movl	8(%ebp), %eax
	movl	4(%eax), %eax
	addl	%eax, -4(%ebp)
	movl	8(%ebp), %eax
	movzbl	8(%eax), %eax
	movsbl	%al,%eax
	addl	%eax, -4(%ebp)
	movl	8(%ebp), %eax
	movl	16(%eax), %edx
	movl	12(%eax), %eax
	movl	%eax, %edx
	movl	-4(%ebp), %eax
	leal	(%edx,%eax), %eax
	movl	%eax, -4(%ebp)
	movl	-4(%ebp), %eax
	leave
	ret
	.size	sum, .-sum
	.ident	"GCC: (GNU) 4.1.2 20080704 ...
	.section	.note.GNU-stack,"",@progb...
	.file	1 "struct.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	sum
	.ent	sum
	.type	sum, @function
sum:
	.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	$0,8($fp)
	lw	$2,24($fp)
	lw	$3,8($fp)
	lw	$2,0($2)
	addu	$2,$3,$2
	sw	$2,8($fp)
	lw	$2,24($fp)
	lw	$3,8($fp)
	lw	$2,4($2)
	addu	$2,$3,$2
	sw	$2,8($fp)
	lw	$2,24($fp)
	lb	$3,8($2)
	lw	$2,8($fp)
	addu	$2,$2,$3
	sw	$2,8($fp)
	lw	$2,24($fp)
	lw	$3,8($fp)
	lw	$2,16($2)
	addu	$2,$3,$2
	sw	$2,8($fp)
	lw	$2,8($fp)
	move	$sp,$fp
	lw	$fp,16($sp)
	addiu	$sp,$sp,24
	j	$31
	.end	sum
	.ident	"GCC: (GNU) 3.4.5"
	.file	"struct.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 sum
	.type	sum, @function
sum:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %edx
	movl	(%edx), %eax
	addl	4(%edx), %eax
	movsbl	8(%edx),%ecx
	addl	%ecx, %eax
	addl	12(%edx), %eax
	popl	%ebp
	ret
	.size	sum, .-sum
	.ident	"GCC: (GNU) 4.1.2 20080704 ...
	.section	.note.GNU-stack,"",@progb...
	.file	1 "struct.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	sum
	.ent	sum
	.type	sum, @function
sum:
	.frame	$sp,0,$31		# vars= 0, regs=...
	.mask	0x00000000,0
	.fmask	0x00000000,0
	.set	noreorder
	.cpload	$25
	.set	reorder
	lw	$2,0($4)
	lw	$3,4($4)
	addu	$2,$2,$3
	lb	$3,8($4)
	addu	$2,$2,$3
	lw	$3,16($4)
	.set	noreorder
	.set	nomacro
	j	$31
	addu	$2,$2,$3
	.set	macro
	.set	reorder

	.end	sum
	.ident	"GCC: (GNU) 3.4.5"
	.file	"struct.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 sum
	.type	sum, @function
sum:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %edx
	popl	%ebp
	movl	(%edx), %eax
	movsbl	8(%edx),%ecx
	addl	4(%edx), %eax
	addl	%ecx, %eax
	addl	12(%edx), %eax
	ret
	.size	sum, .-sum
	.ident	"GCC: (GNU) 4.1.2 20080704 ...
	.section	.note.GNU-stack,"",@progb...
	.file	1 "struct.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	sum
	.ent	sum
	.type	sum, @function
sum:
	.frame	$sp,0,$31		# vars= 0, regs=...
	.mask	0x00000000,0
	.fmask	0x00000000,0
	.set	noreorder
	.set	nomacro
	
	lw	$8,0($4)
	lw	$3,4($4)
	lb	$6,8($4)
	addu	$7,$8,$3
	lw	$5,16($4)
	addu	$2,$7,$6
	j	$31
	addu	$2,$2,$5

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