C source ------------------------------------------ static inline int32_t cround64(double val) { val += 6755399441055744.0; return *(int32_t*)&val; } gcc 10.1 ------------------------------------------ cround64: sub esp, 12 fld dword [magic] fadd qword [esp + 16] fstp qword [esp] mov eax, [esp] add esp, 12 ret magic dd 1505755136 gcc 4.1 ------------------------------------------ cround64: push ebp mov ebp, esp sub esp, 8 mov eax, [ebp - 8] leave ret