[Vm-dev] VM Maker: VMMaker.oscog-eem.2498.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Dec 24 22:03:24 UTC 2018
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2498.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2498
Author: eem
Time: 24 December 2018, 2:03:10.161656 pm
UUID: f4233232-2c6b-452e-bdab-b814d48cc4a8
Ancestors: VMMaker.oscog-akg.2497
Integrate Ken Dickey's addition of the ThreadedARM64FFIPlugin. Thanks Ken!
=============== Diff against VMMaker.oscog-akg.2497 ===============
Item was added:
+ ThreadedARMFFIPlugin subclass: #ThreadedARM64FFIPlugin
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-Plugins-FFI'!
+
+ !ThreadedARM64FFIPlugin commentStamp: 'KenD 12/17/2018 14:38' prior: 0!
+ A ThreadedARM64FFIPlugin is for the 64-bit ARM ABI. It typically has 8 integer registers
+
+ Instance Variables
+ !
Item was added:
+ ----- Method: ThreadedARM64FFIPlugin class>>identifyingPredefinedMacros (in category 'translation') -----
+ identifyingPredefinedMacros
+ ^#('__ARM_ARCH_V8__' '__aarch64__' '__arm64__' 'ARM64')!
Item was added:
+ ----- Method: ThreadedARM64FFIPlugin class>>initialize (in category 'class initialization') -----
+ initialize
+ super initialize.
+ NumIntRegArgs := 8.
+ NumFloatRegArgs := 16!
Item was added:
+ ----- Method: ThreadedARM64FFIPlugin class>>moduleName (in category 'translation') -----
+ moduleName
+ ^'ARM64FFIPlugin'!
Item was added:
+ ----- Method: ThreadedARM64FFIPlugin>>wordSize (in category 'simulation support') -----
+ wordSize
+
+ ^ 8 "arm64/aarch64"!
Item was changed:
----- Method: ThreadedARMFFIPlugin class>>identifyingPredefinedMacros (in category 'translation') -----
identifyingPredefinedMacros
+ ^#('__ARM_ARCH__' " '__arm__' " '__arm32__' 'ARM32')!
- ^#('__ARM_ARCH__' '__arm__' '__arm32__' 'ARM32')!
Item was changed:
----- Method: ThreadedARMFFIPlugin class>>initialize (in category 'class initialization') -----
initialize
+ super initialize.
NumIntRegArgs := 4.
NumFloatRegArgs := 16!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushPointer:in: (in category 'marshalling') -----
ffiPushPointer: pointer in: calloutState
<var: #pointer type: #'void *'>
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: pointer asInteger.
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: pointer.
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushSignedByte:in: (in category 'marshalling') -----
ffiPushSignedByte: value in: calloutState
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: (self cCoerceSimple: value to: #'signed char').
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: (self cCoerceSimple: value to: #'signed char').
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushSignedChar:in: (in category 'marshalling') -----
ffiPushSignedChar: value in: calloutState
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: (self cCoerceSimple: value to: #'signed char').
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: (self cCoerceSimple: value to: #'signed char').
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushSignedInt:in: (in category 'marshalling') -----
ffiPushSignedInt: value in: calloutState
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: value.
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: value.
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0
!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushSignedLongLong:in: (in category 'marshalling') -----
ffiPushSignedLongLong: value in: calloutState
<var: #value type: #sqLong>
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < (NumIntRegArgs - 1)
ifTrue:
[calloutState integerRegisterIndex: (calloutState integerRegisterIndex + 1 bitClear: 1).
calloutState integerRegisters at: calloutState integerRegisterIndex put: (self cCoerceSimple: value to: #usqInt).
calloutState integerRegisters at: calloutState integerRegisterIndex + 1 put: (self cCoerceSimple: value >> 32 to: #usqInt).
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 2]
ifFalse:
[calloutState currentArg + 8 > calloutState limit ifTrue: [^FFIErrorCallFrameTooBig].
calloutState integerRegisterIndex: NumIntRegArgs.
interpreterProxy
longAt: calloutState currentArg put: (self cCoerceSimple: value to: #usqInt);
+ longAt: calloutState currentArg + self wordSize put: (self cCoerceSimple: value >> 32 to: #usqInt).
- longAt: calloutState currentArg + 4 put: (self cCoerceSimple: value >> 32 to: #usqInt).
calloutState currentArg: calloutState currentArg + 8].
^0!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushSignedShort:in: (in category 'marshalling') -----
ffiPushSignedShort: value in: calloutState
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: (self cCoerceSimple: value to: #'signed short').
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: (self cCoerceSimple: value to: #'signed short').
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushSingleFloat:in: (in category 'marshalling') -----
ffiPushSingleFloat: value in: calloutState
<var: #value type: #float>
<var: #calloutState type: #'CalloutState *'>
<inline: #always>
calloutState floatRegisterIndex < NumFloatRegArgs
ifTrue:
[calloutState backfillFloatRegisterIndex > 0
ifTrue:
[calloutState floatRegisters at: calloutState backfillFloatRegisterIndex put: value.
calloutState backfillFloatRegisterIndex: 0]
ifFalse:
[calloutState floatRegisters at: calloutState floatRegisterIndex put: value.
calloutState floatRegisterIndex: calloutState floatRegisterIndex + 1]]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy storeSingleFloatAtPointer: calloutState currentArg from: value.
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushUnsignedByte:in: (in category 'marshalling') -----
ffiPushUnsignedByte: value in: calloutState
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: (self cCoerceSimple: value to: #'unsigned char').
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: (self cCoerceSimple: value to: #'unsigned char').
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0
!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushUnsignedChar:in: (in category 'marshalling') -----
ffiPushUnsignedChar: value in: calloutState
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: (self cCoerceSimple: value to: #'unsigned char').
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: (self cCoerceSimple: value to: #'unsigned char').
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushUnsignedInt:in: (in category 'marshalling') -----
ffiPushUnsignedInt: value in: calloutState
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: value.
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: value.
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0
!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushUnsignedLongLong:in: (in category 'marshalling') -----
ffiPushUnsignedLongLong: value in: calloutState
<var: #value type: #usqLong>
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < (NumIntRegArgs - 1)
ifTrue:
[calloutState integerRegisterIndex: (calloutState integerRegisterIndex + 1 bitClear: 1).
calloutState integerRegisters at: calloutState integerRegisterIndex put: (self cCoerceSimple: value to: #usqInt).
calloutState integerRegisters at: calloutState integerRegisterIndex + 1 put: (self cCoerceSimple: value >> 32 to: #usqInt).
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 2]
ifFalse:
[calloutState currentArg + 8 > calloutState limit ifTrue: [^FFIErrorCallFrameTooBig].
calloutState integerRegisterIndex: NumIntRegArgs.
interpreterProxy
longAt: calloutState currentArg put: (self cCoerceSimple: value to: #usqInt);
+ longAt: calloutState currentArg + self wordSize put: (self cCoerceSimple: value >> 32 to: #usqInt).
- longAt: calloutState currentArg + 4 put: (self cCoerceSimple: value >> 32 to: #usqInt).
calloutState currentArg: calloutState currentArg + 8].
^0
!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>ffiPushUnsignedShort:in: (in category 'marshalling') -----
ffiPushUnsignedShort: value in: calloutState
<var: #calloutState type: #'CalloutState *'>
<inline: true>
calloutState integerRegisterIndex < NumIntRegArgs
ifTrue:
[calloutState integerRegisters at: calloutState integerRegisterIndex put: (self cCoerceSimple: value to: #'unsigned short').
calloutState integerRegisterIndex: calloutState integerRegisterIndex + 1]
ifFalse:
+ [calloutState currentArg + self wordSize > calloutState limit ifTrue:
- [calloutState currentArg + 4 > calloutState limit ifTrue:
[^FFIErrorCallFrameTooBig].
interpreterProxy longAt: calloutState currentArg put: (self cCoerceSimple: value to: #'unsigned short').
+ calloutState currentArg: calloutState currentArg + self wordSize].
- calloutState currentArg: calloutState currentArg + 4].
^0!
Item was changed:
----- Method: ThreadedARMFFIPlugin>>returnStructInRegisters: (in category 'marshalling') -----
returnStructInRegisters: returnStructSize
"Answer if a struct result of a given size is returned in memory or not."
+ ^returnStructSize <= self wordSize!
- ^returnStructSize <= 4!
Item was added:
+ ----- Method: ThreadedARMFFIPlugin>>wordSize (in category 'simulation support') -----
+ wordSize
+
+ ^ 4 "arm32"!
More information about the Vm-dev
mailing list