https://github.com/halide/Halide
Raw File
Tip revision: 518d6d965fd19638565d54c02caf8b77eca96005 authored by Zalman Stern on 11 October 2018, 06:56:34 UTC
Address review feedback by adding a comment and fixing an erroneous
Tip revision: 518d6d9
d3d12_abi_patch_64.ll
; In order to check the generated assembly code:
; $ llvm-as d3d12_abi_patch.ll
; $ llc -x86-asm-syntax=intel d3d12_abi_patch.bc -o d3d12_abi_patch.s



; anatomy of the trampoline/stub routine:
;
;    ; all assembly routines start with some bookkeeping prologue:
;    push    rbp         ; setup stack frame for this routine
;    mov     rbp, rsp    ;
;
;    sub     rsp, 32     ; allocate shadow space for internal subroutine calls
;    and     spl, -16    ; align stack at 16 byte boundary
;
;    ; rcx is expected to contain a pointer to a D3D12 object
;    ;     (such as a descriptorHeap, a commandList or a device)
;    ; the vtable of such D3D12 object is accessed as follows:
;    lea     rax, qword ptr [rcx]    ; rax := descriptorHeap
;    mov     rax, qword ptr [rax]    ; rax := descriptorHeap->lpVtbl
;
;    ; a method in the vtable is invoked as such:
;    call    qword ptr [rax+40h]     ; for descriptorHeap->lpVtbl->GetDesc()
;    call    qword ptr [rax+48h]     ; for descriptorHeap->lpVtbl->GetCPUDescriptorHandleForHeapStart()
;    call    qword ptr [rax+50h]     ; for descriptorHeap->lpVtbl->GetGPUDescriptorHandleForHeapStart()
;    call    qword ptr [rax+0F8h]    ; for commandList->lpVtbl->SetComputeRootDescriptorTable()
;    call    qword ptr [rax+88h]     ; for device->lpVtbl->CreateConstantBufferView()
;    call    qword ptr [rax+90h]     ; for device->lpVtbl->CreateShaderResourceView()
;
;    ; all other routine parameters are expected to have been passed through
;    ; registers rdx, r8 and r9 (in this order).
;    ; note that further register data transformations might be needed prior
;    ; to calling the target vtable function.
;
;    ; all assembly routines end with the following epilogue:
;    leave               ; restore stack (rsp) and frame pointer (rbp)
;    ret



define weak_odr void @Call_ID3D12DescriptorHeap_GetDesc(i64* %descriptorheap, i64* %desc) naked nounwind uwtable
{
    call void asm sideeffect
    inteldialect
    "
    push    rbp
    mov     rbp, rsp
    sub     rsp,  32
    and     spl, -16
    lea     rax, qword ptr [rcx]
    mov     rax, qword ptr [rax]
    call    qword ptr [rax+40h]
    leave
    "
    ,
    "~{rsp},~{rbp},~{rax}"();
    ret void
}

define weak_odr void @Call_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(i64* %descriptorheap, i64* %handle) naked nounwind uwtable
{
    call void asm sideeffect
    inteldialect
    "
    push    rbp
    mov     rbp, rsp
    sub     rsp,  32
    and     spl, -16
    lea     rax, qword ptr [rcx]
    mov     rax, qword ptr [rax]
    call    qword ptr [rax+48h]
    leave
    "
    ,
    "~{rsp},~{rbp},~{rax}"();
    ret void
}

define weak_odr void @Call_ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(i64* %descriptorheap, i64* %desc) naked nounwind uwtable
{
    call void asm sideeffect
    inteldialect
    "
    push    rbp
    mov     rbp, rsp
    sub     rsp,  32
    and     spl, -16
    lea     rax, qword ptr [rcx]
    mov     rax, qword ptr [rax]
    call    qword ptr [rax+50h]
    leave
    "
    ,
    "~{rsp},~{rbp},~{rax}"();
    ret void
}

define weak_odr void @Call_ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(i64* %commandList, i64 %RootParameterIndex, i64* %pBaseDescriptor) naked nounwind uwtable
{
    call void asm sideeffect
    inteldialect
    "
    push    rbp
    mov     rbp, rsp
    sub     rsp,  32
    and     spl, -16
    lea     rax, qword ptr [rcx]
    mov     rax, qword ptr [rax]
    mov     r8,  qword ptr [r8]
    call    qword ptr [rax+0F8h]
    leave
    "
    ,
    "~{rsp},~{rbp},~{rax},~{r8}"();
    ret void
}

define weak_odr void @Call_ID3D12Device_CreateConstantBufferView(i64* %device, i64* %pDesc, i64* %pDestDescriptor) naked nounwind uwtable
{
    call void asm sideeffect
    inteldialect
    "
    push    rbp
    mov     rbp, rsp
    sub     rsp,  32
    and     spl, -16
    lea     rax, qword ptr [rcx]
    mov     rax, qword ptr [rax]
    mov     r8,  qword ptr [r8]
    call    qword ptr [rax+88h]
    leave
    "
    ,
    "~{rsp},~{rbp},~{rax},~{r8}"();
    ret void
}

define weak_odr void @Call_ID3D12Device_CreateShaderResourceView(i64* %device, i64* %pResource, i64* %pDesc, i64* %pDestDescriptor) naked nounwind uwtable
{
    call void asm sideeffect
    inteldialect
    "
    push    rbp
    mov     rbp, rsp
    sub     rsp,  32
    and     spl, -16
    lea     rax, qword ptr [rcx]
    mov     rax, qword ptr [rax]
    mov     r9,  qword ptr [r9]
    call    qword ptr [rax+90h]
    leave
    "
    ,
    "~{rsp},~{rbp},~{rax},~{r8}"();
    ret void
}
back to top