New Cog VMs available

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

New Cog VMs available

Eliot Miranda-2
 
... at http://www.mirandabanda.org/files/Cog/VM/VM.r3311/.

These should fix the regression introduced by the map changes in 3308.  They certainly fix the two crashes I've looked at, one an update of a squeak trunk image and the other the startup of recent Newspeak images.  Apologies for the inconvenience.


CogVM binaries as per VMMaker.oscog-eem.1204/r3311

Cogits:

Fix regression in map machinery due to adding AnnotationExtension scheme.
findMapLocationForMcpc:inMethod: must not be confused by IsDisplacementX2N
bytes.  This is likely the cause of the recent crashes with r3308 and earlier.

Introduce marryFrameCopiesTemps and use it to
not copy temps in Spur context creation trampolines.

Change initial usage counts to keep more recently jitted methods around for
longer, and do *not* throw away PICs in freeOlderMethodsForCompaction, so that
there's a better chance of Sista finding send and branch data for the tripping
method.

extendedPushBytecode /does/ need a frame.

Don't save the header in a scratch register unless
it is useful to do so in the Spur at:[put:] primitives.

Fix slip in genGetNumBytesOf:into:.  And notice that
genGetFormatOf:into:baseHeaderIntoScratch: et al can use byte access
to get at format, as intended in the Spur header design.

Fix unlinking dynamic super sends.

Reduce false positives in access control violation reporting by marking the
super send we actually use as privileged. Remove unused Newspeak bytecodes.

Internal:

Fix code generation bug surfaced by inline primitives.  On x86 movb N(%reg),%rl
can only store into al, bl, cl & dl, whereas movzbl can store into any reg.  On
ARM move byte also zero-extends.  So change definition of MoveMbrR to always
zero-extend, use movzbl on x86 and remove all the MoveCq: 0 R: used to zero the
bits of the target of a MoveMb:r:R:.  And now that we have
genGetNumSlotsOf:into:, use it.

Fix a slip in genTrinaryInlinePrimitive:, meet constraint that the target must
be in ReceiverResultReg, and do a better job of register allocation there-in.

Do dead code elimination for the branch following an inlined comparison (this
is done in genBinaryInlineComparison:opFalse:destReg: copying the scheme in
genSpecialSelectorEqualsEquals).

Do register allocation in the right place in genUnaryInlinePrimitive:.

Fix overflow slot access in genGetNumSlotsOf:into: et al.

Fix several slips in inline primitive generation: Object>>at:put: needs to
include a store check.  Some register allocation code was wrong.  Some results
needed converting to SmallIntegers and recording results as pushed on the sim
stack.

Change callPrimitiveBytecode to genCallPrimitiveBytecode in the Cogit.
remove the misnomer genConvertIntegerToSmallIntegerInScratchReg:

Type of AbstractInstruction opcode must be unsigned now that we have
more than 128 opcodes (XCHGRR pushed things over the top).

Lay the groundwork for 32-bit intra-zone jumps and calls on ARM by introducing
CallFull and JumpFull (and rewrites thereof) that are expected to span the full
address space, leaving Call/JumpLong to span merely the 16mb code zone.  On x86
CallFull and JumpFull simply default to Call/JumpLong.

Replace bytecode trapIfNotInstanceOf by jumpIfNotInstanceOfOrPop.

Rewrote the JIT logic for traps to be able to write trap trampolines calls at
the end of the cogMethod.

Refactor the slot store and store check machinery to take an inFrame: argument
and hence deal with the store check in genInnerPrimitiveAtPut: on ARM.

Fix limitation with MoveRXbrR; can only do movb from
%al through %dl, so swap with %eax around movb.

Fix mistake with genGetNumBytesOf:into: by refactoring
genGetFormatOf:into:baseHeaderIntoScratch: into
genGetBits:ofFormatByteOf:into:baseHeaderIntoScratch:
and hence fetching and subtracting only odd bits of format.

Correct the in-line primitive SmallInteger comparisons; CmpXR is confusing ;-)

