DragonOpcodes1XEROXToFromDragonCore^.paRussAtkinsonPARC-CSLSubjectDateDragonOpcodesDecember17,1984PathName/Indigo/Dragon/Documentation/DragOps.tiogaLasteditedbyRussAtkinsononDecember17,19845:36:21pmPSTAbstractThisdocumentdescribestheDragoninstructionsetasseenbythemachinecodeprogrammerandcompilerbuilder.Attributestechnical,Cedar,DragonDragonOpcodesCopyrightc1984byXeroxCorporation.Allrightsreserved.ThisdocumentisaDRAFT,andmostoftheinformationinitisvolatile.ThisdocumentisalsoINCOMPLETE,andshouldbeviewedwithsomesuspicion.RevisionsarecurrentlybeingsentthroughRussAtkinson.pïfÇî ìîëqïfÇîHDrïfþîû sïb î ìïb î*ßqï`eî ì ï`eî*ßî.“ï^¾î*ßî/8î06sïTÒî ìïTÒî*ßqïS*î ìî-ïS*î*ßî1ùî4msïL�î ìî ­qïL�î¬ð*sïJæî ìî �ïJæî¬qîKïJæïJæîHîÿîîDî&^î(Òî,oî1™î4sïG—î ìqïG—î¬î îî"ùî%§î+ î2�î5î7-î:ãî= î?»îEÛïEðî ì îRî?îRsïB¡î ì qïB¡î¬ înî5tï2î ìî4qï-"î ìuî¯ï-"qï-"î•î2î8î{ î%‘î'¸î+Ûï)Óî ìî $îîšvîáï)Óï)Óî+qîÛï)Óï)Óî¿î ªî$Eî&î(� î0Uî2î3Hî4Òî:¼î=õîDàîFjvï(,î ì qî-ï(,ï(,îîäî©î¶î$›î'°î+˜ î3î9¡î<'îBLîFTï&„î ìîzî.=TVm$ DragonOpcodes2IntroductionTheDragonisamulti-processorgeneralpurposecomputercurrentlyunderdevelopmentintheComputerScienceLaboratoryatXeroxPARC.MostofthepartswillwillbefabricatedincustomCMOS.TheDragonwillhaveasharedaddressspaceof2^3232-bitwords.Itshouldhaveveryhighperformanceatrelativelylowcost.EachDragonprocessorhastwologicalparts,theIFU(instructionfetchunit)andtheEU(executionunit).TheIFUfetchesinstructionsanddirectstheEUtoperformarithmetic,logical,shifting,fetching,andstoringoperations.Therearealsotwocachesonmemory,onefortheIFUandonefortheEU.ADragonwordis32-bitswide.InthisdocumentwefollowtheMesaconventionofnumberingthebitsfromlefttoright,sothatthemostsignificantbithasindex0,andtheleastsignificantbithasindex31.ThiscorrespondstotheMesadeclaration:Word:TYPE=PACKEDARRAY[0..32)OFBOOL;TheremainderofthisdocumentassumessomefamiliaritywiththeMesalanguage,sinceweuseittodescribedataformatsandtheeffectofinstructions.TherearesomechangesassociatedwithputtingMesaonDragon,detailedin[Indigo]Doc>DragonMesaChanges.tioga.EUstateTheEUperformsvariousoperationsonlocalregisters,andcommunicateswiththeoutsideworldthroughacacheattachedtoabus(theM-bus).TheEUhasa32-bitALU,aFieldUnit(FU)forshiftingandotherfieldoperations,andamultiplierunit.TheEUhasasetofregistersthatcontainthemostrecentelementsofthedatastackforaprocess.Therearealsoregistersthatcontainconstants,aswellasspecialpurposequantities.Thisarchitecturepermitsmostelementaryoperationsinvlovinglocalvariablestobeperformedin1EUcycle.However,thisarchitecturerequiresspecialattentiontomigratingthecontentsofaprocessstackbetweenregistersandmemory.TheEUhasthefollowingregisters:Stackdenotesthestackregisters(ARRAY[0..StackSize)OFWord)StackSize=128incurrentversion.Localsdenotesthelocalregisters(Locals[x]==Stack[(x+L)MODStackSize])notethatLocalsisaliasedwithStack.AuxRegsdenotestheauxilliaryregisters(ARRAY[0..15]OFWord).Mostoftheseregisterswillbeusedforruntimesupportforhigher-levellanguages(i.e.Mesa).ConstantsisanarrayofregistersintheEU(ARRAY[0..11]OFWord).Althoughtheseregistersarenotreallyconstantasfarasthehardwareisconcerned,theyareusedtoholdconstantsintheMesaruntime.TheyaremoregeneralthantheAuxRegsinthattheycanbeusedinmoreaddressingmodes.Fielddenotesaspecialregisterthatcanbeusedtocontrolthefieldunitoperations,andalsoparticipatesinmultiplicationanddivision.MAR(MemoryAddressRegister)denotestheregisterwhichholdstheaddressgiveninthelastmemoryoperation.ItisusedtoreportEUpagefaults.pïfÇî ìîëqïfÇîHDwïaùî ì xï^¨î ìî ¨îŒîÜîêî�î"8î'_î-nî30î7 î?+î@¾îCï]î ìîð îîÂîóî!Pî$èî&¯î)î,”î/Nî2î4 î:‚îœîCéïSçî ìî £î4 î¾îÀîî!àî$Œî(Üî*âî0¨î3Tî5‘î7ðî:ÿî=¶î@bîBŸîDÿïQjî ìî pîfîæîIî¼îØîžî"7î(›î*ºî.éî1@î4à î;éî=™îD—îFíïOÃî ìî UîÍî~î*îðîÁî#î‚ î&î(<î*³î.�î0î2Êî5,î8T î>îîAîC…îGRïNî ìî  î§îUîµî^ ïKŸîyîsïKŸïKŸî,xïKŸîåyîÊïKŸïKŸîrïKŸîxïKŸî!Àyî%áïKŸïKŸî&¾ïKŸî'ûxî+&ïKŸïKŸïI#î ìî ÝîŽîaîî¡î$î'´ î.oî1£î4î7ßî>îA¢îCãîFqîGàïG{î ìîrî™îºî”îî!î"Þ î+]î/�î1öî5«î:ú îAˆîDÅïEÔî ìî •îœîóî+qîÙïEÔïEÔîRð+wï?5î ìî ëxï;äî ìî ®î#îêîœ î 4î"%î%V î*ûî-œ î6~î9ƒî;Íî@�îDWï:<î ìî î÷î}î6îkî îïî"Àî%£î(8î*¸î+ìî/îî3äî5î8Áî<î?�îAØîFØï8•î ìî ‹î» îÂîyî£ î"ï6î ìî ±î)îŒî£î­îSî£î_î#+î%xî(Âî,Óî2{î4"î6nî9aî<Áî>ìî@îE�ï4qî ìî FîîƒîXî> î"‘î$Fî':î(ïî-rî2» î9ðî= îDšï2Êî ìî t î° î‰î!¼î%-î+î,íî/ î5ùî7Òî92î;èî@�îFíï1#î ì îqîÁî@î! î"¼î(ôî+Wî0Éî2…î3²î8‰î<îArîFØï/{î ìï,ÿî ìî ÄîOîÄî#î5 zï*‚îxï*‚îòîýî\îÏî"2yî"«ï*‚ï*‚î#xï*‚î'R yî/­ï*‚ï*‚î0‰xï*‚î1Çzï(î1î‰înîîªî#Xï%‰îxï%‰îiîtîÓîî"| î(»î, yî4ï%‰ï%‰î5xï%‰î7] zï# î1î/îî[îÇî"Bî%=ï �îxï �îÙîÝî4 î!4î&�yî'ï �ï �î'Üxï �î+§yî/ªï �ï �î0†xï �î1¼î6íî:mî<î? îDûîGžïéîîJîˆî¿îËî  î'’î-Ýî0’zïlîxïlîhîåîæîîIî"½î$|î&ìî)ˆyî*ïlïlî*Õxïlî.¹yî2Ôïlïlî3±xïlî4ÿî:bî@’îD,ïÅîî^îÏî•îîªîÍî!wî#Óî)×î+? î2,î58î7‡î:¿î€î@¦îDîEüïvî îÒzïúîxïúîªîßî3îØî!àî$Øî'�î)§î- î.åî3Áî6Jî9¤î<² îCáîFÂïRî îXî îÒî"‰zïÖîxïÖîòîîpî#\î(wî*æî/Ôî3ñî7¶î:%î?îBâîD îGï.îî| î�îøîdî  î"Nî&rî(üî,C ŠTVm$iDragonOpcodes3IFUstateTheIFUturnsastreamofvariable-lengthinstructionsintosignalsthatcontroltheEU.Italsoperformsaddresscalculationsusedforjumps,callsandreturns.TheIFUcontainsasmallstackofthemostrecentprocedurecontexts.AprocedurecontextfortheIFUissimplyaprogramcounter(PC)andanindexintotheEUstackgivingthebaseofthelocalvariables.TheIFUhasthefollowingregisters(actuallymorethanthese,butforsimplicity):PCistheprogramcounter(abyteaddress).Instructionspaceislimitedto2^32bytes(roughly4gigabytes),eventhoughthefullDragonaddressspaceis2^32words.Sisthestackpointer(a7-bitindexintoStack).Manyinstructionstakeoperandsimplicitlyusingthestack.Procedurecallsusethestackforargumentsandreturns.Lgivesthebaseofthelocalframe(a7-bitindexintoStack).Thefirst16registersatoraboveLareeasilyaddressablethroughDragoninstructions.SLimitgivesthelimitforS.AstackoverflowoccurswhenSisincrementedtoreachorexceedSLimit.StatushastherestoftheabstractstateoftheIFU.Itcontrolswhethertrapsareenabled,whetheraresheduleiswaiting,andretainspartofthefloatingpointstate.SeetheProcessorRegisterssectionformoredetails.pïfÇî ìîëqïfÇîHDwïbî ìî }xï^¶î ìî »îÂîBîcîËî{î#Ø î+/î-þî2eî5+î9Ôî<+î?€î@ïîC³ï]î ìîÖ î@î|îºî 5î#Dî%üïZ“î ìî ¹î½îî5îÈî1îßî!3î$…î(žî/î55î6·î=/îAùîD+îF€ïXìî ìî XîÈîñî€î�îÇî!~î#oî'9î*î,qî.üî2oî6‘î8ðî< î=Äî@#îCj ïVqî ìî ÄîÓîHî§îºî î%¬î)?î,eî0Gî2Èî5 zïSöîxïSöîsîÚî4î¾îºî Yî#dî)™ î0‘î4Aî5¨î:Vî;ÿî?@îBÐîHZïROî îÝî$î×î7î!Âî&Áî+«î/aî0Ìî4zïOÔîxïOÔîgîËî#îŽîOîêî )î#ìî&¼î+·î/¦ î6ýî9ïî?Î îEåïN,îînî½îJîYî Îî#.î&¡î(Þî/Œî2DzïK±îxïK±î‘î îxî�îaîËî î$î%Ìî)î,ôî/×î4÷î7Úî:½î<­îBîC¾îE�ïJ îîzîÎî˜ î÷î"/î'. zïG�îxïG�îµî-î“îàî#î Wî!êî%cî+î/dî3 î4qî5ã î=Íî?‚îC>îEïEèîzïCmîxïCmî1î—îçîyî"îrî"zî%œî'Eî)•î-aî.Éî3ñî9/î<ˆî>ÌîDAïAÅîîVî©î3î|îRî#àî&áî(¸î+6î0^î4î8dî;zî=•ïAÅïAÅî>}îCÇxï@îî«îèî{3TVm$õDragonOpcodes4InstructionformatsThissectiondescribesthevariousinstructionformats.Notethatthedescription[0..255]specifiesanunsignednumberoccupying8bits,while[-128..127]specifiesasignednumberoccupying8bits.Thedescriptionoftheinstructionformatgivestentativebitassignments,followedbyaroughdescriptionofhowtheformatisinterpreted.ArithmeticinvolvingSorLwillalwaysbeperformedmodulothesizeoftheEUstack,withoutdetectionofunderfloworoverflow.Wewillnotfurtherindicatethislimitationofprecision.Forconvenience,weusethefollowingabbreviationstorefertonumbersobtainedfrombytesthatfollowtheopcodebyte:Alphaisthefirstbyteaftertheopcode.AlphaZisAlphaextendedto32bitswithhigh-order0s.AlphaSisAlphasign-extendedto32bitswiththehigh-orderbitofAlpha.Betaisthesecondbyteaftertheopcode.BetaZisBetaextendedwith0s.BetaZisBetasign-extendedto32bitswiththehigh-orderbitofBeta.Whentakenasapairoffourbitnumbers,BetaListheleftmosthalfofBeta,andBetaRistherightmosthalf.Gammaisthethirdbyteaftertheopcode.Deltaisthefourthbyteaftertheopcode.AlphaBetaistheunsignedunalignedhalfwordfollowingtheopcodebyte,interpretedasAlpha+Beta*256.AlphaBetaZisAlphaBetaextendedto32bitswith0s.AlphaBetaSisAlphaBetaextendedto32bitswiththesign(high-order)bitofAlphaBeta.AlphaBetaGammaDeltaisthe32-bitunsignedunalignedquantityfollowingtheopcodebyte.ThenumberisinterpretedasAlphaBeta+256*256*(Gamma+Delta*256).OI-OperationImplicit[op:[0..255]]--1byteForOIinstructionstheoperand(ifany)isimplicitintheopcode.OB-OperationByte[op:[0..255],lit:[0..255]]--2bytesForOBinstructionstheoperandisgivenbyAlphaZorAlphaS.ODB-OperationDoubleByte[op:[0..255],lit:[0..65535]]--3bytesForODBinstructionstheoperandisgivenbyAlphaBetaZorAlphaBetaS.OQB-OperateQuadByte[op:[0..255],addr:Word]--5bytesForOQBinstructionstheoperandisAlphaBetaGammaDelta.JBB-JumpByteByte[op:[0..255],lit:[0..255],dist:[-128..127]]--3bytesForJBBinstructionsthenewPCisthebyteaddressgivenbyPC+BetaS.AlphaZisusedforpïfÇî ìîëqïfÇîHDwïaùî ì îWxï^ªî ìî 0î÷î î’î„ î&‰î,¸î0Yî3Qî5Ú î=îAûîGžï]î ìîàî$îÉîî &î#ò î*žî0/î1pî5Öî;îA¿îC îF·ï[[î ì îîÇî/ îî –î$î)³î+Ù î3Îî9{î;î<±î@¼ îGÖïY´î ìî ðîPîËî7 ïW8î ì îÁî¸îóî¦îîœî!ñî#Ñî*„î/Šî1Ùî4tî6î8kî:åî> îC›ïU‘î ìî ¥î=îîŒîîÂî"7î&ßî, î.­ î4íî6¦ ïSî ìî ‹ î£î¾î&îyî!~ î)äî+†î.Êî0kî6î;´î?îB•îEWïQnî ìî KîzïNóîxïNóîîyî×î®î¼îöî!Tzî&öïNóïNóî'ôxïNóî+õî-_î1€î7gî9î:÷î=—î@± îG~zïMLîxïMLîíîYî| î!<î"ëî$Ðî'qî*Œî,ë î3»î5Øî7‘zïJÑîxïJÑî�î-îÍîŸîðî!lî$ zî*1ïJÑïJÑî+$xïJÑî.¢î0Nî3³î9Üî=7zî@MïJÑïJÑîA@xïJÑîD½îFiïI)î î³îGîî—î—î!Ü î(�î*’î,0î/üî3ùî7žî91î:?î<ýî>›îA„îC†zïG‚îxïG‚î4î îÿîMîîÓî#Pzî&ïG‚ïG‚î&ûxïG‚î*8î+¤î.î4-zïEîxïEîî‰îèîQîaî œî"üzî(¡ïEïEî)´xïEî,Wî-Ãî0"î4\î7lî:¨î=zïB‹îxïB‹î¶îîoîCî$›î*cî0lî2Ãî7ƒî:â îAëîC�îGªï@äîzîKï@äï@äîIxï@äî7îßî%àî,î-ñî0î2ñî6Izî9Xï@äï@äî:Uxï@äîA"îBËï?=îî÷î¥îŠî,îFî¦î"‰ î*Kî,hî.! zï<Áîxï<ÁîtîØî 0î$ î)õî0Nî5¶î;Áî>îBÚîF·ï;îî;î¦ î¹îgî$+î& î1Yî3> {ï5Pî ìî î î‰xï2îîñzï2î”î î@xï/…îîºîÖ î5î•î!øî#Òî&ìî(Xî-cî/î1q{ï,6î ìî ƒî vîøxï(çîîñîî7zï(çîÚîQî †xï&lîîºî9 î˜îøî"[î#Çî'{î)wî.�î0E{ï#î ìî —îŠî îÓxïÎîîñîî7 zïÎî;î ²î!æxïSîîºîX î·îî#zî$æî(šî*– î2Aî4 {ïî ìî ¢î•îãî¢xïµîîñîîºzïµî�î î!9xï9îîºîL î¬î î#oî$Ú{ïêî ìî îîÄîÿxï ›îîñîî7îKî e zï ›î'âî)Yî*Žxï îîÑîÖ îMîÃî Èî#3î$¶î'-î*Tî/Uî3 î53î=ZîB{îCþîGRrTVm$‹DragonOpcodes5comparisonwiththetopofstack.LR-LocalRegister[op:[0..15],reg:[0..15]]--1byteForLRinstructionstheoperandisLocals[reg],whichiseitherpushedtoorpoppedfromthestack.LRB-LocalRegisterByte[op:[0..15],reg:[0..15],disp:[0..255]]--2bytesFortheseinstructions,theoperandis(Locals[reg]+AlphaZ)^,whichiseitherpushedtoorpoppedfromthestack.LRRB-LocalRegisterRegisterByte[op:[0..255],disp:[0..255],reg1,reg2:[0..15]]--3bytesForallinstructions,reg1(BetaL)indicatesalocalregister.ForRRIandWRI,reg2(BetaR)indicatesalocalregisteraswell.ForRAIandWAI,reg2indicatesanauxilliaryregister.RR-RegistertoRegister[op:[0..255],aOpt,cOpt,bOpt,aux:BOOL,b:[0..15],c,a:[0..15]]--3bytesFortheseinstructionstheeffectisroughlyRc_RaopRb.SEisusedtoindicatetheeffectoftheinstructiononS.SE_0atthestartoftheinstruction,andS_S+SEattheendoftheinstruction.Ra:IFNOTaOptTHENIFauxTHENAuxRegs[a]ELSELocals[a]ELSESELECTaFROM<12=>Constants[a]12=>Stack[S];13=>Stack[S-1];14=>Stack[S];SE_SE-115=>Stack[S-1];SE_SE-1Rb:IFNOTbOptTHENIFauxTHENAuxRegs[b]ELSELocals[b]ELSESELECTbFROM<12=>Constants[b]12=>Stack[S];13=>Stack[S-1];14=>Stack[S];SE_SE-115=>Stack[S-1];SE_SE-1Rc:IFNOTcOptTHENIFauxTHENAuxRegs[c]ELSELocals[c]ELSESELECTcFROM<12=>Constants[c]12=>Stack[S];13=>Stack[S-1];14=>Stack[S+1];SE_SE+115=>Stack[S+1];SE_SE+1pïfÇî ìîëqïfÇîHDxïb2î îmî‡îçî\î{ï^ãî ìî Uî Hî(xï[“îîñîTî,zï[“îî•îÊxïYîîÞîw îûîî#î$– î,î04î1Åî5Õî:Äî<–î>îC¤îG/ïWpî{ïT î ìî Hî;îî‰xïPÐîîñîTî,î�î zïPÐî%¤î'î(PxïNTîî¥î î¼îî#Uî$¬î3iî7bî8¹î<�îAEîBßîDŽïL­îîuîÕ{ïI]î ìîFî9îî†îôxïF îîñîîxî‹ î$özïF î)èî+_î,”xïC’îîñî îîNî#…î)nî*Ïî.Mî4v|î7YïC’ïC’î81xïC’î:�|î=ŒïC’ïC’î>dxî@ïC’ïC’îA'îDnïAêîî¿îéî/îî¼î"…|î%0ïAêïAêî&xïAêî(<|î*ôïAêïAêî+Ìxî-{ïAêïAêî.Xî1gî7î9 î?{ï>›î ìî lî _îÌî…xï;Kîîñîyî# ï;Kï;Kî#Äxî&6ï;Kï;Kî'î(×î-:î/Ðzï;Kî4Âî69î7nxï8Ïîî¯î- î‚îÖî!—î"øî(î,×î.Óî1íî4î5vî8§î:Jî?lîAÁîE�îG/ï7(î îàîÞîóîÕîeî »î#Âî%rî'È î.òî1¡î7Âî9Qî;¨î>Vî@îB\ ï4¬îyîºï4¬ï4¬î$ï4¬îbxï4¬îdyï3îï3îå}ï3îŒyî-ï3ï3îæ}ï3îó yî#Eï3ï3î#þ}ï3î&”yï1[îï1[în}ï1[îAyîkï1[ï1[î$}ï/³î1îeîJï/³îd ï. î1îï. îdyîùï. }ï. î˜ï,cî1îï,cîdyîùï,c}ï,cî˜ï*»î1îï*»îdyîùï*»}ï*»î˜yï*»î"º}î$ï*»yï*»î%}î&sï*»ï*»î&íï)î1îï)îdyîùï)}ï)î˜yï)î"º}î$ï)yï)î%}î&sï)ï)î&íxï&—îyîÜï&—ï&—îFï&—îƒxï&—î†yï$ïîï$ïîå}ï$ïîŒyî-ï$ïï$ïîæ}ï$ïîó yî#gï$ïï$ïî$ }ï$ïî&¶yï#Fîï#Fîn}ï#FîAyî�ï#Fï#FîF}ï!žî1îeîJï!žîd ïöî1îïöîdyîùïö}ïöî˜ïNî1îïNîdyîùïN}ïNî˜ï¦î1îï¦îdyîùï¦}ï¦î˜yï¦î"º}î$ï¦yï¦î%}î&sï¦ï¦î&íïþî1îïþîdyîùïþ}ïþî˜yïþî"º}î$ïþyïþî%}î&sïþïþî&íxï‚îyî°ï‚ï‚îï‚îWxï‚îYyïÚîïÚîå}ïÚîŒyî-ïÚïÚîæ}ïÚîó yî#;ïÚïÚî#ô}ïÚî&Šyï1îï1în}ï1îAyî`ï1ï1î}ï‰î1îeîJï‰îd ïáî1îïáîdyîùïá}ïáî˜ï9î1îï9îdyîùï9}ï9î˜ï‘î1îï‘îdyîùï‘}ï‘î˜yï‘î"º}î$ï‘yï‘î%}î&sï‘ï‘î'Ôï éî1îï éîdyîùï é}ï éî˜yï éî"º}î$ï éyï éî%}î&sï éï éî'ÔÿúTVm$ñDragonOpcodes6QR-QuickRegister[op:[0..255],spare0,spare1,bOpt,aux:BOOL,b:[0..15]]--2bytesFortheseinstructionstheeffectisroughly[S]_[S]opRb,whereRbisdecodedasforRRformat.Thisformatisthe"quick"registerformatbecauseittakesuplessspacethantheRRformat,whilecoveringmanyofthesamecases,andwewanttoemphasizethatshorterinstructionsarequicker,sincemorecanfitintheIFUcachethanthelongervariety.Actually,wejustwantedawordthatbeganwithQ.RJB-RegisterJumpByte[op:[0..255],sdd,sd,opt,aux:BOOL,reg:[0..15],dist:[-128..127]]--3bytesFortheseinstructionstheeffectistojumptothebytePCgivenbyPC+BetaSiftheindicatedcomparisionofRawithRbistrue.BetaisdecodedasmuchaspossibleinthesamewaythatBetaisdecodedfortheRRformatinstructions.Thecomparisionisalwaysmadeinvolvingeither[S]or[S-1]witharegisterdeterminedbythedecodingofBeta.SEisusedasintheRRformatdescription.IFsddTHENSE_SE-1Ra:IFsdTHENStack[S-1]ELSEStack[S]Rb:IFNOToptTHENIFauxTHENAuxRegs[reg]ELSELocals[reg]ELSESELECTregFROM<12=>Constants[reg]12=>Stack[S];13=>Stack[S-1];14=>Stack[S];SE_SE-115=>Stack[S-1];SE_SE-1pïfÇî ìîëqïfÇîHD{ïb0î ìî üîxï^áîîñîyî$Îï^áï^áî%‡xî'ùï^áï^áî(Õî*šzï^áî/Œî1î28xï\fîî®î, î€îÔî!•î"õî'ÿî,›î.—î18î5Dî7�î8îî>]î?ÿîB1îD¼ïZ¿îîNîïî€îîWî$[î(ûî.Cî/¾î3bî5™î8Tîbî@îByîEïE†î yïC îxïC î¶yîLïC ïC îïC îxîjïC yïC îrxîËïC ïC îDï@�îyîºï@�ï@�î$xï@�îbyî1ï@�ï@�îêxï@�î÷yî‹ï@�xï@�î*yî;ï@�ï@�îõxï@�î!Šyî%ï@�xï@�î%¾ï>îyï>îÁï>îixï>îkyïîAVïQnîîæîRî±î îÙî!Gî&}{ïNî ìîî£zïJÐî ìïJÐî¬ïJÐîm|ïHUî ìxïHUî¬ïHUîmïEÙî î™ îË|ïC^î ìxïC^î¬ïC^îmï@ãîî>î× î#! |ï>gî ìxï>gî¬ï>gîmï;ìîîbîü î!G|ï9qî ìxï9qî¬ï9qîmï6öîî¢|îtï6öxï6öîKî¬î&¯|ï4zîxï4zîkîîÇî€îàî¸îìî%[ |ï1ÿî ìxï1ÿî¬ï1ÿîmï/„îî¢î‡î“ î&¾|ï-î ìxï-î¬ï-îmï*�îî¢î‡î|î!ˆî.T|ï(î ìxï(î¬ï(îmï%—îî¢î‡îRî ^î4G|ï#îxï#îòî^îvî´î�î"” |ï  î ìxï  î¬ï  îmï%îî¢îî+ î"¥|ï©î ìxï©î¬ï©îmï.îî­îî7 î  {ïßî ìîî‘zï�î ìï�î¬ï�îm|ïî ìxïî¬ïîmï šîî¢î>î~î2'ï îîî5î“îÀî`î aî$uî)¯ î2�î4¦î7Þî9~î<·î=ÒîAæîEÏÿ]TVm$,DragonOpcodes8butatleastitisquitelarge(64Kframes).Thedecisiontousethisinstructionisnotentirelyfinal,sinceLIQBmaybepreferable.LRInLRB16LoadRegisterIndirectn.[S+1]_([L+n]+AlphaZ)^;S_S+1.PSBOB1PutSwappedByte.([S-1]+AlphaZ)^_[S];S_S-1.QRXQR1ReadRegisterindeXed.[S]_([S]+Rb)^.RAILRRB1ReadAuxilliaryregisterIndirect.[L+BetaL]_(AuxRegs[BetaR]+AlphaZ)^.RBOB1ReadByte.[S]_([S]+AlphaZ)^.RRILRRB1ReadRegisterIndirect.[L+BetaL]_([L+BetaR]+AlphaZ)^.RRXRR1ReadRegisterindeXed.Rc_(Ra+Rb)^.RSBOB1ReadSaveByte.[S+1]_([S]+AlphaZ)^;S_S+1.SRInLRB16StoreRegisterIndirectn.([L+n]+AlphaZ)^_[S];S_S-1.WAILRRB1WriteAuxilliaryregisterIndirect.(AuxRegs[BetaR]+AlphaZ)^_[L+BetaL].WBOB1WriteByte.([S]+AlphaZ)^_[S-1].S_S-2.WRILRRB1WriteRegisterIndirect.([L+BetaR]+AlphaZ)^_[L+BetaL].WSBOB1WriteSwappedByte.([S-1]+AlphaZ)^_[S];S_S-2.ArithmeticandlogicalAllarithmeticisperformedusing32-bit2s-complementarithmetic.ProvisionsaremadeforextendedprecisionarithmeticbyusingCarryforsomeinstructions.Integeroverflowisdetectedandtrappedformostarithmetic.Overflowisdefinedtooccurforadditionifthetwooperandshaveequalsignandthesignoftheresultisnotequaltothesignoftheoperands.Overflowcannotoccurforadditioniftheoperandsignsdiffer.Overflowisdefinedforsubtractionbyconsideringittobeadditionwithmodifiedoperands.Somelangauges,especiallyLisp,needtodistinguishbetweennumbersandaddresseswithinaword.TheconventioninDragonistoprovidecheckingforLispNaN(NotaNumber),whichisdefinedtooccurwhenthetwotopbitsofawordarenotequal.LispNaNcheckingisperformedonbothoperandsandpïfÇî ìîëqïfÇîHDxïb*îî‚îî&îoîÎîJî¤î"î'Ìî*—î/âî1ƒî3ëî6€ î=Nî>¬îAîFï`ƒî|î�ï`ƒï`ƒîYxï`ƒîeîiîY |ï^î ìxï^î¬ï^îmï[�îî¢îî1îXî/\|ïYî ìxïYî¬ïYîmïV–îîšîƒî�î(c|ïTî ìxïTî¬ïTîmïQ îî­îî| |ïO%î ìxïO%î¬ïO%îmïLªîî­ îîöî"ÿð#|ïJ/î ìxïJ/î¬ïJ/îmïG´îî­îº|ïE9î ìxïE9î¬ïE9îmïB¾îî­îî|ï@Cî ìxï@Cî¬ï@Cîmï=Çîî­îî| |ï;Lî ìxï;Lî¬ï;Lîmï8Ñîî­îôîî'¼|ï6Vî ìxï6Vî¬ï6Vîmï3Ûîî­îî=îdî-V|ï1`î ìxï1`î¬ï1`îmï.åîîï îZî8î#@ð#|ï,jî ìxï,jî¬ï,jîmï)ïîîïîûî$2|ï'tî ìxï'tî¬ï'tîmï$ùîîïîRî[|ï"}î ìxï"}î¬ï"}îmï îîïîØîäî)¸{ï´î ì îºîZxïeî ìî X îôîyîVîî#* î,É î4Z î; î=wîAPîC¦ï½î ìîÈ îKîGîñîÑî"î%¡ ïBî ìî©îXîÃî>îõî# î%Iî(¥ î0î6 î7uî#îAãîD ï›î ìî Tî »îoî^î¬îtî ^î#î%„î(oî*/î,–î0iî1Üî4Yî8!î9×î<>î?(î@éîCPïôî ìîÿî†îRî›î î!‚î#ìî)[î,Îî1‹î7žî9î>!î@j îG“ïLî ì î?î–îDî5î£î¾î$šï Ñî ìî ° î@ îcîÃî!î"« î)Šî.æî4…î7*î=,îA_îBvîF·ï *î ì îî»îÃî6îìîÿî%Ãî(î+*î.¡î1óî3%î9‡î=œî?îDîEÎï ƒî ìî œî÷îŸîî­îaî†î î Yî"Êî']î*rî-Ýî3”î4ûî;»î=½î@ôîFØçTVm$™DragonOpcodes9results.NameformatopcodesADDOI1ADD.[S-1]_[S]+[S-1]+Carry;Carry_0;S_S-1.Traponintegeroverflow.ADDisanabbreviationforRADD[S-1],[S-1],[S]-.ADDBOB1AddByte.[S]_[S]+AlphaZ+Carry;Carry_0.Traponintegeroverflow.ADDDBODB1AddDoubleByte.[S]_[S]+AlphaBetaZ+Carry;Carry_0.Traponintegeroverflow.BCOI1BoundsCheck.Boundschecktrapif[S-1]<0OR[S-1]-[S]>=0;S_S-1.NochangetoCarry.BCisanabbreviationforRBC[S-1],[S-1],[S]-.LADDOI1LispADD.[S-1]_[S]+[S-1];Carry_0;S_S-1.TraponintegeroverfloworLispNaN.LADDisanabbreviationforRLADD[S-1],[S-1],[S]-.LSUBOI1LispSUBtract.[S-1]_[S-1]-[S];Carry_0;S_S-1.TraponintegeroverfloworLispNaN.LSUBisanabbreviationforRLSUB[S-1],[S-1],[S]-.QADDQR1QuickADD.[S]_[S]+Rb+Carry;Carry_0.Traponintegeroverflow.QADDisanabbreviationforRADD[S],[S],Rb.QANDQR1QuickAND.[S]_[S]ANDRb.QANDisanabbreviationforRAND[S],[S],Rb.QBCQR1QuickBoundsCheck.BoundsChecktrapif[S]<0OR[S]-Rb>=0.NochangetoCarry.QBCisanabbreviationforRBC[S],[S],Rb.QLADDQR1QuickLispADD.[S]_[S]+Rb;Carry_0.TraponintegeroverfloworLispNaN.QLADDisanabbreviationforRLADD[S],[S],Rb.QLSUBQR1QuickLispSUBtract.[S]_[S]-Rb;Carry_0.TraponintegeroverfloworLispNaN.QLSUBisanabbreviationforRLSUB[S],[S],Rb.QORQR1QuickOR.[S]_[S]ORRb.QORisanabbreviationforROR[S],[S],Rb.QSUBQR1QuickSUBtract.[S]_[S]-Rb-Carry;Carry_0.Traponintegeroverflow.QSUBisanabbreviationforRSUB[S],[S],Rb.RADDRR1pïfÇî ìîëqïfÇîHDxïb2î ìzï]<î ìï]<î¬ï]<îm|ïZÀî ìxïZÀî¬ïZÀîmïXEîî_î!Sî';î,î/7î1î5„|î;¹ïXEïXEî<‘xïXEî>šî?ÛîA¡ ïV�î|îLïV�ïV�î#xïV�î/îÃîV|ïT"î ìxïT"î¬ïT"îmïQ§îî)î5î$ùî+nî.Ëî0Ñî5n|ïO+î ìxïO+î¬ïO+îmïL°îî)îî*î,�î3î6aî8hî=|ïJ4î ìxïJ4î¬ïJ4îmïG¹îîîOîYî!Eî$4î%Ÿî(åî*%yî+dïG¹ïG¹î,@xïG¹î-£î2ðî5�î7Iî<~î>ëîCžîEW|ïFîxïFîBî®îž î�|îÊïFïFî¢xïFî Öî$iî'ý|ïC–î ìxïC–î¬ïC–îmïAîî)îÐî 2î&Eî+fî.Ãî0Éî5fî;î<Ùî?ô|îD?ïAïAîExïAîH#ï?sîîÿ îí|î*ï?sï?sîxï?sîæî"yî& |ï<øî ìxï<øî¬ï<øîmï:|îî,îî!î'•î,»î0î2$î6Ãî=îAZ|îE«ï:|ï:|îFƒxï8Õîîzîj îY|î–ï8Õï8Õînxï8Õî Rî#åî'y|ï6Zî ìxï6Zî¬ï6Zîmï3Þîîî³î#¸î*î-pî/mî4|î:{ï3Þï3Þî;Sxï3Þî>Vî?¹îA¡ ï27î|îLï27ï27î#xï27î/î™î|ï/»î ìxï/»î¬ï/»îmï-@îî&îÑyîxï-@ï-@îKxï-@îž|î!Îï-@ï-@î"¦xï-@î%²î'î) î0ü|î39ï-@ï-@î4xï-@î7î9‡î;ñ|ï*Åî ìxï*Åî¬ï*Åîmï(Iîî;îOî˜î!¬î&î(ýî*rî,˜î-áî/)î1ßî4î5î7î:(îØîC”îEW|ï&¢îxï&¢îî†îv îe|î¢ï&¢ï&¢îzxï&¢î!®î$î&�|ï$&î ìxï$&î¬ï$&îmï!«îî&î?îä î"4î(¨î,î. î2¥î8Sî:î=/|îAyï!«ï!«îBPxï!«îF4îGžï î îý|î:ï ï îxï îöî_î!É|ïˆî ìxïˆî¬ïˆîmï îî1îUî8 î#¬î*6î-œî/¬î4Sî: î;Úî>þ|îC]ï ï îD5xï îH#ïeîîÿ îí|î*ïeïeîxïeîæî!Pî#¹|ïêî ìxïêî¬ïêîmïnîî&î£yîJïnïnî'xïnî|î¯ïnïnî ‡xïnî"»î$'î& î.|î0Bïnïnî1xïnî3Nî5¸î8"|ïóî ìxïóî¬ïóîmïxîîîÈî#ùî*Pî-�î/”î4!|î:Žïxïxî;fxïxî>cî?¿îA¡ ï Ðî|îLï Ðï Ðî#xï Ðî/î™î|ï Uî ìxï Uî¬ï Uîm;TVm$oDragonOpcodes10RegisterADD.Rc_Ra+Rb+Carry;Carry_0.Traponintegeroverflow.RANDRR1RegisterAND.Rc_RaANDRb.RBCRR1RegisterBoundsCheck.BoundsChecktrapifRa<0orRa-Rb>=0;Rc_Ra.Carrynotaffected.Thisinstructionisusedtocheckindexesagainstbounds.Itisalsousedwhenanumberisnarrowedtofitintoasubrange.NotethatifRb=FIRST[INT],RBCwillfaultwhenRa<0,whichisusefulforassignmentsbetweenINTandCARD.RDIVOI1RemainderDIVide.[S-2],[S-1]=[S-2],[S-1]RDIV[S];S_S-1.Initially,x=[S-2],[S-1](mostsignificantwordin[S-2]),y=[S],then[S-2]_q;[S-1]_r;wherex=q*y+r,and|r|<|y|,andSign[r]=Sign[x].Divideoverflowtraponoverflowordividebyzero.RLADDRR1RegisterLispADD.Rc_Ra+Rb;Carry_0.TraponintegeroverfloworLispNaN.RLSUBRR1RegisterLispSUBtract.Rc_Ra-Rb;Carry_0.TraponintegeroverfloworLispNaN.RORRR1RegisterOR.Rc_RaORRb.RSUBRR1RegisterSUBtract.Rc_Ra-Rb-Carry;Carry_0.Traponintegeroverflow.RUADDRR1RegisterUnsignedADD.Rc_Ra+Rb+Carry;Carry_adderCarryOut.Notrap.RUSUBRR1RegisterUnsignedSUBtract.Rc_Ra-Rb-Carry;Carry_NOT[adderCarryOut].Notrap.RVADDRR1RegisterVanillaADD.Rc_Ra+Rb;Carrynotaffected.Notrap.RVSUBRR1RegisterVanillaSUBtract.Rc_Ra-Rb;Carrynotaffected.Notrap.RXORRR1RegisterXOR.Rc_RaXORRb.SMULOI1SignedMULtiply.[S-1],[S]_[S-1]*[S].Signedmultiplication,32x32->64bits.Notrapspossible.SUBOI1SUBtract.[S-1]_[S-1]-[S]-Carry;Carry_0;S_S-1.Traponintegeroverflow.SUBisanabbreviationforRSUB[S-1],[S-1],[S]-.SUBBOB1SubtractByte.[S]_[S]-AlphaZ-Carry;Carry_0.Traponintegeroverflow.pïfÇî ìîëqïfÇîG~xïb2îîqîî%^î+Óî//î16î5Ò|ï_·î ìxï_·î¬ï_·îmï]<îîqîyîûï]<ï]<îÎxï]<î !|ïZÀî ìxïZÀî¬ïZÀîmïXEîîŽîªîî# î'‚î*‚î+ÿî.Oî/ î0ñî2Òî5!î6;î8¬î;^î=)îCîGïVžîïT"îî_ îqîî‡îlî#…î(°î-ƒî3¬î5[î6ýî:î=sîA_îBÀîH#ïR{îîCîîîîÝîî#î&�î)tî*ëî-Vqî/RïR{ïR{î0#xî6xïR{ïR{|î7kïR{ïR{î8CxïR{î:Žî=Pî@¢îDnîF·îHïPÔîîîˆî îÞ î!sqî&âïPÔïPÔî'ExïPÔî)¤qî,[ïPÔïPÔî-Xxî0EïPÔïPÔ|ïNXî ìxïNXî¬ïNXîmïKÝîîTîy î!íî#ü yî*pïKÝïKÝî+DxïKÝî. î0Áî65 î;×î=6î?E îE¹ïJ6î î³îHîîî]î!Nî#Äî&÷î*?î+Øî-©î0ñî2Šî4î8=î9~î;pî>(î@îA‡îDKîFîGRïHŽîîÆî6îî’î!î&Èî)¬î+²î1aî3%î7Tî9O|ïFî ìxïFî¬ïFîmïC˜îîqî‹î2î#»î*0î-�î/“î4/î9ßî;¢î>½|ïAî ìxïAî¬ïAîmï>¡îîqî‹î[î$ýî+rî.Îî0Ôî5qî; î<äî?þ|ï<&î ìxï<&î¬ï<&îmï9ªîîqîîyîÍï9ªï9ªî©xï9ªî|ï7/î ìxï7/î¬ï7/îmï4´îîqîAî%¸î,-î/‰î1�î6,|ï28î ìxï28î¬ï28îmï/½îîqî¦îMî+’ î3Ùî:Þî=@|ï-Bî ìxï-Bî¬ï-Bîmï*Æîîqî¦î uî+ìyî0Qï*Æï*Æî1:xî2Ïï*Æï*Æî32î7 î>|î@ß|ï(Kî ìxï(Kî¬ï(Kîmï%Ïîîqî.îÕî%^î)>î+³î1Çî4)|ï#Tî ìxï#Tî¬ï#Tîmï Ùîîqî.îþî&Ÿî*€î,õî3î5k|ï]î ìxï]î¬ï]îmïâîîqî÷yîÖïâïâîªxïâîÞ|ïgî ìxïgî¬ïgîmïëîî–îéîÿî ‚ î&Áî+Iî4bî:Øî>@î@˜îCõ|ïpî ìxïpî¬ïpîmïõîîmî#î'-î)î*÷î0§î4Kî6™î;}|îB—ïõïõîCoxïõîEëîGžïMî îý|î:ïMïMîxïMîî±î#E|ï Òî ìxï Òî¬ï Òîmï WîîŠî–î%‹î)lî*ùî- î0fî2lî7ÿ”TVm$1DragonOpcodes11SUBDBOB1SubtractDoubleByte.[S]_[S]-AlphaBetaZ-Carry;Carry_0.Traponintegeroverflow.UDIVOI1UnsignedDIVide.[S-2],[S-1]=[S-2],[S-1]UDIV[S];S_S-1.Initially,x=[S-2],[S-1](mostsignificantwordin[S-2]),y=[S],then[S-2]_q;[S-1]_r;wherex=q*y+r,andrŸ|ï]<î ìxï]<î¬ï]<îmïZÀîî|î¿ î!Bî#a yî)äïZÀïZÀî*ÊxïZÀî-¡î0eî5ø î;ªî=î?6 îE¹ïYî îÂîgî0îYîªî!«î$0î'rî*Éî,rî.Rî1©î3Rî4ðî9$î:tîîB»îEŽîF²îHïWrîîäî¼îæîZîîèî$æî+´î0“î6cî9hî;�îA_îCDîG“ïUÊî{ïR{î ìî iî@ xïO,î ìî °îÌî›î´îíî!] î'Qî)ôî/Mî0òî5Yî6½î:&î<¾îAîC±ïM…î ìî 0î öî™î×îâîÿîyî#Fî%î&^î)¨ î0ˆî4°î7Vî9aî? îCîHeïKÝî ìîîëîÏî'î§î!eî&dî(2î*²î.Xî1Qî5î:î<¹î>ÊîAîEîG/|ïJ6î ìxïJ6î Ð îîÇ|î'ïJ6ïJ6îþxïJ6î3îÑ zïG»î ìïG»î¬ïG»îm|ïE?î ìxïE?î¬ïE?îmïBÄîî­îšî�îœï@Iîî2îöî¤îCîñî#œî%ûî), î/˜î1Öî2ÿî60î9 |ï=Íî ìxï=Íî¬ï=Íîmï;Rîîqîî'î&“î)?ï8×îî*îUî)îE î Èî&Ýî+³î/×î2�î6ˆî9bî=îAáîG/ï7/îî? |ï4´î ìxï4´î¬ï4´îmï29îîÅî–î%î'‡ î/(ï/½îî$îIîäî—î!ªî%‘î)šî/Öî1€î3Ûî7 î=oî? îF°îH#ï.î îIîhî¬î +î%×î)’î,ÿî./î1î2Íî79î9î>¯|îCLï.ï.îD$xï.îF^ï,oîîƒîOî®îM|ï)óî ìxï)óî¬ï)óîmï'xîîÅîšî Îî"[ ï$ýîî$îIîäî—î!ªî%‘î)šî/Öî1€î3Ûî7 î=oî? îF°îH#ï#Uî îGîdî¥îŸî"pî(1î)‹î,î.ëî1éî4Žî7äî=6î@jîBîCKîFØï!®îî)î|îÐï!®ï!®î¨xï!®îÜî î�î"Mî$¬î(K|ï3î ìxï3î¬ï3îmï·îîÅîwî!«î$ ï<îî$îIîäî—î!ªî%‘î)šî/Öî1€î3Ûî7 î=oî? îF°îH#ï•î îIîgîªî¥î#Tî({î,æî/£ î5ÿ|î:›ï•ï•î;sxï•î=­î@ãîC^îG/ïíîî­{ïžî ìî åî˜îr zïOî ìïOî¬ïOîm|ï Ôî ìxï Ôî¬ï Ôîmï Xîî)î×î àTVm$IDragonOpcodes12Thisinstructionisespeciallyusefulforsavingandrestoringstackframes,butmayhaveotherexoticuses.ALSOB1AddtoLfromStack.S_L+Alpha.Thisinstructionisusedatprocedureentrytoestablishthebaseofthelocalframe.ASOB1AddtoStack.S_S+AlphaZ.Stackoverflowisnotcheckedbythisinstruction,soitisprimarilyusefulfordiscardingwordsfromthestack.ASLOB1AddtoStackfromL.S_L+AlphaZ.Stackoverflowisnotcheckedbythisinstruction,soitisprimarilyusefulfordiscardingwordsfromthestackwhenthedistancefromLisknown,butScouldbeatanylevel.DISOI1DIScard.S_S-1.ThisisprimarilyusedasanabbreviationforAS255.UnconditionaljumpsNameformatopcodesDJOQB1DirectJump.PC_AlphaBetaGammaDelta.JBOB1JumpByte.PC_PC+AlphaS.JDBODB1JumpDoubleByte.PC_PC+AlphaBetaS.JnO*4nIN{1,2,3,5}.JumpstobyteaddressPC+n.Thesejumpinstructionsareimplementedasnulloperationsforspeed.J4isnotanopcodebecausethereareno4byteopcodes.SJOI1StackJump.PC_PC+[S].S_S-1.Thisoperationisusefulforcomputedjumps.ConditionaljumpsEachofthefollowingconditionaljumpstakestwoopcodes:onewherethepredictionistonotjump(notrailingJtotheopcode),andonewherethepredictionistojump(atrailingJtotheopcode).Comparisontreatsthetwonumbersas32-bitsignednumbers,unsignedcomparisonsbeingjudgedlesscommon.NameformatopcodesJEBBjJBB2JumpEqualByteByte.IFBetaZ=[S]THENPC_PC+AlphaS.S_S-1.JNEBBjJBB2JumpNotEqualByteByte.IFBetaZ#[S]THENPC_PC+AlphaS.S_S-1.pïfÇî ìîëqïfÇîG~xïb2îîQ îUîé î Gî$ˆî&îî+Oî./î4î7®î<ªî?TîB€îEðï`‹îî|ï^î ìxï^î¬ï^îmï[•îî)î×îCîªî; ïYîî( îîoî«îDî$Çî(Zî* î/¤î2î5î6Öî96î<||ïVŸî ìxïVŸî¬ïVŸîmïT$îî)î×îi ïQ©îîäzî³ïQ©ïQ©îî>îÁxïQ©î!î# î%á î-4î/î0�î2î85îÊ îE‚ïPîîuîÕ|ïM†î ìxïM†î¬ïM†îmïK îî)î×î�îôî; ïH�îîäzî³ïH�ïH�îî>îÁxïH�î!î# î%á î-4î/î0�î2î85îÊ îE‚ïFéîîuîÕîHîýî\î"ªî&î'}î(éî-Çî0Hî1“î5^î7Oî8èî;ˆ|ïDmî ìxïDmî¬ïDmîmïAòîîdî…îŸî î$î'Cî(ñî*â î2Ð|î5 ïAòïAòî5åxïAòî7A{ï>¤î ì îÔzï;Uî ìï;Uî¬ï;Uîm|ï8Úî ìxï8Úî¬ï8Úîmï6_îîHîû|ï3ãî ìxï3ãî¬ï3ãîmï1hîîåîñ |ï.íî ìxï.íî¬ï.íîmï,rîîåîÚîç|ï)÷î ìxï)÷î¬ï)÷îm|ï'|îyï'|îxï'|îkî½î_îîëî[î î#Cî(B|î+rï'|xï'|î,Iî-Óî1êî5ž î=î?z îGáï%Õîîæ î”îÒî�î ^î!Êî$?î&/î*ùî0î3¤î5÷î7ýî92îî?gîA îCyîGï™î ìîŠîŠîîYîÕîmîùî!òî$3 î*¡î+îî-}î0ýî2�î7î8î9®î;îîAÎ ïòî ìî ¡îî­î]î îî"Rî([î.7 î6î9åî>wîA zïwî ìïwî¬ïwîm|ïüî ìxïüî¬ïüîmï�îîåîçîyî$ï�ï�îŽxï�îËî"Øî$½yî&Ïï�ï�î'ˆxï�î*” î6a|ï î ìxï î¬ï îmï ‹îîåî¶î¸îéyîõï ‹ï ‹î _xï ‹î!œî%©î'Žyî) ï ‹ï ‹î*Yxï ‹î-e î93ÿ?TVm$üDragonOpcodes13RJEBjRJB2RegisterJumpEqualByte.IFRa=RbTHENPC_PC+AlphaS.RJGBjRJB2RegisterJumpGreaterByte.IFRa>RbTHENPC_PC+AlphaS.RJGEBjRJB2RegisterJumpGreaterEqualByte.IFRa>=RbTHENPC_PC+AlphaS.RJLBjRJB2RegisterJumpLessByte.IFRaî,‘î1“î4\î8|î:Àî=iîB#îC€îEÄï)&îî¼îî+îžîdî#Nî&]î)Ð |ï&«î ìxï&«î¬ï&«îmï$/îîÐîÃî¼î Üî$Yî*çî-0 î4¯î7“î;Íî>,î@ïîEÄîG;ï"ˆîîÙî‡îçîöîiî"/î'î*'î-š |ï î ìxï î¬ï îmï‘îî‡îÕî›î×î Ôî$¶î&{î)¡î-+î1/î7Þî:ÙîÊîB îC¶îGàï¤îî3î4îþîàîºî"î%¥î(0 î/+î2:î6 î<ÝîB¢îG<ïýî îéîÍîîsî  î&ïî([î.î/Æî2¿|ï‚î ìxï‚î¬ï‚îmï îîœî îMî#¤î%sî(¸î*½î.§î0uî3¤î77î;DîAüîDÿîF€ï _îî�îíî|î~îéîðî$˜î&F©TVm$9DragonOpcodes14FloatingpointunitoperationsDragonsupportsIEEEstandard32-bitand64-bitfloatingpointnumbers.ThefloatingpointinstructionsaredefinedinsuchawayastomakeiteasyfortheIFUtocontrolapairofWeitecfloatingpointchips(ALUandMultiplier).Doubleprecisionoperandsarestackedwiththehigherprecisionpartin[S-1],therestin[S].TheinterestingregistersinthefloatingpointchipsareshadowedbytheEU,andaresavedduringprocessswitch.SeeDragonFP.tiogaformoredetails.NameformatopcodesSFPOB1StoreFloatingPoint.[fpA]_[S];S-S-fpAdjust.StoresfromthestacktofloatingpointregisterA.Alphaisdecodedasfollows:Alpha[0]0=>fpAisinALUchip1=>fpAisinMultiplierchipAlpha[1]0=>StoretoA1=>FloatingpointmodecontrolAlpha[6..7]0=>Clearsflags;fpAdjust_01=>AoperandissingleREAL;fpAdjust_12=>AisdoubleREAL;fpAdjust_23=>AissingleINT;fpAdjust_1FLIPODB1FloatingpointInternaloP.[fpA]_[fpA]op[stack];S_S-fpAdjust.Performsaflotingpointoperation.AlphaBetaisdecodedasfollows:Alpha[0]0=>ALUoperation1=>MultiplieroperationAlpha[1]0=>resulttoALU1=>resulttoMultiplierAlpha[2..7]6bitfunctioncodeBeta[0..1]0=>noBoperand;fpAdjust_01=>Boperandissingle;fpAdjust_12=>Boperandisdouble;fpAdjust_2Beta[2..7]58-#ofwaitcyclesFLOPODB1FloatingPointOnstackoP.[stack]_[fpA]op[stack].JustlikeFLIP,butplacesresultontheEUstackinsteadofintothefloatingpointregisters.SpecialoperationsNameformatopcodesCSTOB1ConditionalSTore.Takes3wordsofdataonthestack:ptr=[S-2],new=[S-1],old=[S].[S+1]_(ptr+AlphaZ)^{hold};IF[S+1]=oldTHEN(ptr+AlphaZ)^_newELSE[]_(ptr+AlphaZ)^{releasehold};S_S+1.CSTisusedtoacheiveatomicmodificationofstoragethatissharedbetweenmultipleprocessors.Thesampledvalueispushedontothestacktobetestedagainsttheoldvalue.Iftheyareequalthestorewassuccessfulinupdatingthedesignatedword.INOB1pïfÇî ìîëqïfÇîG~{ïb0î ìîcîëî xï^áî ìîÙîWîî‹î!pî$î'úî,òî0~î6åî9«î>£îB/ ï]:î ìî 8î1îØîî%îõîœîCî ðî"?î%<î'rî)Êî,Òî.yî3$î4Gî7î8Êî=_îBbîEúï[’î ìîîÛ îèîóî#æî)ãî,Lî1Aî4rî6çî;LîA>îD8îEûïYëî ìî dîîãîîñ îÂî#=î%î'zî,�î0Tî4î6lî<æî>úîAqîDlîG;ïXDî ìî ·î'îûîî§ î(šî*Øî.kzïUÉî ìïUÉî¬ïUÉîm|ïSMî ìxïSMî¬ïSMîmïPÒîî­î&î«î?î Ëî#V ïNWîî2î™îøîkîî"$î%Ãî*¢î- î1-î2™î8î9ÁïLjî1ïLjî ?î!tî$ î&Öî(Bî)ðî-‚ïJÂî ?î!tî$ î&Öî(Bî)ð î0}ïHÔî1ïHÔî ?î!tî$ î'¨î)WïG-î ?î!tî$ î)‚î-!î0÷ïE?î1 ïE?î ?î!tî$ î(Bî+öî1§î34ïC˜î ?î!tî$ î%–î*ùî,eî0Pî5.î:ßî÷îB¤îE'îG&ïéîî²yî#ðïéïéî$Zxïéî&Ëî,"î/;yî2Øïéïéî3‘xïéî7ÑyîF@ïéïéîFùxïBîî¦îÜî#6|ïÇîxïÇîî€î¸îcîJî  î(Ãî*yî/(î1óî3[î7¾î=)îB  ï îîéîZîîtî Aî#tî%Öî)Kî*üî,ïî0êî5‰î7ëî:Wî>âî@fîCyîEÏï xîînîÊîv îÍî{î$Bî&¢ î-r|ï ýî ìxï ýî¬ï ýîmÿ¯TVm$ŠDragonOpcodes15INputoperation.[S]_([S]+AlphaZ)^;bypassescache.Detailstobesupplied.LIPOB1LoadfromInternalProcessorregister.[S+1]_PReg[Alpha];S_S+1.LIPreadsdatafromtheEUorIFUregisterindicatedbytheAlphabytetothestack.RegisterassignmentsaregivenbyDragOpsCross.ProcessorRegister.OUTOB1OUTputoperation.([S]+AlphaZ)^_[S-1];S_S-2;bypassescache.Detailstobesupplied.PINOB1PbusINputoperation.[S]_PBus[Alpha,[S]].Detailstobesupplied.Aninstructiontrapoccursifthisinstructionisexecutedinusermode.POUTOB1PbusOUTputoperation.[S]_PBus[Alpha,[S]];S_S-1.Detailstobesupplied.Aninstructiontrapoccursifthisinstructionisexecutedinusermode.SIPOB1StoretoInternalProcessorregister.PReg[Alpha]_[S];S_S-1.LIPstoresawordfromthetopofstackintoadesignatedEUorIFUregister.RegisterassignmentsaregivenbyDragOpsCross.ProcessorRegister.Aninstructiontrapoccursifthisinstructionisexecutedinusermode.ProcessorRegisters(Note:thisdescriptionispartial).IntheIFUweneedthefollowingregisters:Status-containsIFUandfloatingpointstatus.EachstatusfieldhasanaccompanyingbittoindicatewhetherthefieldshouldbesetbyanSIPinstruction.Traps{enabled,disabled}Reschedule{clear,waiting}Mode{kernel,user}fpAluA{clear,single,double,integer}fpMultA{clear,single,double,integer}EldestL-containseldestLintheIFUstack.EldestPC-containseldestPCintheIFUstack,readingthisregisterremovestheeldestentry,whilewritingthisregisteraddsaneweldestentry.YoungestL-containsyoungestLintheIFUstack.YoungestPC-containsyoungestPCintheIFUstack.Thisisusefulintraproutinesthatneedtoexaminecode,orincaseswherethetraproutinewantstoskiptheoffendinginstruction.SLimit-containscurrentstacklimit.TheIFUwilltrap(iftrapsareenabled)whenthestackisincrementedtoliein[SLimit..SLimit+15](modulo128arithmetic).L-containscurrentvalueofLregister.(Not:notavailablethroughLIPandSIP)S-containscurrentvalueofLregister.(Not:notavailablethroughLIPandSIP)IntheEUweneedthefollowingregisters:Field-FieldUnitControl.ThisregistergovernsthebehavioroftheRFUinstruction,andcanbesetbyeithertheFSDBorSIPFieldinstructions.MAR-MemoryAddressRegister.ThisregisterhasthelastaddressaccessedbytheEU.ItispïfÇî ìîëqïfÇîG~xïb*îî6 î<î%æî+�î0)î4Ðî6î8o|ï_¯î ìxï_¯î¬ï_¯îmï]3îî¢î î@î ^î&î3R|ïZ¸îxïZ¸î"îÉîÖîDî¬î >î" î%!î*î0î2î4mî8˜î;°î=fî?ÍîD,ïYî î¤î÷î«î§|ïV•î ìxïV•î¬ïV•îmïTîî© î®î(ƒî-Aî2Ûî7ƒî<+î=Ùî?Ê|ïQŸî ìxïQŸî¬ïQŸîmïO#îî‚îµ îÑî*,î.Þî0˜î2”î9î;u îB[îEJïM|îîoî îìîWî î!Âî$»|ïKî ìxïKî¬ïKîmïH…îî–îO î“î+”î0óî5ºî7‡î9—î@AîB´ ïFÞîîòî7î˜î9 î î!€î'=î(ëî+ä|ïDcî ìxïDcî¬ïDcîmïAçîî­î\î“î±î$kî/”|ï?lîxï?lîøî·î¾î$îiî§î úî"�î%áî(—î)Ÿ î0Lî2µî4Vî7Cî<¹îAù ï=ÅîîŽînî–î+»î.: î5Aî8Qî<Âî>OîA îH#ï<îîËîyîr{ï8Îî ìî@xï5î ìîUî÷ î îuï3î ìî »îî)îQî®î î ï1îîKîlîóî%îî$.î'ðî,êî0€î4zî7Îî:gîîÐî‡î )î#�î'šî)íî,Äî1€î5Tî6öî9×î<*îB\ ïÒîî¨î­îîéî!dî%•î(uî+Œî.?î1*î3 î6|î8×î>…îBAîD¨îH#ï+î1 îîÃî³îaî,6î1Åî4[ ï=îîzîxîÛî¥îNî î!szî&©ï=ï=î'"î*Tî,·î2\~î7lï=ï=î8Czï=î:w~î=ï=ï=î=òzî?¡ï=ï=xïOîîZîWî»î„î.îçî!Szî&ˆïOïOî'î*3î,—î2<~î7LïOïOî8#zïOî:V~î<úïOïOî=Ñzî?€ïOïOxïÔî ìî »îî¥îÍî)î‰î› ïåîî¤îšî0îcîCî"Uî'+î,7î.Žî46î5ç|î8>ïåïåî9xïåî;B îBlîEîGžï >î1îMîIî5|î•ï >ï >îmxï >î y|î"=ï >ï >î#xï >î%Iî(ç ï Pîî îîÀîî${î'¥î,“î/î1ˆî4î9î>›î@§îCîFœîH#TVm$ÒDragonOpcodes16usedinhandlingpagefaults,andshouldbethefirstthingreadonanEUPageFaultorWriteProtectFaulttrap.ThingsleftoutThereareseveralinstructionsleftoutoftheabovelist,forvariousreasons.Tofirstapproximationthesearethefloatingpointoperations.XOPsXopsaretheundefinedinstructionsintheinstructionset.Topermitefficientemulationofextendedinstructionsets,allXopsbehaveasprocedurecallstoanaddresslinearlydependentontheinstructioncode.Xopshavedifferentlengths,dependingontheinstructioncode.Xopsoflength2pushAlphaontothestack(high-orderbytesundefined),Xopsoflength3pushAlphaBetaontothestack(high-orderbytesundefined),andXopsoflength5pushAlphaBetaGammaDelta.Forimplementationreasonssomeundefinedoperationsdonottrap,butalsodonotproducewell-definedresults.TheseoperationswillbedetailedwhenthePLAfortheIFUissufficientlydetermined.TimingestimatesThissectiongivesapproximateminimalinstructiontimesforDragon.Simulationresultsindicateanestimateof2cyclesperinstructionisaconservativeguessforaveragetime.cyclesoperation36?UDIV19?SMUL8CST5conditionaljumpincorrectlypredicted5SFCI,SFC,SJ4SIP32,3,5byteXops3KFC,RETK21byteXops2conditionaljumpcorrectlypredictedtojump2JB,JDB,DJ,RET,RETN,LFC,DFC,EXCH1conditionaljumpcorrectlypredictedtocontinue1allothersAdditional1cycledelaysarecausedbythefollowing:*usingtheresultsofacachefetchonthenextEUcycle*aword-boundaryspanninginstructionwhentheinstructionbufferisempty(forexample,jumpingtoaninstructionthatspansawordboundary)Returnsaredelayeduntilpreviouscallsorreturnshavecompleted(3cyclesfromstartofpreviouscallorreturn).Thereareadditionaldelaysduetothefetch-aheadoftheinstructionbuffer.AtthestartofeveryIFUcycleafetch-aheadisperformedifthebusisnotbusyfromtheprevioususeoftheIFUcache.Thismaycausethebustobebusywhenthereisacachemiss,butotherwisedoesnotaddcycles.ForstraightpïfÇî ìîëqïfÇîG~xïb2î1î}î;îî ]î$…î'Lî+Øî-Ùî0Hî30î6Ôî9ÿî<î>î@°îDîGËï`‹î1îîÅîo{ï]<î ìî}îñxïYíî ìî ãî,î³ îîrî Ýî"‹î$àî(Øî+cî-–î2Sî7øî:î<â îFïXFî ìî ?îŸî©îI {ïTöî ìxïQ§î ìî šîî�î( î ¢î"jî$ã î+Øî/î1Fî5Ðî;CîAÔîC¦ïPî ì îÕîÝîÛî}î>îúî&‹î)©î+eî-dî2\î7^î>2î@FîB´ ïNYî ìî=îçîEîî /î' î)'î+ž î2�î6àî:‹î<[î@¬îA÷îElïL±î ìî îbîÇ îîŠ î$Üî(cî*î.<î/cî2´î9kî<Žî>àîBF ïK î ìî € îàî—î+îäî!î"Rî%¯ïH�î ìî  îFî î‡î$ý î+’î-�î/Þî3î5kî8î:îï#œï#œî+xî,Åï#œï#œ|î-¢ï#œï#œî.zxî0*ï#œï#œ|î1ï#œï#œî1Þï!®î¾xï!®ï!®î! î!Hî$çî*�î0¢î2Q|ïÀî¾xïÀïÀî!îïÉî ì îÆîûînîœîïî kî"gî$Ç ïÛîîÇîqîÐî îÙîî Ïî$Bî&Iî(¨î+¸î.Bïíîî:î� î‰î!Ÿ î(³î,¡î/: î6Nî:¶î<[î@ÎîC¾ïFî1îªîXîI î"$î$òî(²î)Üî-dïÊî ìî0î�î±îîŸî"»î$‹î)Jî,œî3Wî5î9î<ˆî?¤îAiîGï#î ìî °ï¨î ìî öîR îÑîîÇî~î!å î)Yî+î-� î4eî9î;ƒî=êîAîBÄîF€ï î ìî oî¨ î#îžîrîãî"Rî$øî&sî(øî,Nî/Åî24î7Óî:Xî< î>�îA®îFuï Yî ìî Þî‚îÐîTîñîÐîî¨î# î$zî%’î)Lî,¬î/î53î8Rî:µî=[îB îD¤ÿTVm$ÀDragonOpcodes17linecodetheinstructionbuffercanusuallykeepupwithcachemisses.WhentheFieldregisterissetbyanFSDBorSIPFieldinstruction,therewillbeadelayifthereisanattempttoperformanRFUinstructioninthenexttwocycles.ThisistoallowtheFieldcontentstimetoreachtheshadowregisterintheEU.FortheEUcache,assume6cyclesforwritingadirtyvictim,6cyclesforaquadread,and6cyclesforamapmiss.Thesewilltakemoretime,ofcourse,whenthereiscontentionbyotherprocessors.pïfÇî ìîëqïfÇîG~xïb2î ìî £îêîI î$îSîÞî$‘î'âî)ôî-î0Ûï_·î ìî îoîî÷îhî‹îŒ|î ‚ï_·ï_·î!Zxï_·î$k|î&5ï_·ï_·î' xï_·î)Fî,ê î4#î7²î:cîî,óî0|î1ç î8·î:³î>R ´TVm$þDragonOpcodes18InstructionMapThisinstructionmapshowsthecurrentplacementofinstructioncodesintheopcodespace.IthasbeenarrangedtominimizethedecodingdifficultyfortheIFU.Thismapissubjecttochange.formlen0123456700000:OI1xopxopxopxopxopxopxopxop00001:OI1xopxopxopxopxopxopxopxop00010:OI1xopxopxopxopxopxopxopxop00011:OI1xopxopxopxopxopxopxopxop00100:OQB5xopxopxopxopxopxopxopxop00101:OQB5xopxopxopxopxopxopxopxop00110:OQB5xopDFCLIQBxopxopxopJ5DJ00111:OQB5xopxopxopxopxopxopxopxop01000:OI1ORANDRXBCADDSUBLADDLSUB01001:OI1DUPDISEXCHEXDISSFCSFCIRETNxop01010:OI1xopSMULUDIVxopKFCxopJ1SJ01011:OI1LC0LC1LC2LC3LC4LC5LC6LC701100:LR1LR0LR1LR2LR3LR4LR5LR6LR701101:LR1LR8LR9LR10LR11LR12LR13LR14LR1501110:LR1SR0SR1SR2SR3SR4SR5SR6SR701111:LR1SR8SR9SR10SR11SR12SR13SR14SR1510000:QR2QORQANDQRXQBCQADDQSUBQLADDQLSUB10001:OB2ALSALASLASCSTxopRETRETK10010:OB2LIPSIPLIBSFPADDBSUBBJ2JB10011:OB2RBWBRSBWSBPINPOUTxopPSB10100:LRB2LRI0LRI1LRI2LRI3LRI4LRI5LRI6LRI710101:LRB2LRI8LRI9LRI10LRI11LRI12LRI13LRI14LRI1510110:LRB2SRI0SRI1SRI2SRI3SRI4SRI5SRI6SRI710111:LRB2SRI8SRI9SRI10SRI11SRI12SRI13SRI14SRI1511000:RR3RORRANDRRXRBCRADDRSUBRLADDRLSUB11001:RR3RXOR***RFU***RVADDRVSUBRUADDRUSUB11010:ODB3LGFLFCLIDBxopADDDBSUBDBJ3JDB11011:ODB3RAIWAIRRIWRIINOUTxopxop11100:RJB3***RJEBRJLBRJLEB***RJNEBRJGEBRJGB11101:RJB3***RJNEBJRJGEBJRJGBJ***RJEBJRJLBJRJLEBJ11110:JBB3JEBBJNEBBJEBBJJNEBBJxopxopxopxop11111:ODB3SHLSHRSHDFSDBFLIPFLOPxopxop***=>NotdefinedasXOP=>UndefinedbehaviorpïfÇî ìîëqïfÇîG~wïaùî ì îWxï^ªî ìî  îØîîî÷îRî"î(«î*` î16î4ýî6§î9î=ÆîBOîCÁîF2ï]î ìî§îVî]î¼î¤ î%�î'Êî**î.î1.î4Iî5´î:]î< ïXàîtî€î�î Fî$ÿî)¸î.qî3*î7ãî<œïW€îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïVîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïT¾îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïS]îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïPœîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïO;îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïMÚîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïLyîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïI¸îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïHWîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïFöîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïE–îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïBÔîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïïAsîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï@îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï>²îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï;ðîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï:�îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï9/îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï7ÎîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï5 îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï3«îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï2KîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï0êîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï.(îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï,ÈîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï+gîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï*îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï'DîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï%äîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï$ƒîînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï#"îînîÇî!î-îàî™î$Rî) î-Äî2}î76î;ïï aîîÁîÇîzîàîæî™î!Ÿî(^—TVm$ùDragonOpcodes19CallsandReturnsThissectiongivestentativeinformationaboutthestrategyusedforprocedurecallsandreturnsonDragon.SimplecallThesimplecaseofcallingaprocedurefirstpushesanyargumentsexpectedbytheprocedure,thencallstheprocedureviaDFCorLFC.ThefirstinstructionisnormallyanALSinstruction,whichsetsLtothebaseofthearguments.Therefore,theargumentsbecometheinitiallocalvariableswithoutmovingthosearguments.ThereturnPCandthereturnLarepushedontotheIFUstackbythecall.Ifthereisinsufficientroomtodothis,anIFUstackoverflowtrapistakenafterthecallhastransferredcontrol.GlobalframesIftheprocedureneedsaccesstoaglobalframe,thenitistheresponsibilityoftheproceduretosetuparegisterwiththepointertotheglobalframe.CurrentplansaretousetheLGFinstructiontoloadtheglobalframepointerfromtheglobalframetableintoalocalregister.TheLIQBinstructioncouldbeusedtosetuptheglobalframepointerinthecasewheretherearefewproceduresfortheframe,butspaceconsiderationswillnormallymakeitmoredesirabletousethe3-byteLGFinsteadofthe5-byteLIQB,sincethatwillsave2bytesperprocedure.SimplereturnThesimplecaseofreturningfromaprocedureusestheRETopcode,whichspecifieshowmuchtoadjustthestackbeforereturning.IftheIFUstackisnotempty,thenthereturnPCandLaretakenfromtheIFUstack,andthemostrecententryintheIFUstackisdiscarded.IftheIFUstackisemptywhenaRETisperformed,theresultsareundefined.Sisadjustedaccordingtothealphabyte.ForcaseswherethestackshouldnotbeadjustedonreturntheRETNopcodeisused.ProcedurevariablesForvariousreasonscoveredbelow,procedurevariablesarecalledwithonemorelevelofindirectionthansimpleprocedures.Procedurevariablesareimplementedaspointerstowordsthatcontainthestartingaddressoftheprocedure.Tocallthroughaprocedurevariable,theprocedurevariableispushed,thenacallismadeto([S])^usingSFCI.Thisconventionleavesanextrawordonthestack,soprocedurevariablecallsmustgotoadifferententrypointthansimpleprocedurecalls.NestedproceduresNestedproceduresareimplementedbyplacingthestartingaddressinthelocalframeextension(thepartofthelocalframerequiredtobeinmemory).Theprocedurevariableforthisnestedprocedurewillbeapointertothisword.Therefore,onentrytothenestedprocedure,theaddressoftheframe(plusanoffset)willbeonthestack,whichmakescomputingthestaticlinkeasy(aSUBBinstruction).InterfacefunctioncallInterfacefunctioncallsarebothmoreflexibleandmoreinvolvedthansimpleprocedurecalls.Interfacerecordsarereferredtoviapositionsintheglobalframe.Proceduresexportedthroughthoseinterfaceshaveprocedurevariablesinvariousslotsoftheinterfacerecord.Tomakeaninterfacefunctioncallonesimplysetsupthearguments,fetchestheprocedurevariablefromthepïfÇî ìîëqïfÇîG~wïaùî ìîîBxï^ªî ìî çîdî·î3 î!žî%`î' î,—î/´î1Òî85î;%î=½îBQîD8{ï[[î ìî|xïX îî î‘î£îîî Sî&ùî)ôî.žî1bî83î>î@1îB´ ïVdîîLîsîêî…|îÚïVdïVdî ²xïVdî"þ|î$ÚïVdïVdî%²xî'aïVdïVdî(ñî+áî.Ñ î5Äî7Gî=0|î?8ïVdïVdî@xïVdîB\ ïT½îî5îïîtî;î´îçî¹î"2 î*‹ î1]î3Õî:œî?ËîBDîFIïSîîÉîÕîÉî!h ïPšîîØîùî>îçî9î Yî!·î#üî(¸î+Úî.,î1,î4‘î6î8Ðî<î=ŽîA îBg ïNóîî·îfîlîfîVîeî Øî&‡î)kî*×zî.—ïNóïNóî/GxïNóî1Êî4)î6´î9) î@${ïK¤î ìîfxïHUîî�î îšî‰î £î"_î#–î'Æî,"î/Uî0¸î21î4ž î=î>äîAPîGàïF®îî«îÆî–î£îôî!¯î#Oî% î)´î.jî3ˆî7î9^î:þî=e|î?¶ïF®ïF®î@ŽxïF®îB´ ïEîîâîî›îäîÿî"îî&zî(ÿî-Gî1cî4ðî7îî9=î<©îB­|îE«ïEïEîFƒxïC_î î!î%îNîÂî ¨î$‹î'#î+}î/¬î4­î6“î9+îî:\î<´î@ÛîC'îE×îG;ï6#îîÜîQî¾îÚî³î!xî#åî'Oî+�î/"î0Þî3Kî6gî9èî;a îBƒîDîF€ï4|îî—îîfî1|îpï4|ï4|îHxï4|î‘î! î(Dî*¸î/î1† î9î:zî;ûîA‹îGàï2Õîîsî9î0îáîYî"vî$Ûî(Tî,Õî/Pî1Fî6Æî8Òî=|î?kï2Õï2Õî@Cxï2ÕîCTîH#ï1-î{ï-Þî ìîxxï*�îî’î3îéîãî#!î)|î/î1;î5 î7ÿî:ƒî=îîA îBž ï(èîîCî· î¸î$Tî*î,€ î4áî6žî;úî=·îAÓîD°ï'AîîVî(îúî›îâ î%î' î)“î.³î/Äî6/î;¦î=íîDXï%™îîuî‘î²îÖî[îÁî |î"%î%Ô|î)xï%™ï%™î*Pxî,×ï%™ï%™î.,î1A î8Mî?îA¬îE/îG/ï#òîîÚî�î îWî"fî%Îî'¾î)mî*–î0<î3Ðî7oî:•î>úîE}{ï £î ìîˆ xïTîîÊ îàîC î$¤î&¯î+‡î-öî2ïî7éî9¦î<î?kîCpï­îî÷îëî´î#îyî€î% î&Þî(ßî*�î1î4gî:úî@@îBŽîE?ïîî�îîûîîÍî kî"üî'? î-çî/Üî3_î4ýî7Lî;‹ îBVîD¥ï^îîÎî5î3î­î¤îïî"¢î$™î&§î) î,ßî0ôî54î<î>}îB îDáîGì|ï·îxï·îò {ïhî ìî¼îxïîîùî–îÈî?î"Ÿî&Uî+bî.=î1óî7°î:úî?‚îF(ïqîîàî¾îî iî""î$jî*;î+ôî.^î2Œî7t î>�îDWï ÊîîÎ îî�î"%î(î)Ïî.¸î1óî3Íî6Nî<îA�îCÉîGžï "îî·î3îÁîoî"áî%…î'šî)ü î1î5¥î8î>�îCÆîG/ÿ TVm$ËDragonOpcodes20interfacerecord,andperformsaprocedurevariablecall.MultipleglobalframesAlthoughproceduresmustbespeciallycompiledtousemultipleglobalframes,thereisnoadditionalmechanismbeyondforcingallcallstoroutineswithmultipleglobalframestousetheindirectprocedurecall.Theaddressontopofthestackcanthenbeusedtofindtheglobalframe(probablyviaaddingaconstant).CoroutinesCoroutinecallsarehandledbytraps.Thedatastructurestobeusedarenotyetdefined.However,co-routinecallswillberoughlyasexpensiveasprocessswitches.pïfÇî ìîëqïfÇîG~xïb2îî´î\îî ïî"î(œî-Ò{ï^äî ìî…îœxï[•îîz îÎîƒî!Áî'�î-çî/âî2¤î8kî<ÚîAúîEÐîG‰ïYîî î�îÌî Àî%|î'vî*�î,Gî1žî4Ãî:Gî>sîBøîD°îG/ïXFîî î}îÃî‹î$eî&[î(Áî*iî,¹î0î2—î5­î7Žî:ºîÊîA%îG<ïQ{îî1î²îˆîMî©î v î'$î+Syî-ÈïQ{ïQ{î.œxïQ{î66î9î=hîB÷ ïOÔîî>î¾ îUîe î"\î#óyî&gïOÔïOÔî';xïOÔî.Ôî1Ÿî3 î76î:ÿ îA`îCÈïN-îî¤ îªîÄî¥îÌî%†î) î/…î2î7qîNîB;îEvîG/|ïßîxïßîØ î:î îCî cî$Sî'‘î)M|î+»ïßïßî,’xïßî0„ î8>î:î=8îAžîD„ï8îîOîæî&î¦î®î!Tî$;î'î)z î0Þî4¬î;tî=~î?â îFÁï�îîîp{ïAî ìî kî¦xïóîîäîmî±îëîÍî!î$Âî%êî+æî-’î4kî9Öî;@î>þî@÷îCUîF·ïKîîîûî]îî$=î%]î)Ïî,Oî1$î6Êî9™î>šîC ï¤îî‚îôîNîÌîŸîØî!×î%Ÿî(î+kî-,î/0î3î8Bî:î=áî?îBwîEÅïýî î{îÏî=î ®î#î%ñ{ï ®î ìî åî xï _îîÖîÔî î5îî!<î$àî%ùî+æî-ƒî4Nî9ªî;î>´î@ŸîBîîF·ÛTVm$jDragonOpcodes22faultingaddressisavailableasthereturnPC.Thehandlershoulddetermineifthepageisvalid,theneithercausethepagetobemadepresent,orcauseapagefaulterror.pïfÇî ìîëqïfÇîG~xïb2îî"î îtî,î Øî#5î'bî*�î-cî2lî6æî=eî>ÄîA!îDfîEÏï`‹îî4î!îÖî6î|î +î"î%Ûî+î,Ëî0�î1ªî4ñî8-ÿžTVm$ZDragonOpcodes23FieldUnitSpecificationThissectiongivesaMesaspecificationfortheFieldUnitfunctionsandthefielddescriptorformat.Weexpectthisdescriptiontobemademorehuman-readableinthenearfuture.Note:thisentiresectionwillberevisedaccordingtowhattheEUcanprovide.Treattheinformationhereinasentertainingfiction!Word:TYPE=PACKEDARRAY[0..bitsPerWord)OFBOOL;ZerosWord:Word=LOOPHOLE[LONG[0]];OnesWord:Word=LOOPHOLE[LONG[-1]];FieldDescriptor:TYPE=MACHINEDEPENDENTRECORD[reserved:[0..7]_0,reservedbits,notcurrentlyused,butmustbe0sinsert:BOOL_FALSE,governschoiceofbackgroundandlowbitsofmaskmask:[0..32]_32,maskgives#ofright-justified1sinthemask(mask=0=>no1s,mask=32=>all1s)shift:[0..32]_0gives#ofbitstoleft-shiftthedoubleword];Operate:PROC[Left,Right:Word,fd:FieldDescriptor]RETURNS[out:Word]={shifter:Word=DoubleWordShiftLeft[Left,Right,fd.shift];Theshifteroutputhastheinputdoublewordshiftedleftbyfd.shiftbitsmask:Word_SingleWordShiftRight[OnesWord,32-fd.mask];Thedefaultmaskhasfd.mask1sright-justifiedinthewordIFfd.insertTHENmask_DragAnd[mask,SingleWordShiftLeft[OnesWord,MIN[fd.mask,fd.shift]]];fd.insert=>clearrightmostfd.shiftbitsofthemaskout_DragAnd[mask,shifter];1bitsinthemaskselecttheshifteroutputIFfd.insertTHENout_DragOr[out,DragAnd[DragNot[mask],Right]];fd.insert=>0bitsinthemaskselectbitsfromRighttoORintotheresult};END.DefinitionsusedfromDragOpsCrossUtilsDoubleWordShiftLeft:PROC[w0,w1:Word,dist:SixBitIndex]RETURNS[Word]=TRUSTEDINLINE{ThisprocedureshiftstwoDragonwordsleftbydistbitsandreturnstheleftmostword.<>};SingleWordShiftLeft:PROC[word:Word,dist:SixBitIndex]RETURNS[Word]=TRUSTEDINLINE{ThisprocedureshiftsoneDragonwordleftbydistbitsandreturnstheshiftedword.<>};pïfÇî ìîëqïfÇîG~wïaùî ìîîî xï^ªî ìî îšîî.îÓ î!²î#ìî&Gî)áî-î3î5Æî8!î;M îA¶îGï]î ìî<îÞ îðîžî�îOî"â î-î.¼î1î46ÿ¼TVm$\pïZ‡î ìî Ýî¥î«îmîîî"Àî)î*Øî.Eî0Àî3fî6î;çî?ÂîB= ïXàî ìîîÞ î}ÿ¼qTVm$:}ïU�î ýyîbïU�ïU�î}ïU�îÔyî¹ïU�ïU�î`ïU�î }ïU�î¯yî)ïïU�ïU�î*ÌïU�î, }î/4ïU�ïU�ïSèî îÄî°yî•ïSèïSèîN}î!ãïSèyïSèî"G}î%³ïSèïSèî&ïRAîîwîcyîHïRAïRAî}î!—ïRAyïRAî!ú}î%fïRAïRAî%ÉïNñî ýyîUïNñïNñî}ïNñîÇyî¬ïNñïNñî¾ïNñî!ÒïNñî)}ïNñî.ñïMJîîî[îèzïK¢î îMî1î”î Kî#´î&î)aî+0}ïIúîyîSïIúïIúî îçî%}îÃïIúïIúzïHSî îî'îÊ î""î$Åî'Dî)Ñî+t}ïF«îîî%î²zïEî îµîîìî�î"çî$ î&Fî(’ïC\î1î@î%îZîïîâîôî#‰î%oî'Tî)éî+ä}ïA´îî¢î­î:zï@ î îqîVîúî†î+ î ‰î"Õî'%}ï>dî{ï;î ý}îÆï;ï;yîÄï;ï;îl}ï;îk îëî!/î#myî-¯ï;ï;î.ƒ}ï;î3»î7 î;\î=Aï9mîîÌî¸î�î)xî-§ zï7Æî îãî îHî¾î î#�î'Þî+.î/�î1âî3¼î8;}ï6îîîî“î,{ zï4vî îãîbîøîmî"{î$3î,Šî.0î0|yï2Ïî}ï2Ïî¶yîï2Ïï2ÏîÑ}ï1'îî³î? îyî3'ï1'ï1'î49}î5‹ï1'ï1'î5îî;q zï/î1îbî÷îIî#Mî'Ìî*Xî+ûî.G}ï-Øîî„î îîzï,0î îTîàî†îÒîhîî!aî%ˆyï*ˆî}ï*ˆî¶yîï*ˆï*ˆîÑ}ï*ˆîÞîSîà î$¢î4Œzï(àî îPîæîî§îMî™î#/î&Ûî)hî,¥î0hî2 î4¢î6Hî7íî:9}ï'9îyï#éî ý}î…ï#éï#ézï šî ý îêîúî8{ïKî}îùïKïKyî÷ïKïKîž}ï£î î5îxî“ yî$vï£ï£î%J}ï£î*‚î/4yî1ï£ï£î1Òï£î7}ï£î;¢zïûî î/î[îæîsî$_î(4î*•î,oî.ûî1ˆî4+î8Ãî;î@+ïTî1îî1î }ï¬î {ï\î}îiï\ï\yîgï\ï\î}ïµî î…îÈîã yî#Æïµïµî$š}ïµî)Òî.„yî0iïµïµî1"ïµî6W}ïµî:òzï î î/î[îæîuî$`î'±î*î+ìî.yî1î3©î8@î:Œî>ßïeî1îî1î }ï ¾î .nTVm$/DragonOpcodes24SingleWordShiftRight:PROC[word:Word,dist:SixBitIndex]RETURNS[Word]=TRUSTEDINLINE{ThisprocedureshiftsoneDragonwordrightbydistbitsandreturnstheshiftedword.<>};DragAnd:PROC[a,b:Word]RETURNS[Word]=INLINE{Thisprocedureisa32-bitAND<>};DragOr:PROC[a,b:Word]RETURNS[Word]=INLINE{Thisprocedureisa32-bitOR<>};DragNot:PROC[w:Word]RETURNS[Word]=INLINE{Thisprocedureisa32-bitNOT<>};pïfÇî ìîëqïfÇîG~{ïb0î}î;ïb0ïb0yî9ïb0ïb0îà}ï`ˆî î…îÈîã yî#Æï`ˆï`ˆî$š}ï`ˆî)Òî.„yî0iï`ˆï`ˆî1"ï`ˆî6W}ï`ˆî:òzï^áî î/î[îæîuî$`î'±î*úî,Ôî/aî1íî4�î9(î;tî?Çï]:î1îî1î }ï[’î {ïXDî}îeïXDïXDyîcïXDïXDî }ïXDî î0yî~ïXDïXDî R}ïXDî%Šî*<yî,!ïXDïXDî,‹}ïXDî0¼zïVœî î/î[îÆîûîÝïTõî1îî1î }ïSNî {ïOÿî}î«ïOÿïOÿyî©ïOÿïOÿîP}ïOÿîPîuyîÄïOÿïOÿî˜}ïOÿî$Ðî)‚yî+gïOÿïOÿî+Ñ}ïOÿî0zïNXî î/î[îÆîûîÝïL°î1îî1î }ïK î {ïGºî}îOïGºïGºyîMïGºïGºîô}ïGºîôîRyî¡ïGºïGºîu}ïGºî$­î)_yî+DïGºïGºî+®}ïGºî/ßzïFî î/î[îÆîûîÝïDlî1îî1î }ïBÄî ÿ´TVm$^DragonOpcodes25InstructionSetSummaryNameform#DescriptionADDOI1[S-1]_[S]+[S-1];S_S-1;traponoverflowADDBOB1[S]_[S]+AlphaZ;traponoverflowADDDBOB1[S]_[S]+AlphaBetaZ;traponoverflowALOB1L_L+AlphaALSOB1L_S+AlphaASOB1S_S+AlphaASLOB1S_L+AlphaBCOI1trapif[S]<0or[S-1]-[S]>=0;S_S-1CSTOB1[S+1]_([S-2]+AlphaZ)^;[S+1]=[S]=>([S-2]+AlphaZ)^_[S-1];S_S+1;special:atomicDFCOQB1callprocatAlphaBetaGammaDeltaDISOI1S_S-1DJOQB1PC_AlphaBetaGammaDeltaDUPOI1[S+1]_[S];S_S+1EXCHOI1[S+1]_[S];[S]_[S-1];[S-1]_[S+1]EXDISOI1[S-1]_[S];S_S-1FLIPODB1fpA_fpAopstack;S_S-fpAdj;special:usesFPchipsFLOPODB1stack_fpAopstack;special:usesFPchipsFSDBODB1Field_AlphaBetaINOB1[S]_([S]+AlphaZ)^;special:usesIOlinesJBOB1PC_PC+AlphaJDBODB1PC_PC+AlphaBetaSJEBBjJBB2BetaZ=[S]=>PC_PC+AlphaS;S_S-1JnO*4Noopoflength1,2,3,or5bytes(usedasjump)JNEBBjJBB2BetaZ#[S]=>PC_PC+AlphaS;S_S-1LCnOI8[S+1]_Constants[n];S_S+1LIPOB1[S+1]_PReg[Alpha];S_S+1LFCJDB1callprocatPC+AlphaBetaSLGFODB1[S+1]_([GB]+AlphaBetaZ)^;S_S+1LIBOB1[S+1]_AlphaZ;S_S+1LIDBODB1[S+1]_AlphaBetaZ;S_S+1LIQBOQB1[S+1]_AlphaBetaGammaDelta;S_S+1LRInLRB16[S+1]_([L+n]+AlphaZ)^;S_S+1LRnLR16[S+1]_[L+n];S_S+1SMULOI1[S-1],[S]_[S-1]*[S];signedOUTOB1([S]+AlphaZ)^_[S-1];S_S-2;special:usesIOlinesPINOB1[S]_Pbus[Alpha,[S]];special:usesPbusdirectlyPOUTOB1[S]_Pbus[Alpha,[S]];S_S-1;special:usesPbusdirectlyPSBOB1([S-1]+AlphaZ)^_[S];S_S-1QADDQR1[S]_[S]+Rb+carry;carry_0;traponoverflowQANDQR1[S]_[S]ANDRbQLADDQR1[S]_[S]+Rb;carry_0;traponoverfloworLispNaNQLSUBQR1[S]_[S]-Rb;carry_0;traponoverfloworLispNaNQORQR1[S]_[S]ORRbQRXQR1[[S]]_([[S]]+Rb)^QSUBQR1[S]_[S]-Rb-carry;carry_0;traponoverflowQXORQR1[S]_[S]XORRbRADDRR1Rc_Ra+Rb+carry;carry_0;traponoverflowRAILRRB1[L+BetaL]_(AuxRegs[BetaR]+AlphaZ)^RANDRR1Rc_RaANDRbRBOB1[S]_([S]+AlphaZ)^RBCOB1trapifRa<0ORRa-Rb>=0;Ra_RcRETOB1S_L+Alpha;returnfromprocRETNOB1returnfromprocRETTOB1returnfromproc;enabletrapsRFURR1[Rc]_FieldUnit[[Ra],[Rb],Field]RJEBjRJB2Ra=Rb=>PC_PC+AlphaSRJGBjRJB2Ra>Rb=>PC_PC+AlphaSRJGEBjRJB2Ra>=Rb=>PC_PC+AlphaSRJLBjRJB2RaPC_PC+AlphaSRJLEBjRJB2Ra<=Rb=>PC_PC+AlphaSRJNEBjRJB2Ra#Rb=>PC_PC+AlphaSRLADDRR1Rc_Ra+Rb;carry_0;traponoverfloworLispNaNpïfÇî ìîëqïfÇîG~wïaùî ì îWîW$TVm$qï`‡î ýî îkîq $TVm$ï_!î ýî¶îÃsîÉï_!ï_!î*îáî#àî&Rî( ï]Àî ýî¶îÃsîÉï]Àï]Àî* î î"ˆî$Aï\_î ýî¶îÃsîÉï\_ï\_î*î"nî$ßî&™ïZÿî ýî¶îÃsîÉïZÿïZÿîpïYŸî ýî¶îÃsîÉïYŸïYŸîpïX?î ýî¶îÃsîÉïX?ïX?î‚ïVßî ýî¶îÃsîÉïVßïVßî‚ïUî ýî¶îÃsîÉïUïUî!î;îCî(îî(î£î$dî&uî'ÍïTî ýî¶îÃsîÉïTïTî*î$î*QïTïTî*þsïTî,î8±8TVm$Írî=iïTïTî=öîAÀÿPTVm$ïR¾î ýî¶îÃsîÉïR¾ïR¾îgîýî¾îïQ^î ýî¶îÃsîÉïQ^ïQ^î‚ïOþî ýî¶îÃsîÉïOþïOþî‚î¶îôïNžî ýî¶îÃsîÉïNžïNžî*îïM=î ýî¶îÃsîÉïM=ïM=î*î î"ˆ ïKÜî ýî¶îÃsîÉïKÜïKÜî*îLïJ}î ýî¶îÃsîÉïJ}ïJ}î!îôî2î^îî!ˆ ÿ^¾TVm$•rî'˜ïJ}ïJ}î(%î+ïî.ºî0sÿTVm$ïIî ýî¶îÃsîÉïIïIîVîëî(îTî ÿ0TVm$$rî"~ïIïIî# î&Öî) î+YÿJTVm$ïG½î ýî¶îÃsîÉïG½ïG½îp ïF]î ýî¶îÃsîÉïF]ïF]î*^.TVm$+rî!eïF]ïF]î!òî%¼î(‡î*ÿŒTVm$ïDýî ýî¶îÃsîÉïDýïDýî‚ ïC�î ýî¶îÃsîÉïC�ïC�î‚ïB=î ýî¶îÃsîÉïB=ïB=î‹îCîÇî¬î½ î)ï@Ýî ýî¶îÃsîÉï@Ýï@Ýî“îôî^îüî Sî!«î#î$~î%‡î(©î+ïî-„ï?|î ýî¶îÃsîÉï?|ï?|î‹îCîêîÐîá î)?ï>î ýî¶îÃsîÉï>ï>î*î"ï<¯î ýî¶îÃsîÉï<¯ï<¯î*î" ï;Oî ýî¶îÃsîÉï;Oï;Oîgîýî¾î ï9ïî ýî¶îÃsîÉï9ïï9ïî*î&[ï8Žî ýî¶îÃsîÉï8Žï8Žî* î9ï7.î ýî¶îÃsîÉï7.ï7.î*î!‘ï5Íî ýî¶îÃsîÉï5Íï5Íî*î'tï4lî ýî¶îsîÉï4lï4lî*î$Ïï3 î ýî¶îsîÉï3 ï3 î* îµï1ªî ýî¶îÃsîÉï1ªï1ªî*îxî¶ î"ï0Iî ýî¶îÃsîÉï0Iï0Iî*î"e ÷TVm$Lrî&dï0Iï0Iî&ñî*»î-…î/ÿ˜TVm$ï.èî ýî¶îÃsîÉï.èï.èî*ÿ¬TVm$rî!êï.èï.èî"wî&Aî) î,ÿÆTVm$ï-‡î ýî¶îÃsîÉï-‡ï-‡î*î!êÿÞ!TVm$rî%èï-‡ï-‡î&vî*@î- î0ÿTVm$ï,&î ýî¶îÃsîÉï,&ï,&î*î"eï*Åî ýî¶îÃsîÉï*Åï*Åî*î!‘î&Zî(Ìî*…ï)dî ýî¶îÃsîÉï)dï)dî*îýî¾ï(î ýî¶îÃsîÉï(ï(î* îÙî"¢î%î&Íî+Žî- î/–ï&¢î ýî¶îÃsîÉï&¢ï&¢î* îî!éî$[î&î*Õî,Pî.Ýï%Aî ýî¶îÃsîÉï%Aï%Aî*îýîï#àî ýî¶îÃsîÉï#àï#àî*ï"î ýî¶îÃsîÉï"ï"î*î î$èî'Zî)ï!î ýî¶îÃsîÉï!ï!î*îýîÇï¾î ýî¶îÃsîÉï¾ï¾î“ î!mî&6î(¨î*aï^î ýî¶îÃsîÉï^ï^î*ð!ïþî ýî¶îÃsîÉïþïþî“îÙîšïžî ýî¶îÃsîÉïžïžî*ï>î ýî¶îÃsîÉï>ï>î!î;îCîî îî 'î%tî&Ìïßî ýî¶îÃsîÉïßïßî‚îÇî!Kî$ ïî ýî¶îÃsîÉïïî3îLîïî ýî¶îÃsîÉïïî3îLîî î#úï¿î ýî¶îÃsîÉï¿ï¿î*ï_î ýî¶îÃsîÉï_ï_î“î’î£ ïÿî ýî¶îÃsîÉïÿïÿî“îî ïŸî ýî¶îÃsîÉïŸïŸî“îµîÇ ï?î ýî¶îÃsîÉï?ï?î“îî ï ßî ýî¶îÃsîÉï ßï ßî“îµîÇ ï î ýî¶îÃsîÉï ï î“îLî] ï î ýî¶îÃsîÉï ï î“î´î"~î$ðî&©î+jî,åî/r TVm$DragonOpcodes26RLSUBRR1Rc_Ra-Rb;carry_0;traponoverfloworLispNaNRORRR1Rc_RaORRbRRILRRB1[L+BetaL]_([L+BetaR]+AlphaZ)^RRXRR1[Rc]_([Ra]+[Rb])^RSBOB1[S+1]_([S]+AlphaZ)^;S_S+1RSUBRR1Rc_Ra-Rb-carry;carry_0;traponoverflowRUADDRR1Rc_Ra+Rb+carry;setcarryRUSUBRR1Rc_Ra-Rb-carry;setcarryRVADDRR1Rc_Ra+RbRVSUBRR1Rc_Ra-RbRXOI1[S-1]_([S-1]+[S])^;S_S-1RXORRR1Rc_RaXORRbSIPOB1PReg[Alpha]_[S];S_S-1SFCOI1callprocat[S];S_S-1SFCIOI1callprocat([S])^SFPOI1fpA_stack;S_S-fpAdj;special:usesFPchipsSHLODB1[S]_FieldUnit[[S],0,AlphaBeta]SHRODB1[S]_FieldUnit[[S],[S],AlphaBeta]SJOI1PC_PC+[S]SRInLRB16([L+n]+AlphaZ)^_[S];S_S-1SRnLR16[L+n]_[S];S_S-1SUBOI1[S-1]_[S-1]-[S];S_S-1;traponoverflowSUBBOB1[S]_[S]-AlphaZ;traponoverflowSUBDBODB1[S]_[S]-AlphaBetaZ;traponoverflowWAILRRB1(AuxRegs[BetaR]+AlphaZ)^_[L+BetaL]WBOB1([S]+AlphaZ)^_[S-1];S_S-2WRILRRB1([L+BetaR]+AlphaZ)^_[L+BetaL]WSBOB1([S-1]+AlphaZ)^_[S];S_S-2UDIVOI1[S-2],[S-1]_[S-2],[S-1]/[S];unsignedpïfÇî ìîëqïfÇîG~ïboî ýî¶îÃsîÉïboïboî“îûî!Åî$7î%ðî*±î,,î.¹ïaî ýî¶îÃsîÉïaïaî“îÙîêï_°î ýî¶îÃsîÉï_°ï_°î*ï^Pî ýî¶îÃsîÉï^Pï^Pî*ï\ïî ýî¶îÃsîÉï\ïï\ïî*î#ï[�î ýî¶îÃsîÉï[�ï[�î“ îúî$Äî'6î(ïïZ0î ýî¶îÃsîÉïZ0ïZ0î“ î!mî#ZïXÑî ýî¶îÃsîÉïXÑïXÑî“ îúî!èïWrî ýî¶îÃsîÉïWrïWrî“ïVî ýî¶îÃsîÉïVïVî“ïT³î ýî¶îÃsîÉïT³ïT³î*î!0ïSSî ýî¶îÃsîÉïSSïSSî“îÙî£ïQôî ýî¶îÃsîÉïQôïQôî‚î TïP“î ýî¶îÃsîÉïP“ïP“îgîýî¾îîSïO3î ýî¶îÃsîÉïO3ïO3îgîýî¾îïMÓî ýî¶îÃsîÉïMÓïMÓî!îôî2î£ ÆTVm$Nrî#³ïMÓïMÓî$Aî( î*Õî,ŽÿÆTVm$ïLtî ýî¶îÃsîÉïLtïLtî*ïKî ýî¶îÃsîÉïKïKî*ïI³î ýî¶îÃsîÉïI³ïI³î‚ïHSî ýî¶îsîÉïHSïHSî*î#ïFòî ýî¶îsîÉïFòïFòî*îüïE’î ýî¶îÃsîÉïE’ïE’î*î(î#'î%™î'RïD1î ýî¶îÃsîÉïD1ïD1î* î]î!Ïî#ˆïBÑî ýî¶îÃsîÉïBÑïBÑî*î!´î$&î%ßïApî ýî¶îÃsîÉïApïApî*ð!ï@î ýî¶îÃsîÉï@ï@î*î"eï>¯î ýî¶îÃsîÉï>¯ï>¯î*ï=Oî ýî¶îÃsîÉï=Oï=Oî*î"eï;ïî ýî¶îÃsîÉï;ïï;ïî* îxîµ î#dî$mî&¡ÚÁTVm$üDragonOpcodes27SamplecodesequencesNotationInthefollowingexamples,FD[insert,mask,shift]denotesafielddescriptorwithindicatedfields.RRformatoperationsarewrittenwiththeoperandsintheorderRc,Ra,Rb(destinationisfirstmentioned).Thefollowingconstantregistersarereserved:c0:0,c1:1,c2:2,c3:3,c4:4,c5:-2,c6:-1,c8:FIRST[INT],c9:100000BPackedsequencefetch/storeAssumethefollowingCedar/Mesacode:r:REFTEXT;--inlocalregisterLr(32-bitmaxLengthinword1)i:INT;--inlocalregisterLic:CHAR;--inlocalregisterLcc_r[i];--generatesthefollowingcode{11cycles}LRILr,1--pushthewordcontainingtheboundLRC1--pushthecharacterindexSHLFD[0,5,3]--makeitabitindexintothewordADDDB[0,8,8]--addintherestofthefielddescriptorSIPField--settheFieldregistertocontroltheshiftRBC[S],Li,[S]--boundschecktheindexgiven(leaveLiin[S])SHRFD[0,30,30]--makeawordindexQADDLr--getthewordaddress(-2)RB2--fetchthewordcontainingthedesiredcharRFULc,C0,[S]---extractthecharandstoreittocr[i]_c;--generatesthefollowingcode{13cycles}LRILr,1--pushthewordcontainingtheboundLIDBFD[1,32,24]--pushthebasefielddescLRLi--pushthecharacterindexSHLFD[0,5,3]--makeitabitindexintothewordSHRFD[1,10,5]--alsoinsertitintothemaskpositionSUB--adjustthefielddescriptorSIPField--settheFieldregistertocontroltheshiftRBC[S],Li,[S]--boundschecktheindexgiven(leaveLiin[S-1])SHRFD[0,30,30]--makeawordindexQADDLr--getthewordaddress(-2)RSB2--fetchthearrayword(leaveaddronstack)RFU[S],[S],Lc--insertthecharintothearraywordWSB2--storethechangedwordProcedurebody&callAddFunny:PROC[x,y:INT]RETURNS[INT]={z:INT_x+y;IFz>1THENz_z+z;RETURN[z];};GeneratesALS377B--pointLatxpïfÇî ìîëqïfÇîG~wïaùî ìîÃî£{ï^ªî ìxï[[î ìî äîmî©î'î(>î-rî.Åî2 î8µî;ùîBîFùïY´î ìîg îîiîî6î!–î'~î),î+‹î/@î5– î=î>‚îAZ ïW9î ìî ÄîÖîEî¨îüïT¾îîWîäî-îºîî�îÙîeî®î!;î#„î%Šî'Óî)Úyî,"ïT¾ïT¾î,Üxî/rïT¾yïT¾î/Õxî1àïT¾ïT¾î2Cî3 î5i{ïQoî ìî¿î� xïN î ìîîwî‰ îw}ïLyî ýyî ïLyïLyîSïLyîJ}îIïLyzïLyî~îõî›î!áî&¬î(§î-î4>î5äî95}ïJÒî ýyî ^ïJÒïJÒî È}îiïJÒzïJÒî1î¨îNî”î^}ïI*î ýyî –ïI*ïI*îa}îîïI*zïI*î1î¨îNî”î^}ïEÜî ýî î©zïEÜî1î¨î•îáî!´î$Ïî'e|ïD4î}ïD4îBzïD4î�îî"9î$…î'Õ î.xî0Ä|ïB�î}ïB�îBzïB�î�îî"9î$…î*p|ï@æî}ï@æîBzï@æî�îî"³î$ î%?î'Gî*ÿî-Æî0|ï?>î}ï?>îBzï?>î�îî!œî#Aî%Žî(%î)Éî,î/ |ï=—î}ï=—îBzï=—î�îî!î#fî&Øî+£î-Hî1Þî4*|ï;ïî}ï;ïîB zï;ïî�îî#›î'tî)Àî-xî1î4æî6Àî8f|ï:Hî}ï:HîB zï:Hî�îî"³î#çî'8|ï8¡î}ï8¡îBzï8¡î�îî!Fî#’î&ãî+ |ï6ùî}ï6ùîBzï6ùî�îî"\î$¨î'ù î.›î0çî5n|ï5Rî}ï5RîB zï5Rî�îî#œî%èî(ùî+œî.åî0<î1á}ï2î ýî/î¼zï2î1î¨î•îáî!´î$Ïî'e|ï0\î}ï0\îBzï0\î�îî"9î$…î'Õ î.xî0Ä|ï.´î}ï.´îB zï.´î�îî"9î$…î'‰î*�|ï- î}ï- îBzï- î�îî"9î$…î*p|ï+fî}ï+fîBzï+fî�îî"³î$ î%?î'Gî*ÿî-Æî0|ï)¾î}ï)¾îB zï)¾î�îî!Óî%Œî&äî)ªî+öî/Œ|ï(îzï(î�îî"ÿî%Lî(P |ï&pî}ï&pîBzï&pî�îî!î#fî&Øî+£î-Hî1Þî4*|ï$Èî}ï$ÈîB zï$Èî�îî#›î'tî)Àî-xî1î4æî6Àî8f|ï#!î}ï#!îB zï#!î�îî"³î#çî'8|ï!yî}ï!yîBzï!yî�îî!Fî#’î&ãî+ |ïÒî}ïÒîBzïÒî�îî"\î$¨î(;î+Œî/nî2‡î4z|ï+î}ï+îB zï+î�îî"Àî% î(î*ãî-/î0Â|ïƒî}ïƒîBzïƒî�îî"Nî$šî)á{ï�î ìîxî¾îKï?î ý}îï?ï?yîï?ï?îª}ï?î©yîÃï?ï?î-}îÎï?ï?yî¶ï?ï?îŠ}ï?î"Áyî#%ï?ï?î#Ž}î%0ï?ï?î&î'ýï—îyî¦ï—ï—î}ï—î6îÃyïðî}ïðî¶îÔî yî=ïðïðî÷}ïðîî!î®îÍî²yïHî}ïHî{ï ¡îzï úî ý|ï Rî}ï RîBzï Rî�îî"}î#ôî%™ÿ!TVm$DragonOpcodes28RADD[S+1]+,Lx,Ly--z:INT_x+yRJLEB6,[S],C1--IFz>1THENRADDLz,Lz,Lz--z_z+zRORLx,Lz,Lz--RETURN[z]RET0--(S_L+0)u_AddFunny[v,w]+1;Assumeu,v,wareinlocalsLu,Lv,LwAssumeAddFunnytobecalledviaDFCGeneratesLRLv--pushvLRLw--pushwDFCAddFunny--AddFunny[v,w]RADDLu,[S-1]-,C1--u_...+1ArithmeticprecisionchangesMultiple-precisionarithmeticquantitiesarestoredwithhigherorderwordsinloweraddresses,evenwithintheregisterstack.Thatis,thewordat[S-1]ismoresignificantthanthewordat[S].Doubleprecisionnumbersshowupinmultiplicationanddivision.Extend32-bitsignednumberonstackto64-bitsignednumberonstack{3cycles}DUP--low-orderwordontopofstackRUADD[S-1],[S],[S]--carrybit_signbit&putgarbagein[S-1]RSUBC0,C0,[S-1]--negatesignbitintohigh-orderword,(clearcarry)Narrow64-bitsignednumberonstackto32-bitsignednumberonstack{4cycles}RUADD[S+1]+,[S],[S]---carry_signbitofloworderword,garbageat[S+1]RADD[S+1]+,C0,[S-1]--[S+1]+_signbitplushigh-orderword(clearcarry)RBC[S],[S]-,C1--boundscheckfaultwhen[S]#0,popstackEXDIS--flushthehigh-orderwordExtend16-bitsignednumberonstackto32-bitsignednumberonstack{2cycles}(assumesleftmost16bitsare0s)RXOR[S],CNSI,[S]--complementthesignbitQSUBCNSI--subtract100000B,whichcarriesthroughNarrow32-bitsignednumberonstackto16-bitsignednumberonstack{4cycles}(assuresresultingleftmost16bitsare0s)RVADD[S],CNSI,[S]--bumpthesign(100000B)RXOR[S],CNSI,[S]--complementthesignbacktoitsoriginalLIQB2000001B--pushthelimit+1BC--boundscheckfaultwhennotin16-bitrangepïfÇî ìîëqïfÇîG~|ïb0î}ïb0îB zïb0î&Üî(S#TVm$$sî)ìïb0ïb0î*hÿ$TVm$zïb0î,‚î-ï|ï`ˆî}ï`ˆîBzï`ˆî�(TVm$sîï`ˆï`ˆî‚ÿ<TVm$zï`ˆî ·î!Öî# >TVm$sî$?ï`ˆï`ˆî$øÿBTVm$|ï^áîæ}ï^áîBzï^áî�î “î!²î#î$>î&#|ï]:î}ï]:îBzï]:î�F TVm$.sîï]:ï]:îÑÿfTVm$zï]:î$U|ï[’î}ï[’îBzï[’î�î î!éî#V}ïXDî ýî HîÕ îGî-îzïVœîîîzîÎîtî>ïTõîîî¥îJîî úî#-ïSNî ý|ïQ¦î}ïQ¦îBzïQ¦î�îî"9|ïOÿî}ïOÿîBzïOÿî�îî"9|ïNXî}ïNXîBzïNXî�î î'|ïL°î}ïL°îB zïL°î�îî Gî!´î#Aî%&{ïGºî ì îºîŠxïDlî ìîš îS î"Öî%`î)ºî- î1’î5}î9Àî;¥î?¦ îFIïBÄî ìîIîÁî¸î8î—îtî!ìî%�î'>î*’î,î/ î6rî9±î<)î?ÊîA{îDšïAî ìîÈîyîîî î%�î(Ezï<ûî ýîµî˜î½î¢î–î#!î$Æî(¨î,Îî1³î3¦î71î9|ï;Sîzï;Sî!§î#î)î,kî._î0´î2W|ï9¬î}ï9¬îB zï9¬î!§î#î&›î(£î*î,ëî.óî0uî2×î7ìî9’|ï8î}ï8îB zï8î!§î#î'gî*Bî,Jî/ î5Ÿî9Hî=ï4¶î ýîæîÈîîîÓîÆî#Qî$öî(Øî,þî1ãî3Öî7aî9F|ï3î}ï3îBzï3î!§î#î&›î( î*ãî,ëî.�î1î4–î8?î=Uî>ú|ï1gî}ï1gîBzï1gî!§î#î(Íî*:î-î/î1õ î8„î;Õî? |ï/Àî}ï/ÀîB zï/Àî!§î#î'³î+‹î.¿î2Aî4~î6cî7ðî:…|ï.î}ï.zï.î!§î#î&rî(¾ î/Mï*Êî ýîµî˜î½î¢î–î#!î$Æî(¨î,Îî1³î3¦î71î9ï)#îî·îÓî¸îDî˜|ï'{î}ï'{îB zï'{î!§î# î*‘î,Ýî/¸|ï%Ôî}ï%ÔîBzï%Ôî!§î#î(Cî.5î2î6sï"…î ýîæîÈîîîÓîÆî#Qî$öî(Øî,þî1ãî3Öî7aî9Fï Þîî%î¯îËî°î"<î$�|ï7î}ï7îB ï7î!§zî#ï7ï7î#Îî&Öî)"î+ü|ï�î}ï�îB ï�î!§zî#ï�ï�î#¹î*‘î,Ýî/¸î2ÿî4¤î6€|ïèî}ïèîBïèî!§zî#ïèïèî#Îî&Pî(œ|ïAîzïAî!§î#î'³î+‹î.¿î2Aî4¤î6Jî:,ÿlHTVm$ÙDragonOpcodes29RecentChanges17Dec84ALUopschanges(QRformat)TheQRformatwasestablished,moreOIformatoperationswereadded,andnowthereisacommonsubsetofoperations(ADD,AND,BC,LADD,LSUB,OR,RX,SUB)intheOI,QR,andRR1formats.Also,SMULandUDIVarethesurvivingmultiplyanddivideoperations.Also,SUBDBhasbeenadded.FieldopschangesSHDnowallowsextractionoffieldswithoutrequiringthatthefieldsbepartofaword.Kernel/usermodeKFC(KernelFunctionCall)hasbeenaddedtocallkernelroutines,andRETK(returnfromkernel)hasbeenadded(RETKalsoreplacesRETT).LEUR,LIFUR=>LIP,SEUR,SIFUR=>SIPOnceagain,theinstructionsuseAlphatodistinguishwhichunittheyaddress.FloatingpointinstructionsForthefirsttime,asketchofthefloatingpointinstructionshasbeenprovided.ThecurrentinstructionsareSFP,LFIP,andFLOP,butmaychange.BNDCK=>BC,EP=>ALS...foruniformity.NewPIN&POUT...asplaceholdersforPbusaccessinstructions.Detailsnotyetdefined.28Aug84fixestoexamples...tomakethemmoreaccurate(therewerebugs).23Aug84definitionfixestoBNDCK&RBC...tofixupcarelessness.22Aug84RBCadded...duetointerestingusesinarithmeticchangesandotherspecialboundschecking.pïfÇî ìîëqïfÇîG~wïaùî ìî�{ï^©î ìî Ñî´zï[Zî ìî uîÞîøîxïX î ìî Ûî“î&îé î_î" î$=î(Ð î/•î2ýî7‘î:_î=zîAîBžîCßïVcî ìîîÁ îf|îßïVcïVcî·xîgïVcïVc|î:ïVcïVcîxîÂïVcïVc|î•ïVcïVcîmxîDïVcïVc|î ïVcïVcî ïxî#wïVcïVc|î$JïVcïVcî%"xî'ªïVcïVc|î(}ïVcïVcî)Uxî*-ïVcïVc|î+ïVcïVcî+Øxî,°ïVcïVc|î-ƒïVcïVcî.[xî0 ïVcïVcî0ÿî2£î4ùî7dî:Tî=î@?îF|ïT¼î ìxïT¼î Ð|î‡ïT¼ïT¼î_xïT¼îkî¿îîî$”î'Lî+z î3|î6‹ïT¼ïT¼î7cxïT¼î;Gî=¼îAzïQlî ìî ^îÈ|ïNî ìxïNî øîüî) îŠîCîøî%î+î-Ðî0/î3äî5Õî8¸î:qî;›zïJÎî ì îexïG~î ìî sîˆîmîÑîDî!žî%¿î'kî)óî.)î3Ë|î6€ïG~ïG~î7XxïG~î:aî?îBkîGïE×î ìî Iîm|îæïE×ïE×î¾xïE×îÊî—|îÙïE×ïE×î±xî!8ïE×ïE×î!²~ïB‡î ìzî JïB‡ïB‡~î&ïB‡ïB‡îþzïB‡îà~îuïB‡ïB‡îMzîüïB‡ïB‡~îØïB‡ïB‡î°zî6ïB‡ïB‡~îïB‡ïB‡îêzïB‡î!Ì~î$bïB‡ïB‡î%9xï?8î ìî ‹îŒîì îKîÀî!ãî#’ î*‚î.�î1tî4„zï;éî ìîSîÊ xï8™î ìî Œîàî­îî=îkîîmî#lî&ÿ î.Sî0½î4î:¥î=qîB/ ï6òî ì|î ?ï6òï6òî xîÇï6òï6ò|î¤ï6òï6òî|xîï6òï6òîà|î—ï6òï6òîoxî÷ï6òï6òîÓîTî X~ï3£î ìzï3£î¦~î;ï3£ï3£îzîêï3£ï3£~îÆï3£ï3£îžzï3£îú~î�ï3£ï3£îgxï0Sî ìî wî ´ zï-î ì~î ï-ï-î Þzï-î~î“ï-ï-îjxï)µî ìî wî %î¹î˜îÕî=îK î'†î,-î.¢î0ë{ï&eî ìî Ñî´zï#î ìî (îÍxïÆî ìî wî %îÙîcîöîZî!]î$®{ïwî ìî Ñî´zï'î ì îñî.~îÒï'ï'îªzï'îŒ~îï'ï'îåxïØî ìî wî %î6îI {ï‰î ìî Ñî´~ï9î ìzï9î ÷xï êî ìî wî.îÝ î–î�î= î!Àî&íî)¤î-Cî1¿î6žÿ2TVm$#DragonOpcodes3021Aug84Cleanuppass...tofixbugsindescriptions.Arithmeticprecisionchangeswereadded.MUL&DIV->MUL,UMUL,RDIV,MDIV,UDIV...sincewethinkweneedsigned&unsignedversionsoftheseoperations.ThedifferencebetweenRDIVandMDIVissubtle(basedonsignofremainder),andmaynotbeinthefinalmachine.24Apr84Addedtimingestimates...toaidinchoiceofinstructionswhenhandcoding.6Apr84AddedMUL&DIV...asplaceholdersfortheeventualinstructions.Thecurrentassumptionisthattheywillperformcompletesignedmultiply÷.AddedDJ&ASL...tomaketheinstructionsetmorecomplete.DJisusefulforfillinguptrapvectorsandotherlongtransfers.ASLisusefulforcuttingbackthestacktoaknownvaluerelativetoL,whichwedoinexitingablockwithextrastuffonthestack.ARL->AL...tomakethenamesalittlemoreconsistent.21Mar84Stackunderflowtrapadded...byarrangementbetweenMcCreightandAtkinson.Thismakesstacksave/restoremucheasiertocode(andfasteraswell).16Mar84SPR=>SEUR&SIFUR,LPR=>LEUR,LIFUR...atthetherequestoftheIFUdesigners.Noticethatthisreversesadecisiontakenon27Feb84.AllinstructionsuseidenticaldecodingofAlpha,soEUregistersandIFUregisterssharethesameencodingspace(seethedeclarationofProcessorRegisterinDragOpsCross).15Mar84RECdumped...sinceitwaslargelyuseless.pïfÇî ìîëqïfÇîG~{ïb0î ìî Ñî´zï^áî ìîHxï[’î ìî wî %î6î}î+ î� î#ƒî)_î.Œî1Ý~ïXCî ìzïXCî ÷~îyïXCïXCîPzïXCîƒ~î1ïXCïXCî zî¸ïXCïXC~î”ïXCïXCîlzîòïXCïXC~îÏïXCïXCî¦zî,ïXCïXC~î ïXCïXCîàzî"gïXCïXC~î#CïXCïXCî$xïTôî ìî fîÇîÝîkî‚îÍî î’î%^î*™î,Aî/¹ î7 î9ç î@M|îE«ïTôïTôîFƒxïSMî ì|î £ïSMïSMî {xïSMî‡îóîî\îbîEî ý î(gî+î."î0—î2ˆî46î6•î9Å{ïOþî ìî Ñî}zïL¯î ìîîZxïIaî ìî wî %îyî'îlî% î„î"9î%¸{ïFî ìî !î ÍzïBÃî ì~îïBÃïBÃîñzïBÃî%~î§ïBÃïBÃî~xï?tî ìî ®î “î^îsîçî~î!9 î)âî,ñî1ò î9fî; î>îAUîD7ï=Íî ìîÔî#î¨î?zï:~î ì~îï:~ï:~îñzï:~îM~îÏï:~ï:~î§xï7/î ìî ’î [î+î¥ î›îÓî �|î'{ï7/ï7/î(Sxï7/î)Ëî+Qî/…î1Ýî5úî8'î;&î?èîB»îFuï5ˆî ì |î=ï5ˆï5ˆîxï5ˆî;îšî¥îÕîfî"Ÿî$òî(Xî)ùî+î/Žî3*î7üî9�î;Tî?TîAnîChîE ï3áî ìî îÖîðîcî”îšîú~ï0’î ìzï0’î ÷~î¥ï0’ï0’î|xï-Cî ìî wî %îÙî9î}î¦î×îj {ï)ôî ìî Ñîëzï&¥î ìî Ïîîâxï#Vî ìî iî V îAî¢î!yî$#î*Éî-Õî1ÿî5d î= î@ÕîD¨îFHï!¯î ìî îÝî‹{ï`î ìî Ñîë~ïî ìzïî ÷~îŒïïîdzïîn~îðïïîÈzî&ïï~îïïîÚzïî ~î¢ïïî zzî#ïï~î#Ýïïî$´xïÃî ìî tî îeîÁî“îHî¤î° î$ƒî(ôî+¿î.]î3�î4¶î: î=Èî?ËîA­îD‚îG<ïî ì îJî½îKî1î èî%bî'$î)­î/î1Ãî4Ðî:1î=Îî@,îC§ïtî ìî ¡înîÎ îßî˜î&•î(C {ï%î ìî Ñîë~ï Öî ìzï Öî ÷xï ˆî ìî wîéî@îëîf©TVm$DragonOpcodes319Mar840-byteinstructionsdumped...sincetheIFUnolongerneededthem.Thisletsusdeterminetheinstructionlengthbasedonthetop3bitsoftheopcode.6Mar84LILDBdumped...sinceitcomplicatedtheIFUandisnotlikelytobeaveryhighfrequencyinstruction.CSTchangedtoOBformat...tosimplifytheIFU.ThiswasmadepossiblebyanIFUchangethatallows[S-2]tobeeasilyaddressable.1Mar84IN&OUTreplaceMAP...Alphanolongerdesignatestheoperation.Theseoperationsperformread&writeoperationswithcachebypassing(Ithink).27Feb84LIFUR&LEUR=>LPR,SIFUR&SEUR=>SPR...thelocationoftheregisterisgivenbyAlpha,nottheopcode.TheregistersofinterestaredescribedunderLPR.RL=>L...whichisinbetteragreementwithSasaname.RLADD&RLSUBadded...tosupportLisp(&maybeSmalltalk)arithmetic.AnewtraphasbeenaddedforListNaN.21Feb84WriteProtectfaultadded...sowecoulddistiguishitfrompagefault.RIFdumped...sinceitonlyhada1-byteadvantageovertworeadinstructions.10Feb84CodegenerationsamplespïfÇî ìîëqïfÇîG~{ïb0î ìî !î:~ï^àî ìîÐ zï^àînxï[�î ìî rîàî:îDîEî„îHî#£î&¹î)4î*þî1|î3Ö î:¬î>áîB¾îD¿îGïYéî ìî !î Âî{îÛ{ïVšî ìî !î:~ïSJî ìzïSJî¦xïOûî ìî wîéî@ îíîLî[î î!~î#óî'²î)`î+Qî,{î/‰î2¯î9 zïL«î ìî 2îxîî¨xïI\î ìî ·î ¦î3îÓî>î™î …î$…î*î,Dî.uî1Äî6­î9»î>)îA¥îC”îEÅïG´î ì {ïDeî ìî !î:~ïAî ìzïAî ~î ¡ïAïAîyzïAî¬îIxï=Æî ìî ”îÕîøîY îî� î&Áî*à î1«î7!î:Xî<î?© îFtï<î ìî ¸îî…{ï8Ïî ìî Ñîˆ~ï5î ìzï5î¦~î(ï5ï5îÿzï5î ~îŸï5ï5îwzî&ï5ï5~îï5ï5îÚzï5î¼~î >ï5ï5î!zï5î$ ~î&µï5ï5î'�xï20î ìî yî ÛîîÏî1îîî!5î#3î'±î*(î,Šî23î5 î:rî<-îAîCdï0‰î ì|î ïï0‰ï0‰îÆxîvï0‰ï0‰zï-9î ìî aîöxï)êî ìî wî…îðîžî–îDî _î!ªî#Xî$‚~ï&šî ìzï&šî¦~î(ï&šï&šîÿzï&šîáxï#Kî ìî wî %î1îKî\îÍ î"Y î)¸î+Eî.3î1î3‹î6èî; î=Iî@ {ïûî ìî Ñîˆzï¬î ìî Äîzî®xï\î ìî wî ;îbî. îXî®îî!\~ï î ìzï î ÷xï½î ìî wîéî@îYîî;îtî!ìî%î'±î*Ì {ïnî ìî Ñîˆzï î ìî j î �TVm$=DragonOpcodes32...wereadded.7Feb84FieldDecsriptormaskfieldwidenedTohelpwithboundaryconditionsingeneratingfielddescriptorsonthefly,themaskfieldofFieldDescriptorwaswidenedtoinclude32.Thisalsomakesitfollowthesameconventionastheshiftfield.Wemaywishtorevisitbothdecisionswhenweseemorecases.NILCKdumpedNILCKisusedtocheckforNILpointersbeforetheyaredereferenced.WedonotanticipateusingNILCKoftenenoughtowarrantitsinclusion.Incaseswherewewoulduseit,insertinganextrafetchthroughthepointerwillbequitesufficient.Wecanevenaffordtokeepallofthelow64Kofvirtualmemoryunmappedtofurtherreducethisproblem.SHL&SHRTwousefulshiftoperations,SHLandSHR,havebeenintroducedtoreplacefrequentlyoccuringcasesofFSDBfollowedbyRFU.6Feb84SFCIreplacesSFCBSFCIreplacesSCFBtosaveabyte,whichincreasesthepossiblenumberofinterfacesthatcanbecalledfromagivenglobalframe,sincewecanhave4bytesoffetchingprecedingtheSFCI.ThisallowsustodumpRIFifitbecomesnecessary.RRXreplacesRFXSimplenamechange.LCnreplacesLInLCnnowallowsshortaccesstothefirst8constants.LCnreplacesLIn,whichwaslimitedtothefirst5constants.LRRBbytesswappedFormorecommonalitywithinstructionsthataddedAlphaZbeforefetching(Curry'ssuggestion).AND,OR,andXORdumpedTheyarenotusedoftenenoughtowarrantseparateinstructions.RAND,ROR,andRXORshouldbeusedinstead.FieldUnitinstructionschanged(again)TheFieldUnitinstructionshavebecomeFSDB(FieldSetupDoubleByte)andRFU(RegisterFieldUnit).Thepreviousinstructions(FUDB,FUI,RFUI)areeliminated.FSDBandRFUaresufficienttodoeverythingweneed,althoughtheyarenotalwaysthemostcompactorefficientmeanstodoso.Wemayidentifyspecialcaseslaterinthedesign.pïfÇî ìîëqïfÇîG~xïb2î ìî wîÈ{ï^äî ìî !î ×zï[•î ìî ^ îíîƒî‡xïXFî ìî }îîˆî' î!5î#M î*pî. î5fî7×î: î=tî@>îD;îGÖïVŸî ìîÓî†îîÈî"¯î%î(¡î+uî/µî1î5Rî7ºî;> îBWîD îFtïT÷î ìî øîƒî‡î·îeî}î¹î%–î)Kî+rî-Æî1Y~ïQ©î ìzïQ©î¦|ïNZî ìxïNZîÓîkîÒî¬îºyî"ïNZïNZî xïNZîÞî$Wî(Ñî, î.Œ î7ðî:¦î<Øî?y îEå|ïL²î ìxïL²î³îSîHîîîþ î&Íî(¨î,&î0Jî2}î6¶î97î:ñî@¡îB�îFïK î ìî1î�îsî+î)î¿ î%³î(Kî*ãî.6î2fî4!î7î9|î;Bî=¯î@\îCoîE4ïIdî ìîYî5îãî‹î!î#©~ïFî ìzïFî ÷~îyïFïFîPxïBÆî ìî îî4 |î5ïBÆïBÆî xïBÆî<|î îïBÆïBÆî!Æxî#vïBÆïBÆî$Mî'Žî*æ î1Òî3|î84 î>ÓîDhîGÖ|ïAî ìxïAî Ðîu|îpïAïAîHxîøïAïA{ï=Ðî ìî !î ×zï:�î ìî Âîã|ï72î ìxï72î É|îï72ï72îÝxï72îâîŠî‡îªî î$î)Òî,+î1fî6Œî8> î>aîA)îC­îE˜ï5‹î ìî Lîoîî8î€îìî î"‘î%Ðî&þî*‹î,=î1„î7Ô|î:,ï5‹ï5‹î;xî=Œï5‹ï5‹î>ÞîAñîFîGàï3äî ì|î ïï3äï3äîÇxï3äîûî\î²îL zï0•î ìî iî‹xï-Fî ìî”îSzï)÷î ìî îA|ï&¨î ìxï&¨î ôîõîî™î¢îMî©î"}î#¯ |î*vï&¨ï&¨î+Nxï&¨î-|î2½ï&¨ï&¨î3•xî5Eï&¨ï&¨î6î:(î<ÐîAîC*îE†îHZï%î ì zï!²î ìîRî»xïdî ìî —î* îeî€ î"ßî%®î)Òî.Üî3+î8yî=Ñ ~ïî ìzî rïï~î Oïïî&zîþïïîÚ~î~ïïîUzïî‰xïÆî ìî lî¶î"îUîàîÁîfî$hî)¸ |î1áïÆïÆî2¹xî5@ïÆïÆ|î6ïÆïÆî6ìxî8›ïÆïÆî9o|î<ïÆïÆî<õxïÆî?øîDkîFSïî ìzïÐî ìî ^îˆ îÅî xï�î ìî ñî»î$ î¯î"|î$eï�ï�î%=xï�î(uî,ºî0Óî5õî9Ë|î<¯ï�ï�î=‡xï�î?èîEðï Úî ìî¤î�î2 î¥|îï Úï Úî÷xî"~ï Úï Ú|î#nï Úï Úî$Fxî%öï Úï Ú|î&æï Úï Úî'¾xî*Fï Úï Úî+Wî-¾ |î5…ï Úï Úî6]xï Úî9}|îîGÖïQ¦î ìTVm$ºÿ TIMESROMANþæÿ HELVETICAþæÿGACHAþæÿ TIMESROMANþŸÿGACHAþæÿGACHAþŸ ÿLAURELþŸ ÿGACHAþŸ ÿ TIMESROMANþŸ ÿ TIMESROMANþŸ ÿ TIMESROMANþæÿ TIMESROMANþŸÿ TIMESROMANþYÿ HELVETICAþYÿMATHþŸÿ HELVETICAý…ÿ HELVETICAþæÿLOGOý‡ÿ HELVETICAþŸÿ HELVETICAþÀ Ñ ð»‘!>&¤+r1ò8>FEcKñRYa¿i'k:r 1|&~ '‡Vˆì�Ç“ ¨žÍ£Ô«x²ø¨¾úÃ/Ê·Ìj/Ð"Î�î9»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[]<>Dragon>DragOps.tioga%Monday, December 17, 1984 5:47 pm PST