Revision: 3402
Author: eliot
Date: 2015-07-10 14:17:09 -0700 (Fri, 10 Jul 2015)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.1409
Integrate Ryan's code for ARM call-out and callback support in the Alien plugin.
Fix slangification of ThreadedFFIPlugin. Eliminate a few warnings there-in.
Make type of tenuringIncrementalGC agree with sqVirtualMachine.h.
Provide a back door for the ARM division routines during simulation.
Type FFI support routines ioLoadModuleOfLength & ioLoadSymbolOfLengthFromModule
correctly in sqVirtualMachine.h.
Make the Spur image upload script also upload the 64-bit image if it is newer
than the 32-bit one.
Modified Paths:
--------------
branches/Cog/image/uploadspurimage.sh
branches/Cog/platforms/Cross/vm/sqVirtualMachine.c
branches/Cog/platforms/Cross/vm/sqVirtualMachine.h
branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c
branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/image/uploadspurimage.sh
===================================================================
--- branches/Cog/image/uploadspurimage.sh 2015-07-09 21:08:58 UTC (rev 3401)
+++ branches/Cog/image/uploadspurimage.sh 2015-07-10 21:17:09 UTC (rev 3402)
@@ -8,7 +8,7 @@
BASENAME=trunk46-spur
test "$1" = -here || cd `dirname $0`
-echo uploading trunk46-spur from `pwd`
+echo uploading $BASENAME from `pwd`
cksum $BASENAME.[ci]* >$BASENAME.sum
DIR=$RemoteRoot/$DATE
@@ -18,8 +18,22 @@
scp -p $BASENAME.image $BASENAME.changes $BASENAME.sum "$@" $RemoteUser:$DIR
echo ssh $RemoteUser chmod a-w $DIR/* \\\; ls -al $DIR
ssh $RemoteUser chmod a-w $DIR/* \; ls -al $DIR
-echo ssh $RemoteUser rm $RemoteRoot/{$BASENAME.image,$BASENAME.changes,$BASENAME.sum}
-ssh $RemoteUser rm $RemoteRoot/{$BASENAME.image,$BASENAME.changes,$BASENAME.sum}
+echo ssh $RemoteUser rm -f \
+ $RemoteRoot/{$BASENAME.image,$BASENAME.changes,$BASENAME.sum} \
+ $RemoteRoot/{$BASENAME-64.image,$BASENAME-64.changes,$BASENAME-64.sum}
+ssh $RemoteUser rm -f \
+ $RemoteRoot/{$BASENAME.image,$BASENAME.changes,$BASENAME.sum} \
+ $RemoteRoot/{$BASENAME-64.image,$BASENAME-64.changes,$BASENAME-64.sum}
echo ssh $RemoteUser cd $RemoteRoot \\\; ln -s $DATE/{$BASENAME.image,$BASENAME.changes} .
ssh $RemoteUser cd $RemoteRoot \; ln -s $DATE/{$BASENAME.image,$BASENAME.changes,$BASENAME.sum} .
+
+if [ "$BASENAME-64.changes" -nt "$BASENAME.changes" \
+ -a \( "$BASENAME-64.image" -nt "$BASENAME.image" ]; then
+ echo uploading $BASENAME-64 from `pwd`
+ cksum $BASENAME-64.[ci]* >$BASENAME-64.sum
+ echo scp -p $BASENAME-64.image $BASENAME-64.changes $BASENAME-64.sum $RemoteUser:$DIR
+ scp -p $BASENAME-64.image $BASENAME-64.changes $BASENAME-64.sum $RemoteUser:$DIR
+ echo ssh $RemoteUser cd $RemoteRoot \\\; ln -s $DATE/{$BASENAME-64.image,$BASENAME-64.changes} .
+ ssh $RemoteUser cd $RemoteRoot \; ln -s $DATE/{$BASENAME-64.image,$BASENAME-64.changes,$BASENAME-64.sum} .
+fi
ssh $RemoteUser ls -l $RemoteRoot $RemoteRoot/$DATE
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
- Wed Jul 8 11:27:26 PDT 2015
+ Fri Jul 10 14:13:45 PDT 2015
Modified: branches/Cog/platforms/Cross/vm/sqVirtualMachine.c
===================================================================
--- branches/Cog/platforms/Cross/vm/sqVirtualMachine.c 2015-07-09 21:08:58 UTC (rev 3401)
+++ branches/Cog/platforms/Cross/vm/sqVirtualMachine.c 2015-07-10 21:17:09 UTC (rev 3402)
@@ -165,8 +165,8 @@
sqInt classExternalFunction(void);
sqInt classExternalLibrary(void);
sqInt classExternalStructure(void);
-sqInt ioLoadModuleOfLength(sqInt moduleNameIndex, sqInt moduleNameLength);
-sqInt ioLoadSymbolOfLengthFromModule(sqInt functionNameIndex, sqInt functionNameLength, sqInt moduleHandle);
+void *ioLoadModuleOfLength(sqInt moduleNameIndex, sqInt moduleNameLength);
+void *ioLoadSymbolOfLengthFromModule(sqInt functionNameIndex, sqInt functionNameLength, sqInt moduleHandle);
sqInt isInMemory(sqInt address);
sqInt classAlien(void); /* Alien FFI */
sqInt classUnsafeAlien(void); /* Alien FFI */
Modified: branches/Cog/platforms/Cross/vm/sqVirtualMachine.h
===================================================================
--- branches/Cog/platforms/Cross/vm/sqVirtualMachine.h 2015-07-09 21:08:58 UTC (rev 3401)
+++ branches/Cog/platforms/Cross/vm/sqVirtualMachine.h 2015-07-10 21:17:09 UTC (rev 3402)
@@ -202,8 +202,8 @@
sqInt (*classExternalFunction)(void);
sqInt (*classExternalLibrary)(void);
sqInt (*classExternalStructure)(void);
- sqInt (*ioLoadModuleOfLength)(sqInt modIndex, sqInt modLength);
- sqInt (*ioLoadSymbolOfLengthFromModule)(sqInt fnIndex, sqInt fnLength, sqInt handle);
+ void *(*ioLoadModuleOfLength)(sqInt modIndex, sqInt modLength);
+ void *(*ioLoadSymbolOfLengthFromModule)(sqInt fnIndex, sqInt fnLength, sqInt handle);
sqInt (*isInMemory)(sqInt address);
#endif
Modified: branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c
===================================================================
--- branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c 2015-07-09 21:08:58 UTC (rev 3401)
+++ branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c 2015-07-10 21:17:09 UTC (rev 3402)
@@ -1,9 +1,9 @@
/* Automatically generated by
- VMPluginCodeGenerator VMMaker.oscog-eem.1408 uuid: 51bc4e0f-a338-4394-8c6a-22b4b3e07c61
+ VMPluginCodeGenerator VMMaker.oscog-eem.1409 uuid: 428ff402-b7ce-44c6-a95d-5db172a1e43f
from
- ThreadedARMFFIPlugin VMMaker.oscog-eem.1408 uuid: 51bc4e0f-a338-4394-8c6a-22b4b3e07c61
+ ThreadedARMFFIPlugin VMMaker.oscog-eem.1409 uuid: 428ff402-b7ce-44c6-a95d-5db172a1e43f
*/
-static char __buildInfo[] = "ThreadedARMFFIPlugin VMMaker.oscog-eem.1408 uuid: 51bc4e0f-a338-4394-8c6a-22b4b3e07c61 " __DATE__ ;
+static char __buildInfo[] = "ThreadedARMFFIPlugin VMMaker.oscog-eem.1409 uuid: 428ff402-b7ce-44c6-a95d-5db172a1e43f " __DATE__ ;
@@ -361,7 +361,7 @@
static sqInt (*stackValue)(sqInt offset);
static sqInt (*storeIntegerofObjectwithValue)(sqInt index, sqInt oop, sqInt integer);
static sqInt (*storePointerofObjectwithValue)(sqInt index, sqInt oop, sqInt valuePointer);
-static sqInt (*tenuringIncrementalGC)(void);
+static void (*tenuringIncrementalGC)(void);
static sqInt (*trueObject)(void);
#else /* !defined(SQUEAK_BUILTIN_PLUGIN) */
extern sqInt booleanValueOf(sqInt obj);
@@ -447,16 +447,16 @@
extern sqInt stackValue(sqInt offset);
extern sqInt storeIntegerofObjectwithValue(sqInt index, sqInt oop, sqInt integer);
extern sqInt storePointerofObjectwithValue(sqInt index, sqInt oop, sqInt valuePointer);
-extern sqInt tenuringIncrementalGC(void);
+extern void tenuringIncrementalGC(void);
extern sqInt trueObject(void);
extern
#endif
struct VirtualMachine* interpreterProxy;
static const char *moduleName =
#ifdef SQUEAK_BUILTIN_PLUGIN
- "ARM32FFIPlugin VMMaker.oscog-eem.1408 (i)"
+ "ARM32FFIPlugin VMMaker.oscog-eem.1409 (i)"
#else
- "ARM32FFIPlugin VMMaker.oscog-eem.1408 (e)"
+ "ARM32FFIPlugin VMMaker.oscog-eem.1409 (e)"
#endif
;
@@ -934,7 +934,7 @@
}
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((void *) ptrAddress));
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)(((void *) ptrAddress))));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -958,7 +958,7 @@
if (oop == nilOop) {
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = null;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)null));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1066,7 +1066,7 @@
(calloutState->stringArgIndex = ((calloutState->stringArgIndex)) + 1);
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = copy;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)copy));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1108,7 +1108,7 @@
/* begin ffiPushPointer:in: */
pointer1 = ((void *) (firstIndexableField(oop)));
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer1;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer1));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1126,7 +1126,7 @@
? (oop + BaseHeaderSize) + BytesPerOop
: longAt((oop + BaseHeaderSize) + BytesPerOop)));
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer2;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer2));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1151,7 +1151,7 @@
/* begin ffiPushPointer:in: */
pointer3 = ((void *) (firstIndexableField(oop)));
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer3;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer3));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1382,7 +1382,7 @@
(calloutState->stringArgIndex = ((calloutState->stringArgIndex)) + 1);
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = copy;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)copy));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1424,7 +1424,7 @@
/* begin ffiPushPointer:in: */
pointer1 = ((void *) (firstIndexableField(oop)));
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer1;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer1));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1442,7 +1442,7 @@
? (oop + BaseHeaderSize) + BytesPerOop
: longAt((oop + BaseHeaderSize) + BytesPerOop)));
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer2;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer2));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1467,7 +1467,7 @@
/* begin ffiPushPointer:in: */
pointer3 = ((void *) (firstIndexableField(oop)));
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer3;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer3));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -1648,131 +1648,144 @@
/* Note: Order is important here since FFIFlagPointer + FFIFlagStructure is used to represent
'typedef void* VoidPointer' and VoidPointer must be returned as pointer *not* as struct. */
- return (((calloutState->ffiRetHeader)) & FFIFlagPointer
- ? (/* begin ffiReturnPointer:ofType:in: */
- /* begin ffiReturnType: */
- (specLiteral1 = (specOnStack
- ? stackValue(1)
- : literalofMethod(0, primitiveMethod()))),
- (argTypes1 = fetchPointerofObject(ExternalFunctionArgTypesIndex, specLiteral1)),
- (retType = fetchPointerofObject(0, argTypes1)),
- (retClass1 = fetchPointerofObject(1, retType)),
- (retClass1 == (nilObject())
- ? (/* begin atomicTypeOf: */
- (typeSpec1 = (calloutState->ffiRetHeader)),
- (atomicType1 = ((usqInt) (typeSpec1 & FFIAtomicTypeMask)) >> FFIAtomicTypeShift),
- ((((usqInt) atomicType1) >> 1) == (((usqInt) FFITypeSignedChar) >> 1)
- ? (/* begin ffiReturnCStringFrom: */
- (cPointer = ((usqInt) intRet)),
- (cPointer == null
- ? (methodReturnValue(nilObject()),
- goto l2)
- : 0),
- (cString = ((char *) cPointer)),
- (strLen = 0),
- while (!((cString[strLen]) == 0)) {
- strLen += 1;
- }
- (strOop = instantiateClassindexableSize(classString(), strLen)),
- (strPtr = firstIndexableField(strOop)),
- for (i = 0; i < strLen; i += 1) {
- strPtr[i] = (cString[i]);
- }
- methodReturnValue(strOop),
- goto l2)
- : 0),
-
+ if (((calloutState->ffiRetHeader)) & FFIFlagPointer) {
+ /* begin ffiReturnPointer:ofType:in: */
+ /* begin ffiReturnType: */
+ specLiteral1 = (specOnStack
+ ? stackValue(1)
+ : literalofMethod(0, primitiveMethod()));
+ argTypes1 = fetchPointerofObject(ExternalFunctionArgTypesIndex, specLiteral1);
+ retType = fetchPointerofObject(0, argTypes1);
+ retClass1 = fetchPointerofObject(1, retType);
+ if (retClass1 == (nilObject())) {
+
+ /* Create ExternalData upon return */
+
+ /* begin atomicTypeOf: */
+ typeSpec1 = (calloutState->ffiRetHeader);
+ atomicType1 = ((usqInt) (typeSpec1 & FFIAtomicTypeMask)) >> FFIAtomicTypeShift;
+ if ((((usqInt) atomicType1) >> 1) == (((usqInt) FFITypeSignedChar) >> 1)) {
+
+ /* String return */
+
+ /* begin ffiReturnCStringFrom: */
+ cPointer = ((usqInt) intRet);
+ if (cPointer == null) {
+ oop = methodReturnValue(nilObject());
+ goto l2;
+ }
+ cString = ((char *) cPointer);
+ strLen = 0;
+ while (!((cString[strLen]) == 0)) {
+ strLen += 1;
+ }
+ strOop = instantiateClassindexableSize(classString(), strLen);
+ strPtr = firstIndexableField(strOop);
+ for (i = 0; i < strLen; i += 1) {
+ strPtr[i] = (cString[i]);
+ }
+ oop = methodReturnValue(strOop);
+ goto l2;
+ }
+
#if SPURVM
- oop2 = instantiateClassindexableSize(classExternalAddress(), 4);
- ptr = firstIndexableField(oop2);
- ptr[0] = (((sqInt) intRet));
-
+ oop2 = instantiateClassindexableSize(classExternalAddress(), 4);
+ ptr = firstIndexableField(oop2);
+ ptr[0] = (((sqInt) intRet));
+
#if SPURVM
- retOop1 = instantiateClassindexableSize(classExternalData(), 0);
+ retOop1 = instantiateClassindexableSize(classExternalData(), 0);
#else /* SPURVM */
- pushRemappableOop(oop2);
- retOop1 = instantiateClassindexableSize(classExternalData(), 0);
- oop2 = popRemappableOop()
+ pushRemappableOop(oop2);
+ retOop1 = instantiateClassindexableSize(classExternalData(), 0);
+ oop2 = popRemappableOop()
#endif /* SPURVM */
;
- storePointerofObjectwithValue(0, retOop1, oop2);
+ storePointerofObjectwithValue(0, retOop1, oop2);
#else /* SPURVM */
- pushRemappableOop(retType);
- oop2 = instantiateClassindexableSize(classExternalAddress(), 4);
- ptr = firstIndexableField(oop2);
- ptr[0] = (((sqInt) intRet));
-
+ pushRemappableOop(retType);
+ oop2 = instantiateClassindexableSize(classExternalAddress(), 4);
+ ptr = firstIndexableField(oop2);
+ ptr[0] = (((sqInt) intRet));
+
#if SPURVM
- retOop1 = instantiateClassindexableSize(classExternalData(), 0);
+ retOop1 = instantiateClassindexableSize(classExternalData(), 0);
#else /* SPURVM */
- pushRemappableOop(oop2);
- retOop1 = instantiateClassindexableSize(classExternalData(), 0);
- oop2 = popRemappableOop()
+ pushRemappableOop(oop2);
+ retOop1 = instantiateClassindexableSize(classExternalData(), 0);
+ oop2 = popRemappableOop()
#endif /* SPURVM */
;
- storePointerofObjectwithValue(0, retOop1, oop2);
- retType = popRemappableOop()
+ storePointerofObjectwithValue(0, retOop1, oop2);
+ retType = popRemappableOop()
#endif /* SPURVM */
-,
- storePointerofObjectwithValue(1, retOop1, retType),
- methodReturnValue(retOop1),
- goto l2)
- : 0),
- (classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
- ? classByteArray()
- : classExternalAddress())),
-
+;
+ storePointerofObjectwithValue(1, retOop1, retType);
+ oop = methodReturnValue(retOop1);
+ goto l2;
+ }
+ classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
+ ? classByteArray()
+ : classExternalAddress());
+
#if SPURVM
- oop2 = instantiateClassindexableSize(classOop, 4);
+ oop2 = instantiateClassindexableSize(classOop, 4);
#else /* SPURVM */
- pushRemappableOop(retClass1);
- oop2 = instantiateClassindexableSize(classOop, 4);
- retClass1 = popRemappableOop()
+ pushRemappableOop(retClass1);
+ oop2 = instantiateClassindexableSize(classOop, 4);
+ retClass1 = popRemappableOop()
#endif /* SPURVM */
-,
- (ptr = firstIndexableField(oop2)),
- ptr[0] = (((sqInt) intRet)),
-
+;
+ ptr = firstIndexableField(oop2);
+ ptr[0] = (((sqInt) intRet));
+
#if SPURVM
- retOop1 = instantiateClassindexableSize(retClass1, 0);
+ retOop1 = instantiateClassindexableSize(retClass1, 0);
#else /* SPURVM */
- pushRemappableOop(oop2);
- retOop1 = instantiateClassindexableSize(retClass1, 0);
- oop2 = popRemappableOop()
+ pushRemappableOop(oop2);
+ retOop1 = instantiateClassindexableSize(retClass1, 0);
+ oop2 = popRemappableOop()
#endif /* SPURVM */
-,
- storePointerofObjectwithValue(0, retOop1, oop2),
- methodReturnValue(retOop1),
- l2: /* end ffiReturnPointer:ofType:in: */)
- : (/* begin ffiReturnStruct:ofType:in: */
- /* begin ffiReturnType: */
- (specLiteral = (specOnStack
- ? stackValue(1)
- : literalofMethod(0, primitiveMethod()))),
- (argTypes = fetchPointerofObject(ExternalFunctionArgTypesIndex, specLiteral)),
- (ffiRetType = fetchPointerofObject(0, argTypes)),
- (retClass = fetchPointerofObject(1, ffiRetType)),
- (retOop = instantiateClassindexableSize(retClass, 0)),
-
+;
+ storePointerofObjectwithValue(0, retOop1, oop2);
+ oop = methodReturnValue(retOop1);
+ l2: /* end ffiReturnPointer:ofType:in: */;
+ }
+ else {
+ /* begin ffiReturnStruct:ofType:in: */
+ /* begin ffiReturnType: */
+ specLiteral = (specOnStack
+ ? stackValue(1)
+ : literalofMethod(0, primitiveMethod()));
+ argTypes = fetchPointerofObject(ExternalFunctionArgTypesIndex, specLiteral);
+ ffiRetType = fetchPointerofObject(0, argTypes);
+ retClass = fetchPointerofObject(1, ffiRetType);
+ retOop = instantiateClassindexableSize(retClass, 0);
+
#if SPURVM
- oop1 = instantiateClassindexableSize(classByteArray(), (calloutState->structReturnSize));
+ oop1 = instantiateClassindexableSize(classByteArray(), (calloutState->structReturnSize));
#else /* SPURVM */
- pushRemappableOop(retOop);
- oop1 = instantiateClassindexableSize(classByteArray(), (calloutState->structReturnSize));
- retOop = popRemappableOop()
+ pushRemappableOop(retOop);
+ oop1 = instantiateClassindexableSize(classByteArray(), (calloutState->structReturnSize));
+ retOop = popRemappableOop()
#endif /* SPURVM */
-,
- (returnStructInRegisters((calloutState->structReturnSize))
- ? memcpy(firstIndexableField(oop1), (&intRet), (calloutState->structReturnSize))
- : memcpy(firstIndexableField(oop1), (calloutState->limit), (calloutState->structReturnSize))),
- storePointerofObjectwithValue(0, retOop, oop1),
- methodReturnValue(retOop)));
+;
+ if (returnStructInRegisters((calloutState->structReturnSize))) {
+ memcpy(firstIndexableField(oop1), (&intRet), (calloutState->structReturnSize));
+ }
+ else {
+ memcpy(firstIndexableField(oop1), (calloutState->limit), (calloutState->structReturnSize));
+ }
+ storePointerofObjectwithValue(0, retOop, oop1);
+ oop = methodReturnValue(retOop);
+ }
+ return oop;
}
if ((((usqInt) atomicType) >> 1) == (FFITypeSingleFloat > 1)) {
oop = floatObjectOf(floatRet);
@@ -1827,7 +1840,7 @@
: positive64BitIntegerFor(intRet))
: characterObjectOf(intRet & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -2015,7 +2028,7 @@
/* begin ffiPushPointer:in: */
pointer = (calloutState->limit);
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -2156,7 +2169,7 @@
/* begin ffiReturnCStringFrom: */
cPointer = ((usqInt) intRet);
if (cPointer == null) {
- methodReturnValue(nilObject());
+ oop3 = methodReturnValue(nilObject());
goto l6;
}
cString = ((char *) cPointer);
@@ -2169,7 +2182,7 @@
for (i1 = 0; i1 < strLen; i1 += 1) {
strPtr[i1] = (cString[i1]);
}
- methodReturnValue(strOop);
+ oop3 = methodReturnValue(strOop);
goto l6;
}
@@ -2209,7 +2222,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop1, retType);
- methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
goto l6;
}
classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
@@ -2238,7 +2251,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop1, oop2);
- result = methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
l6: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -2268,8 +2281,9 @@
memcpy(firstIndexableField(oop1), (calloutState->limit), (calloutState->structReturnSize));
}
storePointerofObjectwithValue(0, retOop, oop1);
- result = methodReturnValue(retOop);
+ oop3 = methodReturnValue(retOop);
}
+ result = oop3;
goto l7;
}
if ((((usqInt) atomicType) >> 1) == (FFITypeSingleFloat > 1)) {
@@ -2325,7 +2339,7 @@
: positive64BitIntegerFor(intRet))
: characterObjectOf(intRet & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -2445,7 +2459,7 @@
: positive64BitIntegerFor(retVal))
: characterObjectOf(retVal & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -2828,7 +2842,7 @@
}
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((void *) ptrAddress));
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)(((void *) ptrAddress))));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -2857,7 +2871,7 @@
ptrAddress = ((int) (firstIndexableField(oop)));
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((void *) ptrAddress));
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)(((void *) ptrAddress))));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -2885,7 +2899,7 @@
: longAt((oop + BaseHeaderSize) + BytesPerOop));
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((void *) ptrAddress));
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)(((void *) ptrAddress))));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -2905,7 +2919,7 @@
ffiPushPointerin(void *pointer, CalloutState *calloutState)
{
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -3099,7 +3113,7 @@
(calloutState->stringArgIndex = ((calloutState->stringArgIndex)) + 1);
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = copy;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)copy));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -3258,7 +3272,7 @@
}
/* begin ffiPushPointer:in: */
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((void *) ptrAddress));
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)(((void *) ptrAddress))));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -4057,7 +4071,7 @@
/* begin ffiPushPointer:in: */
pointer = (calloutState->limit);
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -4202,7 +4216,7 @@
/* begin ffiReturnCStringFrom: */
cPointer = ((usqInt) intRet);
if (cPointer == null) {
- methodReturnValue(nilObject());
+ oop3 = methodReturnValue(nilObject());
goto l12;
}
cString = ((char *) cPointer);
@@ -4215,7 +4229,7 @@
for (i2 = 0; i2 < strLen; i2 += 1) {
strPtr[i2] = (cString[i2]);
}
- methodReturnValue(strOop);
+ oop3 = methodReturnValue(strOop);
goto l12;
}
@@ -4255,7 +4269,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop1, retType);
- methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
goto l12;
}
classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
@@ -4284,7 +4298,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop1, oop2);
- result1 = methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
l12: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -4314,8 +4328,9 @@
memcpy(firstIndexableField(oop11), (calloutState->limit), (calloutState->structReturnSize));
}
storePointerofObjectwithValue(0, retOop, oop11);
- result1 = methodReturnValue(retOop);
+ oop3 = methodReturnValue(retOop);
}
+ result1 = oop3;
goto l13;
}
if ((((usqInt) atomicType) >> 1) == (FFITypeSingleFloat > 1)) {
@@ -4371,7 +4386,7 @@
: positive64BitIntegerFor(intRet))
: characterObjectOf(intRet & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -4513,7 +4528,7 @@
/* begin ffiPushPointer:in: */
pointer1 = (calloutState1->limit);
if (((calloutState1->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState1->integerRegisters))[(calloutState1->integerRegisterIndex)] = pointer1;
+ ((calloutState1->integerRegisters))[(calloutState1->integerRegisterIndex)] = (((sqInt)pointer1));
(calloutState1->integerRegisterIndex = ((calloutState1->integerRegisterIndex)) + 1);
}
else {
@@ -4658,7 +4673,7 @@
/* begin ffiReturnCStringFrom: */
cPointer1 = ((usqInt) intRet1);
if (cPointer1 == null) {
- methodReturnValue(nilObject());
+ oop4 = methodReturnValue(nilObject());
goto l15;
}
cString1 = ((char *) cPointer1);
@@ -4671,7 +4686,7 @@
for (i3 = 0; i3 < strLen1; i3 += 1) {
strPtr1[i3] = (cString1[i3]);
}
- methodReturnValue(strOop1);
+ oop4 = methodReturnValue(strOop1);
goto l15;
}
@@ -4711,7 +4726,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop11, retType1);
- methodReturnValue(retOop11);
+ oop4 = methodReturnValue(retOop11);
goto l15;
}
classOop1 = (((calloutState1->ffiRetHeader)) & FFIFlagStructure
@@ -4740,7 +4755,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop11, oop21);
- result2 = methodReturnValue(retOop11);
+ oop4 = methodReturnValue(retOop11);
l15: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -4770,8 +4785,9 @@
memcpy(firstIndexableField(oop12), (calloutState1->limit), (calloutState1->structReturnSize));
}
storePointerofObjectwithValue(0, retOop2, oop12);
- result2 = methodReturnValue(retOop2);
+ oop4 = methodReturnValue(retOop2);
}
+ result2 = oop4;
goto l16;
}
if ((((usqInt) atomicType2) >> 1) == (FFITypeSingleFloat > 1)) {
@@ -4827,7 +4843,7 @@
: positive64BitIntegerFor(intRet1))
: characterObjectOf(intRet1 & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -5109,7 +5125,7 @@
/* begin ffiPushPointer:in: */
pointer = (calloutState->limit);
if (((calloutState->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = pointer;
+ ((calloutState->integerRegisters))[(calloutState->integerRegisterIndex)] = (((sqInt)pointer));
(calloutState->integerRegisterIndex = ((calloutState->integerRegisterIndex)) + 1);
}
else {
@@ -5254,7 +5270,7 @@
/* begin ffiReturnCStringFrom: */
cPointer = ((usqInt) intRet);
if (cPointer == null) {
- methodReturnValue(nilObject());
+ oop3 = methodReturnValue(nilObject());
goto l12;
}
cString = ((char *) cPointer);
@@ -5267,7 +5283,7 @@
for (i2 = 0; i2 < strLen; i2 += 1) {
strPtr[i2] = (cString[i2]);
}
- methodReturnValue(strOop);
+ oop3 = methodReturnValue(strOop);
goto l12;
}
@@ -5307,7 +5323,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop1, retType);
- methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
goto l12;
}
classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
@@ -5336,7 +5352,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop1, oop2);
- result1 = methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
l12: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -5366,8 +5382,9 @@
memcpy(firstIndexableField(oop11), (calloutState->limit), (calloutState->structReturnSize));
}
storePointerofObjectwithValue(0, retOop, oop11);
- result1 = methodReturnValue(retOop);
+ oop3 = methodReturnValue(retOop);
}
+ result1 = oop3;
goto l13;
}
if ((((usqInt) atomicType) >> 1) == (FFITypeSingleFloat > 1)) {
@@ -5423,7 +5440,7 @@
: positive64BitIntegerFor(intRet))
: characterObjectOf(intRet & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -5571,7 +5588,7 @@
/* begin ffiPushPointer:in: */
pointer1 = (calloutState1->limit);
if (((calloutState1->integerRegisterIndex)) < NumIntRegArgs) {
- ((calloutState1->integerRegisters))[(calloutState1->integerRegisterIndex)] = pointer1;
+ ((calloutState1->integerRegisters))[(calloutState1->integerRegisterIndex)] = (((sqInt)pointer1));
(calloutState1->integerRegisterIndex = ((calloutState1->integerRegisterIndex)) + 1);
}
else {
@@ -5716,7 +5733,7 @@
/* begin ffiReturnCStringFrom: */
cPointer1 = ((usqInt) intRet1);
if (cPointer1 == null) {
- methodReturnValue(nilObject());
+ oop4 = methodReturnValue(nilObject());
goto l15;
}
cString1 = ((char *) cPointer1);
@@ -5729,7 +5746,7 @@
for (i3 = 0; i3 < strLen1; i3 += 1) {
strPtr1[i3] = (cString1[i3]);
}
- methodReturnValue(strOop1);
+ oop4 = methodReturnValue(strOop1);
goto l15;
}
@@ -5769,7 +5786,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop11, retType1);
- methodReturnValue(retOop11);
+ oop4 = methodReturnValue(retOop11);
goto l15;
}
classOop1 = (((calloutState1->ffiRetHeader)) & FFIFlagStructure
@@ -5798,7 +5815,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop11, oop21);
- result2 = methodReturnValue(retOop11);
+ oop4 = methodReturnValue(retOop11);
l15: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -5828,8 +5845,9 @@
memcpy(firstIndexableField(oop12), (calloutState1->limit), (calloutState1->structReturnSize));
}
storePointerofObjectwithValue(0, retOop2, oop12);
- result2 = methodReturnValue(retOop2);
+ oop4 = methodReturnValue(retOop2);
}
+ result2 = oop4;
goto l16;
}
if ((((usqInt) atomicType2) >> 1) == (FFITypeSingleFloat > 1)) {
@@ -5885,7 +5903,7 @@
: positive64BitIntegerFor(intRet1))
: characterObjectOf(intRet1 & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -5998,7 +6016,7 @@
oop = instantiateClassindexableSize(classExternalAddress(), 4);
ptr = firstIndexableField(oop);
ptr[0] = addr;
- popthenPush(2, oop);
+ return popthenPush(2, oop);
}
@@ -6060,7 +6078,7 @@
}
((int*)addr)[0] = ((int*)(&floatValue))[0];
((int*)addr)[1] = ((int*)(&floatValue))[1];
- popthenPush(3, floatOop);
+ return popthenPush(3, floatOop);
}
@@ -6120,7 +6138,7 @@
return 0;
}
((int*)addr)[0] = ((int*)(&floatValue))[0];
- popthenPush(3, floatOop);
+ return popthenPush(3, floatOop);
}
@@ -6232,7 +6250,7 @@
? signed32BitIntegerFor(value)
: positive32BitIntegerFor(value));
}
- popthenPush(4, value);
+ return popthenPush(4, value);
}
@@ -6303,7 +6321,7 @@
else {
longAtput(addr, value);
}
- popthenPush(5, valueOop);
+ return popthenPush(5, valueOop);
}
Modified: branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c
===================================================================
--- branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c 2015-07-09 21:08:58 UTC (rev 3401)
+++ branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c 2015-07-10 21:17:09 UTC (rev 3402)
@@ -1,9 +1,9 @@
/* Automatically generated by
- VMPluginCodeGenerator VMMaker.oscog-eem.1408 uuid: 51bc4e0f-a338-4394-8c6a-22b4b3e07c61
+ VMPluginCodeGenerator VMMaker.oscog-eem.1409 uuid: 428ff402-b7ce-44c6-a95d-5db172a1e43f
from
- ThreadedIA32FFIPlugin VMMaker.oscog-eem.1408 uuid: 51bc4e0f-a338-4394-8c6a-22b4b3e07c61
+ ThreadedIA32FFIPlugin VMMaker.oscog-eem.1409 uuid: 428ff402-b7ce-44c6-a95d-5db172a1e43f
*/
-static char __buildInfo[] = "ThreadedIA32FFIPlugin VMMaker.oscog-eem.1408 uuid: 51bc4e0f-a338-4394-8c6a-22b4b3e07c61 " __DATE__ ;
+static char __buildInfo[] = "ThreadedIA32FFIPlugin VMMaker.oscog-eem.1409 uuid: 428ff402-b7ce-44c6-a95d-5db172a1e43f " __DATE__ ;
@@ -352,7 +352,7 @@
static sqInt (*stackValue)(sqInt offset);
static sqInt (*storeIntegerofObjectwithValue)(sqInt index, sqInt oop, sqInt integer);
static sqInt (*storePointerofObjectwithValue)(sqInt index, sqInt oop, sqInt valuePointer);
-static sqInt (*tenuringIncrementalGC)(void);
+static void (*tenuringIncrementalGC)(void);
static sqInt (*trueObject)(void);
#else /* !defined(SQUEAK_BUILTIN_PLUGIN) */
extern sqInt booleanValueOf(sqInt obj);
@@ -438,16 +438,16 @@
extern sqInt stackValue(sqInt offset);
extern sqInt storeIntegerofObjectwithValue(sqInt index, sqInt oop, sqInt integer);
extern sqInt storePointerofObjectwithValue(sqInt index, sqInt oop, sqInt valuePointer);
-extern sqInt tenuringIncrementalGC(void);
+extern void tenuringIncrementalGC(void);
extern sqInt trueObject(void);
extern
#endif
struct VirtualMachine* interpreterProxy;
static const char *moduleName =
#ifdef SQUEAK_BUILTIN_PLUGIN
- "IA32FFIPlugin VMMaker.oscog-eem.1408 (i)"
+ "IA32FFIPlugin VMMaker.oscog-eem.1409 (i)"
#else
- "IA32FFIPlugin VMMaker.oscog-eem.1408 (e)"
+ "IA32FFIPlugin VMMaker.oscog-eem.1409 (e)"
#endif
;
@@ -1460,131 +1460,144 @@
/* Note: Order is important here since FFIFlagPointer + FFIFlagStructure is used to represent
'typedef void* VoidPointer' and VoidPointer must be returned as pointer *not* as struct. */
- return (((calloutState->ffiRetHeader)) & FFIFlagPointer
- ? (/* begin ffiReturnPointer:ofType:in: */
- /* begin ffiReturnType: */
- (specLiteral1 = (specOnStack
- ? stackValue(1)
- : literalofMethod(0, primitiveMethod()))),
- (argTypes1 = fetchPointerofObject(ExternalFunctionArgTypesIndex, specLiteral1)),
- (retType = fetchPointerofObject(0, argTypes1)),
- (retClass1 = fetchPointerofObject(1, retType)),
- (retClass1 == (nilObject())
- ? (/* begin atomicTypeOf: */
- (typeSpec1 = (calloutState->ffiRetHeader)),
- (atomicType1 = ((usqInt) (typeSpec1 & FFIAtomicTypeMask)) >> FFIAtomicTypeShift),
- ((((usqInt) atomicType1) >> 1) == (((usqInt) FFITypeSignedChar) >> 1)
- ? (/* begin ffiReturnCStringFrom: */
- (cPointer = ((usqInt) intRet)),
- (cPointer == null
- ? (methodReturnValue(nilObject()),
- goto l2)
- : 0),
- (cString = ((char *) cPointer)),
- (strLen = 0),
- while (!((cString[strLen]) == 0)) {
- strLen += 1;
- }
- (strOop = instantiateClassindexableSize(classString(), strLen)),
- (strPtr = firstIndexableField(strOop)),
- for (i = 0; i < strLen; i += 1) {
- strPtr[i] = (cString[i]);
- }
- methodReturnValue(strOop),
- goto l2)
- : 0),
-
+ if (((calloutState->ffiRetHeader)) & FFIFlagPointer) {
+ /* begin ffiReturnPointer:ofType:in: */
+ /* begin ffiReturnType: */
+ specLiteral1 = (specOnStack
+ ? stackValue(1)
+ : literalofMethod(0, primitiveMethod()));
+ argTypes1 = fetchPointerofObject(ExternalFunctionArgTypesIndex, specLiteral1);
+ retType = fetchPointerofObject(0, argTypes1);
+ retClass1 = fetchPointerofObject(1, retType);
+ if (retClass1 == (nilObject())) {
+
+ /* Create ExternalData upon return */
+
+ /* begin atomicTypeOf: */
+ typeSpec1 = (calloutState->ffiRetHeader);
+ atomicType1 = ((usqInt) (typeSpec1 & FFIAtomicTypeMask)) >> FFIAtomicTypeShift;
+ if ((((usqInt) atomicType1) >> 1) == (((usqInt) FFITypeSignedChar) >> 1)) {
+
+ /* String return */
+
+ /* begin ffiReturnCStringFrom: */
+ cPointer = ((usqInt) intRet);
+ if (cPointer == null) {
+ oop = methodReturnValue(nilObject());
+ goto l2;
+ }
+ cString = ((char *) cPointer);
+ strLen = 0;
+ while (!((cString[strLen]) == 0)) {
+ strLen += 1;
+ }
+ strOop = instantiateClassindexableSize(classString(), strLen);
+ strPtr = firstIndexableField(strOop);
+ for (i = 0; i < strLen; i += 1) {
+ strPtr[i] = (cString[i]);
+ }
+ oop = methodReturnValue(strOop);
+ goto l2;
+ }
+
#if SPURVM
- oop2 = instantiateClassindexableSize(classExternalAddress(), 4);
- ptr = firstIndexableField(oop2);
- ptr[0] = (((sqInt) intRet));
-
+ oop2 = instantiateClassindexableSize(classExternalAddress(), 4);
+ ptr = firstIndexableField(oop2);
+ ptr[0] = (((sqInt) intRet));
+
#if SPURVM
- retOop1 = instantiateClassindexableSize(classExternalData(), 0);
+ retOop1 = instantiateClassindexableSize(classExternalData(), 0);
#else /* SPURVM */
- pushRemappableOop(oop2);
- retOop1 = instantiateClassindexableSize(classExternalData(), 0);
- oop2 = popRemappableOop()
+ pushRemappableOop(oop2);
+ retOop1 = instantiateClassindexableSize(classExternalData(), 0);
+ oop2 = popRemappableOop()
#endif /* SPURVM */
;
- storePointerofObjectwithValue(0, retOop1, oop2);
+ storePointerofObjectwithValue(0, retOop1, oop2);
#else /* SPURVM */
- pushRemappableOop(retType);
- oop2 = instantiateClassindexableSize(classExternalAddress(), 4);
- ptr = firstIndexableField(oop2);
- ptr[0] = (((sqInt) intRet));
-
+ pushRemappableOop(retType);
+ oop2 = instantiateClassindexableSize(classExternalAddress(), 4);
+ ptr = firstIndexableField(oop2);
+ ptr[0] = (((sqInt) intRet));
+
#if SPURVM
- retOop1 = instantiateClassindexableSize(classExternalData(), 0);
+ retOop1 = instantiateClassindexableSize(classExternalData(), 0);
#else /* SPURVM */
- pushRemappableOop(oop2);
- retOop1 = instantiateClassindexableSize(classExternalData(), 0);
- oop2 = popRemappableOop()
+ pushRemappableOop(oop2);
+ retOop1 = instantiateClassindexableSize(classExternalData(), 0);
+ oop2 = popRemappableOop()
#endif /* SPURVM */
;
- storePointerofObjectwithValue(0, retOop1, oop2);
- retType = popRemappableOop()
+ storePointerofObjectwithValue(0, retOop1, oop2);
+ retType = popRemappableOop()
#endif /* SPURVM */
-,
- storePointerofObjectwithValue(1, retOop1, retType),
- methodReturnValue(retOop1),
- goto l2)
- : 0),
- (classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
- ? classByteArray()
- : classExternalAddress())),
-
+;
+ storePointerofObjectwithValue(1, retOop1, retType);
+ oop = methodReturnValue(retOop1);
+ goto l2;
+ }
+ classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
+ ? classByteArray()
+ : classExternalAddress());
+
#if SPURVM
- oop2 = instantiateClassindexableSize(classOop, 4);
+ oop2 = instantiateClassindexableSize(classOop, 4);
#else /* SPURVM */
- pushRemappableOop(retClass1);
- oop2 = instantiateClassindexableSize(classOop, 4);
- retClass1 = popRemappableOop()
+ pushRemappableOop(retClass1);
+ oop2 = instantiateClassindexableSize(classOop, 4);
+ retClass1 = popRemappableOop()
#endif /* SPURVM */
-,
- (ptr = firstIndexableField(oop2)),
- ptr[0] = (((sqInt) intRet)),
-
+;
+ ptr = firstIndexableField(oop2);
+ ptr[0] = (((sqInt) intRet));
+
#if SPURVM
- retOop1 = instantiateClassindexableSize(retClass1, 0);
+ retOop1 = instantiateClassindexableSize(retClass1, 0);
#else /* SPURVM */
- pushRemappableOop(oop2);
- retOop1 = instantiateClassindexableSize(retClass1, 0);
- oop2 = popRemappableOop()
+ pushRemappableOop(oop2);
+ retOop1 = instantiateClassindexableSize(retClass1, 0);
+ oop2 = popRemappableOop()
#endif /* SPURVM */
-,
- storePointerofObjectwithValue(0, retOop1, oop2),
- methodReturnValue(retOop1),
- l2: /* end ffiReturnPointer:ofType:in: */)
- : (/* begin ffiReturnStruct:ofType:in: */
- /* begin ffiReturnType: */
- (specLiteral = (specOnStack
- ? stackValue(1)
- : literalofMethod(0, primitiveMethod()))),
- (argTypes = fetchPointerofObject(ExternalFunctionArgTypesIndex, specLiteral)),
- (ffiRetType = fetchPointerofObject(0, argTypes)),
- (retClass = fetchPointerofObject(1, ffiRetType)),
- (retOop = instantiateClassindexableSize(retClass, 0)),
-
+;
+ storePointerofObjectwithValue(0, retOop1, oop2);
+ oop = methodReturnValue(retOop1);
+ l2: /* end ffiReturnPointer:ofType:in: */;
+ }
+ else {
+ /* begin ffiReturnStruct:ofType:in: */
+ /* begin ffiReturnType: */
+ specLiteral = (specOnStack
+ ? stackValue(1)
+ : literalofMethod(0, primitiveMethod()));
+ argTypes = fetchPointerofObject(ExternalFunctionArgTypesIndex, specLiteral);
+ ffiRetType = fetchPointerofObject(0, argTypes);
+ retClass = fetchPointerofObject(1, ffiRetType);
+ retOop = instantiateClassindexableSize(retClass, 0);
+
#if SPURVM
- oop1 = instantiateClassindexableSize(classByteArray(), (calloutState->structReturnSize));
+ oop1 = instantiateClassindexableSize(classByteArray(), (calloutState->structReturnSize));
#else /* SPURVM */
- pushRemappableOop(retOop);
- oop1 = instantiateClassindexableSize(classByteArray(), (calloutState->structReturnSize));
- retOop = popRemappableOop()
+ pushRemappableOop(retOop);
+ oop1 = instantiateClassindexableSize(classByteArray(), (calloutState->structReturnSize));
+ retOop = popRemappableOop()
#endif /* SPURVM */
-,
- (returnStructInRegisters((calloutState->structReturnSize))
- ? memcpy(firstIndexableField(oop1), (&intRet), (calloutState->structReturnSize))
- : memcpy(firstIndexableField(oop1), (calloutState->limit), (calloutState->structReturnSize))),
- storePointerofObjectwithValue(0, retOop, oop1),
- methodReturnValue(retOop)));
+;
+ if (returnStructInRegisters((calloutState->structReturnSize))) {
+ memcpy(firstIndexableField(oop1), (&intRet), (calloutState->structReturnSize));
+ }
+ else {
+ memcpy(firstIndexableField(oop1), (calloutState->limit), (calloutState->structReturnSize));
+ }
+ storePointerofObjectwithValue(0, retOop, oop1);
+ oop = methodReturnValue(retOop);
+ }
+ return oop;
}
if ((((usqInt) atomicType) >> 1) == (FFITypeSingleFloat > 1)) {
oop = floatObjectOf(floatRet);
@@ -1639,7 +1652,7 @@
: positive64BitIntegerFor(intRet))
: characterObjectOf(intRet & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -1949,7 +1962,7 @@
/* begin ffiReturnCStringFrom: */
cPointer = ((usqInt) intRet);
if (cPointer == null) {
- methodReturnValue(nilObject());
+ oop3 = methodReturnValue(nilObject());
goto l6;
}
cString = ((char *) cPointer);
@@ -1962,7 +1975,7 @@
for (i1 = 0; i1 < strLen; i1 += 1) {
strPtr[i1] = (cString[i1]);
}
- methodReturnValue(strOop);
+ oop3 = methodReturnValue(strOop);
goto l6;
}
@@ -2002,7 +2015,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop1, retType);
- methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
goto l6;
}
classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
@@ -2031,7 +2044,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop1, oop2);
- result = methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
l6: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -2061,8 +2074,9 @@
memcpy(firstIndexableField(oop1), (calloutState->limit), (calloutState->structReturnSize));
}
storePointerofObjectwithValue(0, retOop, oop1);
- result = methodReturnValue(retOop);
+ oop3 = methodReturnValue(retOop);
}
+ result = oop3;
goto l7;
}
if ((((usqInt) atomicType) >> 1) == (FFITypeSingleFloat > 1)) {
@@ -2118,7 +2132,7 @@
: positive64BitIntegerFor(intRet))
: characterObjectOf(intRet & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -2238,7 +2252,7 @@
: positive64BitIntegerFor(retVal))
: characterObjectOf(retVal & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -3742,7 +3756,7 @@
/* begin ffiReturnCStringFrom: */
cPointer = ((usqInt) intRet);
if (cPointer == null) {
- methodReturnValue(nilObject());
+ oop3 = methodReturnValue(nilObject());
goto l12;
}
cString = ((char *) cPointer);
@@ -3755,7 +3769,7 @@
for (i2 = 0; i2 < strLen; i2 += 1) {
strPtr[i2] = (cString[i2]);
}
- methodReturnValue(strOop);
+ oop3 = methodReturnValue(strOop);
goto l12;
}
@@ -3795,7 +3809,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop1, retType);
- methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
goto l12;
}
classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
@@ -3824,7 +3838,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop1, oop2);
- result1 = methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
l12: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -3854,8 +3868,9 @@
memcpy(firstIndexableField(oop11), (calloutState->limit), (calloutState->structReturnSize));
}
storePointerofObjectwithValue(0, retOop, oop11);
- result1 = methodReturnValue(retOop);
+ oop3 = methodReturnValue(retOop);
}
+ result1 = oop3;
goto l13;
}
if ((((usqInt) atomicType) >> 1) == (FFITypeSingleFloat > 1)) {
@@ -3911,7 +3926,7 @@
: positive64BitIntegerFor(intRet))
: characterObjectOf(intRet & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -4180,7 +4195,7 @@
/* begin ffiReturnCStringFrom: */
cPointer1 = ((usqInt) intRet1);
if (cPointer1 == null) {
- methodReturnValue(nilObject());
+ oop4 = methodReturnValue(nilObject());
goto l15;
}
cString1 = ((char *) cPointer1);
@@ -4193,7 +4208,7 @@
for (i3 = 0; i3 < strLen1; i3 += 1) {
strPtr1[i3] = (cString1[i3]);
}
- methodReturnValue(strOop1);
+ oop4 = methodReturnValue(strOop1);
goto l15;
}
@@ -4233,7 +4248,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop11, retType1);
- methodReturnValue(retOop11);
+ oop4 = methodReturnValue(retOop11);
goto l15;
}
classOop1 = (((calloutState1->ffiRetHeader)) & FFIFlagStructure
@@ -4262,7 +4277,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop11, oop21);
- result2 = methodReturnValue(retOop11);
+ oop4 = methodReturnValue(retOop11);
l15: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -4292,8 +4307,9 @@
memcpy(firstIndexableField(oop12), (calloutState1->limit), (calloutState1->structReturnSize));
}
storePointerofObjectwithValue(0, retOop2, oop12);
- result2 = methodReturnValue(retOop2);
+ oop4 = methodReturnValue(retOop2);
}
+ result2 = oop4;
goto l16;
}
if ((((usqInt) atomicType2) >> 1) == (FFITypeSingleFloat > 1)) {
@@ -4349,7 +4365,7 @@
: positive64BitIntegerFor(intRet1))
: characterObjectOf(intRet1 & (
#if SPURVM
- 0xFFFFFFFFUL
+ 0xFFFFFFFFULL
#else /* SPURVM */
0xFF
#endif /* SPURVM */
@@ -4756,7 +4772,7 @@
/* begin ffiReturnCStringFrom: */
cPointer = ((usqInt) intRet);
if (cPointer == null) {
- methodReturnValue(nilObject());
+ oop3 = methodReturnValue(nilObject());
goto l12;
}
cString = ((char *) cPointer);
@@ -4769,7 +4785,7 @@
for (i2 = 0; i2 < strLen; i2 += 1) {
strPtr[i2] = (cString[i2]);
}
- methodReturnValue(strOop);
+ oop3 = methodReturnValue(strOop);
goto l12;
}
@@ -4809,7 +4825,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(1, retOop1, retType);
- methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
goto l12;
}
classOop = (((calloutState->ffiRetHeader)) & FFIFlagStructure
@@ -4838,7 +4854,7 @@
#endif /* SPURVM */
;
storePointerofObjectwithValue(0, retOop1, oop2);
- result1 = methodReturnValue(retOop1);
+ oop3 = methodReturnValue(retOop1);
l12: /* end ffiReturnPointer:ofType:in: */;
}
else {
@@ -4868,8 +4884,9 @@
@@ Diff output truncated at 50000 characters. @@