Fix var op var unsafe byte at:.  Result must be converted to SmallInteger.

Correct the generated Slang for the new register allocation code by adding a
read-before-written pass to C generation that initializes variables
read-before-written with 0 (the C equivalent of nil).

fix a bug where sometimes register allocation was marking ReceiverResultReg as
dead whereas it was still alive.

Added some abstraction over register allocation. This is now used in inline
primitives.

Reply | Threaded
Open this post in threaded view
|

Re: New Cog VMs available

Tobias Pape

Updated on CI,
running at http://build.squeak.org/job/SqueakTrunk/1309/

On 17.04.2015, at 01:50, Eliot Miranda <[hidden email]> wrote:

> ... at http://www.mirandabanda.org/files/Cog/VM/VM.r3311/.
>
> These should fix the regression introduced by the map changes in 3308.  They certainly fix the two crashes I've looked at, one an update of a squeak trunk image and the other the startup of recent Newspeak images.  Apologies for the inconvenience.
>
>
> CogVM binaries as per VMMaker.oscog-eem.1204/r3311
>
> Cogits:
>
> Fix regression in map machinery due to adding AnnotationExtension scheme.
> findMapLocationForMcpc:inMethod: must not be confused by IsDisplacementX2N
> bytes.  This is likely the cause of the recent crashes with r3308 and earlier.
>
> Introduce marryFrameCopiesTemps and use it to
> not copy temps in Spur context creation trampolines.
>
> Change initial usage counts to keep more recently jitted methods around for
> longer, and do *not* throw away PICs in freeOlderMethodsForCompaction, so that
> there's a better chance of Sista finding send and branch data for the tripping
> method.
>
> extendedPushBytecode /does/ need a frame.
>
> Don't save the header in a scratch register unless
> it is useful to do so in the Spur at:[put:] primitives.
>
> Fix slip in genGetNumBytesOf:into:.  And notice that
> genGetFormatOf:into:baseHeaderIntoScratch: et al can use byte access
> to get at format, as intended in the Spur header design.
>
> Fix unlinking dynamic super sends.
>
> Reduce false positives in access control violation reporting by marking the
> super send we actually use as privileged. Remove unused Newspeak bytecodes.
>
> Internal:
>
> Fix code generation bug surfaced by inline primitives.  On x86 movb N(%reg),%rl
> can only store into al, bl, cl & dl, whereas movzbl can store into any reg.  On
> ARM move byte also zero-extends.  So change definition of MoveMbrR to always
> zero-extend, use movzbl on x86 and remove all the MoveCq: 0 R: used to zero the
> bits of the target of a MoveMb:r:R:.  And now that we have
> genGetNumSlotsOf:into:, use it.
>
> Fix a slip in genTrinaryInlinePrimitive:, meet constraint that the target must
> be in ReceiverResultReg, and do a better job of register allocation there-in.
>
> Do dead code elimination for the branch following an inlined comparison (this
> is done in genBinaryInlineComparison:opFalse:destReg: copying the scheme in
> genSpecialSelectorEqualsEquals).
>
> Do register allocation in the right place in genUnaryInlinePrimitive:.
>
> Fix overflow slot access in genGetNumSlotsOf:into: et al.
>
> Fix several slips in inline primitive generation: Object>>at:put: needs to
> include a store check.  Some register allocation code was wrong.  Some results
> needed converting to SmallIntegers and recording results as pushed on the sim
> stack.
>
> Change callPrimitiveBytecode to genCallPrimitiveBytecode in the Cogit.
> remove the misnomer genConvertIntegerToSmallIntegerInScratchReg:
>
> Type of AbstractInstruction opcode must be unsigned now that we have
> more than 128 opcodes (XCHGRR pushed things over the top).
>
> Lay the groundwork for 32-bit intra-zone jumps and calls on ARM by introducing
> CallFull and JumpFull (and rewrites thereof) that are expected to span the full
> address space, leaving Call/JumpLong to span merely the 16mb code zone.  On x86
> CallFull and JumpFull simply default to Call/JumpLong.
>
> Replace bytecode trapIfNotInstanceOf by jumpIfNotInstanceOfOrPop.
>
> Rewrote the JIT logic for traps to be able to write trap trampolines calls at
> the end of the cogMethod.
>
> Refactor the slot store and store check machinery to take an inFrame: argument
> and hence deal with the store check in genInnerPrimitiveAtPut: on ARM.
>
> Fix limitation with MoveRXbrR; can only do movb from
> %al through %dl, so swap with %eax around movb.
>
> Fix mistake with genGetNumBytesOf:into: by refactoring
> genGetFormatOf:into:baseHeaderIntoScratch: into
> genGetBits:ofFormatByteOf:into:baseHeaderIntoScratch:
> and hence fetching and subtracting only odd bits of format.
>
> Correct the in-line primitive SmallInteger comparisons; CmpXR is confusing ;-)
>
> Fix var op var unsafe byte at:.  Result must be converted to SmallInteger.
>
> Correct the generated Slang for the new register allocation code by adding a
> read-before-written pass to C generation that initializes variables
> read-before-written with 0 (the C equivalent of nil).
>
> fix a bug where sometimes register allocation was marking ReceiverResultReg as
> dead whereas it was still alive.
>
> Added some abstraction over register allocation. This is now used in inline
> primitives.


