If the return value doesn't fit in a single register rdx/edx can in some
cases be used in addition to rax/eax.
Doesn't affect any of the existing checkasm tests but might be useful later.
Also comment the relevant code a bit better.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
or r14, r5
%endif
+ ; Call fail_func() with a descriptive message to mark it as a failure
+ ; if the called function didn't preserve all callee-saved registers.
+ ; Save the return value located in rdx:rax first to prevent clobbering.
jz .ok
mov r9, rax
+ mov r10, rdx
lea r0, [error_message]
call fail_func
+ mov rdx, r10
mov rax, r9
.ok:
RET
or r3, r5
jz .ok
mov r3, eax
+ mov r4, edx
lea r0, [error_message]
mov [esp], r0
call fail_func
+ mov edx, r4
mov eax, r3
.ok:
add esp, max_args*4