@@ -0,0 +1,87 @@
|
||||
#
|
||||
# Copyright (c) 2011 Advanced Micro Devices, Inc. All rights reserved.
|
||||
#
|
||||
|
||||
.text
|
||||
.globl _WorkGroup_callKernel
|
||||
#if defined(ATI_ARCH_X86)
|
||||
.type _WorkGroup_callKernel, @function
|
||||
_WorkGroup_callKernel:
|
||||
#if defined(_LP64)
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
movq %rdx, %rsp // stackPtr
|
||||
call *%rsi
|
||||
movq %rbp, %rsp
|
||||
popq %rbp
|
||||
#else // _LP64
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 0x10(%ebp), %esp // stackPtr
|
||||
movl 0x0C(%ebp), %edx // entryPoint
|
||||
movl 0x08(%ebp), %ecx // params
|
||||
movl %ecx, (%esp)
|
||||
call *%edx
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
#endif // _LP64
|
||||
ret
|
||||
#elif defined(ATI_ARCH_ARM)
|
||||
.type _WorkGroup_callKernel, %function
|
||||
_WorkGroup_callKernel:
|
||||
bx lr
|
||||
#endif
|
||||
|
||||
.globl _WorkGroup_callKernelProtectedReturn
|
||||
#if defined(ATI_ARCH_X86)
|
||||
.type _WorkGroup_callKernelProtectedReturn, @function
|
||||
_WorkGroup_callKernelProtectedReturn:
|
||||
#if defined(_LP64)
|
||||
movq %rbp, %rax
|
||||
movq %rsp, %rbp
|
||||
movq %rdx, %rsp // stackPtr
|
||||
subq $CPUKERNEL_STACK_ALIGN, %rsp
|
||||
movq %rax, 0x08(%rsp) // save rbp
|
||||
movq %rbx, 0x00(%rsp) // save rbx
|
||||
movq (%rbp), %rbx // return address
|
||||
|
||||
call *%rsi
|
||||
|
||||
movq %rbx, %rdx
|
||||
movq %rbp, %rcx
|
||||
movq 0x00(%rsp), %rbx // load rbx
|
||||
movq 0x08(%rsp), %rbp // load rbp
|
||||
movq %rcx, %rsp
|
||||
addq $0x08, %rsp // skip return address
|
||||
jmp *%rdx
|
||||
#else // !_LP64
|
||||
movl %ebp, %eax
|
||||
movl %esp, %ebp
|
||||
movl 0x0C(%ebp), %esp // stackPtr
|
||||
subl $CPUKERNEL_STACK_ALIGN, %esp
|
||||
movl 0x04(%ebp), %ecx // params
|
||||
movl %eax, 0x08(%esp) // save ebp
|
||||
movl %ebx, 0x04(%esp) // save ebx
|
||||
movl %ecx, 0x00(%esp) // pass params
|
||||
movl 0x00(%ebp), %ebx // return address
|
||||
movl 0x08(%ebp), %edx // entryPoint
|
||||
|
||||
call *%edx
|
||||
|
||||
movl %ebx, %edx
|
||||
movl %ebp, %ecx
|
||||
movl 0x04(%esp), %ebx // load ebx
|
||||
movl 0x08(%esp), %ebp // load ebp
|
||||
movl %ecx, %esp
|
||||
addl $0x4, %esp // skip return address
|
||||
jmp *%edx
|
||||
#endif // !_LP64
|
||||
#elif defined(ATI_ARCH_ARM)
|
||||
.type _WorkGroup_callKernelProtectedReturn, %function
|
||||
_WorkGroup_callKernelProtectedReturn:
|
||||
bx lr
|
||||
#endif
|
||||
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
||||
Reference in New Issue
Block a user