Fixed AsmJit tests.
"{ Package: 'jv:dragonfly/asm' }"
"{ NameSpace: Smalltalk }"
Object subclass:#AJGeneratedCode
instanceVariableNames:'bytes labels'
classVariableNames:''
poolDictionaries:''
category:'AsmJit-Core'
!
AJGeneratedCode comment:''
!
!AJGeneratedCode class methodsFor:'instance creation'!
fromInstructions: instructions
^ self new fromInstructions: instructions
!
new
"return an initialized instance"
^ self basicNew initialize.
! !
!AJGeneratedCode methodsFor:'accessing'!
bytes
^ bytes
!
bytes: aBytes
bytes := aBytes
!
labels: aLabels
"turn labels into a simple name->offset pairs"
aLabels keysAndValuesDo: [:name :lbl |
labels at: name put: lbl paddedOffset ].
!
offsetAt: aLabelName
^ labels at: aLabelName
! !
!AJGeneratedCode methodsFor:'initialize-release'!
fromInstructions: instructions
bytes := ByteArray new: 100 streamContents: [:stream|
instructions do: [ :each |
each extractLabels: [:name :pos | labels at: name put: pos ].
each storeOn: stream ]].
!
initialize
labels := Dictionary new.
! !
!AJGeneratedCode methodsFor:'output'!
dumpWithLabels
"dump the native code , interspersed with labels"
| offsets i str |
offsets := OrderedCollection new.
labels keysAndValuesDo: [ :name :offset |
offsets add: (offset -> name)
].
offsets := offsets sort: [:a :b | a key < b key ].
str := String new writeStream.
i := 0.
offsets do: [:offset |
i to: offset key -1 do: [:x | str nextPutAll: ((bytes at: i+1) printStringBase: 16 nDigits: 2) ; space. i:=i+1. ].
str cr; nextPutAll: offset value; cr.
].
i to: bytes size-1 do: [:x | str nextPutAll: ((bytes at: i+1) printStringBase: 16 nDigits: 2) ; space. i := i + 1] .
^ str contents
!
saveToFile
self saveToFile: 'asm.bin'
!
saveToFile: fileName
(FileStream forceNewFileNamed: fileName)
nextPutAll: bytes;
close
! !
!AJGeneratedCode methodsFor:'printing'!
printOn: aStream
bytes notNil ifTrue: [
aStream nextPutAll: self dumpWithLabels
]
! !