Reply | Threaded
Open this post in threaded view
|

Re: New Cog VMs available

Tobias Pape

... which just crashed:

/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/lib/squeak/4.0-3311/squeak
Squeak VM version: 4.0-3311 #1 Thu Apr 16 15:59:02 PDT 2015 gcc 4.4.7 [Production ITHB VM]
Built from: CoInterpreter VMMaker.oscog-eem.1202 uuid: 992991db-47cc-4d19-85cf-4959c54bd41f Apr 16 2015
With: StackToRegisterMappingCogit VMMaker.oscog-eem.1204 uuid: 45d34c98-fee8-4874-95b4-842de9ba8cbc Apr 16 2015
Revision: VM: r3311
http://www.squeakvm.org/svn/squeak/branches/Cog
 Date: 2015-04-16 15:27:01 -0700
Plugins: r3275
http://squeakvm.org/svn/squeak/trunk/platforms/Cross/plugins

Build host: Linux mclinux32 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux
plugin path: /tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311 [default: /tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/lib/squeak/4.0-3311/]


C stack backtrace & registers:
        eax 0xbf7af0f4 ebx 0xbf7af010 ecx 0xbf7af0a8 edx 0xbf7af05c
        edi 0xbf7aeee0 esi 0xbf7aeee0 ebp 0xbf7aef78 esp 0xbf7aefc4
        eip 0xbf7af1d8
*[0xbf7af1d8]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak[0x805e830]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak[0x805eb2f]
[0xf57fe40c]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak[0x809b5db]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak(mapObjectReferencesInMachineCode+0xeb)[0x809b7bb]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak[0x807520c]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak[0x80764fd]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak(fullGC+0x24d)[0x807ba0d]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak[0x807c745]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak[0x8081de5]
[0x4750a2e3]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak(interpret+0x7b6)[0x8087a06]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak(main+0x2b4)[0x805f284]
/lib/i686/nosegneg/libc.so.6(__libc_start_main+0xe6)[0xb75f3cb6]
/tmp/d20150417-4921-hq8rf8/cog.r3311/coglinux/bin/../lib/squeak/4.0-3311/squeak[0x805bea1]
/lib/i686/nosegneg/libc.so.6(+0x150ff4)[0xb772dff4]


