#include <cstdlib> #include <cstdint> #include <utility> std::pair<int64_t, int64_t> LibDivWithRemainder(int64_t numerator, int64_t denominator) { const auto res = std::div(numerator, denominator); return std::make_pair(res.quot, res.rem); } std::pair<int64_t, int64_t> ManDivWithRemainder(int64_t numerator, int64_t denominator) { const int64_t quot = numerator / denominator; const int64_t rem = numerator % denominator; return std::make_pair(quot, rem); }
"LibDivWithRemainder(long, long)": sub rsp, 8 call "ldiv" add rsp, 8 ret "ManDivWithRemainder(long, long)": mov rax, rdi cqo idiv rsi ret
LibDivWithRemainder(long, long): jmp ldiv@PLT ManDivWithRemainder(long, long): mov rax, rdi mov rcx, rdi or rcx, rsi shr rcx, 32 je .LBB1_1 cqo idiv rsi ret .LBB1_1: xor edx, edx div esi ret
mov rax, rdx cdq idiv r8 mov QWORD PTR [rcx], rax mov rax, rcx mov QWORD PTR [rcx+8], rdx ret 0