1. По стандарту C++, всякая функция, которая что-то возвращает, должна содержать return. Иначе - неопределенное поведение, так как компилятор не сможет сгенерировать правильный эпилог.
2. Пролог и эпилог должен генерировать кто-то один.
3. Некоторые особо дурные компиляторы умеют отключать генерирование пролога и эпилога. Напимер, VC++ это делает при помощи __declspec(naked).
Вывод:
Либо вы выключаете пролог/эпилог и пишите на ассемблере всю функцию, включая пролог и эпилог.
Либо вы пишите только ВСТАВКИ, и не выносите мозг компилятору, перекашивая ему стек. (В начале и в конце вставки стек должен быть прежним).