2014-05-11 Bernd Edlinger <bernd.edlinger@hotmail.de>
Fix current cygwin-64 build problems. * src/java_raw_api.c: Remove if !defined(FFI_NO_RAW_API). * src/x86/ffi.c: Add if defined(__CYGWIN__). * src/x86/win64.S (ffi_closure_win64, ffi_call_win64): Added handling for FFI_TYPE_UINT64, FFI_TYPE_POINTER and FFI_TYPE_INT. Added SEH information. Fixed formatting.
This commit is contained in:
committed by
Anthony Green
parent
32cb2ce81d
commit
bfcbf329c5
@@ -39,7 +39,7 @@
|
|||||||
#include <ffi_common.h>
|
#include <ffi_common.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#if !defined(NO_JAVA_RAW_API) && !defined(FFI_NO_RAW_API)
|
#if !defined(NO_JAVA_RAW_API)
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
ffi_java_raw_size (ffi_cif *cif)
|
ffi_java_raw_size (ffi_cif *cif)
|
||||||
@@ -371,4 +371,4 @@ ffi_prep_java_raw_closure (ffi_java_raw_closure* cl,
|
|||||||
|
|
||||||
#endif /* FFI_CLOSURES */
|
#endif /* FFI_CLOSURES */
|
||||||
#endif /* !FFI_NATIVE_RAW_API */
|
#endif /* !FFI_NATIVE_RAW_API */
|
||||||
#endif /* !FFI_NO_RAW_API */
|
#endif /* !NO_JAVA_RAW_API */
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
DEALINGS IN THE SOFTWARE.
|
DEALINGS IN THE SOFTWARE.
|
||||||
----------------------------------------------------------------------- */
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if !defined(__x86_64__) || defined(_WIN64)
|
#if !defined(__x86_64__) || defined(_WIN64) || defined(__CYGWIN__)
|
||||||
|
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|||||||
178
src/x86/win64.S
178
src/x86/win64.S
@@ -1,8 +1,8 @@
|
|||||||
#define LIBFFI_ASM
|
#define LIBFFI_ASM
|
||||||
#include <fficonfig.h>
|
#include <fficonfig.h>
|
||||||
#include <ffi.h>
|
#include <ffi.h>
|
||||||
|
|
||||||
/* Constants for ffi_call_win64 */
|
/* Constants for ffi_call_win64 */
|
||||||
#define STACK 0
|
#define STACK 0
|
||||||
#define PREP_ARGS_FN 32
|
#define PREP_ARGS_FN 32
|
||||||
#define ECIF 40
|
#define ECIF 40
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
#define FN 72
|
#define FN 72
|
||||||
|
|
||||||
/* ffi_call_win64 (void (*prep_args_fn)(char *, extended_cif *),
|
/* ffi_call_win64 (void (*prep_args_fn)(char *, extended_cif *),
|
||||||
extended_cif *ecif, unsigned bytes, unsigned flags,
|
extended_cif *ecif, unsigned bytes, unsigned flags,
|
||||||
unsigned *rvalue, void (*fn)());
|
unsigned *rvalue, void (*fn)());
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
@@ -31,11 +31,11 @@ _TEXT SEGMENT
|
|||||||
;;;
|
;;;
|
||||||
;;; It must move the parameters passed in registers to their stack location,
|
;;; It must move the parameters passed in registers to their stack location,
|
||||||
;;; call ffi_closure_win64_inner for the actual work, then return the result.
|
;;; call ffi_closure_win64_inner for the actual work, then return the result.
|
||||||
;;;
|
;;;
|
||||||
ffi_closure_win64 PROC FRAME
|
ffi_closure_win64 PROC FRAME
|
||||||
;; copy register arguments onto stack
|
;; copy register arguments onto stack
|
||||||
test r11, 1
|
test r11, 1
|
||||||
jne first_is_float
|
jne first_is_float
|
||||||
mov QWORD PTR [rsp+8], rcx
|
mov QWORD PTR [rsp+8], rcx
|
||||||
jmp second
|
jmp second
|
||||||
first_is_float:
|
first_is_float:
|
||||||
@@ -43,7 +43,7 @@ first_is_float:
|
|||||||
|
|
||||||
second:
|
second:
|
||||||
test r11, 2
|
test r11, 2
|
||||||
jne second_is_float
|
jne second_is_float
|
||||||
mov QWORD PTR [rsp+16], rdx
|
mov QWORD PTR [rsp+16], rdx
|
||||||
jmp third
|
jmp third
|
||||||
second_is_float:
|
second_is_float:
|
||||||
@@ -51,7 +51,7 @@ second_is_float:
|
|||||||
|
|
||||||
third:
|
third:
|
||||||
test r11, 4
|
test r11, 4
|
||||||
jne third_is_float
|
jne third_is_float
|
||||||
mov QWORD PTR [rsp+24], r8
|
mov QWORD PTR [rsp+24], r8
|
||||||
jmp fourth
|
jmp fourth
|
||||||
third_is_float:
|
third_is_float:
|
||||||
@@ -59,16 +59,16 @@ third_is_float:
|
|||||||
|
|
||||||
fourth:
|
fourth:
|
||||||
test r11, 8
|
test r11, 8
|
||||||
jne fourth_is_float
|
jne fourth_is_float
|
||||||
mov QWORD PTR [rsp+32], r9
|
mov QWORD PTR [rsp+32], r9
|
||||||
jmp done
|
jmp done
|
||||||
fourth_is_float:
|
fourth_is_float:
|
||||||
movlpd QWORD PTR [rsp+32], xmm3
|
movlpd QWORD PTR [rsp+32], xmm3
|
||||||
|
|
||||||
done:
|
done:
|
||||||
.ALLOCSTACK 40
|
.ALLOCSTACK 40
|
||||||
sub rsp, 40
|
sub rsp, 40
|
||||||
.ENDPROLOG
|
.ENDPROLOG
|
||||||
mov rcx, rax ; context is first parameter
|
mov rcx, rax ; context is first parameter
|
||||||
mov rdx, rsp ; stack is second parameter
|
mov rdx, rsp ; stack is second parameter
|
||||||
add rdx, 48 ; point to start of arguments
|
add rdx, 48 ; point to start of arguments
|
||||||
@@ -76,23 +76,23 @@ done:
|
|||||||
call rax ; call the real closure function
|
call rax ; call the real closure function
|
||||||
add rsp, 40
|
add rsp, 40
|
||||||
movd xmm0, rax ; If the closure returned a float,
|
movd xmm0, rax ; If the closure returned a float,
|
||||||
; ffi_closure_win64_inner wrote it to rax
|
; ffi_closure_win64_inner wrote it to rax
|
||||||
ret 0
|
ret 0
|
||||||
ffi_closure_win64 ENDP
|
ffi_closure_win64 ENDP
|
||||||
|
|
||||||
ffi_call_win64 PROC FRAME
|
ffi_call_win64 PROC FRAME
|
||||||
;; copy registers onto stack
|
;; copy registers onto stack
|
||||||
mov QWORD PTR [rsp+32], r9
|
mov QWORD PTR [rsp+32], r9
|
||||||
mov QWORD PTR [rsp+24], r8
|
mov QWORD PTR [rsp+24], r8
|
||||||
mov QWORD PTR [rsp+16], rdx
|
mov QWORD PTR [rsp+16], rdx
|
||||||
mov QWORD PTR [rsp+8], rcx
|
mov QWORD PTR [rsp+8], rcx
|
||||||
.PUSHREG rbp
|
.PUSHREG rbp
|
||||||
push rbp
|
push rbp
|
||||||
.ALLOCSTACK 48
|
.ALLOCSTACK 48
|
||||||
sub rsp, 48 ; 00000030H
|
sub rsp, 48 ; 00000030H
|
||||||
.SETFRAME rbp, 32
|
.SETFRAME rbp, 32
|
||||||
lea rbp, QWORD PTR [rsp+32]
|
lea rbp, QWORD PTR [rsp+32]
|
||||||
.ENDPROLOG
|
.ENDPROLOG
|
||||||
|
|
||||||
mov eax, DWORD PTR CIF_BYTES[rbp]
|
mov eax, DWORD PTR CIF_BYTES[rbp]
|
||||||
add rax, 15
|
add rax, 15
|
||||||
@@ -209,20 +209,45 @@ ret_float$:
|
|||||||
|
|
||||||
ret_double$:
|
ret_double$:
|
||||||
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_DOUBLE
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_DOUBLE
|
||||||
jne SHORT ret_sint64$
|
jne SHORT ret_uint64$
|
||||||
|
|
||||||
mov rax, QWORD PTR RVALUE[rbp]
|
mov rax, QWORD PTR RVALUE[rbp]
|
||||||
movlpd QWORD PTR [rax], xmm0
|
movlpd QWORD PTR [rax], xmm0
|
||||||
jmp SHORT ret_void$
|
jmp SHORT ret_void$
|
||||||
|
|
||||||
ret_sint64$:
|
ret_uint64$:
|
||||||
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT64
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT64
|
||||||
jne ret_void$
|
jne SHORT ret_sint64$
|
||||||
|
|
||||||
mov rcx, QWORD PTR RVALUE[rbp]
|
mov rcx, QWORD PTR RVALUE[rbp]
|
||||||
mov QWORD PTR [rcx], rax
|
mov QWORD PTR [rcx], rax
|
||||||
jmp SHORT ret_void$
|
jmp SHORT ret_void$
|
||||||
|
|
||||||
|
ret_sint64$:
|
||||||
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT64
|
||||||
|
jne SHORT ret_pointer$
|
||||||
|
|
||||||
|
mov rcx, QWORD PTR RVALUE[rbp]
|
||||||
|
mov QWORD PTR [rcx], rax
|
||||||
|
jmp SHORT ret_void$
|
||||||
|
|
||||||
|
ret_pointer$:
|
||||||
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_POINTER
|
||||||
|
jne SHORT ret_int$
|
||||||
|
|
||||||
|
mov rcx, QWORD PTR RVALUE[rbp]
|
||||||
|
mov QWORD PTR [rcx], rax
|
||||||
|
jmp SHORT ret_void$
|
||||||
|
|
||||||
|
ret_int$:
|
||||||
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_INT
|
||||||
|
jne SHORT ret_void$
|
||||||
|
|
||||||
|
mov rcx, QWORD PTR RVALUE[rbp]
|
||||||
|
cdqe
|
||||||
|
mov QWORD PTR [rcx], rax
|
||||||
|
jmp SHORT ret_void$
|
||||||
|
|
||||||
ret_void$:
|
ret_void$:
|
||||||
xor rax, rax
|
xor rax, rax
|
||||||
|
|
||||||
@@ -252,13 +277,14 @@ END
|
|||||||
#
|
#
|
||||||
# It must move the parameters passed in registers to their stack location,
|
# It must move the parameters passed in registers to their stack location,
|
||||||
# call ffi_closure_win64_inner for the actual work, then return the result.
|
# call ffi_closure_win64_inner for the actual work, then return the result.
|
||||||
#
|
#
|
||||||
.balign 16
|
.balign 16
|
||||||
.globl SYMBOL_NAME(ffi_closure_win64)
|
.globl SYMBOL_NAME(ffi_closure_win64)
|
||||||
|
.seh_proc SYMBOL_NAME(ffi_closure_win64)
|
||||||
SYMBOL_NAME(ffi_closure_win64):
|
SYMBOL_NAME(ffi_closure_win64):
|
||||||
# copy register arguments onto stack
|
# copy register arguments onto stack
|
||||||
test $1,%r11
|
test $1,%r11
|
||||||
jne .Lfirst_is_float
|
jne .Lfirst_is_float
|
||||||
mov %rcx, 8(%rsp)
|
mov %rcx, 8(%rsp)
|
||||||
jmp .Lsecond
|
jmp .Lsecond
|
||||||
.Lfirst_is_float:
|
.Lfirst_is_float:
|
||||||
@@ -266,7 +292,7 @@ SYMBOL_NAME(ffi_closure_win64):
|
|||||||
|
|
||||||
.Lsecond:
|
.Lsecond:
|
||||||
test $2, %r11
|
test $2, %r11
|
||||||
jne .Lsecond_is_float
|
jne .Lsecond_is_float
|
||||||
mov %rdx, 16(%rsp)
|
mov %rdx, 16(%rsp)
|
||||||
jmp .Lthird
|
jmp .Lthird
|
||||||
.Lsecond_is_float:
|
.Lsecond_is_float:
|
||||||
@@ -274,7 +300,7 @@ SYMBOL_NAME(ffi_closure_win64):
|
|||||||
|
|
||||||
.Lthird:
|
.Lthird:
|
||||||
test $4, %r11
|
test $4, %r11
|
||||||
jne .Lthird_is_float
|
jne .Lthird_is_float
|
||||||
mov %r8,24(%rsp)
|
mov %r8,24(%rsp)
|
||||||
jmp .Lfourth
|
jmp .Lfourth
|
||||||
.Lthird_is_float:
|
.Lthird_is_float:
|
||||||
@@ -282,42 +308,43 @@ SYMBOL_NAME(ffi_closure_win64):
|
|||||||
|
|
||||||
.Lfourth:
|
.Lfourth:
|
||||||
test $8, %r11
|
test $8, %r11
|
||||||
jne .Lfourth_is_float
|
jne .Lfourth_is_float
|
||||||
mov %r9, 32(%rsp)
|
mov %r9, 32(%rsp)
|
||||||
jmp .Ldone
|
jmp .Ldone
|
||||||
.Lfourth_is_float:
|
.Lfourth_is_float:
|
||||||
movlpd %xmm3, 32(%rsp)
|
movlpd %xmm3, 32(%rsp)
|
||||||
|
|
||||||
.Ldone:
|
.Ldone:
|
||||||
#.ALLOCSTACK 40
|
.seh_stackalloc 40
|
||||||
sub $40, %rsp
|
sub $40, %rsp
|
||||||
#.ENDPROLOG
|
.seh_endprologue
|
||||||
mov %rax, %rcx # context is first parameter
|
mov %rax, %rcx # context is first parameter
|
||||||
mov %rsp, %rdx # stack is second parameter
|
mov %rsp, %rdx # stack is second parameter
|
||||||
add $48, %rdx # point to start of arguments
|
add $48, %rdx # point to start of arguments
|
||||||
mov $SYMBOL_NAME(ffi_closure_win64_inner), %rax
|
leaq SYMBOL_NAME(ffi_closure_win64_inner)(%rip), %rax
|
||||||
callq *%rax # call the real closure function
|
callq *%rax # call the real closure function
|
||||||
add $40, %rsp
|
add $40, %rsp
|
||||||
movq %rax, %xmm0 # If the closure returned a float,
|
movq %rax, %xmm0 # If the closure returned a float,
|
||||||
# ffi_closure_win64_inner wrote it to rax
|
# ffi_closure_win64_inner wrote it to rax
|
||||||
retq
|
retq
|
||||||
.ffi_closure_win64_end:
|
.seh_endproc
|
||||||
|
|
||||||
.balign 16
|
.balign 16
|
||||||
.globl SYMBOL_NAME(ffi_call_win64)
|
.globl SYMBOL_NAME(ffi_call_win64)
|
||||||
|
.seh_proc SYMBOL_NAME(ffi_call_win64)
|
||||||
SYMBOL_NAME(ffi_call_win64):
|
SYMBOL_NAME(ffi_call_win64):
|
||||||
# copy registers onto stack
|
# copy registers onto stack
|
||||||
mov %r9,32(%rsp)
|
mov %r9,32(%rsp)
|
||||||
mov %r8,24(%rsp)
|
mov %r8,24(%rsp)
|
||||||
mov %rdx,16(%rsp)
|
mov %rdx,16(%rsp)
|
||||||
mov %rcx,8(%rsp)
|
mov %rcx,8(%rsp)
|
||||||
#.PUSHREG rbp
|
.seh_pushreg rbp
|
||||||
push %rbp
|
push %rbp
|
||||||
#.ALLOCSTACK 48
|
.seh_stackalloc 48
|
||||||
sub $48,%rsp
|
sub $48,%rsp
|
||||||
#.SETFRAME rbp, 32
|
.seh_setframe rbp, 32
|
||||||
lea 32(%rsp),%rbp
|
lea 32(%rsp),%rbp
|
||||||
#.ENDPROLOG
|
.seh_endprologue
|
||||||
|
|
||||||
mov CIF_BYTES(%rbp),%eax
|
mov CIF_BYTES(%rbp),%eax
|
||||||
add $15, %rax
|
add $15, %rax
|
||||||
@@ -366,15 +393,15 @@ Lch_done:
|
|||||||
.Lret_struct2b:
|
.Lret_struct2b:
|
||||||
cmpl $FFI_TYPE_SMALL_STRUCT_2B, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_SMALL_STRUCT_2B, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_struct1b
|
jne .Lret_struct1b
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rcx
|
mov RVALUE(%rbp), %rcx
|
||||||
mov %ax, (%rcx)
|
mov %ax, (%rcx)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
|
|
||||||
.Lret_struct1b:
|
.Lret_struct1b:
|
||||||
cmpl $FFI_TYPE_SMALL_STRUCT_1B, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_SMALL_STRUCT_1B, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_uint8
|
jne .Lret_uint8
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rcx
|
mov RVALUE(%rbp), %rcx
|
||||||
mov %al, (%rcx)
|
mov %al, (%rcx)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
@@ -382,45 +409,45 @@ Lch_done:
|
|||||||
.Lret_uint8:
|
.Lret_uint8:
|
||||||
cmpl $FFI_TYPE_UINT8, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_UINT8, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_sint8
|
jne .Lret_sint8
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rcx
|
mov RVALUE(%rbp), %rcx
|
||||||
movzbq %al, %rax
|
movzbq %al, %rax
|
||||||
movq %rax, (%rcx)
|
movq %rax, (%rcx)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
|
|
||||||
.Lret_sint8:
|
.Lret_sint8:
|
||||||
cmpl $FFI_TYPE_SINT8, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_SINT8, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_uint16
|
jne .Lret_uint16
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rcx
|
mov RVALUE(%rbp), %rcx
|
||||||
movsbq %al, %rax
|
movsbq %al, %rax
|
||||||
movq %rax, (%rcx)
|
movq %rax, (%rcx)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
|
|
||||||
.Lret_uint16:
|
.Lret_uint16:
|
||||||
cmpl $FFI_TYPE_UINT16, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_UINT16, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_sint16
|
jne .Lret_sint16
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rcx
|
mov RVALUE(%rbp), %rcx
|
||||||
movzwq %ax, %rax
|
movzwq %ax, %rax
|
||||||
movq %rax, (%rcx)
|
movq %rax, (%rcx)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
|
|
||||||
.Lret_sint16:
|
.Lret_sint16:
|
||||||
cmpl $FFI_TYPE_SINT16, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_SINT16, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_uint32
|
jne .Lret_uint32
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rcx
|
mov RVALUE(%rbp), %rcx
|
||||||
movswq %ax, %rax
|
movswq %ax, %rax
|
||||||
movq %rax, (%rcx)
|
movq %rax, (%rcx)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
|
|
||||||
.Lret_uint32:
|
.Lret_uint32:
|
||||||
cmpl $FFI_TYPE_UINT32, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_UINT32, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_sint32
|
jne .Lret_sint32
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rcx
|
mov RVALUE(%rbp), %rcx
|
||||||
movl %eax, %eax
|
movl %eax, %eax
|
||||||
movq %rax, (%rcx)
|
movq %rax, (%rcx)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
|
|
||||||
@@ -443,26 +470,51 @@ Lch_done:
|
|||||||
|
|
||||||
.Lret_double:
|
.Lret_double:
|
||||||
cmpl $FFI_TYPE_DOUBLE, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_DOUBLE, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_sint64
|
jne .Lret_uint64
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rax
|
mov RVALUE(%rbp), %rax
|
||||||
movlpd %xmm0, (%rax)
|
movlpd %xmm0, (%rax)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
|
|
||||||
.Lret_sint64:
|
.Lret_uint64:
|
||||||
cmpl $FFI_TYPE_SINT64, CIF_FLAGS(%rbp)
|
cmpl $FFI_TYPE_UINT64, CIF_FLAGS(%rbp)
|
||||||
jne .Lret_void
|
jne .Lret_sint64
|
||||||
|
|
||||||
mov RVALUE(%rbp), %rcx
|
mov RVALUE(%rbp), %rcx
|
||||||
mov %rax, (%rcx)
|
mov %rax, (%rcx)
|
||||||
jmp .Lret_void
|
jmp .Lret_void
|
||||||
|
|
||||||
|
.Lret_sint64:
|
||||||
|
cmpl $FFI_TYPE_SINT64, CIF_FLAGS(%rbp)
|
||||||
|
jne .Lret_pointer
|
||||||
|
|
||||||
|
mov RVALUE(%rbp), %rcx
|
||||||
|
mov %rax, (%rcx)
|
||||||
|
jmp .Lret_void
|
||||||
|
|
||||||
|
.Lret_pointer:
|
||||||
|
cmpl $FFI_TYPE_POINTER, CIF_FLAGS(%rbp)
|
||||||
|
jne .Lret_int
|
||||||
|
|
||||||
|
mov RVALUE(%rbp), %rcx
|
||||||
|
mov %rax, (%rcx)
|
||||||
|
jmp .Lret_void
|
||||||
|
|
||||||
|
.Lret_int:
|
||||||
|
cmpl $FFI_TYPE_INT, CIF_FLAGS(%rbp)
|
||||||
|
jne .Lret_void
|
||||||
|
|
||||||
|
mov RVALUE(%rbp), %rcx
|
||||||
|
cltq
|
||||||
|
movq %rax, (%rcx)
|
||||||
|
jmp .Lret_void
|
||||||
|
|
||||||
.Lret_void:
|
.Lret_void:
|
||||||
xor %rax, %rax
|
xor %rax, %rax
|
||||||
|
|
||||||
lea 16(%rbp), %rsp
|
lea 16(%rbp), %rsp
|
||||||
pop %rbp
|
pop %rbp
|
||||||
retq
|
retq
|
||||||
.ffi_call_win64_end:
|
.seh_endproc
|
||||||
#endif /* !_MSC_VER */
|
#endif /* !_MSC_VER */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user