FFI repairs for 64-bit big-endian

Again; missed pieces for b3c721a346.
This commit is contained in:
Matthew Flatt 2012-07-17 06:06:55 -06:00
parent 0c9bd915bc
commit 12a4ee8d98
2 changed files with 54 additions and 54 deletions

View File

@ -1718,81 +1718,81 @@ static void* SCHEME2C(const char *who,
break;
case FOREIGN_int8:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint8)<sizeof(int) && ret_loc) {
if (sizeof(Tsint8)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint8));
delta += (sizeof(intptr_)-sizeof(Tsint8));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(get_byte_val(val,&(((Tsint8*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int8", val);;
return NULL;
case FOREIGN_uint8:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint8)<sizeof(int) && ret_loc) {
if (sizeof(Tuint8)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint8));
delta += (sizeof(intptr_)-sizeof(Tuint8));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(get_ubyte_val(val,&(((Tuint8*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint8", val);;
return NULL;
case FOREIGN_int16:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint16)<sizeof(int) && ret_loc) {
if (sizeof(Tsint16)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint16));
delta += (sizeof(intptr_)-sizeof(Tsint16));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(get_short_val(val,&(((Tsint16*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int16", val);;
return NULL;
case FOREIGN_uint16:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint16)<sizeof(int) && ret_loc) {
if (sizeof(Tuint16)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint16));
delta += (sizeof(intptr_)-sizeof(Tuint16));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(get_ushort_val(val,&(((Tuint16*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint16", val);;
return NULL;
case FOREIGN_int32:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint32)<sizeof(int) && ret_loc) {
if (sizeof(Tsint32)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint32));
delta += (sizeof(intptr_)-sizeof(Tsint32));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(scheme_get_realint_val(val,&(((Tsint32*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int32", val);;
return NULL;
case FOREIGN_uint32:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint32)<sizeof(int) && ret_loc) {
if (sizeof(Tuint32)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint32));
delta += (sizeof(intptr_)-sizeof(Tuint32));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(scheme_get_unsigned_realint_val(val,&(((Tuint32*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint32", val);;
return NULL;
case FOREIGN_int64:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint64)<sizeof(int) && ret_loc) {
if (sizeof(Tsint64)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint64));
delta += (sizeof(intptr_)-sizeof(Tsint64));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(scheme_get_long_long_val(val,&(((Tsint64*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int64", val);;
return NULL;
case FOREIGN_uint64:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint64)<sizeof(int) && ret_loc) {
if (sizeof(Tuint64)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint64));
delta += (sizeof(intptr_)-sizeof(Tuint64));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(scheme_get_unsigned_long_long_val(val,&(((Tuint64*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint64", val);;
return NULL;
case FOREIGN_fixint:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint32)<sizeof(int) && ret_loc) {
if (sizeof(Tsint32)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint32));
delta += (sizeof(intptr_)-sizeof(Tsint32));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_INTP(val)) {
@ -1805,9 +1805,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_ufixint:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint32)<sizeof(int) && ret_loc) {
if (sizeof(Tuint32)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint32));
delta += (sizeof(intptr_)-sizeof(Tuint32));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_INTP(val)) {
@ -1820,9 +1820,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_fixnum:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(intptr_t)<sizeof(int) && ret_loc) {
if (sizeof(intptr_t)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(intptr_t));
delta += (sizeof(intptr_)-sizeof(intptr_t));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_INTP(val)) {
@ -1835,9 +1835,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_ufixnum:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(uintptr_t)<sizeof(int) && ret_loc) {
if (sizeof(uintptr_t)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(uintptr_t));
delta += (sizeof(intptr_)-sizeof(uintptr_t));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_INTP(val)) {
@ -1850,9 +1850,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_float:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(float)<sizeof(int) && ret_loc) {
if (sizeof(float)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(float));
delta += (sizeof(intptr_)-sizeof(float));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FLOATP(val)) {
@ -1865,9 +1865,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_double:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(double)<sizeof(int) && ret_loc) {
if (sizeof(double)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(double));
delta += (sizeof(intptr_)-sizeof(double));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FLOATP(val)) {
@ -1880,9 +1880,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_doubleS:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(double)<sizeof(int) && ret_loc) {
if (sizeof(double)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(double));
delta += (sizeof(intptr_)-sizeof(double));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_REALP(val)) {
@ -1895,9 +1895,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_bool:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(int)<sizeof(int) && ret_loc) {
if (sizeof(int)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(int));
delta += (sizeof(intptr_)-sizeof(int));
}
# endif /* SCHEME_BIG_ENDIAN */
if (1) {
@ -1910,9 +1910,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_string_ucs_4:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(mzchar*)<sizeof(int) && ret_loc) {
if (sizeof(mzchar*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(mzchar*));
delta += (sizeof(intptr_)-sizeof(mzchar*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FALSEP_OR_CHAR_STRINGP(val)) {
@ -1931,9 +1931,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_string_utf_16:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(unsigned short*)<sizeof(int) && ret_loc) {
if (sizeof(unsigned short*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(unsigned short*));
delta += (sizeof(intptr_)-sizeof(unsigned short*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FALSEP_OR_CHAR_STRINGP(val)) {
@ -1952,9 +1952,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_bytes:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(char*)<sizeof(int) && ret_loc) {
if (sizeof(char*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(char*));
delta += (sizeof(intptr_)-sizeof(char*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FALSEP(val)||SCHEME_BYTE_STRINGP(val)) {
@ -1973,9 +1973,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_path:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(char*)<sizeof(int) && ret_loc) {
if (sizeof(char*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(char*));
delta += (sizeof(intptr_)-sizeof(char*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FALSEP(val)||SCHEME_PATH_STRINGP(val)) {
@ -1994,9 +1994,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_symbol:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(char*)<sizeof(int) && ret_loc) {
if (sizeof(char*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(char*));
delta += (sizeof(intptr_)-sizeof(char*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_SYMBOLP(val)) {
@ -2015,9 +2015,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_pointer:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(void*)<sizeof(int) && ret_loc) {
if (sizeof(void*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(void*));
delta += (sizeof(intptr_)-sizeof(void*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FFIANYPTRP(val)) {
@ -2040,9 +2040,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_gcpointer:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(void*)<sizeof(int) && ret_loc) {
if (sizeof(void*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(void*));
delta += (sizeof(intptr_)-sizeof(void*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FFIANYPTRP(val)) {
@ -2065,9 +2065,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_scheme:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(Scheme_Object*)<sizeof(int) && ret_loc) {
if (sizeof(Scheme_Object*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Scheme_Object*));
delta += (sizeof(intptr_)-sizeof(Scheme_Object*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (1) {
@ -2086,9 +2086,9 @@ static void* SCHEME2C(const char *who,
}
case FOREIGN_fpointer:
# ifdef SCHEME_BIG_ENDIAN
if (sizeof(void*)<sizeof(int) && ret_loc) {
if (sizeof(void*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(void*));
delta += (sizeof(intptr_)-sizeof(void*));
}
# endif /* SCHEME_BIG_ENDIAN */
if (!(ret_loc)) wrong_value(who, "_fpointer", val);;

View File

@ -1488,9 +1488,9 @@ static void* SCHEME2C(const char *who,
[(not s->c)
@list{
@@IFDEF{SCHEME_BIG_ENDIAN}{
if (sizeof(@ctype)<sizeof(int) && ret_loc) {
if (sizeof(@ctype)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(@ctype));
delta += (sizeof(intptr_)-sizeof(@ctype));
}}
if (!(@(if ptr? "ret_loc" (pred "val" x)))) @;
@wrong-type["val" stype];
@ -1498,9 +1498,9 @@ static void* SCHEME2C(const char *who,
[else
@list{
@@IFDEF{SCHEME_BIG_ENDIAN}{
if (sizeof(@ctype)<sizeof(int) && ret_loc) {
if (sizeof(@ctype)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(@ctype));
delta += (sizeof(intptr_)-sizeof(@ctype));
}}
if (@f[pred]) {
@ctype tmp@";"@and[offset]{ intptr_t toff@";"}