Skip to content

Commit

Permalink
New generated DruidJIT code
Browse files Browse the repository at this point in the history
  • Loading branch information
PalumboN committed Apr 5, 2023
1 parent f006911 commit 880ed39
Showing 1 changed file with 291 additions and 22 deletions.
313 changes: 291 additions & 22 deletions smalltalksrc/VMMaker/DruidJIT.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,8 @@ DruidJIT class >> initialize [
DruidJIT class >> initializePrimitiveTable [

<generated>
MaxCompiledPrimitiveIndex := 10.
primitiveTable := CArrayAccessor on:
(Array new: MaxCompiledPrimitiveIndex + 1).
MaxCompiledPrimitiveIndex := 17.
primitiveTable := CArrayAccessor on: (Array new: MaxCompiledPrimitiveIndex + 1).
self table: primitiveTable from: self primitiveTableArray
]

Expand All @@ -75,25 +74,23 @@ DruidJIT class >> primitiveTableArray [

<generated>
^ {
{ 1. #gen_PrimitiveAdd. 1 }.
{ 2. #gen_PrimitiveSubtract. 1 }.
{ 3. #gen_PrimitiveLessThan. 1 }.
{ 4. #gen_PrimitiveGreaterThan. 1 }.
{ 5. #gen_PrimitiveLessOrEqual. 1 }.
{ 6. #gen_PrimitiveGreaterOrEqual. 1 }.
{ 7. #gen_PrimitiveEqual. 1 }.
{ 8. #gen_PrimitiveNotEqual. 1 }.
{ 9. #gen_PrimitiveMultiply. 1 }.
{ 10. #gen_PrimitiveDivide. 1 }.
#(73 genNonImplementedPrimitive -1 #maycallback) "(73 primitiveInstVarAt)".
#(117 genNonImplementedPrimitive -1 #maycallback) "primitiveExternalCall".
#(120 genNonImplementedPrimitive -1 #maycallback) "primitiveFFICall".
#(148 genNonImplementedPrimitive 0 #maycallback) "a.k.a. clone".
#(160 genNonImplementedPrimitive -1 #maycallback) "primitive adopt instance".
#(173 genNonImplementedPrimitive -1 #maycallback) "(173 primitiveSlotAt 1)".
#(216 genNonImplementedPrimitive -1 #maycallback) "primitive method xray".

}
{ 1. #gen_primitiveAdd. 1 }.
{ 2. #gen_primitiveSubtract. 1 }.
{ 3. #gen_primitiveLessThan. 1 }.
{ 4. #gen_primitiveGreaterThan. 1 }.
{ 5. #gen_primitiveLessOrEqual. 1 }.
{ 6. #gen_primitiveGreaterOrEqual. 1 }.
{ 7. #gen_primitiveEqual. 1 }.
{ 8. #gen_primitiveNotEqual. 1 }.
{ 9. #gen_primitiveMultiply. 1 }.
{ 10. #gen_primitiveDivide. 1 }.
{ 73. #genNonImplementedPrimitive. -1. #maycallback }.
{ 117. #genNonImplementedPrimitive. -1. #maycallback }.
{ 120. #genNonImplementedPrimitive. -1. #maycallback }.
{ 148. #genNonImplementedPrimitive. -1. #maycallback }.
{ 160. #genNonImplementedPrimitive. -1. #maycallback }.
{ 173. #genNonImplementedPrimitive. -1. #maycallback }.
{ 216. #genNonImplementedPrimitive. -1. #maycallback } }
]

{ #category : #'trait candidates' }
Expand Down Expand Up @@ -1373,6 +1370,278 @@ DruidJIT >> gen_PrimitiveSubtract [
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveAdd [
"AutoGenerated by Druid"

| jump1 jump2 currentBlock |
self mclassIsSmallInteger ifFalse: [ ^ UnimplementedPrimitive ].
self TstCq: 1 R: Arg0Reg.
jump1 := self JumpZero: 0.
self MoveR: Arg0Reg R: TempReg.
self SubCq: 1 R: TempReg.
self MoveR: ReceiverResultReg R: ClassReg.
self AddR: ClassReg R: TempReg.
jump2 := self JumpOverflow: 0.
self MoveR: TempReg R: ReceiverResultReg.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
jump2 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveDivide [
"AutoGenerated by Druid"

| jump5 jump3 jump1 currentBlock jump4 jump2 |
self TstCq: 1 R: ReceiverResultReg.
jump1 := self JumpZero: 0.
self MoveR: ReceiverResultReg R: TempReg.
self ArithmeticShiftRightCq: 3 R: TempReg.
self TstCq: 1 R: Arg0Reg.
jump2 := self JumpZero: 0.
self MoveR: Arg0Reg R: ClassReg.
self ArithmeticShiftRightCq: 3 R: ClassReg.
self CmpCq: 0 R: ClassReg.
jump3 := self JumpZero: 0.
self
DivR: ClassReg
R: TempReg
Quo: SendNumArgsReg
Rem: Extra0Reg.
self CmpCq: 0 R: Extra0Reg.
jump4 := self JumpNonZero: 0.
self
DivR: ClassReg
R: TempReg
Quo: SendNumArgsReg
Rem: Extra0Reg.
self MoveR: SendNumArgsReg R: Extra0Reg.
self ArithmeticShiftRightCq: 60 R: Extra0Reg.
self AddCq: 1 R: Extra0Reg.
self AndCq: 15 R: Extra0Reg.
self CmpCq: 1 R: Extra0Reg.
jump5 := self JumpGreater: 0.
self MoveR: SendNumArgsReg R: Extra0Reg.
self LogicalShiftLeftCq: 3 R: Extra0Reg.
self AddCq: 1 R: Extra0Reg.
self MoveR: Extra0Reg R: ReceiverResultReg.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
jump2 jmpTarget: currentBlock.
jump3 jmpTarget: currentBlock.
jump4 jmpTarget: currentBlock.
jump5 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveEqual [
"AutoGenerated by Druid"

| jump1 jump2 jump3 currentBlock |
self MoveR: Arg0Reg R: TempReg.
self MoveR: ReceiverResultReg R: ClassReg.
self AndR: ClassReg R: TempReg.
self TstCq: 1 R: TempReg.
jump1 := self JumpZero: 0.
self MoveR: ReceiverResultReg R: ClassReg.
self CmpR: Arg0Reg R: ClassReg.
jump2 := self JumpZero: 0.
self MoveCq: objectMemory falseObject R: ReceiverResultReg.
jump3 := self Jump: 0.
currentBlock := self Label.
jump2 jmpTarget: currentBlock.
self MoveCq: objectMemory trueObject R: ReceiverResultReg.
currentBlock := self Label.
jump3 jmpTarget: currentBlock.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveGreaterOrEqual [
"AutoGenerated by Druid"

| jump1 jump2 jump3 currentBlock |
self MoveR: Arg0Reg R: TempReg.
self MoveR: ReceiverResultReg R: ClassReg.
self AndR: ClassReg R: TempReg.
self TstCq: 1 R: TempReg.
jump1 := self JumpZero: 0.
self MoveR: ReceiverResultReg R: ClassReg.
self CmpR: Arg0Reg R: ClassReg.
jump2 := self JumpGreaterOrEqual: 0.
self MoveCq: objectMemory falseObject R: ReceiverResultReg.
jump3 := self Jump: 0.
currentBlock := self Label.
jump2 jmpTarget: currentBlock.
self MoveCq: objectMemory trueObject R: ReceiverResultReg.
currentBlock := self Label.
jump3 jmpTarget: currentBlock.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveGreaterThan [
"AutoGenerated by Druid"

| jump1 jump2 jump3 currentBlock |
self MoveR: Arg0Reg R: TempReg.
self MoveR: ReceiverResultReg R: ClassReg.
self AndR: ClassReg R: TempReg.
self TstCq: 1 R: TempReg.
jump1 := self JumpZero: 0.
self MoveR: ReceiverResultReg R: ClassReg.
self CmpR: Arg0Reg R: ClassReg.
jump2 := self JumpGreater: 0.
self MoveCq: objectMemory falseObject R: ReceiverResultReg.
jump3 := self Jump: 0.
currentBlock := self Label.
jump2 jmpTarget: currentBlock.
self MoveCq: objectMemory trueObject R: ReceiverResultReg.
currentBlock := self Label.
jump3 jmpTarget: currentBlock.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveLessOrEqual [
"AutoGenerated by Druid"

| jump1 jump2 jump3 currentBlock |
self MoveR: Arg0Reg R: TempReg.
self MoveR: ReceiverResultReg R: ClassReg.
self AndR: ClassReg R: TempReg.
self TstCq: 1 R: TempReg.
jump1 := self JumpZero: 0.
self MoveR: ReceiverResultReg R: ClassReg.
self CmpR: Arg0Reg R: ClassReg.
jump2 := self JumpLessOrEqual: 0.
self MoveCq: objectMemory falseObject R: ReceiverResultReg.
jump3 := self Jump: 0.
currentBlock := self Label.
jump2 jmpTarget: currentBlock.
self MoveCq: objectMemory trueObject R: ReceiverResultReg.
currentBlock := self Label.
jump3 jmpTarget: currentBlock.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveLessThan [
"AutoGenerated by Druid"

| jump1 jump2 jump3 currentBlock |
self MoveR: Arg0Reg R: TempReg.
self MoveR: ReceiverResultReg R: ClassReg.
self AndR: ClassReg R: TempReg.
self TstCq: 1 R: TempReg.
jump1 := self JumpZero: 0.
self MoveR: ReceiverResultReg R: ClassReg.
self CmpR: Arg0Reg R: ClassReg.
jump2 := self JumpLess: 0.
self MoveCq: objectMemory falseObject R: ReceiverResultReg.
jump3 := self Jump: 0.
currentBlock := self Label.
jump2 jmpTarget: currentBlock.
self MoveCq: objectMemory trueObject R: ReceiverResultReg.
currentBlock := self Label.
jump3 jmpTarget: currentBlock.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveMultiply [
"AutoGenerated by Druid"

| jump1 jump2 jump3 currentBlock |
self TstCq: 1 R: ReceiverResultReg.
jump1 := self JumpZero: 0.
self TstCq: 1 R: Arg0Reg.
jump2 := self JumpZero: 0.
self MoveR: ReceiverResultReg R: TempReg.
self ArithmeticShiftRightCq: 3 R: TempReg.
self MoveR: Arg0Reg R: ClassReg.
self SubCq: 1 R: ClassReg.
self MulR: ClassReg R: TempReg.
jump3 := self JumpMultiplyOverflow: 0.
self AddCq: 1 R: TempReg.
self MoveR: TempReg R: ReceiverResultReg.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
jump2 jmpTarget: currentBlock.
jump3 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveNotEqual [
"AutoGenerated by Druid"

| jump1 jump2 jump3 currentBlock |
self MoveR: Arg0Reg R: TempReg.
self MoveR: ReceiverResultReg R: ClassReg.
self AndR: ClassReg R: TempReg.
self TstCq: 1 R: TempReg.
jump1 := self JumpZero: 0.
self MoveR: ReceiverResultReg R: ClassReg.
self CmpR: Arg0Reg R: ClassReg.
jump2 := self JumpNonZero: 0.
self MoveCq: objectMemory falseObject R: ReceiverResultReg.
jump3 := self Jump: 0.
currentBlock := self Label.
jump2 jmpTarget: currentBlock.
self MoveCq: objectMemory trueObject R: ReceiverResultReg.
currentBlock := self Label.
jump3 jmpTarget: currentBlock.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #generated }
DruidJIT >> gen_primitiveSubtract [
"AutoGenerated by Druid"

| jump1 jump2 jump3 currentBlock |
self TstCq: 1 R: ReceiverResultReg.
jump1 := self JumpZero: 0.
self TstCq: 1 R: Arg0Reg.
jump2 := self JumpZero: 0.
self MoveR: Arg0Reg R: TempReg.
self SubCq: 1 R: TempReg.
self MoveR: ReceiverResultReg R: ClassReg.
self SubR: TempReg R: ClassReg.
jump3 := self JumpOverflow: 0.
self MoveR: ClassReg R: ReceiverResultReg.
self genPrimReturn.
currentBlock := self Label.
jump1 jmpTarget: currentBlock.
jump2 jmpTarget: currentBlock.
jump3 jmpTarget: currentBlock.
^ CompletePrimitive
]

{ #category : #'trait candidates' }
DruidJIT >> generateObjectRepresentationTrampolines [
"Do the store check. Answer the argument for the benefit of the code generator;
Expand Down

0 comments on commit 880ed39

Please sign in to comment.