Solution1:
gcc -O1 -S test.c (capital O and capital S)
Solution2:
This site can also help you. You can use -O0 , -O1 , .. any suitable compiler options to get what you want.
An example from this site: (verified by both solutions)
void maxArray(double* x, double* y) { for (int i = 0; i < 65536; i++) { if (y[i] > x[i]) x[i] = y[i]; } }
result:
maxArray(double*, double*): pushq %rbp movq %rsp, %rbp movq %rdi, -24(%rbp) movq %rsi, -32(%rbp) movl $0, -4(%rbp) jmp .L2 .L5: movl -4(%rbp), %eax cltq leaq 0(,%rax,8), %rdx movq -32(%rbp), %rax addq %rdx, %rax movsd (%rax), %xmm0 movl -4(%rbp), %eax cltq leaq 0(,%rax,8), %rdx movq -24(%rbp), %rax addq %rdx, %rax movsd (%rax), %xmm1 ucomisd %xmm1, %xmm0 jbe .L3 movl -4(%rbp), %eax cltq leaq 0(,%rax,8), %rdx movq -24(%rbp), %rax addq %rax, %rdx movl -4(%rbp), %eax cltq leaq 0(,%rax,8), %rcx movq -32(%rbp), %rax addq %rcx, %rax movq (%rax), %rax movq %rax, (%rdx) .L3: addl $1, -4(%rbp) .L2: cmpl $65535, -4(%rbp) jle .L5 popq %rbp ret
result:
maxArray(double*, double*): movl $0, %eax .L5: movsd (%rsi,%rax), %xmm0 ucomisd (%rdi,%rax), %xmm0 jbe .L2 movsd %xmm0, (%rdi,%rax) .L2: addq $8, %rax cmpq $524288, %rax jne .L5 rep; ret