Smalltalk stack dump:
0xbf8310ac M ByteString class(String class)>new: 0x478667d0: a(n) ByteString class
0xbf8310d4 M INVALID RECEIVER>copyReplaceFrom:to:with: 0x4891e39c: a(n) bad class
0xbf831108 M INVALID RECEIVER>copyReplaceAll:with:asTokens: 0x488a3030: a(n) bad class
0xbf83112c M INVALID RECEIVER>copyReplaceAll:with: 0x488a3030: a(n) bad class
0xbf831164 M INVALID RECEIVER>asUUID: 0x4891e2d0: a(n) bad class
0xbf831184 M UUID class>fromString: 0x478666cc: a(n) UUID class
0xbf8311b4 M [] in MCWorkingCopy class>infoFromDictionary:cache: 0x47874e74: a(n) MCWorkingCopy class
0xbf8311dc M [] in INVALID RECEIVER>at:ifAbsentPut: 0x488c3310: a(n) bad class
0xbf8311f4 M INVALID RECEIVER>at:ifAbsent: 0x488c3310: a(n) bad class
0xbf831214 M INVALID RECEIVER>at:ifAbsentPut: 0x488c3310: a(n) bad class
0xbf831238 M MCWorkingCopy class>infoFromDictionary:cache: 0x47874e74: a(n) MCWorkingCopy class
0xbf83125c M [] in MCWorkingCopy class>ancestorsFromArray:cache: 0x47874e74: a(n) MCWorkingCopy class
0x4891e0c4 is not a context

Most recent primitives
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
indexOfAscii:inString:startingAt:
indexOfAscii:inString:startingAt:
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
indexOfAscii:inString:startingAt:
indexOfAscii:inString:startingAt:
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
indexOfAscii:inString:startingAt:
indexOfAscii:inString:startingAt:
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew
basicNew
basicNew
stringHash:initialHash:
basicNew
basicNew
**IncrementalGC**
shallowCopy
basicNew
basicNew
basicNew
indexOfAscii:inString:startingAt:
basicNew
basicNew
basicNew
basicNew
new:
at:put:
at:put:
at:put:
stringHash:initialHash:
stringHash:initialHash:
new:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
basicNew:
findSubstring:in:startingAt:matchTable:
basicNew:
**IncrementalGC**
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
shallowCopy
translate:from:to:table:
basicNew
basicNew:
**IncrementalGC**
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
**IncrementalGC**
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew
at:put:
stringHash:initialHash:
stringHash:initialHash:
basicNew
basicNew
basicNew:
basicNew
at:put:
at:put:
at:put:
basicNew:
replaceFrom:to:with:startingAt:
basicNew
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
indexOfAscii:inString:startingAt:
indexOfAscii:inString:startingAt:
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
indexOfAscii:inString:startingAt:
indexOfAscii:inString:startingAt:
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
indexOfAscii:inString:startingAt:
indexOfAscii:inString:startingAt:
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
indexOfAscii:inString:startingAt:
indexOfAscii:inString:startingAt:
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
indexOfAscii:inString:startingAt:
indexOfAscii:inString:startingAt:
basicNew:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew
basicNew
basicNew
stringHash:initialHash:
basicNew
**IncrementalGC**
basicNew
shallowCopy
basicNew
basicNew
basicNew
indexOfAscii:inString:startingAt:
basicNew
basicNew
basicNew
basicNew
new:
at:put:
at:put:
at:put:
stringHash:initialHash:
stringHash:initialHash:
new:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
basicNew:
**IncrementalGC**
findSubstring:in:startingAt:matchTable:
basicNew:
**IncrementalGC**
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
**IncrementalGC**
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
**IncrementalGC**
replaceFrom:to:with:startingAt:
replaceFrom:to:with:startingAt:
findSubstring:in:startingAt:matchTable:
basicNew:
**IncrementalGC**
**FullGC**

stack page bytes 4096 available headroom 3300 minimum unused headroom 2244

        (Segmentation fault)
Aborted
On 17.04.2015, at 02:10, Tobias Pape <[hidden email]> wrote:

