Closed Xaymar closed 1 year ago
This generates smaller and faster code, even after optimizations were run on the code.
This generates smaller and faster code, even after optimizations were run on the code.
gcc-12 -O3 old.c
``` mov edx, DWORD PTR [rbp-16] mov eax, edx sal eax, 2 add eax, edx add eax, eax mov edi, DWORD PTR [rbp-20] cdq idiv edi mov ecx, eax movsx rax, ecx imul rax, rax, 1717986919 shr rax, 32 mov edx, eax sar edx, 2 mov eax, ecx sar eax, 31 sub edx, eax mov eax, edx sal eax, 2 add eax, edx add eax, eax sub ecx, eax mov edx, ecx cmp edx, 4 setg al movzx eax, al mov DWORD PTR [rbp-8], eax mov eax, DWORD PTR [rbp-16] mov esi, DWORD PTR [rbp-20] cdq idiv esi mov edx, eax mov eax, DWORD PTR [rbp-8] add eax, edx mov DWORD PTR [rbp-12], eax ```gcc-12 -O3 new.c
``` mov eax, DWORD PTR [rbp-20] mov edx, eax shr edx, 31 add eax, edx sar eax mov edx, eax mov eax, DWORD PTR [rbp-16] add eax, edx mov esi, DWORD PTR [rbp-20] cdq idiv esi mov DWORD PTR [rbp-4], eax ```clang-15 -O3 old.c
``` mov eax, dword ptr [rbp - 20] imul eax, eax, 10 mov ecx, dword ptr [rbp - 24] cdq idiv ecx mov ecx, 10 cdq idiv ecx xor eax, eax mov ecx, 1 cmp edx, 5 cmovge eax, ecx mov dword ptr [rbp - 32], eax mov eax, dword ptr [rbp - 20] mov ecx, dword ptr [rbp - 24] cdq idiv ecx add eax, dword ptr [rbp - 32] mov dword ptr [rbp - 36], eax ```clang-15 -O3 new.c
``` mov eax, dword ptr [rbp - 20] mov dword ptr [rbp - 40], eax # 4-byte Spill mov eax, dword ptr [rbp - 24] mov ecx, 2 cdq idiv ecx mov ecx, eax mov eax, dword ptr [rbp - 40] # 4-byte Reload add eax, ecx mov ecx, dword ptr [rbp - 24] cdq idiv ecx mov dword ptr [rbp - 28], eax ```msvc-19 /O3 old.c
``` imul eax, DWORD PTR _x$[ebp], 10 mov ecx, DWORD PTR _y$[ebp] cdq idiv ecx cdq mov ecx, 10 ; 0000000aH idiv ecx cmp edx, 5 jl SHORT $LN3@main mov DWORD PTR tv82[ebp], 1 jmp SHORT $LN4@main $LN3@main: mov DWORD PTR tv82[ebp], 0 $LN4@main: mov edx, DWORD PTR tv82[ebp] mov DWORD PTR _rn$2[ebp], edx mov ecx, DWORD PTR _y$[ebp] mov eax, DWORD PTR _x$[ebp] cdq idiv ecx add eax, DWORD PTR _rn$2[ebp] mov DWORD PTR _r$1[ebp], eax ```msvc-19 /O3 new.c
``` mov eax, DWORD PTR _y$[ebp] cdq sub eax, edx sar eax, 1 mov ecx, DWORD PTR _x$[ebp] add ecx, eax mov esi, DWORD PTR _y$[ebp] mov eax, ecx cdq idiv esi mov DWORD PTR _r$3[ebp], eax ```