@@ -0,0 +1,84 @@
|
||||
;
|
||||
; Copyright (c) 2011 Advanced Micro Devices, Inc. All rights reserved.
|
||||
;
|
||||
|
||||
ifndef _WIN64
|
||||
.386
|
||||
.model flat, c
|
||||
endif ; !_WIN64
|
||||
|
||||
OPTION PROLOGUE:NONE
|
||||
OPTION EPILOGUE:NONE
|
||||
.code
|
||||
|
||||
ifndef _WIN64
|
||||
|
||||
_WorkGroup_callKernel proc
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
mov esp, 10h[ebp] ; stackPtr
|
||||
mov edx, 0Ch[ebp] ; entryPoint
|
||||
push 08h[ebp] ; params
|
||||
call edx
|
||||
mov esp, ebp
|
||||
pop ebp
|
||||
ret
|
||||
_WorkGroup_callKernel endp
|
||||
|
||||
_WorkGroup_callKernelProtectedReturn proc
|
||||
mov eax, ebp
|
||||
mov ebp, esp
|
||||
mov esp, 0Ch[ebp] ; stackPtr
|
||||
sub esp, CPUKERNEL_STACK_ALIGN
|
||||
mov 04h[esp], eax ; save ebp
|
||||
mov 00h[esp], ebx ; save ebx
|
||||
mov ebx, 00h[ebp] ; return address
|
||||
mov edx, 08h[ebp] ; entryPoint
|
||||
|
||||
push 04h[ebp] ; params
|
||||
call edx
|
||||
|
||||
mov edx, ebx
|
||||
mov ecx, ebp
|
||||
mov ebx, 04h[esp] ; load ebx
|
||||
mov ebp, 08h[esp] ; load ebp
|
||||
mov esp, ecx
|
||||
add esp, 04h ; skip return address
|
||||
jmp edx
|
||||
_WorkGroup_callKernelProtectedReturn endp
|
||||
|
||||
else ; _WIN64
|
||||
|
||||
_WorkGroup_callKernel proc
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
mov rsp, r8 ; stackPtr
|
||||
call rdx
|
||||
mov rsp, rbp
|
||||
pop rbp
|
||||
ret
|
||||
_WorkGroup_callKernel endp
|
||||
|
||||
_WorkGroup_callKernelProtectedReturn proc
|
||||
mov rax, rbp
|
||||
mov rbp, rsp
|
||||
mov rsp, r8 ; stackPtr
|
||||
sub rsp, CPUKERNEL_STACK_ALIGN
|
||||
mov 08h[rsp], rax ; save rbp
|
||||
mov 00h[rsp], rbx ; save rbx
|
||||
mov rbx, [rbp] ; return address
|
||||
|
||||
call rdx
|
||||
|
||||
mov rdx, rbx
|
||||
mov rcx, rbp
|
||||
mov rbx, 00h[rsp] ; load rbx
|
||||
mov rbp, 08h[rsp] ; load rbp
|
||||
mov rsp, rcx
|
||||
add rsp, 08h ; skip return address
|
||||
jmp rdx
|
||||
_WorkGroup_callKernelProtectedReturn endp
|
||||
|
||||
endif ; _WIN64
|
||||
|
||||
end
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur