Я написал следующий фрагмент:
int Add(int x, int y) {
return x+y;
}
int Subtract(int x, int y) {
return x-y;
}
int main() {
bool flag = false;
int x=10,y=5,z;
if (flag) {
z = Add(x,y);
}
else {
z = Subtract(x,y);
}
}
, но когда я смотрю на сгенерированный код сборки, функция Add
имеет одну дополнительную инструкцию.
0000000000000000 <_Z3Addii>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 89 7d fc mov %edi,-0x4(%rbp)
7: 89 75 f8 mov %esi,-0x8(%rbp)
a: 8b 55 fc mov -0x4(%rbp),%edx
d: 8b 45 f8 mov -0x8(%rbp),%eax
10: 01 d0 add %edx,%eax
12: 5d pop %rbp
13: c3 retq
0000000000000014 <_Z8Subtractii>:
14: 55 push %rbp
15: 48 89 e5 mov %rsp,%rbp
18: 89 7d fc mov %edi,-0x4(%rbp)
1b: 89 75 f8 mov %esi,-0x8(%rbp)
1e: 8b 45 fc mov -0x4(%rbp),%eax
21: 2b 45 f8 sub -0x8(%rbp),%eax
24: 5d pop %rbp
25: c3 retq
Я чувствую аналогичная последовательность инструкций (как у Subtract
) работала бы. Что мне не хватает?