>
> Updated on CI,
> running at http://build.squeak.org/job/SqueakTrunk/1309/
>
> On 17.04.2015, at 01:50, Eliot Miranda <[hidden email]> wrote:
>
>> ... at http://www.mirandabanda.org/files/Cog/VM/VM.r3311/.
>>
>> These should fix the regression introduced by the map changes in 3308.  They certainly fix the two crashes I've looked at, one an update of a squeak trunk image and the other the startup of recent Newspeak images.  Apologies for the inconvenience.
>>
>>
>> CogVM binaries as per VMMaker.oscog-eem.1204/r3311
>>
>> Cogits:
>>
>> Fix regression in map machinery due to adding AnnotationExtension scheme.
>> findMapLocationForMcpc:inMethod: must not be confused by IsDisplacementX2N
>> bytes.  This is likely the cause of the recent crashes with r3308 and earlier.
>>
>> Introduce marryFrameCopiesTemps and use it to
>> not copy temps in Spur context creation trampolines.
>>
>> Change initial usage counts to keep more recently jitted methods around for
>> longer, and do *not* throw away PICs in freeOlderMethodsForCompaction, so that
>> there's a better chance of Sista finding send and branch data for the tripping
>> method.
>>
>> extendedPushBytecode /does/ need a frame.
>>
>> Don't save the header in a scratch register unless
>> it is useful to do so in the Spur at:[put:] primitives.
>>
>> Fix slip in genGetNumBytesOf:into:.  And notice that
>> genGetFormatOf:into:baseHeaderIntoScratch: et al can use byte access
>> to get at format, as intended in the Spur header design.
>>
>> Fix unlinking dynamic super sends.
>>
>> Reduce false positives in access control violation reporting by marking the
>> super send we actually use as privileged. Remove unused Newspeak bytecodes.
>>
>> Internal:
>>
>> Fix code generation bug surfaced by inline primitives.  On x86 movb N(%reg),%rl
>> can only store into al, bl, cl & dl, whereas movzbl can store into any reg.  On
>> ARM move byte also zero-extends.  So change definition of MoveMbrR to always
>> zero-extend, use movzbl on x86 and remove all the MoveCq: 0 R: used to zero the
>> bits of the target of a MoveMb:r:R:.  And now that we have
>> genGetNumSlotsOf:into:, use it.
>>
>> Fix a slip in genTrinaryInlinePrimitive:, meet constraint that the target must
>> be in ReceiverResultReg, and do a better job of register allocation there-in.
>>
>> Do dead code elimination for the branch following an inlined comparison (this
>> is done in genBinaryInlineComparison:opFalse:destReg: copying the scheme in
>> genSpecialSelectorEqualsEquals).
>>
>> Do register allocation in the right place in genUnaryInlinePrimitive:.
>>
>> Fix overflow slot access in genGetNumSlotsOf:into: et al.
>>
>> Fix several slips in inline primitive generation: Object>>at:put: needs to
>> include a store check.  Some register allocation code was wrong.  Some results
>> needed converting to SmallIntegers and recording results as pushed on the sim
>> stack.
>>
>> Change callPrimitiveBytecode to genCallPrimitiveBytecode in the Cogit.
>> remove the misnomer genConvertIntegerToSmallIntegerInScratchReg:
>>
>> Type of AbstractInstruction opcode must be unsigned now that we have
>> more than 128 opcodes (XCHGRR pushed things over the top).
>>
>> Lay the groundwork for 32-bit intra-zone jumps and calls on ARM by introducing
>> CallFull and JumpFull (and rewrites thereof) that are expected to span the full
>> address space, leaving Call/JumpLong to span merely the 16mb code zone.  On x86
>> CallFull and JumpFull simply default to Call/JumpLong.
>>
>> Replace bytecode trapIfNotInstanceOf by jumpIfNotInstanceOfOrPop.
>>
>> Rewrote the JIT logic for traps to be able to write trap trampolines calls at
>> the end of the cogMethod.
>>
>> Refactor the slot store and store check machinery to take an inFrame: argument
>> and hence deal with the store check in genInnerPrimitiveAtPut: on ARM.
>>
>> Fix limitation with MoveRXbrR; can only do movb from
>> %al through %dl, so swap with %eax around movb.
>>
>> Fix mistake with genGetNumBytesOf:into: by refactoring
>> genGetFormatOf:into:baseHeaderIntoScratch: into
>> genGetBits:ofFormatByteOf:into:baseHeaderIntoScratch:
>> and hence fetching and subtracting only odd bits of format.
>>
>> Correct the in-line primitive SmallInteger comparisons; CmpXR is confusing ;-)
>>
>> Fix var op var unsafe byte at:.  Result must be converted to SmallInteger.
>>
>> Correct the generated Slang for the new register allocation code by adding a
>> read-before-written pass to C generation that initializes variables
>> read-before-written with 0 (the C equivalent of nil).
>>
>> fix a bug where sometimes register allocation was marking ReceiverResultReg as
>> dead whereas it was still alive.
>>
>> Added some abstraction over register allocation. This is now used in inline
>> primitives.


