;-----------------------------------------------------------------------------
cglobal stack_clobber, 1,2
; Clobber the stack with junk below the stack pointer
- %define size (max_args+6)*8
- SUB rsp, size
- mov r1, size-8
+ %define argsize (max_args+6)*8
+ SUB rsp, argsize
+ mov r1, argsize-8
.loop:
mov [rsp+r1], r0
sub r1, 8
jge .loop
- ADD rsp, size
+ ADD rsp, argsize
RET
%if WIN64
; void checkasm_checked_call(void *func, ...)
;-----------------------------------------------------------------------------
INIT_XMM
-%macro check_call 0-1
+%macro CHECKED_CALL 0-1
cglobal checked_call%1, 2,15,16,max_args*8+8
mov t0, r0
.clobber_ok:
%ifnid %1, _emms
fstenv [rsp]
- mov r9h, [rsp + 8]
- add r9h, 1
- jz .emms_ok
+ cmp word [rsp + 8], 0xffff
+ je .emms_ok
report_fail error_message_emms
emms
.emms_ok:
mov eax, r3
%endmacro
-%macro check_call 0-1
+%macro CHECKED_CALL 0-1
;-----------------------------------------------------------------------------
; void checkasm_checked_call(void *func, ...)
;-----------------------------------------------------------------------------
report_fail error_message
.clobber_ok:
%ifnid %1, _emms
- fstenv [rsp]
- mov r3h, [rsp + 8]
- add r3h, 1
- jz .emms_ok
+ fstenv [esp]
+ cmp word [esp + 8], 0xffff
+ je .emms_ok
report_fail error_message_emms
emms
.emms_ok:
%endif ; ARCH_X86_64
-check_call
-check_call _emms
+CHECKED_CALL
+CHECKED_CALL _emms