Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22162

Understanding the assembly language for if-else in following code [duplicate]

$
0
0

Following is the c++ code;

int func1(int i) {return i*7;}int func2(int i) {return i*11;}int test(int i){    int j;    if(i>0) {        j = func1(i);    }else {        j = func2(i);    }    return j*13;}

The instructions for above code (Ignoring func1 and func2 instructions) in debug mode comes out to be

test(int):  push rbp  mov rbp, rsp  sub rsp, 24  mov DWORD PTR [rbp-20], edi  cmp DWORD PTR [rbp-20], 0  jle .L6  mov eax, DWORD PTR [rbp-20]  mov edi, eax  call func1(int)  mov DWORD PTR [rbp-4], eax  jmp .L7.L6:  mov eax, DWORD PTR [rbp-20]  mov edi, eax  call func2(int)  mov DWORD PTR [rbp-4], eax.L7:  mov edx, DWORD PTR [rbp-4]  mov eax, edx  add eax, eax  add eax, edx  sal eax, 2  add eax, edx  leave  ret

Please help me in understanding on what happens post jump to .L6 instruction; Will it Go directly to .L7 or will it execute the instructions after .L6 and then go to .L7; If it later then seems like its executing both the loop conditions.

Godbolt link.


Viewing all articles
Browse latest Browse all 22162

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>