view dyncallback/dyncall_callback_x64_masm.asm @ 542:a73a5cd50c19

- fix passing aggregate-by-val on x64/sysv: subaggr classification for aggr *arrays* was wrong (was problematic when there ware exactly 2 8bytes to be classified, potentially be passed via registers)
author Tassilo Philipp
date Mon, 02 May 2022 15:32:41 +0200
parents 71c884e610f0
children
line wrap: on
line source

; auto-generated by gen-masm.sh
.CODE
DCThunk_size = 24
DCArgs_size_win64 = 96
DCArgs_size_sysv = 144
DCValue_size = 8
DCRetRegs_SystemV_size = 32
FRAME_arg0_win64 = 48
FRAME_arg0_sysv = 16
FRAME_return = 8
FRAME_parent = 0
CTX_thunk = 0
CTX_handler = 24
CTX_userdata = 32
CTX_aggr_ret_reg = 40
CTX_pad = 44
CTX_aggrs_pp = 48
DCCallback_size = 56
dcCallback_x64_sysv PROC
OPTION PROLOGUE:NONE, EPILOGUE:NONE
 push RBP
 mov RBP,RSP
 sub RSP,8*8
 movsd qword ptr [RSP+8*7],XMM7
 movsd qword ptr [RSP+8*6],XMM6
 movsd qword ptr [RSP+8*5],XMM5
 movsd qword ptr [RSP+8*4],XMM4
 movsd qword ptr [RSP+8*3],XMM3
 movsd qword ptr [RSP+8*2],XMM2
 movsd qword ptr [RSP+8*1],XMM1
 movsd qword ptr [RSP+8*0],XMM0
 push R9
 push R8
 push RCX
 push RDX
 push RSI
 push RDI
 mov R8,qword ptr [RAX+CTX_aggrs_pp]
 push R8
 mov R8D,dword ptr [RAX+CTX_aggr_ret_reg]
 push R8
 push 0
 lea RDX,qword ptr [RBP+FRAME_arg0_sysv]
 push RDX
 mov RSI,RSP
 sub RSP,4*8
 mov RDI,RAX
 mov RCX,qword ptr [RDI+CTX_userdata]
 mov RDX,RSP
 call qword ptr [RAX+CTX_handler]
 cmp dword ptr [RSP+48],-2
 je scalar_retval
  mov RAX,qword ptr [RSP+0]
  mov RDX,qword ptr [RSP+8]
  movsd XMM0,qword ptr [RSP+16]
  movsd XMM1,qword ptr [RSP+24]
 jmp epilog
scalar_retval:
  mov RAX,qword ptr [RSP+0]
  movd XMM0,RAX
epilog:
 mov RSP,RBP
 pop RBP
 ret
dcCallback_x64_sysv ENDP
dcCallback_x64_win64 PROC FRAME
OPTION EPILOGUE:NONE
 push RBP
 .pushreg RBP
 mov RBP,RSP
 .setframe RBP, 0
 .endprolog
 sub RSP,4*8
 movsd qword ptr [RSP+8*3],XMM3
 movsd qword ptr [RSP+8*2],XMM2
 movsd qword ptr [RSP+8*1],XMM1
 movsd qword ptr [RSP+8*0],XMM0
 push R9
 push R8
 push RDX
 push RCX
 mov R8,qword ptr [RAX+CTX_aggrs_pp]
 push R8
 mov R8D,dword ptr [RAX+CTX_aggr_ret_reg]
 push R8
 push 0
 lea RDX,qword ptr [RBP+FRAME_arg0_win64]
 push RDX
 mov RDX,RSP
 sub RSP,2*8
 mov RCX,RAX
 mov R9,qword ptr [RAX+CTX_userdata]
 mov R8,RSP
 sub RSP,4*8
 call qword ptr [RAX+CTX_handler]
 mov RAX,qword ptr [RSP+4*8]
 movd XMM0,RAX
 mov RSP,RBP
 pop RBP
 ret
dcCallback_x64_win64 ENDP
END