Вам нужно добавить двух типов недочетов в тип данных: __int32
Причина, по которой вам нужно использовать 32-разрядные целые числа, состоит в том, что команды ASM используют 32-разрядные регистры, и, следовательно, 32-разрядные целые числа намного быстрее копируются, чем одно 64-разрядное целое число. Приведение в операторе возврата объединяет два 32-разрядных целых числа в конечный 64-разрядный результат с небольшим дополнительным временем или без него.
Причина использования __int32 и __int64 вместо int и long заключается в том, что __int32 / 64 имеют универсально заданные размеры, тогда как short, int и long технически имеют переменные размеры в зависимости от компилятора и архитектуры платформы.
(Конечно, вы уже знаете о том, что функции должны быть объявлены в обратном порядке.)