Skip to content

Commit

Permalink
Add simple druid jit push closure
Browse files Browse the repository at this point in the history
  • Loading branch information
guillep committed Dec 15, 2023
1 parent 1d6ede9 commit 1f5d8f1
Showing 1 changed file with 51 additions and 1 deletion.
52 changes: 51 additions & 1 deletion smalltalksrc/VMMaker/SimpleDruidJIT.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@ SimpleDruidJIT class >> bytecodeTable [
{ 2. 246. 246. #unknownBytecode }.
{ 2. 247. 247. #unknownBytecode }.
{ 3. 248. 248. #gen_CallPrimitiveBytecode }.
{ 3. 249. 249. #unknownBytecode }.
{ 3. 249. 249. #gen_ExtPushFullClosureBytecode }.
{ 3. 250. 250. #unknownBytecode }.
{ 3. 251. 251. #unknownBytecode }.
{ 3. 252. 252. #unknownBytecode }.
Expand Down Expand Up @@ -2047,6 +2047,56 @@ SimpleDruidJIT >> gen_ExtPushCharacterBytecode [
^ 0
]

{ #category : #generated }
SimpleDruidJIT >> gen_ExtPushFullClosureBytecode [
"AutoGenerated by Druid"

| r42 r2 currentBlock b10 |
r2 := extA.
extA := 0.
self
genCreateFullClosureInIndex: (byte1 + (r2 << 8))
numCopied: (byte2 bitAnd: 63)
ignoreContext: (byte2 anyMask: 64)
contextNumArgs: methodOrBlockNumArgs
large: (coInterpreter methodNeedsLargeContext: methodObj)
inBlock: inBlock
intoRegister: TempReg.
r42 := 1.
b10 := self Label.
r42 := r42.
[ r42<=(byte2 bitAnd: 63) ] whileTrue: [
| r42 |
self MoveMw: 0 r: SPReg R: ClassReg.
self PopR: SendNumArgsReg.
self MoveR: TempReg R: SendNumArgsReg.
self
AddCq:
(((FullClosureFirstCopiedValueIndex + (byte2 bitAnd: 63)) - r42) << 3)
R: SendNumArgsReg.
self MoveR: ClassReg M64: 8 r: SendNumArgsReg.
r42 := r42 + 1 ].
(byte2 anyMask: 128)=true ifTrue: [
self MoveMw: 0 r: SPReg R: SendNumArgsReg.
self PopR: ClassReg.
self MoveR: SendNumArgsReg R: ClassReg.
self
MoveR: ClassReg
M64: FullClosureReceiverIndex << 3 + 8
r: TempReg.
self PushR: TempReg.
^ 0 ].
needsFrame ifTrue:
[self putSelfInReceiverResultReg]..
self MoveR: ReceiverResultReg R: ClassReg.
self
MoveR: ClassReg
M64: FullClosureReceiverIndex << 3 + 8
r: TempReg.
self PushR: TempReg.
^ 0
]

{ #category : #generated }
SimpleDruidJIT >> gen_ExtPushIntegerBytecode [
"AutoGenerated by Druid"
Expand Down

0 comments on commit 1f5d8f1

Please sign in to comment.