Reply | Threaded
Open this post in threaded view
|

Re: New Cog VMs available

Eliot Miranda-2
In reply to this post by Eliot Miranda-2
 

On 16 Apr 2015, at 16:50, Eliot Miranda wrote:

... at http://www.mirandabanda.org/files/Cog/VM/VM.r3311/.

These should fix the regression introduced by the map changes in 3308.  They certainly fix the two crashes I've looked at, one an update of a squeak trunk image and the other the startup of recent Newspeak images.  Apologies for the inconvenience.

Well, this is embarrassing as usual but I'm still seeing crashes in the image update.  So I'll have to look deeper.  At least the Newspeak fix was real, but it didn't fix everything.


CogVM binaries as per VMMaker.oscog-eem.1204/r3311

Cogits:

Fix regression in map machinery due to adding AnnotationExtension scheme.
findMapLocationForMcpc:inMethod: must not be confused by IsDisplacementX2N
bytes.  This is likely the cause of the recent crashes with r3308 and earlier.

Introduce marryFrameCopiesTemps and use it to
not copy temps in Spur context creation trampolines.

Change initial usage counts to keep more recently jitted methods around for
longer, and do *not* throw away PICs in freeOlderMethodsForCompaction, so that
there's a better chance of Sista finding send and branch data for the tripping
method.

extendedPushBytecode /does/ need a frame.

Don't save the header in a scratch register unless
it is useful to do so in the Spur at:[put:] primitives.

Fix slip in genGetNumBytesOf:into:.  And notice that
genGetFormatOf:into:baseHeaderIntoScratch: et al can use byte access
to get at format, as intended in the Spur header design.

Fix unlinking dynamic super sends.

Reduce false positives in access control violation reporting by marking the
super send we actually use as privileged. Remove unused Newspeak bytecodes.

Internal:

Fix code generation bug surfaced by inline primitives.  On x86 movb N(%reg),%rl
can only store into al, bl, cl & dl, whereas movzbl can store into any reg.  On
ARM move byte also zero-extends.  So change definition of MoveMbrR to always
zero-extend, use movzbl on x86 and remove all the MoveCq: 0 R: used to zero the
bits of the target of a MoveMb:r:R:.  And now that we have
genGetNumSlotsOf:into:, use it.

Fix a slip in genTrinaryInlinePrimitive:, meet constraint that the target must
be in ReceiverResultReg, and do a better job of register allocation there-in.

Do dead code elimination for the branch following an inlined comparison (this
is done in genBinaryInlineComparison:opFalse:destReg: copying the scheme in
genSpecialSelectorEqualsEquals).

Do register allocation in the right place in genUnaryInlinePrimitive:.

Fix overflow slot access in genGetNumSlotsOf:into: et al.

Fix several slips in inline primitive generation: Object>>at:put: needs to
include a store check.  Some register allocation code was wrong.  Some results
needed converting to SmallIntegers and recording results as pushed on the sim
stack.

Change callPrimitiveBytecode to genCallPrimitiveBytecode in the Cogit.
remove the misnomer genConvertIntegerToSmallIntegerInScratchReg:

