Smalltalk interchangeVersion: '1.0'! Class named: 'NativeCode' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'instructions labels constants relocations ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Code'! NativeCode method! initialize instructions _ ByteArray new. labels _ IntegerArray new. constants _ Array new. relocations _ Array new! Annotation key: 'category' value: 'initializing'! NativeCode method! instructions ^ instructions! Annotation key: 'category' value: 'accessing'! NativeCode method! labels ^ labels! Annotation key: 'category' value: 'accessing'! NativeCode method! constants ^ constants! Annotation key: 'category' value: 'accessing'! NativeCode method! relocations ^ relocations! Annotation key: 'category' value: 'accessing'! NativeCode method! instructions: aByteArray instructions _ aByteArray! Annotation key: 'category' value: 'accessing'! NativeCode method! labels: anIntegerArray labels _ anIntegerArray! Annotation key: 'category' value: 'accessing'! NativeCode method! constants: anArray constants _ anArray! Annotation key: 'category' value: 'accessing'! NativeCode method! relocations: anArray relocations _ anArray! Annotation key: 'category' value: 'accessing'! NativeCode method! relocate relocations do: [:relocation | relocation relocate: self]! Annotation key: 'category' value: 'relocating'! Class named: 'Translator' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'compilationUnit function basicBlock ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Translator method! on: aCompilationUnit compilationUnit _ aCompilationUnit! Annotation key: 'category' value: 'initializing'! Translator method! compilationUnit ^ compilationUnit! Annotation key: 'category' value: 'accessing'! Translator method! function ^ function! Annotation key: 'category' value: 'accessing'! Translator method! basicBlock ^ basicBlock! Annotation key: 'category' value: 'accessing'! Translator method! translate compilationUnit functions copy do: [:currentFunction | function _ currentFunction. self beginTranslatingFunction: currentFunction. currentFunction basicBlocks copy do: [:currentBasicBlock | basicBlock _ currentBasicBlock. self beginTranslatingBasicBlock: currentBasicBlock. currentBasicBlock instructions copy do: [:currentInstruction | currentInstruction translateOn: self]. self endTranslatingBasicBlock: currentBasicBlock]. self endTranslatingfunction: currentFunction]! Annotation key: 'category' value: 'translating'! Translator method! beginTranslatingFunction: aFunction self subclassResponsibility! Annotation key: 'category' value: 'translating'! Translator method! endTranslatingFunction: aFunction self subclassResponsibility! Annotation key: 'category' value: 'translating'! Translator method! beginTranslatingBasicBlock: aBasicBlock self subclassResponsibility! Annotation key: 'category' value: 'translating'! Translator method! endTranslatingBasicBlock: aBasicBlock self subclassResponsibility! Annotation key: 'category' value: 'translating'! Translator method! translateInstruction: anInstruction self subclassResponsibility! Annotation key: 'category' value: 'translating'! Translator method! translateMerge: aMergeInstruction self translateInstruction: aMergeInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateNot: aNotInstruction self translateInstruction: aNotInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateOr: anOrInstruction self translateInstruction: anOrInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateXor: anXorInstruction self translateInstruction: anXorInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateAnd: anAndInstruction self translateInstruction: anAndInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateLogicalShiftRight: aLogicalShiftRightInstruction self translateInstruction: aLogicalShiftRightInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateLogicalShiftLeft: aLogicalShiftLeftInstruction self translateInstruction: aLocalShiftleftInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateArithmeticShiftRight: anArithmeticShiftRightInstruction self translateInstruction: anArithmeticShiftRightInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateAdd: anAddInstruction self translateInstruction: anAddInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateSubtract: aSubtractInstruction self translateInstruction: aSubtractInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateMultiply: aMultiplyInstruction self translateInstruction: aMultiplyInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateDivide: aDivideInstruction self translateInstruction: aDivideInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateRemainder: aRemainderInstruction self translateInstruction: aRemainderInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateMove: aMoveInstruction self translateInstruction: aMoveInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateTruncate: aTruncateInstruction self translateInstruction: aTruncateInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateSignExtend: aSignExtendInstruction self translateInstruction: aSignExtendInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateZeroExtend: aZeroExtendInstruction self translateInstruction: aZeroExtendInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateConvert: aConvertInstruction self translateInstruction: aConvertInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateLoad: aLoadInstruction self translateInstruction: aLoadInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateStore: aStoreInstruction self translateInstruction: aStoreInstruction! Annotation key: 'category' value: 'translating'! Translator method! translatePush: aPushInstruction self translateInstruction: aPushInstruction! Annotation key: 'category' value: 'translating'! Translator method! translatePop: aPopInstruction self translateInstruction: aPopInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateAllocate: anAllocateInstruction self translateInstruction: anAllocateInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateFree: aFreeInstruction self translateInstruction: aFreeInstruction! Annotation key: 'category' value: 'translating'! Translator method! translatePrologue: aPrologueInstruction self translateInstruction: aPrologueInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateEpilogue: anEpilogueInstruction self translateInstruction: aEpilogueInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateSpill: aSpillInstruction self translateInstruction: aSpillInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateReload: aReloadInstruction self translateInstruction: aReloadInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateClobber: aClobberInstruction self translateInstruction: aClobberInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateJump: aJumpInstruction self translateInstruction: aJumpInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateBranchEqual: aBranchEqualInstruction self translateInstruction: aBranchEqualInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateBranchNotEqual: aBranchNotEqualInstruction self translateInstruction: aBranchNotEqualInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateBranchLess: aBranchLessInstruction self translateInstruction: aBranchLessInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateBranchLessEqual: aBranchLessEqualInstruction self translateInstruction: aBranchlessEqualInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateBranchGreater: aBranchGreaterInstruction self translateInstruction: aBranchGreaterInstruction! Annotation key: 'category' value: 'translating'! Translator method! translateBranchGreaterEqual: aBranchGreaterEqualInstruction self translateInstruction: aBranchGreaterEqualInstruction! Annotation key: 'category' value: 'translating'! Class named: 'Assembler' superclass: 'Translator' indexedInstanceVariables: #none instanceVariableNames: 'instructions labels constants relocations ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Code'! Assembler method! on: aCompilationUnit super on: aCompilationUnit. instructions _ ReadWriteStream on: (ByteArray new: 512). labels _ ReadWriteStream on: (IntegerArray new: 16). constants _ ReadWriteStream on: (Array new: 16). relocations _ ReadWriteStream on: (Array new: 16)! Annotation key: 'category' value: 'initializing'! Assembler method! instructions ^ instructions! Annotation key: 'category' value: 'accessing'! Assembler method! labels ^ labels! Annotation key: 'category' value: 'accessing'! Assembler method! constants ^ constants! Annotation key: 'category' value: 'accessing'! Assembler method! relocations ^ relocations! Annotation key: 'category' value: 'accessing'! Assembler method! defineLabel labels nextPut: instructions position. ^ labels position - 1! Annotation key: 'category' value: 'assembling'! Assembler method! defineConstant: anObject constants nextPut: anObject. ^ constants position - 1! Annotation key: 'category' value: 'assembling'! Assembler method! addRelocation: aRelocation aRelocation offset: instructions position. relocations nextPut: aRelocation! Annotation key: 'category' value: 'assembling'! Class named: 'Relocation' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'offset ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Code'! Relocation method! offset ^ offset! Annotation key: 'category' value: 'accessing'! Relocation method! offset: anInteger offset _ anInteger! Annotation key: 'category' value: 'accessing'! Relocation method! relocate: aNativeCode self subclassResponsibility! Annotation key: 'category' value: 'relocating'! Relocation method! relocate: aNativeCode with: anObject self subclassResponsibility! Annotation key: 'category' value: 'relocating'! Class named: 'ConstantRelocation' superclass: 'Relocation' indexedInstanceVariables: #none instanceVariableNames: 'constant ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Code'! ConstantRelocation method! constant ^ constant! Annotation key: 'category' value: 'accessing'! ConstantRelocation method! constant: anInteger constant _ anInteger! Annotation key: 'category' value: 'accessing'! ConstantRelocation method! relocate: aNativeCode self relocate: aNativeCode with: (aNativeCode constants at: constant)! Annotation key: 'category' value: 'relocating'! Class named: 'LabelRelocation' superclass: 'Relocation' indexedInstanceVariables: #none instanceVariableNames: 'label ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Code'! LabelRelocation method! label ^ label! Annotation key: 'category' value: 'accessing'! LabelRelocation method! label: anInteger label _ anInteger! Annotation key: 'category' value: 'accessing'! LabelRelocation method! relocate: aNativeCode self relocate: aNativeCode with: (aNativeCode labels at: label)! Annotation key: 'category' value: 'relocating'! Class named: 'CompilationUnit' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'globalVariables functions ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! CompilationUnit method! initialize globalVariables _ LinkedList new. functions _ LinkedList new! Annotation key: 'category' value: 'initializing'! CompilationUnit method! globalVariables ^ globalVariables! Annotation key: 'category' value: 'accessing'! CompilationUnit method! functions ^ functions! Annotation key: 'category' value: 'accessing'! Class named: 'Function' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'basicBlocks localVariables inputVariables outputVariables ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Function method! initialize basicBlocks _ LinkedList new. localVariables _ LinkedList new. inputVariables _ LinkedList new. outputVariables _ LinkedList new! Annotation key: 'category' value: 'initializing'! Function method! basicBlocks ^ basicBlocks! Annotation key: 'category' value: 'accessing'! Function method! localVariables ^ localVariables! Annotation key: 'category' value: 'accessing'! Function method! inputVariables ^ inputVariables! Annotation key: 'category' value: 'accessing'! Function method! outputVariables ^ outputVariables! Annotation key: 'category' value: 'accessing'! Function method! computeDepthFirstNumbers basicBlocks first computeDepthFirstNumber: 1! Annotation key: 'category' value: 'dataflow'! Function method! computeDominators | dominators dominator | dominators _ Dictionary new: basicBlocks size. dominators at: basicBlocks first put: Set new. basicBlocks first computeDominators. basicBlocks do: [:basicBlock | (dominators at: basicBlock) notEmpty ifTrue: [dominator _ (dominators at: basicBlock) inject: (dominators at: basicBlock) anyOne into: [:x :y | x depthFirstNumber >= y depthFirstNumber ifTrue: x ifFalse: y]. basicBlock dominator: dominator. dominator dominates add: basicBlock]]. basicBlocks _ basicBlocks sortBy: [:x :y | x dominates: y]! Annotation key: 'category' value: 'dataflow'! Function method! computeLiveness basicBlocks do: [:basicBlock | basicBlock computeLiveIn]. basicBlocks reverseDo: [:basicBlock | basicBlock computeLiveOut]. basicBlocks do: [:basicBlock | basicBlock computeKilledOperands; refineLiveIn; refineLiveOut]! Annotation key: 'category' value: 'dataflow'! Function method! removeUnreachableBasicBlocks basicBlocks _ basicBlocks select: [:basicBlock | basicBlock depthFirstNumber notNil]! Annotation key: 'category' value: 'restructuring'! Function method! splitCriticalEdges | newBasicBlocks | newBasicBlocks _ LinkedList new. basicBlocks do: [:basicBlock | newBasicBlocks add: basicBlock. basicBlock splitCriticalEdges do: [:newBasicBlock | newBasicBlocks add: newBasicBlock]]. basicBlocks _ newBasicBlocks! Annotation key: 'category' value: 'restructuring'! Class named: 'BasicBlock' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'instructions depthFirstNumber entrances exits dominator dominates liveIn liveOut ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! BasicBlock method! initialize instructions _ LinkedList new. entrances _ LinkedList new. exits _ LinkedList new. dominates _ Set new! Annotation key: 'category' value: 'initializing'! BasicBlock method! instructions ^ instructions! Annotation key: 'category' value: 'accessing'! BasicBlock method! depthFirstNumber ^ depthFirstNumber! Annotation key: 'category' value: 'accessing'! BasicBlock method! depthFirstNumber: anInteger depthFirstNumber _ anInteger! Annotation key: 'category' value: 'accessing'! BasicBlock method! entrances ^ entrances! Annotation key: 'category' value: 'accessing'! BasicBlock method! exits ^ exits! Annotation key: 'category' value: 'accessing'! BasicBlock method! dominator ^ dominator! Annotation key: 'category' value: 'accessing'! BasicBlock method! dominator: aBasicBlock dominator _ aBasicBlock! Annotation key: 'category' value: 'accessing'! BasicBlock method! dominates ^ dominates! Annotation key: 'category' value: 'accessing'! BasicBlock method! dominates: aBasicBlock ^ dominates includes: aBasicBlock! Annotation key: 'category' value: 'accessing'! BasicBlock method! liveIn ^ liveIn! Annotation key: 'category' value: 'accessing'! BasicBlock method! liveOut ^ liveOut! Annotation key: 'category' value: 'accessing'! BasicBlock method! addInstruction: anInstruction anInstruction basicBlock: self. (anInstruction isKindOf: ExitInstruction) ifTrue: [exits add: anInstruction. exits doOperands: [:label | label basicBlock entrances add: anInstruction] ifKindOf: Label]. instructions add: anInstruction! Annotation key: 'category' value: 'building'! BasicBlock method! doSuccessors: aBlock entrances do: [:entrance | entrance doOperands: [:label | aBlock value: label basicBlock] ifKindOf: Label]! Annotation key: 'category' value: 'analyzing'! BasicBlock method! countSuccessors | count | count _ 0. self doSuccessors: [:successor | count _ count + 1]. ^ count! Annotation key: 'category' value: 'analyzing'! BasicBlock method! doPredecessors: aBlock exits do: [:exit | aBlock value: exit basicBlock]! Annotation key: 'category' value: 'analyzing'! BasicBlock method! countPredecessors | count | count _ 0. self doPredecessors: [:predecessor | count _ count + 1]. ^ count! Annotation key: 'category' value: 'analyzing'! BasicBlock method! meetPredecessors: valuatorBlock with: meetingBlock | meeting | self doPredecessors: [:predecessor | (depthFirstNumber > predecessor depthFirstNumber) ifTrue: [meeting notNil ifTrue: [meeting _ meetingBlock value: meeting value: (valuatorBlock value: predecessor)] ifFalse: [meeting _ valuatorBlock value: predecessor]]]. ^ meeting! Annotation key: 'category' value: 'dataflow'! BasicBlock method! meetSuccessors: valuatorBlock with: meetingBlock | meeting | self doSuccessors: [:successor | (depthFirstNumber > succcessor depthFirstNumber) ifTrue: [meeting notNil ifTrue: [meeting _ meetingBlock value: meeting value: (valuatorBlock value: successor)] ifFalse: [meeting _ valuatorBlock value: successor]]]. ^ meeting! Annotation key: 'category' value: 'dataflow'! BasicBlock method! unitePredecessors: valuatorBlock ^ self meetPredecessors: valuatorBlock with: [:x :y | x union: y]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! intersectPredecessors: valuatorBlock ^ self meetPredecessors: valuatorBlock with: [:x :y | x intersection: y]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! uniteSuccessors: valuatorBlock ^ self meetSuccessors: valuatorBlock with: [:x :y | x union: y]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! intersectSuccessors: valuatorBlock ^ self meetSuccessors: valuatorBlock with: [:x :y | x intersection: y]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! collectOutputOperands | outputVariables | outputOperands _ Set new. instructions do: [:instruction | instruction doOutputOperands: [:operand | outputOperands add: operand] ifKindOf: LocalVariable]. ^ outputOperands! Annotation key: 'category' value: 'dataflow'! BasicBlock method! collectInputOperands | inputOperands | inputOperands _ Set new. instructions do: [:instruction | instruction doInputOperands: [:operand | inputOperands add: operand] ifKindOf: LocalVariable]. ^ inputOperands! Annotation key: 'category' value: 'dataflow'! BasicBlock method! computeLiveIn liveIn _ self intersectPredecessors: [:predecessor | predecessor liveIn union: predecessor collectOutputOperands]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! computeLiveOut liveOut _ self uniteSuccessors: [:successor | successor liveOut union: successor collectInputOperands]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! computeKilledOperands | liveOperands operandMask killedOperands | liveOperands _ liveOut copy. instructions reverseDo: [:instruction | killedOperands _ 0. operandMask _ 1. instruction doOutputOperands: [:operand | liveOperands remove: operand ifAbsent: [killedOperands _ killedOperands bitOr: operandMask]. operandMask _ operandMask bitShift: 1] ifKindOf: LocalVariable. instruction doInputOperands: [:operand | (liveOperands includes: operand) ifFalse: [killedOperands _ killedOperands bitOr: operandMask. liveOperands add: operand]. operandMask _ operandMask bitShift: 1] ifKindOf: LocalVariable. instruction killedOperands: killedOperands]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! refineLiveIn | inputOperands | inputOperands _ self collectInputOperands. liveIn removeAllSuchThat: [:localVariable | (inputOperands includes: localVariable) not and: [(liveOut includes: localVariable) not]]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! refineLiveOut | outputOperands | outputOperands _ self collectOutputOperands. liveOut removeAllSuchThat: [:localVariable | (outputOperands includes: localVariable) not and: [(liveIn includes: localVariable) not]]! Annotation key: 'category' value: 'dataflow'! BasicBlock method! splitCriticalEdge: anInstruction atLabel: aLabel | newBasicBlock newExit | newBasicBlock _ BasicBlock new initialize. newBasicBlock addInstruction: (JumpInstruction new operands: (Labels new basicBlock: aLabel basicBlock)). ^ newBasicBlock! Annotation key: 'category' value: 'restructuring'! BasicBlock method! splitCriticalEdges | insertedBasicBlocks | insertedBasicBlocks _ LinkedList new. (self countSuccessors > 1) ifFalse: [^ insertedBasicBlocks]. exits do: [:exit | exit doOperands: [:label | (label basicBlock countPredecessors > 1) ifTrue: [insertedBasicBlocks add: (self splitCriticalEdge: exit withLabel: label)]] ifKindOf: Label]. ^ insertedBasicBlocks! Annotation key: 'category' value: 'restructuring'! BasicBlock method! computeDepthFirstNumber: currentDepthFirstNumber depthFirstNumber _ currentDepthFirstNumber. self doSuccessors: [:successor | (successor depthFirstNumber) isNil ifTrue: [currentDepthFirstNumber _ successor computeDepthFirstNumber: currentDepthFirstNumber + 1]]. ^ currentDepthFirstNumber! Annotation key: 'category' value: 'dataflow'! BasicBlock method! computeDominators: dominators | selfDominators newDominators | selfDominators _ dominators at: self. selfDominators add: self. self doSuccessors: [:successor | dominators at: successor ifPresent: [:succDominators | ifTrue: [newDominators _ succDominators intersection: selfDominators. newDominators size = succDominators size ifFalse: [dominators at: successor put: newDominators. successor computeDominators: dominators]]] ifAbsent: [dominators at: successor put: selfDominators copy. successor computeDominators: dominators]]. selfDominators remove: self! Annotation key: 'category' value: 'dataflow'! Class named: 'Instruction' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'basicBlock operands killedOperands ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Instruction method! basicBlock ^ basicBlock! Annotation key: 'category' value: 'accessing'! Instruction method! basicBlock: aBasicBlock basicBlock _ aBasicBlock! Annotation key: 'category' value: 'accessing'! Instruction method! operands ^ operands! Annotation key: 'category' value: 'accessing'! Instruction method! operands: anArray operands _ anArray! Annotation key: 'category' value: 'accessing'! Instruction method! killedOperands ^ killedOperands! Annotation key: 'category' value: 'accessing'! Instruction method! killedOperands: aBitMask killedOperands _ aBitMask! Annotation key: 'category' value: 'accessing'! Instruction method! killOperand: anInteger killedOperands _ killedOperands bitOr: (1 bitShift: anInteger)! Annotation key: 'category' value: 'dataflow'! Instruction method! killsOperand: anInteger ^ killedOperands anyMask: (1 bitShift: anInteger)! Annotation key: 'category' value: 'dataflow'! Instruction method! translateOn: aTranslator self subclassResponsibility! Annotation key: 'category' value: 'translating'! Instruction method! outputOperands self subclassResponsibility! Annotation key: 'category' value: 'analyzing'! Instruction method! inputOperands ^ self operands size - self outputOperands! Annotation key: 'category' value: 'analyzing'! Instruction method! doOutputOperands: aBlock operands from: 1 to: self outputOperands do: aBlock! Annotation key: 'category' value: 'analyzing'! Instruction method! doOutputOperands: visitBlock if: predicateBlock self doOutputOperands: [:operand | (predicateBlock value: operand) ifTrue: [visitBlock value: operand]]! Annotation key: 'category' value: 'analyzing'! Instruction method! doOutputOperands: aBlock ifKindOf: aClass self doOutputOperands: aBlock if: [:operand | operand isKindOf: aClass]! Annotation key: 'category' value: 'analyzing'! Instruction method! doInputOperands: aBlock operands from: self outputOperands + 1 to: operands size do: aBlock! Annotation key: 'category' value: 'analyzing'! Instruction method! doInputOperands: visitBlock if: predicateBlock self doInputOperands: [:operand | (predicateBlock value: operand) ifTrue: [visitBlock value: operand]]! Annotation key: 'category' value: 'analyzing'! Instruction method! doInputOperands: aBlock ifKindOf: aClass self doInputOperands: aBlock if: [:operand | operand isKindOf: aClass]! Annotation key: 'category' value: 'analyzing'! Instruction method! doOperands: aBlock operands do: aBlock! Annotation key: 'category' value: 'analyzing'! Instruction method! doOperands: visitBlock if: predicateBlock self doOperands: [:operand | (predicateBlock value: operand) ifTrue: [visitBlock value: operand]]! Annotation key: 'category' value: 'analyzing'! Instruction method! doOperands: aBlock ifKindOf: aClass self doOperands: aBlock if: [:operand | operand isKindOf: aClass]! Annotation key: 'category' value: 'analyzing'! Class named: 'PseudoInstruction' superclass: 'Instruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! Class named: 'UnaryInstruction' superclass: 'Instruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! UnaryInstruction method! outputOperands ^ 1! Annotation key: 'category' value: 'analyzing'! UnaryInstruction method! inputOperands ^ 1! Annotation key: 'category' value: 'analyzing'! Class named: 'BinaryInstruction' superclass: 'Instruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! BinaryInstruction method! outputOperands ^ 1! Annotation key: 'category' value: 'analyzing'! BinaryInstruction method! inputOperands ^ 2! Annotation key: 'category' value: 'analyzing'! Class named: 'SideEffectInstruction' superclass: 'Instruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! SideEffectInstruction method! outputOperands ^ 0! Annotation key: 'category' value: 'analyzing'! Class named: 'MergeInstruction' superclass: 'PseudoInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! MergeInstruction method! translateOn: aTranslator aTranslator translateMerge: self! Annotation key: 'category' value: 'translating'! MergeInstruction method! outputOperands ^ 1! Annotation key: 'category' value: 'analyzing'! Class named: 'NotInstruction' superclass: 'UnaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! NotInstruction method! translateOn: aTranslator aTranslator translateNot: self! Annotation key: 'category' value: 'translating'! Class named: 'OrInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! OrInstruction method! translateOn: aTranslator aTranslator translateOr: self! Annotation key: 'category' value: 'translating'! Class named: 'AndInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! AndInstruction method! translateOn: aTranslator aTranslator translateAnd: self! Annotation key: 'category' value: 'translating'! Class named: 'XorInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! XorInstruction method! translateOn: aTranslator aTranslator translateXor: self! Annotation key: 'category' value: 'translating'! Class named: 'LogicalShiftRightInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! LogicalShiftRightInstruction method! translateOn: aTranslator aTranslator translateLogicalShiftRight: self! Annotation key: 'category' value: 'translating'! Class named: 'LogicalShiftLeftInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! LogicalShiftLeftInstruction method! translateOn: aTranslator aTranslator translateLogicalShiftLeft: self! Annotation key: 'category' value: 'translating'! Class named: 'ArithmeticShiftRightInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! ArithmeticShiftRightInstruction method! translateOn: aTranslator aTranslator translateArithmeticShiftRight: self! Annotation key: 'category' value: 'translating'! Class named: 'AddInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! AddInstruction method! translateOn: aTranslator aTranslator translateAdd: self! Annotation key: 'category' value: 'translating'! Class named: 'SubtractInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! SubtractInstruction method! translateOn: aTranslator aTranslator translateSubtract: self! Annotation key: 'category' value: 'translating'! Class named: 'MultiplyInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! MultiplyInstruction method! translateOn: aTranslator aTranslator translateMultiply: self! Annotation key: 'category' value: 'translating'! Class named: 'DivideInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! DivideInstruction method! translateOn: aTranslator aTranslator translateDivide: self! Annotation key: 'category' value: 'translating'! Class named: 'RemainderInstruction' superclass: 'BinaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! RemainderInstruction method! translateOn: aTranslator aTranslator translateRemainder: self! Annotation key: 'category' value: 'translating'! Class named: 'MoveInstruction' superclass: 'UnaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! MoveInstruction method! translateOn: aTranslator aTranslator translateMove: self! Annotation key: 'category' value: 'translating'! Class named: 'TruncateInstruction' superclass: 'UnaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! TruncateInstruction method! translateOn: aTranslator aTranslator translateTruncate: self! Annotation key: 'category' value: 'translating'! Class named: 'SignExtendInstruction' superclass: 'UnaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! SignExtendInstruction method! translateOn: aTranslator aTranslator translateSignExtend: self! Annotation key: 'category' value: 'translating'! Class named: 'ZeroExtendInstruction' superclass: 'UnaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! ZeroExtendInstruction method! translateOn: aTranslator aTranslator translateZeroExtend: self! Annotation key: 'category' value: 'translating'! Class named: 'ConvertInstruction' superclass: 'UnaryInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! ConvertInstruction method! translateOn: aTranslator aTranslator translateConvert: self! Annotation key: 'category' value: 'translating'! Class named: 'LoadInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! LoadInstruction method! outputOperands ^ 1! Annotation key: 'category' value: 'analyzing'! LoadInstruction method! translateOn: aTranslator aTranslator translateLoad: self! Annotation key: 'category' value: 'translating'! Class named: 'StoreInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! StoreInstruction method! translateOn: aTranslator aTranslator translateStore: self! Annotation key: 'category' value: 'translating'! Class named: 'PushInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! PushInstruction method! translateOn: aTranslator aTranslator translatePush: self! Annotation key: 'category' value: 'translating'! Class named: 'PopInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! PopInstruction method! outputOperands ^ 1! Annotation key: 'category' value: 'analyzing'! PopInstruction method! translateOn: aTranslator aTranslator translatePop: self! Annotation key: 'category' value: 'translating'! Class named: 'AllocateInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! AllocateInstruction method! translateOn: aTranslator aTranslator translateAllocate: self! Annotation key: 'category' value: 'translating'! Class named: 'FreeInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! FreeInstruction method! translateOn: aTranslator aTranslator translateFree: self! Annotation key: 'category' value: 'translating'! Class named: 'PrologueInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! PrologueInstruction method! translateOn: aTranslator aTranslator translatePrologue: self! Annotation key: 'category' value: 'translating'! Class named: 'EpilogueInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! EpilogueInstruction method! translateOn: aTranslator aTranslator translateEpilogue: self! Annotation key: 'category' value: 'translating'! Class named: 'SpillInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! SpillInstruction method! translateOn: aTranslator aTranslator translateSpill: self! Annotation key: 'category' value: 'translating'! Class named: 'ReloadInstruction' superclass: 'SideEffectInstruction ' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! ReloadInstruction method! outputOperands ^ 1! Annotation key: 'category' value: 'analyzing'! ReloadInstruction method! translateOn: aTranslator aTranslator translateReload: self! Annotation key: 'category' value: 'translating'! Class named: 'ClobberInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! ClobberInstruction method! outputOperands ^ 1! Annotation key: 'category' value: 'analyzing'! ClobberInstruction method! translateOn: aTranslator anAssembler clobberSpill: self! Annotation key: 'category' value: 'translating'! Class named: 'ExitInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! Class named: 'JumpInstruction' superclass: 'ExitInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! JumpInstruction method! translateOn: aTranslator aTranslator translateJump: self! Annotation key: 'category' value: 'translating'! Class named: 'CallInstruction' superclass: 'SideEffectInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! CallInstruction method! translateOn: aTranslator aTranslator translateCall: self! Annotation key: 'category' value: 'translating'! Class named: 'ReturnInstruction' superclass: 'ExitInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! ReturnInstruction method! translateOn: aTranslator aTranslator translateReturn: self! Annotation key: 'category' value: 'translating'! Class named: 'BranchInstruction' superclass: 'ExitInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! Class named: 'BranchEqualInstruction' superclass: 'BranchInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! BranchEqualInstruction method! translateOn: aTranslator aTranslator translateBranchEqual: self! Annotation key: 'category' value: 'translating'! Class named: 'BranchNotEqualInstruction' superclass: 'BranchInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! BranchNotEqualInstruction method! translateOn: aTranslator aTranslator translateBranchNotEqual: self! Annotation key: 'category' value: 'translating'! Class named: 'BranchLessInstruction' superclass: 'Instruction ' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! BranchLessInstruction method! translateOn: aTranslator aTranslator translateBranchLess: self! Annotation key: 'category' value: 'translating'! Class named: 'BranchLessEqualInstruction' superclass: 'BranchInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! BranchLessEqualInstruction method! translateOn: aTranslator aTranslator translateBranchLessEqual: self! Annotation key: 'category' value: 'translating'! Class named: 'BranchGreaterInstruction' superclass: 'BranchInstruction' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! BranchGreaterInstruction method! translateOn: aTranslator aTranslator translateBranchGreater: self! Annotation key: 'category' value: 'translating'! Class named: 'BranchGreaterEqualInstruction' superclass: 'BranchInstruction ' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Instructions'! BranchGreaterEqualInstruction method! translateOn: aTranslator aTranslator translateBranchGreaterEqual: self! Annotation key: 'category' value: 'translating'! Class named: 'StorageClass' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'byteSize ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! StorageClass method! byteSize ^ byteSize! Annotation key: 'category' value: 'accessing'! StorageClass method! byteSize: anInteger byteSize _ anInteger! Annotation key: 'category' value: 'accessing'! StorageClass method! bitSize ^ byteSize * 8! Annotation key: 'category' value: 'accessing'! StorageClass method! bitSize: anInteger byteSize _ anInteger / 8! Annotation key: 'category' value: 'accessing'! Class named: 'FloatStorageClass' superclass: 'StorageClass' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Class named: 'IntegerStorageClass' superclass: 'StorageClass' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Class named: 'PointerStorageClass' superclass: 'StorageClass' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Class named: 'Storage' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: 'storageClass ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Storage method! storageClass ^ storageClass! Annotation key: 'category' value: 'accessing'! Storage method! storageClass: aStorageClass storageClass _ aStorageClass! Annotation key: 'category' value: 'accessing'! Class named: 'Constant' superclass: 'Storage' indexedInstanceVariables: #none instanceVariableNames: 'value ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Constant method! value ^ value! Annotation key: 'category' value: 'accessing'! Constant method! value: anObject value _ anObject! Annotation key: 'category' value: 'accessing'! Class named: 'Label' superclass: 'Storage' indexedInstanceVariables: #none instanceVariableNames: 'basicBlock ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Label method! basicBlock ^ basicBlock! Annotation key: 'category' value: 'accessing'! Label method! basicBlock: anObject basicBlock _ anObject! Annotation key: 'category' value: 'accessing'! Class named: 'RegisterClass' superclass: 'Object' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Class named: 'Register' superclass: 'Storage' indexedInstanceVariables: #none instanceVariableNames: 'registerClass name ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Register method! name ^ name! Annotation key: 'category' value: 'accessing'! Register method! name: aString name _ aString! Annotation key: 'category' value: 'accessing'! Register method! registerClass ^ registerClass! Annotation key: 'category' value: 'accessing'! Register method! registerClass: aRegisterClass registerClass _ aRegisterClass! Annotation key: 'category' value: 'accessing'! Class named: 'CompositeRegister' superclass: 'Register' indexedInstanceVariables: #none instanceVariableNames: 'components ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! CompositeRegister method! components ^ components! Annotation key: 'category' value: 'accessing'! CompositeRegister method! components: aRegisterArray components _ aRegisterArray! Annotation key: 'category' value: 'accessing'! Class named: 'Variable' superclass: 'Storage' indexedInstanceVariables: #none instanceVariableNames: 'offset ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Variable method! offset ^ offset! Annotation key: 'category' value: 'accessing'! Variable method! offset: anInteger offset _ anInteger! Annotation key: 'category' value: 'accessing'! Class named: 'GlobalVariable' superclass: 'Variable' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Class named: 'LocalVariable' superclass: 'Variable' indexedInstanceVariables: #none instanceVariableNames: 'register ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! LocalVariable method! register ^ register! Annotation key: 'category' value: 'accessing'! LocalVariable method! register: aRegister register _ aRegister! Annotation key: 'category' value: 'accessing'! Class named: 'InputOutputVariable' superclass: 'Variable' indexedInstanceVariables: #none instanceVariableNames: 'register ' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! InputOutputVariable method! register ^ register! Annotation key: 'category' value: 'accessing'! InputOutputVariable method! register: aRegister register _ aRegister! Annotation key: 'category' value: 'accessing'! Class named: 'InputVariable' superclass: 'InputOutputVariable' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'! Class named: 'OutputVariable' superclass: 'InputOutputVariable' indexedInstanceVariables: #none instanceVariableNames: '' classVariableNames: '' sharedPools: '' classInstanceVariableNames: ''! Annotation key: 'comment' value: ''! Annotation key: 'package' value: 'Squeampiler-Representation'!