- 24 bytes are allocated on the stack (02CB00E9, that's 3 double's, let's call them d1, d2 and d3)
- EAX is copied at the top of the stack, at this point EAX is the "octave_base_value* obv" argument, so it's basically the first argument of the function; it occupies the location d1 on the stack
- after octave_jit_cast_complex_any call, results are pulled from the stack at location d2 and d3
This does not correspond to the ABI MSVC is using. Instead of pushing a hidden pointer on the top of the stack (as it should do), it allocates the memory for the returned complex value on the stack and *after* the regular function arguments. Of course, when octave_jit_cast_complex_any tries to access obv, it points to invalid memory and crashes.