Type of AbstractInstruction opcode must be unsigned now that we have
more than 128 opcodes (XCHGRR pushed things over the top).

Lay the groundwork for 32-bit intra-zone jumps and calls on ARM by introducing
CallFull and JumpFull (and rewrites thereof) that are expected to span the full
address space, leaving Call/JumpLong to span merely the 16mb code zone.  On x86
CallFull and JumpFull simply default to Call/JumpLong.

Replace bytecode trapIfNotInstanceOf by jumpIfNotInstanceOfOrPop.

Rewrote the JIT logic for traps to be able to write trap trampolines calls at
the end of the cogMethod.

Refactor the slot store and store check machinery to take an inFrame: argument
and hence deal with the store check in genInnerPrimitiveAtPut: on ARM.

Fix limitation with MoveRXbrR; can only do movb from
%al through %dl, so swap with %eax around movb.

Fix mistake with genGetNumBytesOf:into: by refactoring
genGetFormatOf:into:baseHeaderIntoScratch: into
genGetBits:ofFormatByteOf:into:baseHeaderIntoScratch:
and hence fetching and subtracting only odd bits of format.

Correct the in-line primitive SmallInteger comparisons; CmpXR is confusing ;-)

Fix var op var unsafe byte at:.  Result must be converted to SmallInteger.

Correct the generated Slang for the new register allocation code by adding a
read-before-written pass to C generation that initializes variables
read-before-written with 0 (the C equivalent of nil).

fix a bug where sometimes register allocation was marking ReceiverResultReg as
dead whereas it was still alive.

Added some abstraction over register allocation. This is now used in inline
primitives.


Reply | Threaded
Open this post in threaded view
|

Re: New Cog VMs available

Eliot Miranda-2
 

On 16 Apr 2015, at 17:39, Eliot Miranda wrote:


On 16 Apr 2015, at 16:50, Eliot Miranda wrote:

... at http://www.mirandabanda.org/files/Cog/VM/VM.r3311/.

These should fix the regression introduced by the map changes in 3308.  They certainly fix the two crashes I've looked at, one an update of a squeak trunk image and the other the startup of recent Newspeak images.  Apologies for the inconvenience.

Well, this is embarrassing as usual but I'm still seeing crashes in the image update.  So I'll have to look deeper.  At least the Newspeak fix was real, but it didn't fix everything.

And I have finally found it.  A stupid copy paste error which caused the failure to mark references to classes in linked sends.  Fixed VMs should be available in an hour or two.  Again apologies.



CogVM binaries as per VMMaker.oscog-eem.1204/r3311

Cogits:

Fix regression in map machinery due to adding AnnotationExtension scheme.
findMapLocationForMcpc:inMethod: must not be confused by IsDisplacementX2N
bytes.  This is likely the cause of the recent crashes with r3308 and earlier.

Introduce marryFrameCopiesTemps and use it to
not copy temps in Spur context creation trampolines.

Change initial usage counts to keep more recently jitted methods around for
longer, and do *not* throw away PICs in freeOlderMethodsForCompaction, so that
there's a better chance of Sista finding send and branch data for the tripping
method.

extendedPushBytecode /does/ need a frame.

Don't save the header in a scratch register unless
it is useful to do so in the Spur at:[put:] primitives.

Fix slip in genGetNumBytesOf:into:.  And notice that
genGetFormatOf:into:baseHeaderIntoScratch: et al can use byte access
to get at format, as intended in the Spur header design.

Fix unlinking dynamic super sends.

Reduce false positives in access control violation reporting by marking the
super send we actually use as privileged. Remove unused Newspeak bytecodes.

Internal:

Fix code generation bug surfaced by inline primitives.  On x86 movb N(%reg),%rl
can only store into al, bl, cl & dl, whereas movzbl can store into any reg.  On
ARM move byte also zero-extends.  So change definition of MoveMbrR to always
zero-extend, use movzbl on x86 and remove all the MoveCq: 0 R: used to zero the
bits of the target of a MoveMb:r:R:.  And now that we have
genGetNumSlotsOf:into:, use it.

