Skip to content

Commit

Permalink
Fix MS compiler errors
Browse files Browse the repository at this point in the history
  • Loading branch information
Kaiepi committed Jul 11, 2019
1 parent 2fed1ce commit fcfaa68
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 94 deletions.
96 changes: 8 additions & 88 deletions src/core/nativecall_dyncall.c
Expand Up @@ -51,45 +51,9 @@ static char get_signature_char(MVMint16 type_id) {
case MVM_NATIVECALL_ARG_DOUBLE:
return 'd';
case MVM_NATIVECALL_ARG_WCHAR_T:
#ifdef MVM_WCHAR_UNSIGNED
# if MVM_WCHAR_SIZE == 1
return 'C';
# elif MVM_WCHAR_SIZE == 2
return 'S';
# elif MVM_WCHAR_SIZE == 4
return 'I';
# elif MVM_WCHAR_SIZE == 8
return 'J';
# endif
#else
# if MVM_WCHAR_SIZE == 1
return 'c';
# elif MVM_WHCAR_SIZE == 2
return 's';
# elif MVM_WCHAR_SIZE == 4
return 'i';
# elif MVM_WCHAR_SIZE == 8
return 'j';
# endif
#endif
return MVM_WCHAR_DC_SIG_CHAR;
case MVM_NATIVECALL_ARG_WINT_T:
#ifdef MVM_WINT_UNSIGNED
# if MVM_WINT_SIZE == 2
return 'S';
# elif MVM_WINT_SIZE == 4
return 'I';
# elif MVM_WINT_SIZE == 8
return 'J';
# endif
#else
# if MVM_WINT_SIZE == 2
return 's';
# elif MVM_WINT_SIZE == 4
return 'i';
# elif MVM_WINT_SIZE == 8
return 'j';
# endif
#endif
return MVM_WINT_DC_SIG_CHAR;
case MVM_NATIVECALL_ARG_CHAR16_T:
return 's';
case MVM_NATIVECALL_ARG_CHAR32_T:
Expand Down Expand Up @@ -220,20 +184,12 @@ static void * unmarshal_callback(MVMThreadContext *tc, MVMObject *callback, MVMO
cs->arg_flags[i - 1] = MVM_CALLSITE_ARG_NUM;
break;
case MVM_NATIVECALL_ARG_WCHAR_T:
#ifdef MVM_WCHAR_UNSIGNED
/* TODO: should probably be UINT, when we can support that. */
/* TODO: should probably be UINT when needed, when we can support that. */
cs->arg_flags[i - 1] = MVM_CALLSITE_ARG_INT;
#else
cs->arg_flags[i - 1] = MVM_CALLSITE_ARG_INT;
#endif
break;
case MVM_NATIVECALL_ARG_WINT_T:
#ifdef MVM_WINT_UNSIGNED
/* TODO: should probably be UINT, when we can support that. */
cs->arg_flags[i - 1] = MVM_CALLSITE_ARG_INT;
#else
/* TODO: should probably be UINT when needed, when we can support that. */
cs->arg_flags[i - 1] = MVM_CALLSITE_ARG_INT;
#endif
break;
case MVM_NATIVECALL_ARG_CHAR16_T:
case MVM_NATIVECALL_ARG_CHAR32_T:
Expand Down Expand Up @@ -322,46 +278,10 @@ static char callback_handler(DCCallback *cb, DCArgs *cb_args, DCValue *cb_result
args[i - 1].n64 = dcbArgDouble(cb_args);
break;
case MVM_NATIVECALL_ARG_WCHAR_T:
#ifdef MVM_WCHAR_UNSIGNED
# if MVM_WCHAR_SIZE == 1
args[i - 1].i64 = dcbArgUChar(cb_args);
# elif MVM_WCHAR_SIZE == 2
args[i - 1].i64 = dcbArgUShort(cb_args);
# elif MVM_WCHAR_SIZE == 4
args[i - 1].i64 = dcbArgUInt(cb_args);
# elif MVM_WCHAR_SIZE == 8
args[i - 1].i64 = dcbArgULong(cb_args);
# endif
#else
# if MVM_WCHAR_SIZE == 1
args[i - 1].i64 = dcbArgChar(cb_args);
# elif MVM_WCHAR_SIZE == 2
args[i - 1].i64 = dcbArgShort(cb_args);
# elif MVM_WCHAR_SIZE == 4
args[i - 1].i64 = dcbArgInt(cb_args);
# elif MVM_WCHAR_SIZE == 8
args[i - 1].i64 = dcbArgLong(cb_args);
# endif
#endif
args[i - 1].i64 = MVM_WCHAR_DCB_ARG(cb_args);
break;
case MVM_NATIVECALL_ARG_WINT_T:
#ifdef MVM_WINT_UNSIGNED
# if MVM_WINT_SIZE == 2
args[i - 1].i64 = dcbArgUShort(cb_args);
# elif MVM_WINT_SIZE == 4
args[i - 1].i64 = dcbArgUInt(cb_args);
# elif MVM_WINT_SIZE == 8
args[i - 1].i64 = dcbArgULong(cb_args);
# endif
#else
# if MVM_WINT_SIZE == 2
args[i - 1].i64 = dcbArgShort(cb_args);
# elif MVM_WINT_SIZE == 4
args[i - 1].i64 = dcbArgInt(cb_args);
# elif MVM_WINT_SIZE == 8
args[i - 1].i64 = dcbArgLong(cb_args);
# endif
#endif
args[i - 1].i64 = MVM_WINT_DCB_ARG(cb_args);
break;
case MVM_NATIVECALL_ARG_CHAR16_T:
args[i - 1].i64 = dcbArgUShort(cb_args);
Expand Down Expand Up @@ -519,7 +439,7 @@ static char callback_handler(DCCallback *cb, DCArgs *cb_args, DCValue *cb_result
#elif MVM_WCHAR_SIZE == 4
cb_result->i = MVM_nativecall_unmarshal_wchar_t(tc, res.o);
#elif MVM_WCHAR_SIZE == 8
cb_result->j = MVM_nativecall_unmarshal_wchar_t(tc, res.o);
cb_result->l = MVM_nativecall_unmarshal_wchar_t(tc, res.o);
#endif
break;
case MVM_NATIVECALL_ARG_WINT_T:
Expand All @@ -528,7 +448,7 @@ static char callback_handler(DCCallback *cb, DCArgs *cb_args, DCValue *cb_result
#elif MVM_WINT_SIZE == 4
cb_result->i = MVM_nativecall_unmarshal_wint_t(tc, res.o);
#elif MVM_WINT_SIZE == 8
cb_result->j = MVM_nativecall_unmarshal_wint_t(tc, res.o);
cb_result->l = MVM_nativecall_unmarshal_wint_t(tc, res.o);
#endif
break;
case MVM_NATIVECALL_ARG_CHAR16_T:
Expand Down
40 changes: 38 additions & 2 deletions src/core/nativecall_dyncall.h
Expand Up @@ -5,68 +5,104 @@ MVMint16 MVM_nativecall_get_calling_convention(MVMThreadContext *tc, MVMString *

#ifdef MVM_WCHAR_UNSIGNED
# if MVM_WCHAR_SIZE == 1
# define MVM_WCHAR_DC_SIG_CHAR 'C'
# define MVM_WCHAR_DC_TYPE DCuchar
# define MVM_WCHAR_DC_ARG dcArgChar
# define MVM_WCHAR_DC_CALL(vm, entry_point) (MVMwchar)dcCallChar((vm), (entry_point))
# define MVM_WCHAR_DCB_ARG(cb_args) dcbArgUChar((cb_args))
# elif MVM_WCHAR_SIZE == 2
# define MVM_WCHAR_DC_SIG_CHAR 'S'
# define MVM_WCHAR_DC_TYPE DCushort
# define MVM_WCHAR_DC_ARG dcArgShort
# define MVM_WCHAR_DC_CALL(vm, entry_point) (MVMwchar)dcCallShort((vm), (entry_point))
# define MVM_WCHAR_DCB_ARG(cb_args) dcbArgUShort((cb_args))
# elif MVM_WCHAR_SIZE == 4
# define MVM_WCHAR_DC_SIG_CHAR 'I'
# define MVM_WCHAR_DC_TYPE DCuint
# define MVM_WCHAR_DC_ARG dcArgInt
# define MVM_WCHAR_DC_CALL(vm, entry_point) (MVMwchar)dcCallInt((vm), (entry_point))
# define MVM_WCHAR_DCB_ARG(cb_args) dcbArgUInt((cb_args))
# elif MVM_WCHAR_SIZE == 8
# define MVM_WCHAR_DC_SIG_CHAR 'L'
# define MVM_WCHAR_DC_TYPE DCulonglong
# define MVM_WCHAR_DC_ARG dcArgLongLong
# define MVM_WCHAR_DC_CALL(vm, entry_point) (MVMwchar)dcCallLongLong((vm), (entry_point))
# define MVM_WCHAR_DCB_ARG(cb_args) dcbArgULongLong((cb_args))
# else
# error "Unsupported wchar_t size"
# endif
#else
# if MVM_WCHAR_SIZE == 1
# define MVM_WCHAR_DC_SIG_CHAR 'c'
# define MVM_WCHAR_DC_TYPE DCchar
# define MVM_WCHAR_DC_ARG dcArgChar
# define MVM_WCHAR_DC_CALL(vm, entry_point) (MVMwchar)dcCallChar((vm), (entry_point))
# define MVM_WCHAR_DCB_ARG(cb_args) dcbArgChar((cb_args))
# elif MVM_WCHAR_SIZE == 2
# define MVM_WCHAR_DC_SIG_CHAR 's'
# define MVM_WCHAR_DC_TYPE DCshort
# define MVM_WCHAR_DC_ARG dcArgShort
# define MVM_WCHAR_DC_CALL(vm, entry_point) (MVMwchar)dcCallShort((vm), (entry_point))
# define MVM_WCHAR_DCB_ARG(cb_args) dcbArgShort((cb_args))
# elif MVM_WCHAR_SIZE == 4
# define MVM_WCHAR_DC_SIG_CHAR 'i'
# define MVM_WCHAR_DC_TYPE DCint
# define MVM_WCHAR_DC_ARG dcArgInt
# define MVM_WCHAR_DC_CALL(vm, entry_point) (MVMwchar)dcCallInt((vm), (entry_point))
# define MVM_WCHAR_DCB_ARG(cb_args) dcbArgInt((cb_args))
# elif MVM_WCHAR_SIZE == 8
# define MVM_WCHAR_DC_SIG_CHAR 'l'
# define MVM_WCHAR_DC_TYPE DClonglong
# define MVM_WCHAR_DC_ARG dcArgLongLong
# define MVM_WCHAR_DC_CALL(vm, entry_point) (MVMwchar)dcCallLongLong((vm), (entry_point))
# define MVM_WCHAR_DCB_ARG(cb_args) dcbArgLongLong((cb_args))
# else
# error "Unsupported wchar_t size"
# endif
#endif

#ifdef MVM_WINT_UNSIGNED
# if MVM_WINT_SIZE == 2
# define MVM_WINT_DC_SIG_CHAR 'S'
# define MVM_WINT_DC_TYPE DCushort
# define MVM_WINt_DC_ARG dcArgShort
# define MVM_WINT_DC_ARG dcArgShort
# define MVM_WINT_DC_CALL(vm, entry_point) (MVMwint)dcCallShort((vm), (entry_point))
# define MVM_WINT_DCB_ARG(cb_args) dcbArgUShort((cb_args))
# elif MVM_WINT_SIZE == 4
# define MVM_WINT_DC_SIG_CHAR 'I'
# define MVM_WINT_DC_TYPE DCuint
# define MVM_WINT_DC_ARG dcArgInt
# define MVM_WINT_DC_CALL(vm, entry_point) (MVMwint)dcCallInt((vm), (entry_point))
# define MVM_WINT_DCB_ARG(cb_args) dcbArgUInt((cb_args))
# elif MVM_WINT_SIZE == 8
# define MVM_WINT_DC_SIG_CHAR 'L'
# define MVM_WINT_DC_TYPE DCulonglong
# define MVM_WINT_DC_ARG dcArgLongLong
# define MVM_WINT_DC_CALL(vm, entry_point) (MVMwint)dcCallLongLong((vm), (entry_point))
# define MVM_WINT_DCB_ARG(cb_args) dcbArgULongLong((cb_args))
# else
# error "Unsupported wint_t size"
# endif
#else
# if MVM_WINT_SIZE == 2
# define MVM_WINT_DC_SIG_CHAR 's'
# define MVM_WINT_DC_TYPE DCshort
# define MVM_WINt_DC_ARG dcArgShort
# define MVM_WINT_DC_ARG dcArgShort
# define MVM_WINT_DC_CALL(vm, entry_point) (MVMwint)dcCallShort((vm), (entry_point))
# define MVM_WINT_DCB_ARG(cb_args) dcbArgShort((cb_args))
# elif MVM_WINT_SIZE == 4
# define MVM_WINT_DC_SIG_CHAR 'i'
# define MVM_WINT_DC_TYPE DCint
# define MVM_WINT_DC_ARG dcArgInt
# define MVM_WINT_DC_CALL(vm, entry_point) (MVMwint)dcCallInt((vm), (entry_point))
# define MVM_WINT_DCB_ARG(cb_args) dcbArgInt((cb_args))
# elif MVM_WINT_SIZE == 8
# define MVM_WINT_DC_SIG_CHAR 'l'
# define MVM_WINT_DC_TYPE DClonglong
# define MVM_WINT_DC_ARG dcArgLongLong
# define MVM_WINT_DC_CALL(vm, entry_point) (MVMwint)dcCallLongLong((vm), (entry_point))
# define MVM_WINT_DCB_ARG(cb_args) dcbArgLongLong((cb_args))
# else
# error "Unsupported wint_t size"
# endif
#endif
16 changes: 12 additions & 4 deletions src/core/nativecall_libffi.h
Expand Up @@ -13,22 +13,26 @@ ffi_abi MVM_nativecall_get_calling_convention(MVMThreadContext *tc, MVMString *n
# if MVM_WCHAR_SIZE == 1
# define MVM_WCHAR_FFI_TYPE ffi_type_uchar
# elif MVM_WCHAR_SIZE == 2
# define MVM_WCHAR_FFI_TYPE ffi_type_ushort;
# define MVM_WCHAR_FFI_TYPE ffi_type_ushort
# elif MVM_WCHAR_SIZE == 4
# define MVM_WCHAR_FFI_TyPE ffi_type_uint
# define MVM_WCHAR_FFI_TYPE ffi_type_uint
# elif MVM_WCHAR_SIZE == 8
# define MVM_WCHAR_FFI_TYPE ffi_type_uint64
# else
# error "Unsupported wchar_t size"
# endif
#else
# define MVM_WCHAR_FFI_ARG ffi_sarg
# if MVM_WCHAR_SIZE == 1
# define MVM_WCHAR_FFI_TYPE ffi_type_schar
# elif MVM_WCHAR_SIZE == 2
# define MVM_WCHAR_FFI_TYPE ffi_type_sshort;
# define MVM_WCHAR_FFI_TYPE ffi_type_sshort
# elif MVM_WCHAR_SIZE == 4
# define MVM_WCHAR_FFI_TyPE ffi_type_sint
# define MVM_WCHAR_FFI_TYPE ffi_type_sint
# elif MVM_WCHAR_SIZE == 8
# define MVM_WCHAR_FFI_TYPE ffi_type_sint64
# else
# error "Unsupported wchar_t size"
# endif
#endif

Expand All @@ -40,6 +44,8 @@ ffi_abi MVM_nativecall_get_calling_convention(MVMThreadContext *tc, MVMString *n
# define MVM_WINT_FFI_TYPE ffi_type_uint
# elif MVM_WINT_SIZE == 8
# define MVM_WINT_FFI_TYPE ffi_type_uint64
# else
# error "Unsupported wint_t size"
# endif
#else
# define MVM_WINT_FFI_ARG ffi_sarg
Expand All @@ -49,5 +55,7 @@ ffi_abi MVM_nativecall_get_calling_convention(MVMThreadContext *tc, MVMString *n
# define MVM_WINT_FFI_TYPE ffi_type_sint
# elif MVM_WINT_SIZE == 8
# define MVM_WINT_FFI_TYPE ffi_type_sint64
# else
# error "Unsupported wint_t size"
# endif
#endif

0 comments on commit fcfaa68

Please sign in to comment.