operand가 2개인 x86-64 코드를 보니까 낯설게 느껴짐

/*******************/
long foo (long x, long y) {
long z = x+5;
long w = x<<3;
long u = x + y;
return z+w+u*3;
}

이런 식으로 코드를 짜놨을 경우
addq $5, %rdi
를 함부로 못 하니까 레지스터를 하나 더 써야 될 거라고 생각했는데

최적화 옵션 -Og로 해도 알아서 몇 줄을 그냥 leaq로 합쳐버리네.

패배를 인정합니다.