Fix a slip in genTrinaryInlinePrimitive:, meet constraint that the target must
be in ReceiverResultReg, and do a better job of register allocation there-in.

Do dead code elimination for the branch following an inlined comparison (this
is done in genBinaryInlineComparison:opFalse:destReg: copying the scheme in
genSpecialSelectorEqualsEquals).

Do register allocation in the right place in genUnaryInlinePrimitive:.

Fix overflow slot access in genGetNumSlotsOf:into: et al.

Fix several slips in inline primitive generation: Object>>at:put: needs to
include a store check.  Some register allocation code was wrong.  Some results
needed converting to SmallIntegers and recording results as pushed on the sim
stack.

Change callPrimitiveBytecode to genCallPrimitiveBytecode in the Cogit.
remove the misnomer genConvertIntegerToSmallIntegerInScratchReg:

Type of AbstractInstruction opcode must be unsigned now that we have
more than 128 opcodes (XCHGRR pushed things over the top).

Lay the groundwork for 32-bit intra-zone jumps and calls on ARM by introducing
CallFull and JumpFull (and rewrites thereof) that are expected to span the full
address space, leaving Call/JumpLong to span merely the 16mb code zone.  On x86
CallFull and JumpFull simply default to Call/JumpLong.

Replace bytecode trapIfNotInstanceOf by jumpIfNotInstanceOfOrPop.

Rewrote the JIT logic for traps to be able to write trap trampolines calls at
the end of the cogMethod.

Refactor the slot store and store check machinery to take an inFrame: argument
and hence deal with the store check in genInnerPrimitiveAtPut: on ARM.

Fix limitation with MoveRXbrR; can only do movb from
%al through %dl, so swap with %eax around movb.

Fix mistake with genGetNumBytesOf:into: by refactoring
genGetFormatOf:into:baseHeaderIntoScratch: into
genGetBits:ofFormatByteOf:into:baseHeaderIntoScratch:
and hence fetching and subtracting only odd bits of format.

Correct the in-line primitive SmallInteger comparisons; CmpXR is confusing ;-)

Fix var op var unsafe byte at:.  Result must be converted to SmallInteger.

Correct the generated Slang for the new register allocation code by adding a
read-before-written pass to C generation that initializes variables
read-before-written with 0 (the C equivalent of nil).

fix a bug where sometimes register allocation was marking ReceiverResultReg as
dead whereas it was still alive.

Added some abstraction over register allocation. This is now used in inline
primitives.



Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-dev] New Cog VMs available

David T. Lewis
In reply to this post by Eliot Miranda-2
 
On Fri, Apr 17, 2015 at 06:46:19PM -0700, Eliot Miranda wrote:

> On Fri, Apr 17, 2015 at 5:16 PM, Cl??ment Bera <[hidden email]> wrote:
> >
> > 2015-04-16 17:16 GMT-07:00 Sean P. DeNigris <[hidden email]>:
> >
> >> Eliot Miranda-2 wrote
> >> > ...
> >>
> >> Wow! That seems like a /lot/ of fixes... thanks :)
> >>
> > This past few weeks we were 4 to commit regularly on the JIT (Tim, Ryan,
> > Eliot and I) so there are more fixes than when Eliot is working alone :-)
>
> Finally we have a team working on it.  Come join us!!  There's /lots/ to
> work on.  See http://www.mirandabanda.org/cogblog/cog-projects/ &
> http://www.mirandabanda.org/cogblog/collaborators/. It is challenging,
> useful and FUN!

The project list at http://www.mirandabanda.org/cogblog/cog-projects/ makes
for really good reading in its own right, even if it makes me feel just a bit
badly about my own lack of progress on that last item in the list. But we
will get there :-)

Kudos to Cl??ment, Tim, Ryan and Eliot for the initiative and teamwork!

Dave