ToDragonCore^.paDateAugust23,1984FromRussAtkinsonLocationPARCSubjectDragonOpcodesOrganizationCSLXEROXReleaseas[Indigo]Doc>DragOps.tiogaLasteditedbyRussAtkinson,August23,19849:51:57amPDTAbstractThisdocumentdescribestheDragoninstructionsetasseenbythemachinecodeprogrammerandcompilerbuilder.DragonOpcodesCopyrightc1984byXeroxCorporation.Allrightsreserved.ThisdocumentisaDRAFT,andmostoftheinformationinitisvolatile.ThisdocumentisalsoINCOMPLETE,andshouldbeviewedwithsomesuspicion.RevisionsarecurrentlybeingsentthroughRussAtkinson.pï_/î ìqï_/ï_/îB pï_/î(îqï_/î3Cî8î:?pï[Sî ìqï[SîBîŸpï[Sî(îqï[Sî3CpïWwî ìqïWwîBîApïWwî(î qïWwî3CrïOèî{sïIQî ìîotïIQî¬ð!sïG©î ìî �tïG©î¬î³îgîçî"ñî%eî)î.-î0¡sïD[î ìtïD[î¬î)îYî#Qî&î+ž î31î5Ûî8î;ëî>2î@ýîG:ïB³î ì îRî?îRuï2*î ìî4tï-4î ìvî¯ï-4tï-4î•î2î8î{ î%‘î'¸î+Ûï)åî ìî 8î7îÔwî/ï)åï)åîytî)ï)åï)åî!î!î$Îî&¢î)= î1î2×î42î5Ïî;áî?-îF,îGÊwï(>î ì tî-ï(>ï(>î!îîúî "î%"î(Sî,U î3÷î:°î=QîC�îG´ï&—î ìî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.xïgî$Ãî)¶tïgîI¤yï^õî ì qï[¦î ìî ÃîÂî-îVîî"Ûî(î.Fî4#î8% î@UîBîDaïYþî ìî îBîüîAî!Æî%pî'Kî)Íî-Wî0$î2òî5 î;”î=dîBDîHïXWî ìîùî²îî>î²îªî#mî%4î(‡î,Œî1�î3î7Ÿî:ôî>îAD îIVïV°î ì îÞî~ïT4î ìî ZîTîbîÑîxî!Ìî%‡î'áî*ê î29î5¨î8ÿî;±î> î@� îG:ïR�î ìî øî;î î îŒî$&î&¹î)xî+[î0æ î7öî<ÜîB]îH7ïPåî ìî} îî î\î)î!Õî&%î(+î-ñî0œî2Úî59î8Hî:ÿî=«î?èîBHïNjî ìî ƒîŽî!î—îî`î :î"æî)^î+�î/Óî2=î5ò î=î>ÑîEãîHMïLÃî ìî gîðî²îpîHî+îžî  î&»î(ìî+uî/Tî0ôî3Àî63î9m î@îBJîDÓîH²ïKî ìî  î§îUîµî^ ïH îpîsïH ïH î,qïH îåpîÊïH ïH îrïH îqïH î!Àpî%áïH ïH î&¾ïH î'ûqî+&ïH ïH ïF$î ìî óîºî¢îsîî$‹î(N î/î2iî4øî8Ðî?îBÀîEîGºîI@ïD}î ìîKîKîFîùîSî î!Î î*î-ýî0Lî3Úî9 î?jîB€îGEïBÕî ìî òîJî‚tî0ïBÕïBÕî©ð+yï<7î ìî ëqï8èî ìî ÈîVî5î î ²î"¼î& î+Äî.~ î7yî:˜î<ûîAÇîE¶ï7@î ìî 1îî¯îyî¾îpîeî#Vî&Jî(ðî+€î,Æî0Øî4ßî6$î9Þî=5î@ÎîC'îH7ï5™î ìî ‹î» îÂîyî£ î"ï3î ìî ÂîKî¾îæîî¸îîåî#Âî&î)zî-œî3Uî5 î7iî:lî=Þî@îAAîFìï1vî ìî ^îIîÊî¶î´ î#î$êî'öî)Âî.\î3½ î;!î>Y îEùï/Ïî ìî ‹ îß îÐî"î%£î+ î-‘î/Åî6Ìî8¼î:4î=îAÕîHMï.'î ì îŠîôî‹î!oî#:î)Šî,î1’î3gî4­î9�î=-îB¸îH7ï,€î ìï*î ìî ÄîOîÄî#î5 zï'‰îqï'‰îòîýî\îÏî"2pî"«ï'‰ï'‰î#qï'‰î'R pî/­ï'‰ï'‰î0‰qï'‰î1Çzï% î1î‰înîîªî#Xï"‘îqï"‘îiîtîÓîî"| î(»î, pî4ï"‘ï"‘î5qï"‘î7] zï î1î/îî[îÇî"Bî%=ïšîqïšîñî î{ î!’î'pî'}ïšïšî(Qqïšî,3pî0Nïšïšî1*qïšî2wî7×î;oî=8î@ÐîFCîHþïóîîJîˆî¿îËî  î'’î-Ýî0’zïwîqïwîYîÆî¸îBîüî"aî$î&rî(þpî)wïwïwî*Jqïwî.pî2+ïwïwî3qïwî4Gî9‹î?¬îC6îH›ïÐîî€îFî²î\î€î+î!‡î'Œî(ô î/âî2îî5>î8wî:!î=OîC>îDéîGEï)îîYîýîlîî# î&Kî(Æî.Èî0’î3|î6§î9Nî;Zî>²î@{îD* ï�îzïîqïîÀî îtî0î"Nî%\î(&î*Wî-Òî/Àî4³î7Rî:Âî=å îE+îH"ï^î îXî îÒî"‰zï ãîqï ãî îFî¼î#Áî(õî+}î0„î4ºî8˜î; î@3îDîEæîHnï ;îî| î�îøîdî  î"Nî&rî(üî,C ŠTVm$iDragonOpcodes3IFUstateTheIFUturnsastreamofvariable-lengthinstructionsintosignalsthatcontroltheEU.Italsoperformsaddresscalculationsusedforjumps,callsandreturns.TheIFUcontainsasmallstackofthemostrecentprocedurecontexts.AprocedurecontextfortheIFUissimplyaprogramcounter(PC)andanindexintotheEUstackgivingthebaseofthelocalvariables.TheIFUhasthefollowingregisters(actuallymorethanthese,butforsimplicity):PCistheprogramcounter(abyteaddress).Instructionspaceislimitedto2^32bytes(roughly4gigabytes),eventhoughthefullDragonaddressspaceis2^32words.Sisthestackpointer(anindexintoStack).Manyinstructionstakeoperandsimplicitlyusingthestack.Procedurecallsusethestackforargumentsandreturns.Lgivesthebaseofthelocalframe(anindexintoStack).Thefirst16registersatoraboveLareeasilyaddressablethroughDragoninstructions.SLimitgivesthelimitforS.AstackoverflowoccurswhenSisincrementedtoreachSLimit.xïgî$Ãî)¶tïgîI¤yï_î ìî }qï[²î ìî Ðîëî€î¶î2î÷î$i î+Ôî.¸î34î6î:Íî=8î@¶îB:îEïZ î ìîÖ î@î|îºî 5î#Dî%üïW�î ìî ÍîäîQîƒî*î¦îgî!Ðî%5î)aî/íî63î7Èî>TîC1îEwîGßïUèî ìî XîÈîñî€î�îÇî!~î#oî'9î*î,qî.üî2oî6‘î8ðî< î=Äî@#îCj ïSmî ìî ÄîÓîHî§îºî î%¬î)?î,eî0Gî2Èî5 zïPòîqïPòîˆîîsîî"î Õî#ôî*S î1_î5%î6 î;cî=!î@wîDîIºïOKî îÝî$î×î7î!Âî&Áî+«î/aî0Ìî4zïLÐîqïLÐîîûîkîîîÇîAî"î%î*/î.6 î5¥î8®î>¦ îDÕîH�ïK)îî]îëîúîoî Îî$Aî&~î--î/äzïH®îqïH®î’îî{î¡îfîÒî $î$&î&œî*sî-Wî2yî5]î8Aî:2î?¡îAFîCîG#îH›ïGîîØ î7îoî#o zïD‹îqïD‹î¯î!î€îÆîî +î!·î%*î*Ùî/î2Óî4î5Š î=nî?îBÑÿhTVm$“DragonOpcodes4InstructionformatsThissectiondescribesthevariousinstructionformats.Notethatthedescription[0..255]specifiesanunsignednumberoccupying8bits,while[-128..127]specifiesasignednumberoccupying8bits.Thedescriptionoftheinstructionformatgivestentativebitassignments,followedbyalistoftheinstructionsusingtheformat(in{}brackets),followedbyaroughdescriptionofhowtheformatisinterpreted.ArithmeticinvolvingSorLwillalwaysbeperformedmodulothesizeoftheEUstack,withoutdetectionofunderfloworoverflow.Wewillnotfurtherindicatethislimitationofprecision.Forconvenience,weusethefollowingabbreviationstorefertonumbersobtainedfrombytesthatfollowtheopcodebyte:Alphaisthefirstbyteaftertheopcode.AlphaZisAlphaextendedto32bitswithhigh-order0s.AlphaSisAlphaextendedto32bitswiththesign(high-order)bitofAlpha.Betaisthesecondbyteaftertheopcode.BetaZisBetaextendedwith0s.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]]--1byte{ADD,BNDCK,DIS,DUP,EXCH,EXDIS,J1,LCn,MDIV,MUL,RDIV,RETN,RETT,SFC,SFCI,SJ,SUB,UDIV,UMUL}ForOIinstructionstheoperand(ifany)isimplicitintheopcode.OB-OperationByte[op:[0..255],lit:[0..255]]--2bytes{ADDB,ARL,AS,ASL,CST,EP,IN,J2,JB,LEUR,LIB,LIFUR,OUT,PSB,RB,RET,RSB,SEUR,SIFUR,SUBB,WB,WSB}ForOBinstructionstheoperandisgivenbyAlphaZorAlphaS.ODB-OperationDoubleByte[op:[0..255],lit:[0..65535]]--3bytes{ADDDB,FSDB,J3,JDB,LFC,LGF,LIDB,SHL,SHR}ForODBinstructionstheoperandisgivenbyAlphaBetaZorAlphaBetaS.OQB-OperateQuadByte[op:[0..255],addr:Word]--5bytesxïgî$Ãî)¶tïgîI¤yï^õî ì îWqï[¦î ìî Iî)îTîöî  î' î-�î1;î4Lî6î î>DîCBîHþïYÿî ìî÷îSîîrî ›î$~ î+Bî0êî2Cî6Àî<îBØîD;îHïXXî ì îîÖîE î0î »î$=î)çî, î4î9Åî;Ñî= î?WîA îC� ïV°î ìî –îõîpî˜î} î²î$Wî&Rî'|î+~ î2�î4Iî7Nî9­î>(î?” ïT5î ì îÖîáî1îùîiîî"�î$vî+?î0Xî2¼î5lî7)î9Œî<î?ëîDûïRŽî ìî ¥î=îîŒîîÂî"7î&ßî, î.­ î4íî6¦ ïPî ìî ¢ îÒîî„îîî" î*ˆî,Aî/�î1Vî7î<Íî@>îCÝîF¶ïNlî ìî KîzïKðîqïKðî#î¡îîüîîkî!Ýzî'¦ïKðïKðî(£qïKðî,¸î.6î2kî8eî:%î<î>ÐîAü îHÞzïJIîqïJIîíîYî|îeî î!øî$™î'´î*î,ö î4¹î6Öî8�zïGÎîqïGÎîOîÊî7îØîöî @î"­zî(oïGÎïGÎî)bqïGÎî,®î.(î1\î7Rî:|î=-îASîE"îFÞîHïF'îîÇîÌîézîòïF'ïF'îåqïF'îî ƒî"ãî(0î*ýî,¶î03zî2ëïF'ïF'î3ÞqïF'î7î8‡î:æîAzïC«îqïC«îî‰îèîQîaî œî"üzî(¡ïC«ïC«î)´qïC«î,Wî-Ãî0"î4\î7lî:¨î=zïA0îqïA0îÑîOîÀî¯î%"î+î1)î3›î8vî;ð îCîDÔîI ï?‰îzî¨ï?‰ï?‰î¦qï?‰îBî™î$Iî*î+·î-‡î0î3zî5†ï?‰ï?‰î6„qï?‰î<ÿî>VîEï=âîî½î¢îCî^î¾î  î$bî&€î(9 zï;gîqï;gî’îî ˆî$•î*‡î0þî6ƒî<«î? îCÿîHï9¿îî;î¦ î¹îgî$+î& î1Yî3> xï3õî ìî î î‰qï0¦îîñzï0¦î”î î@qï.+î{î¿ï.+ï.+î—qîFï.+ï.+{îï.+ï.+îíqîLï.+ï.+{îï.+ï.+îóqî£ï.+ï.+{îqï.+ï.+îIqîùï.+ï.+{îÇï.+ï.+îŸqî!'ï.+ï.+{î!õï.+ï.+î"Íqî&-ï.+ï.+{î&ûï.+ï.+î'Óqî(«ï.+ï.+{î)yï.+ï.+î*Qqî,ï.+ï.+{î,Ïï.+ï.+î-§qî0/ï.+ï.+{î0þï.+ï.+î1Õqî3…ï.+ï.+{î4Tï.+ï.+î5,qî7³ï.+ï.+{î8‚ï.+ï.+î9Zqî;áï.+ï.+{î<°ï.+ï.+î=ˆqî@ï.+ï.+{î@Þï.+ï.+îA¶qîCfï.+ï.+{îD4ï.+ï.+îE qîG”ï.+ï.+{îHbï.+ï.+îI:qîJï.+{ï,„îqî–ï,„ï,„{îsï,„ï,„îJqîÒï,„ï,„{î¯ï,„ï,„î‡qîï,„ï,„ï* îîºîÖ î5î•î!øî#Òî&ìî(Xî-cî/î1qxï&ºî ìî ƒî vîøqï#kîîñîî7zï#kîÚîQî †qï ðî{î¿ï ðï ðî—qîï ðï ð{îûï ðï ðîÒqî‚ï ðï ð{î_ï ðï ðî6qîï ðï ð{îëï ðï ðîÂqîrï ðï ð{îOï ðï ðî&qîÖï ðï ð{î³ï ðï ðî Šqî!bï ðï ð{î"?ï ðï ðî#qî#îï ðï ð{î$Ëï ðï ðî%£qî&zï ðï ð{î'Wï ðï ðî(/qî)ï ðï ð{î)ãï ðï ðî*»qî-Bï ðï ð{î.ï ðï ðî.÷qî0¦ï ðï ð{î1ƒï ðï ðî2Zqî5ºï ðï ð{î6–ï ðï ðî7nqî9ï ðï ð{î9úï ðï ðî:Òqî<‚ï ðï ð{î=^ï ðï ðî>6qî?ï ðï ð{î?êï ðï ðî@ÂqîBrï ðï ð{îCNï ðï ðîD&qîEÖï ðï ð{îF²ï ðï ðîGŠqîJï ð{ïIîqîFïIïI{î"ïIïIîúqî‚ïIïI{î^ïIïIî6qîïIïI{îëïIïIîÃqîrïIïIïÎîîºî9 î˜îøî"[î#Çî'{î)wî.�î0Exïî ìî —îŠî îÓqï0îîñîî7 zï0î;î ²î!æqïµî{î¿ïµïµî—qîöïµïµ{îÓïµïµî«qî2ïµïµ{îïµïµîçqî¿ïµïµ{î›ïµïµîsqî#ïµïµ{îÿïµïµî×qî ‡ïµïµ{î!cïµïµî";qî#ëïµïµ{î$Èïµïµî% qî('ïµïµ{î)ïµïµî)Üqî+‹ïµïµ{î,hïµïµî-@qî.ðïµïµï:îîºîX î·îî#zî$æî(šî*– î2Aî4 xï ëî ìî ¢î•îãî¢qï œîîñîîºzï œî�î î!9ÿ�TVm$¾DragonOpcodes5{DFC,J5,LIQB}ForOQBinstructionstheoperandisAlphaBetaGammaDelta.JBB-JumpByteByte[op:[0..255],dist:[-128..127],lit:[0..255]]--3bytes{JEBB,JEBBJ,JNEBB,JNEBBJ}ForJBBinstructionsthenewPCisthebyteaddressgivenbyPC+AlphaS.BetaZisusedforcomparisonwiththetopofstack.LR-LocalRegister[op:[0..15],reg:[0..15]]--1byte{LRn,SRn}ForLRinstructionstheoperandisLocals[reg],whichiseitherpushedtoorpoppedfromthestack.LRB-LocalRegisterByte[op:[0..15],reg:[0..15],disp:[0..255]]--2bytes{LRIn,SRIn}Fortheseinstructions,theoperandis(Locals[reg]+AlphaZ)^,whichiseitherpushedtoorpoppedfromthestack.LRRB-LocalRegisterRegisterByte[op:[0..255],disp:[0..255],reg1,reg2:[0..15]]--3bytes{RAI,RRI,WAI,WRI}Forallinstructions,reg1(BetaL)indicatesalocalregister.ForRRIandWRI,reg2(BetaR)indicatesalocalregisteraswell.ForRAIandWAI,reg2indicatesanauxilliaryregister.RR-RegistertoRegister[op:[0..255],c,a:[0..15],aOpt,cOpt,bOpt,aux:BOOL,b:[0..15]]--3bytes{RADD,RAND,RBC,RFU,ROR,RRX,RSUB,RUADD,RUSUB,RVADD,RVSUB,RXOR}FortheseinstructionstheeffectisroughlyRc_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:IFNOTbOptxïgî$Ãî)¶tïgîI¤qï_'î{î¿ï_'ï_'î—qîFï_'ï_'{î#ï_'ï_'îûqîÓï_'ï_'{î¯ï_'ï_'î‡qîï_'ï_'ï\«îîºîL î¬î î#oî$ÚxïY\î ìî îîÄîÿqïV îîñîî î î"@zïV î'âî)Yî*ŽqïS‘î{î¿ïS‘ïS‘î—qîïS‘ïS‘{îûïS‘ïS‘îÓqî2ïS‘ïS‘{îïS‘ïS‘îçqîFïS‘ïS‘{î#ïS‘ïS‘îûqî"2ïS‘ïS‘ïQîîæîÿ î‹îî!0î#¯î%Gî'Òî+î0$î4î6+ î?yîC²îEIîH±ïOoî îmî‡îçî\îxïLî ìî Uî Hî(qïHÐîîñîTî,zïHÐîî•îÊqïFUî{î¿ïFUïFUî—qîFïFUïFU{î#ïFUïFUîûqî«ïFUïFUïCÙîîµî% î€îÛî":î#¡ î*ãî.íî0Tî4<î9î:«î,qî@³ï Fï FïËîîÁîR î¹î î!óî#gî(„î-kî/yî2¸î4óî6fî9ªî;`î@”îBûîFÎîH�ï#î îéîðîîî›î úî$ î%Ãî(# î/Vî2 î87î9Ðîçî@ îBÿ ï¨îpîºï¨ï¨î$ï¨îbqï¨îdpïîïîå|ïîŒpî-ïïîæ|ïîó pî#Eïïî#þ|ïî&”pïXîïXîn|ïXîApîkïXïXî$|ï±î1îeîJï±îd ï î1îï îdpîùï |ï î˜ïaî1îïaîdpîùïa|ïaî˜ï¹î1îï¹îdpîùï¹|ï¹î˜pï¹î"º|î$ï¹pï¹î%|î&sï¹ï¹î&íïî1îïîdpîùï|ïî˜pïî"º|î$ïpïî%|î&sïïî&íqï –îpîÜï –ï –îFï –îƒqï –î†ÿTVm$NDragonOpcodes6THENIFauxTHENAuxRegs[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+1RJB-RegisterJumpByte[op:[0..255],dist:[-128..127],sdd,sd,opt,aux:BOOL,reg:[0..15]]--3bytes{RJEB,RJEBJ,RJGB,RJGBJ,RJGEB,RJGEBJ,RJLB,RJLBJ,RJLEB,RJLEBJ,RJNEB,RJNEBJ}FortheseinstructionstheeffectistojumptothebytePCgivenbyPC+AlphaSiftheindicatedcomparisionofRawithRbistrue.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-1xïgî$Ãî)¶tïgîI¤pï_,îï_,îå|ï_,îŒpî-ï_,ï_,îæ|ï_,îó pî#gï_,ï_,î$ |ï_,î&¶pï]…îï]…în|ï]…îApî�ï]…ï]…îF|ï[Ýî1îeîJï[Ýîd ïZ6î1îïZ6îdpîùïZ6|ïZ6î˜ïX�î1îïX�îdpîùïX�|ïX�î˜ïVçî1îïVçîdpîùïVç|ïVçî˜pïVçî"º|î$ïVçpïVçî%|î&sïVçïVçî&íïU@î1îïU@îdpîùïU@|ïU@î˜pïU@î"º|î$ïU@pïU@î%|î&sïU@ïU@î&íqïRÅîpî°ïRÅïRÅîïRÅîWqïRÅîYpïQîïQîå|ïQîŒpî-ïQïQîæ|ïQîó pî#;ïQïQî#ô|ïQî&ŠpïOvîïOvîn|ïOvîApî`ïOvïOvî|ïMÏî1îeîJïMÏîd ïL(î1îïL(îdpîùïL(|ïL(î˜ïJ€î1îïJ€îdpîùïJ€|ïJ€î˜ïHÙî1îïHÙîdpîùïHÙ|ïHÙî˜pïHÙî"º|î$ïHÙpïHÙî%|î&sïHÙïHÙî'ÔïG2î1îïG2îdpîùïG2|ïG2î˜pïG2î"º|î$ïG2pïG2î%|î&sïG2ïG2î'ÔxïCãî ìî îî}î;qï@”îîñîî î pî)~ï@”ï@”î*8qî,ªï@”ï@”î-†î0^zï@”î5Pî6Çî7üqï>î{î¿ï>ï>î—qîï>ï>{îßï>ï>î·qîï>ï>{îØï>ï>î°qî7ï>ï>{îøï>ï>îÐqî 0ï>ï>{î ñï>ï>î!Èqî%(ï>ï>{î%éï>ï>î&Áqî*øï>ï>{î+¹ï>ï>î,‘qî/ï>ï>{î/Úï>ï>î0²qî4ï>ï>{î4Òï>ï>î5ªqî9 ï>ï>{î9Ëï>ï>î:¢qî>Úï>ï>{î?›ï>ï>î@s qîIºï>ï>ï;žîîÐîo îåîZî"<î#¾î%ƒî)8î*üî-rî0˜î3î6Ìî8ÞîAîB…îDûï9÷î îÍîƒî²îÊîî „î$=î'_î(Èî.?î/êî3¾î5iî:¨î¯îB)îDþîGÉï8Pîî|îøî7î˜î1î ® î(ìî+Æ î3Šî4÷î9^î= îC)îGîI*ï6¨îî1î3îDî î!:î#î%dî+3î,Óî0£î2½î4î73î8Éî:^î<¥î?"îC… pï4-îqï4-î¶pîLï4-ï4-îï4-îqîjï4-pï4-îrqîËï4-ï4-îDï1²îpîºï1²ï1²î$qï1²îbpî1ï1²ï1²îêqï1²î÷pî‹ï1²qï1²î*pî;ï1²ï1²îõqï1²î!Špî%ï1²qï1²î%¾ï/7îpï/7îÁï/7îiqï/7îkpï-�îï-�îå|ï-�îŒpî-ï-�ï-�îæ|ï-�îó pî$zï-�ï-�î%3|ï-�î'É pï+éîï+éîn|ï+éîApî ï+éï+éîY|ï*Aî1îeîJï*Aîd ï(šî1îï(šîdpîùï(š|ï(šî˜ï&óî1îï&óîdpîùï&ó|ï&óî˜ï%Kî1îï%Kîdpîùï%K|ï%Kî˜pï%Kî"º|î$ï%Kpï%Kî%|î&sï%Kï%Kî&íï#¤î1îï#¤îdpîùï#¤|ï#¤î˜pï#¤î"º|î$ï#¤pï#¤î%|î&sï#¤ï#¤î&íÿáTVm$ñDragonOpcodes7InstructiondescriptionsThefollowingisalistoftheinstructionscurrentlyplannedforthefirstversionoftheDragonIFU.Thisinstructionsetisrelativelysparse,toleaveroomformoreadvancedIFUs.Notation[x]meansthecontentsofEUregisterx.Hence[S-1]isthesecondwordonthestack(arithmeticwithinsquarebracketsisperformedmodulothestacksize).SisthestackpointerandListheRegisterLocalpointer(so[L+1]isregisterlocal1).(y)^isthecontentsofmemorylocationy.LoadsandStoresNameformatopcodesDUPOI1DUPlicate.[S+1]_[S];S_S+1.EXCHOI1EXCHange.temp_[S];[S]_[S-1];[S-1]_temp.EXDISOI1EXCHangediscard.[S-1]_[S];S_S-1.LCnOI8LoadConstantn.[S+1]_Constants[n];S_S+1.nindicatesoneofthefirst8constantregisters.LIBOB1LoadImmediateByte.[S+1]_AlphaZ;S_S+1.LIDBODB1LoadImmediateDoubleByte.[S+1]_AlphaBetaZ;S_S+1.LIQBOQB1LoadImmediateQuadByte.[S+1]_AlphaBetaGammaDelta;S_S+1.LIQBisusefulforloading32-bitconstants.LRnLR16LoadRegistern.[S+1]_[L+n];S_S+1.SRnLR16StoreRegistern.[L+n]_[S];S_S-1.Reads&WritesNameformatopcodesLGFODB11LoadGlobalFrame.[S+1]_([GB]+AlphaBetaZ)^;S_S+1.xïgî$Ãî)¶tïgîI¤yï^õî ì îW qï[¦î ìî ÈîÞîNî{î½îzîÝ î#@î)!î.rî0³î3î5óî:¾î<{î>ßîCâîGÔïYÿî ì îÇîäîP îAî½î kî#óî'œî)Úî-mî3�zïW„î ìqïU îîîtîæîiî5î Òî%Äî'ûî,_î/­î1,î3Ÿî8Dî;àî=ùî@lîCò ïSbîîSî¹îîˆî$Lî)bî+Áî/4ïPæîîZîÅî%î˜îaîî„î ïî#Oî(²î,|î1Eî3‚î7Æî91î>îAVïNkîîæîRî±î îÙî!Gî&}xïKî ìîî£zïGÎî ìïGÎî¬ïGÎîm{ïERî ìqïERî¬ïERîmïB×î î™ îË{ï@\î ìqï@\î¬ï@\îmï=áîî>î× î#! {ï;fî ìqï;fî¬ï;fîmï8ëîîbîü î!G{ï6pî ìqï6pî¬ï6pîmï3õîî¢{îtï3õqï3õîKî¬î&¯{ï1yîqï1yîkîîÇî€îàî¸îìî%[ {ï.þî ìqï.þî¬ï.þîmï,ƒîî¢î‡î“ î&¾{ï*î ìqï*î¬ï*îmï'�îî¢î‡î|î!ˆî.T{ï%î ìqï%î¬ï%îmï"—îî¢î‡îRî ^î4G{ï îqï îòî^îvî´î�î"” {ï¡î ìqï¡î¬ï¡îmï%îî¢îî+ î"¥{ïªî ìqïªî¬ïªîmï/îî­îî7 î  xïàî ìîî‘zï‘î ìï‘î¬ï‘îm{ï î ìqï î¬ï îmï î!-ï ›îî¢î>î~î.%ÿTVm$ DragonOpcodes8Thisoperationisusedtoloadglobalframes.GBdenotesauxilliaryregister0intheEU.Unfortunatelywehavetohaveaglobalframetable,butatleastitisquitelarge(64Kframes).Thedecisiontousethisinstructionisnotentirelyfinal,sinceLIQBmaybepreferable.LRInLRB16LoadRegisterIndirectn.[S+1]_([L+n]+AlphaZ)^;S_S+1.PSBOB1PutSwappedByte.([S-1]+AlphaZ)^_[S];S_S-1.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.LispNaNcheckingisperformedonbothoperandsandxïgî$Ãî)¶tïgîI¤qï_/îîŠîîáî~îŽî"þî'‚î-›î0’î5þ îÝîBUîHï[àîîfîîŠî+ î!î"rî$çî)çî-o{î0áï[àï[àî1¹qï[àî4Åî7Éî9º {ïYeî ìqïYeî¬ïYeîmïVêîî¢îî1îXî/\{ïToî ìqïToî¬ïToîmïQôîîšîƒî�î(c{ïOxî ìqïOxî¬ïOxîmïLýîî­ îîöî"ÿð#{ïJ‚î ìqïJ‚î¬ïJ‚îmïHîî­îº{ïEŒî ìqïEŒî¬ïEŒîmïCîî­îî{ï@•î ìqï@•î¬ï@•îmï>îî­îî|{ï;Ÿî ìqï;Ÿî¬ï;Ÿîmï9$îî­îôîî'¼{ï6¨î ìqï6¨î¬ï6¨îmï4-îî­îî=îdî-V{ï1²î ìqï1²î¬ï1²îmï/7îîï îZî8î#@ð#{ï,¼î ìqï,¼î¬ï,¼îmï*@îîïîûî$2{ï'Åî ìqï'Åî¬ï'Åîmï%JîîïîRî[{ï"Ïî ìqï"Ïî¬ï"Ïîmï TîîïîØîäî)¸xïî ì îºîZqï¶î ìî s î*îÊîÂî î#Ì î-‡ î5N î<î> îB”îEïî ìîÈ îKîGîñîÑî"î%¡ ï“î ìî©îXîÃî>îõî# î%Hî(¤ î0î6 î7tî"îAâîDîIŽïìî ìî wîNîaîÒî¾îÌî"®î%9î(Gî*+î,µî0¬î2Cî4ãî8Îî:¨î=2î@@îB%îD¯ïEî ìîî²î”îóî ƒî"î$†î* î-”î2}î8¦î:3î?UîA³ îHóï�î ì î?î–îDî5î£î¾î$šï"î ìî Ç îo î©î!î!ƒî#7 î*.î/¢î5Xî8î>.îBxîC§îHï {î ì îîäîî‰îTî {î&Tî(­î+äî/pî2×î4î:“î>¾î@FîEcîG.ï Ôî ìî ®îîÔîVîîÊîî—î ÷î#yî(/î+Wî.Óî4œî6î<æî>ùîBBîH7ÿ:TVm$¸DragonOpcodes9results.NameformatopcodesADDOI1ADD.[S-1]_[S]+[S-1];S_S-1.Carryisnotusedorset.Traponintegeroverflow.ADDBOB1AddByte.[S]_[S]+AlphaZ.Carryisnotusedorset.Traponintegeroverflow.ADDDBODB1AddDoubleByte.[S]_[S]+AlphaBetaZ.Carryisnotusedorset.Traponintegeroverflow.BNDCKOI1BouNDsChecK.BoundsChecktrapif[S-1]<0OR[S-1]-[S]>=0;S_S-1.NochangetoCarry.Thisinstructionisusedtocheckindexesagainstbounds.Itisalsousedwhenanumberisnarrowedtofitintoasubrange.MDIVOI1ModulusDIVide.[S-2],[S-1]=[S-2],[S-1]MDIV[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[y].Integeroverflowtraponoverflowordividebyzero.MULOI1MULtiply.[S-1],[S]_[S-1]*[S].Signedmultiplication,32x32->64bits.Notrapspossible.RADDRR1RegisterADD.Rc_Ra+Rb+Carry.Carry_0.Traponintegeroverflow.RANDRR1RegisterAND.Rc_RaANDRb.RBCRR1RegisterBoundsCheck.BoundsChecktrapifRa<0ORRa-Rb>=0;Rc_Ra.NochangetoCarry.Note:ifRb=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].Integeroverflowtraponoverflowordividebyzero.RLADDRR1RegisterLispADD.Rc_Ra+Rb.Carry_0.TraponintegeroverfloworLispNaN.RLSUBRR1RegisterLispSUBtract.Rc_Ra-Rb.Carry_0.TraponintegeroverfloworLispNaN.RORRR1xïgî$Ãî)¶tïgîI¤qï_/î ìzïZ8î ìïZ8î¬ïZ8îm{ïW¼î ìqïW¼î¬ïW¼îmïUAîîµîî"7î&î'„î)ùî-5î.øî1ñî5Mî7Tî;ð{ïRÅî ìqïRÅî¬ïRÅîmïPJîî)î5î Ÿî$î%ëî(`î+œî-`î0Yî3µî5»î:X{ïMÎî ìqïMÎî¬ïMÎîmïKSîî)îî*î(5î,î-�î/öî32î4öî7ïî;Kî=RîAî{ïH×î ìqïH×î¬ïH×îmïF\îîÂîHîHî"Œî%pî&Ñî* î+Apî,vïF\ïF\î-RqïF\î.ªî3ìî6‚î80î=Pî?²îDZîF ïCàîî îäî@îmî î!Ýî&Âî+Oî0ëî2Sî3¯î6lî9˜î==î>WîCtîDÐïB9îî½îŒîdîŽ{ï?¾î ìqï?¾î¬ï?¾îmï=BîîÀîP î{î!@ pî'jï=Bï=Bî({qï=Bî*úî-eî2E î7�î8±î:v î@¡îDV ï;›îî—îFîSîˆîmîØîþî#:î$Çî&Œî)Èî+Uî,×î0ðî2%î4 î6·î8œî9ýî<µî>nî?¤îAáîD™îI ï9óîî†îDîóî ×î"Ýî(Œî*Pî.~î0z{ï7xî ìqï7xî¬ï7xîmï4üîîwî˜î$ î"yî' î0/î4%î5Óî7¸î;5î=—î@ÿ{ï2�î ìqï2�î¬ï2�îmï0îîqîî%Àî,5î/’î1˜î65{ï-Šî ìqï-Šî¬ï-Šîmï+îîqîpîûï+ï+îÎqï+î !{ï(“î ìqï(“î¬ï(“îmï&îîvîzî£î"§î&ðî)Øî+=î-tî.­î/æî2Œî4Ãî5Åî8î:·îî1Øî5óî7mî;’î=Ý îE€tï Mîqï MîÐtîˆï Mï Mî…qîrï Mï M{ïÒî ìqïÒî¬ïÒîmïVîînîÄ î"Qî$y pî+ïVïVî+ÛqïVî.¼î1Šî70 î<ìî>cî@‹ îGï¯î î¤î*îÖîàîî õî#]î&€î)¹î+Dî-î0?î1Éî3Iî7_î8‘î:tî=î?î@^îCîDÊîEüîH7ïîî~îcîÛî™î$Hî',î)2î.áî0¥î4Óî6Ï{ïŒî ìqïŒî¬ïŒîmïîîqî‹î2î$î*“î-ïî/õî4’î:Aî<î?{ï•î ìqï•î¬ï•îmïîîqî‹î[î%_î+Ôî/1î17î5Óî;‚î=Fî@`{ï žî ìqï žî¬ï žîmyTVm$:DragonOpcodes10RegisterOR.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.SUBOI1SUBtract.[S-1]_[S-1]-[S];S_S-1.Carryisnotusedorset.Traponintegeroverflow.SUBBOB1SubtractByte.[S]_[S]-AlphaZ.Carryisnotusedorset.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,andr64bits.Notrapspossible.FieldunitoperationsNameformatopcodesFSDBODB1FieldSetupDoubleByte.Field_AlphaBeta.StoresAlphaBetatoFieldtosetupthefielddescriptorforafieldunitoperation.RFURR1RegisterFieldUnit.Rc_FieldUnit[Ra,Rb,Field].Thisageneralshiftoperation,includingextract,insert,andshift.TheFieldregistersuppliesthefielddescriptor.SHLODB1SHiftLeft.[S]_FieldUnit[[S],0,AlphaBeta].xïgî$`î)StïgîHÝqï_/îîqîîpîÍï_/ï_/î©qï_/î{ï\³î ìqï\³î¬ï\³îmïZ8îîqîAî&î,�î/ìî1òî6Ž{ïW¼î ìqïW¼î¬ïW¼îmïU@îîqî¦îMî+õ î4;î;@î=£{ïRÅî ìqïRÅî¬ïRÅîmïPIîîqî¦î uî,Opî0´ïPIïPIî1œqî32ïPIïPIî3•î7v î>ßîAA{ïMÍî ìqïMÍî¬ïMÍîmïKRîîqî.îÕî%Àî)¡î,î2)î4Œ{ïHÖî ìqïHÖî¬ïHÖîmïFZîîqî.îþî'î*âî-Wî3kî5Í{ïCÞî ìqïCÞî¬ïCÞîmïAcîîqî÷pîÖïAcïAcîªqïAcîÞ{ï>çî ìqï>çî¬ï>çîmï2îC)îH�ïcîî? {ïçî ìqïçî¬ïçîmï kîîÅîšî Îî"[ ÿæTVm$�DragonOpcodes11ThisoperationshiftsandmaskssinglewordsaccordingtothefielddescriptorinAlphaBeta.Itisespeciallyusefulforshiftingleft.SHRODB1SHiftRight.[S]_FieldUnit[[S],[S],AlphaBeta].ThisoperationshiftsandmaskssinglewordsaccordingtothefielddescriptorinAlphaBeta.Itisespeciallyusefulforshiftingright,rotating,andextractingfields.IFUindexadjustinginstructionsNameformatopcodesALOB1AddtoL.L_L+AlphaZ.Thisinstructionisespeciallyusefulforsavingandrestoringstackframes,butmayhaveotherexoticuses.ASOB1AddtoStack.S_S+AlphaZ.Stackoverflowisnotcheckedbythisinstruction,soitisprimarilyusefulfordiscardingwordsfromthestack.ASLOB1AddtoStackfromL.S_L+AlphaZ.Stackoverflowisnotcheckedbythisinstruction,soitisprimarilyusefulfordiscardingwordsfromthestackwhenthedistancefromLisknown,butScouldbeatanylevel.DISOI1DIScard.S_S-1.EPOB1EnterProcedure.L_S+Alpha.Thisinstructionisusedatprocedureentrytoestablishthebaseofthelocalframe.UnconditionaljumpsNameformatopcodesDJOQB1DirectJump.PC_AlphaBetaGammaDelta.JBOB1JumpByte.PC_PC+AlphaS.JDBODB1JumpDoubleByte.PC_PC+AlphaBetaS.JnO*4nIN{1,2,3,5}.JumpstobyteaddressPC+n.Thesejumpinstructionsareimplementedasnullxïgî$`î)StïgîHÝqï_/îî:îuî&îïî"î&î*3î0…î2Eî4¶î7ø î>wî@6 îGúîIƒï]ˆî îCî[î™îŽ{ï[ î ìqï[ î¬ï[ îmïX‘îîÅîwî!«î$ ïVîî:îuî&îïî"î&î*3î0…î2Eî4¶î7ø î>wî@6 îGúîIƒïTnî îCî[î™îŽî#8î(±î+h î1¿xïQî ìî åî˜îr zïMÐî ìïMÐî¬ïMÐîm{ïKTî ìqïKTî¬ïKTîmïHÙîî)î×î ïF]îî! îöîZ îˆî#™î%Ðî*î,²î2eî5Ñî:�î=î@îCTîFìïD¶î{ïB:î ìqïB:î¬ïB:îmï?¿îî)î×îi ï=DîîÁzînï=Dï=DîÑî×î7qï=Dî Xî"Qî$ð î, î-áî/5î0žî6˜î:­î<è îC}îG‡ï;œîîn{ï9!î ìqï9!î¬ï9!îmï6¥îî)î×î�îôî; ï4*îîÁzînï4*ï4*îÑî×î7qï4*î Xî"Qî$ð î, î-áî/5î0žî6˜î:­î<è îC}îG‡ï2ƒîînîáî–îõîCî"ªî$î%‚î*`î,áî.,î1÷î3èî5�î8!{ï0î ìqï0î¬ï0îmï-Œîîd{ï+î ìqï+î¬ï+îmï(•îîÙ îB ï&îî( îîoî«îDî$Çî(Zî* î/¤î2î5î6Öî96î<|xï"Êî ì îÔzï{î ìï{î¬ï{îm{ïÿî ìqïÿî¬ïÿîmï„îîHîû{ï î ìqï î¬ï îmï�îîåîñ {ïî ìqïî¬ïîmï–îîåîÚîç{ïî ìqïî¬ïîm{ï Ÿîpï Ÿîjqï ŸîAî~î î˜îXî³îbî"qî'[{î*‹ï Ÿqï Ÿî+cî,Ãî0Åî4d î;Ãî> îFhîHÿjTVm$WDragonOpcodes12operationsforspeed.J4isnotanopcodebecausethereareno4byteopcodes.SJOI1StackJump.PC_PC+[S].S_S-1.Thisoperationisusefulforcomputedjumps.ConditionaljumpsEachofthefollowingconditionaljumpstakestwoopcodes:onewherethepredictionistonotjump(notrailingJtotheopcode),andonewherethepredictionistojump(atrailingJtotheopcode).Comparisontreatsthetwonumbersas32-bitsignednumbers,unsignedcomparisonsbeingjudgedlesscommon.NameformatopcodesJEBB(J)JBB2JumpEqualByteByte.IFBetaZ=[S]THENPC_PC+AlphaS.S_S-1.JNEBB(J)JBB2JumpNotEqualByteByte.IFBetaZ#[S]THENPC_PC+AlphaS.S_S-1.RJEB(J)RJB2RegisterJumpEqualByte.IFRa=RbTHENPC_PC+AlphaS.RJGB(J)RJB2RegisterJumpGreaterByte.IFRa>RbTHENPC_PC+AlphaS.RJGEB(J)RJB2RegisterJumpGreaterEqualByte.IFRa>=RbTHENPC_PC+AlphaS.RJLB(J)RJB2RegisterJumpLessByte.IFRawîA zïMÎî ìïMÎî¬ïMÎîm{ïKRî ìqî LïKR{ïKRî Åqî�ïKRïKRî¬ïKRîmïHÖîîåîçîpî$ïHÖïHÖîŽqïHÖîËî"Øî$½pî&ÏïHÖïHÖî'ˆqïHÖî*” î6a{ïFZî ìqî#ïFZ{ïFZî�qîuïFZïFZî¬ïFZîmïCßîîåî¶î¸îépîõïCßïCßî _qïCßî!œî%©î'Žpî) ïCßïCßî*YqïCßî-e î93{ïAcî ìqî LïAc{ïAcî Åqî�ïAcïAcî¬ïAcîmï>çîîqîHîJpîWï>çï>çîÀqï>çî þpî&aï>çï>çî'qï>çî*' {ï›îCeîDÐîG#ïåîî¼îî+îžîdî#Nî&]î)Ð {ï iî ìqï iî¬ï iîm¿TVm$<DragonOpcodes13StackFunctionCallIndirect.CallsprocedureviaPC_([S])^.ThereturnPCandcurrentLaresavedintheIFUstack(possiblycausingIFUstackoverflow).RETOB1RETurn.Returnsto(PC,L)savedinIFUstack(stackunderflowtrapifIFUstackisempty).ThestackisadjustedtoS_L+Alpha.RETNOI1RETurnNoadjustment.Returnsto(PC,L)savedinIFUstack(stackunderflowtrapifIFUstackisempty).ThereisnochangetoS.RETTOI1RETurnfromTrap.Returnsto(PC,L)savedinIFUstack(stackunderflowtrapifIFUstackisempty).Trapsareenabledonreturn.ThereisnochangetoS.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.INOB1INputoperation.[S]_([S]+AlphaZ)^;bypassescache.Detailstobesupplied.LEUROB1LoadfromEURegister.[S+1]_PReg[Alpha];S_S+1.LEURreadsdatafromtheEUregisterindicatedbytheAlphabytetothestack.RegisterassignmentsaregivenbyDragOpsCross.ProcessorRegister.LIFUROB1LoadfromIFURegister.[S+1]_PReg[Alpha];S_S+1.LIFURreadsdatafromtheIFUregisterindicatedbytheAlphabytetothestack.RegisterassignmentsaregivenbyDragOpsCross.ProcessorRegister.OUTOB1OUTputoperation.([S]+AlphaZ)^_[S-1];S_S-2;bypassescache.Detailstobesupplied.SEUROB1StoretoEURegister.PReg[Alpha]_[S];S_S-1.SEURstoresawordfromthetopofstackintoadesignatedEUregister.RegisterassignmentsaregivenbyDragOpsCross.ProcessorRegister.SIFUROB1StoretoIFURegister.PReg[Alpha]_[S];S_S-1.xïgî$`î)StïgîHÝqï_'îîåîïîþî!Iî$Ýî+�î-à î5‹î8…î<Õî?JîB#îGîH›ï]îîÙî‡îçîöîiî"/î'î*'î-š {ï[î ìqï[î¬ï[îmïX‰îîLî~î&îEî $î#éî%‘î(šî,î/íî6î9]î:¸î=ÁîA.îB“îHïVâîî�îíîgî {ïTfî ìqïTfî¬ïTfîmïQëîî{îÜ îÈî"ÿî$¬î'Ðî)³î-}î/*î28î5©î9•î@+îCîDnîG{ïPDîîzî î îvî}î!%î"Ó{ïMÉî ìqïMÉî¬ïMÉîmïKNîî�îî_î ¨î"gî%�î'“î+oî-.î0Nî3Òî7Ïî>xîAmîBßîEÿîIƒïI¦îî�î~îÑîþî!î&î*î+|î-‚î2*î3ÙxïFWî ìî¿ zïCî ìïCî¬ïCîm{ï@�î ìqï@�î¬ï@�îmï>î îÅîî3î “î$Ìî&±î)âî,î. î2¹î5#î74î:ôî>î@îCÞîFtîH…ïpîCÿ ï6¡îîÜî@îßîAî î#&î%{î(äî*ˆî,nî0\î4îî7Cî9¢î>î?ŠîB�îDÙîH�ï4úîîkî îmîî!ãî$B î+{ï2~î ìqï2~î¬ï2~îmï0îî6 î<î%æî+�î0)î4Ðî6î8o{ï-ˆî ìqï-ˆî¬ï-ˆîmï+ îî¢î î“îÒî+ {ï(’îqï(’îÙî^îJî˜îÞî Oî%î*ïî,Ñî/î3!î6î7­î9óî>îCY ï&êîîbîî{ï$oî ìqï$oî¬ï$oîmï!ôîî¢î îîVî+�{ïyîqïyîîúîHîøî  î#÷î)î/[î1Ÿî4Gî8³î< î>î@«îE‹ïÑî î¤î÷î«î§{ïVî ìqïVî¬ïVîmïÛîî© î®î(ƒî-Aî2Ûî7ƒî<+î=Ùî?Ê{ï`î ìqï`î¬ï`îmïåîî­î\îæî%î'N{ïiîqïiîüîæîî«îî „î#î$Åî(Aî+#î,V î3/î5Ãî;�î@ü îH›ïÂîîÃî¾{ï Gî ìqï Gî¬ï Gîmï Ìîî­î\îkî©î'ÒkTVm$DragonOpcodes14SEURstoresawordfromthetopofstackintoadesignatedIFUregister.RegisterassignmentsaregivenbyDragOpsCross.ProcessorRegister.ProcessorRegisters(Note:thisdescriptionispartial).IntheIFUweneedthefollowingregisters:Status-containstrapenable/disablebit.Maycontainotherbitsaswethinkofthem.EldestL-containseldestLintheIFUstack.EldestPC-containseldestPCintheIFUstack,readingthisregisterremovestheeldestentry,whilewritingthisregisteraddsaneweldestentry.YoungestL-containsyoungestLintheIFUstack.YoungestPC-containsyoungestPCintheIFUstack.Thisisusefulintraproutinesthatneedtoexaminecode,orincaseswherethetraproutinewantstoskiptheoffendinginstruction.SLimit-containscurrentstacklimit.L-containscurrentvalueofLregister.(Not:notavailablethroughLIFURandSIFURforcurrentIFU)S-containscurrentvalueofLregister.(Not:notavailablethroughLIFURandSIFURforcurrentIFU)IntheEUweneedthefollowingregisters:Field-FieldUnitControl.MAR-MemoryAddressRegister.ThingsleftoutThereareseveralinstructionsleftoutoftheabovelist,forvariousreasons.Tofirstapproximationthesearethefloatingpointoperations.XOPsXOPsaretheundefinedinstructionsintheinstructionset.Topermitefficientemulationofextendedinstructionsets,allXOPsbehaveasprocedurecallstoanaddresslinearlydependentontheinstructioncode.XOPshavedifferentlengths,dependingontheinstructioncode.AllXOPsofmorethan1bytepushAlphaBetaGammaDeltaontothestackbeforetheycall,althoughpartsofAlphaBetaGammaDeltaarenotused,dependingonthelengthoftheXOP.Forimplementationreasonssomeundefinedoperationsdonottrap,butalsodonotproducewell-definedresults.TheseoperationswillbedetailedwhenthePLAfortheIFUissufficientlydetermined.TimingestimatesThissectiongivesapproximatetimesfortheDragoninstructionset.Overall,anestimateof2cyclesperinstructionisagoodguessforaveragetime.cyclesoperation36?MDIV,RDIV,UDIV19?MUL,UMUL8CSTxïgî$`î)StïgîHÝ{ï_/îqï_/îôîÖîîŒîôî Uî"Ìî$‡î'ûî*Õî, î2Òî5âî;ŸîA îH›ï]ˆîîÃî¾xïZ9î ìî@qïVêî ìîUî÷ î îuïToî ìî »îî)îQî®î î ïR�îî(î%î‰îm î$¦î'Ÿî*Ïî/®î3Mî5îî7œî9Äî=cî?ïP“îî$î"î…îqîÝî ‹î"ëî%ùïN¥îîîûîWî<î ˆî"/î$‡î'�î+Sî0@î2Úî7²î=î?pîCUîG:ïLýî1îãî„îcî!Ÿî"Èî%¶î)£ïKîîîîuî!<î"§î$Uî&µî)ÄïI!î îîî{î"Lî$©î&aî(Ëî+äî0Gî3kî4áî9î:¼î=©îCîEÙîI@ïGzî1î©îHî îºî"-î&Eî(¤î+ˆî0Qî42î5áî8Ïî;.îAn ïEŒîî î�îîÊî!=ïCžîîƒîŠî÷îÊî}î ?î!´zî&ôïCžïCžî'mî*¨î-î2Ã}î7ÜïCžïCžî8´zïCžî<Ÿ}î?LïCžïCžî@$zïCžîDîF@ïA÷î1qï@ îîeînîÝî²îgî +î!¢zî&ãï@ ï@ î']î*šî- î2¹}î7Ôï@ ï@ î8¬zï@ î<™}î?Hï@ ï@ î@ zï@ îD îF@ï>aî1qï;æî ìî »îî¥îÍî)î‰î› ï9øîî­îªîIî„ï8 îîúî÷î‘îÝxï4»î ìî}îñqï1lî ìî øîVîñ îZîÙî!Yî#î%†î)’î,2î.yî3Kî9î;Kî>- îGeï/Åî ìî ?îŸî©îI xï,vî ì{ï)'î ìqî tï)'ï)'î ®î3îÄî„ î!î"ôî%… î,’î/îî2Gî6éîî)Zî,Hî2î5ƒî7GîFîHyï"Šî ìî €îEîKî«îäî�{î ýï"Šï"Šî!Õqî#„ï"Šï"Šï î ìî ˜ îxîWîëî%z î,)î.1î0§î3äî6fî93î;;î=±îC ïgî ìîî îÇîrîcî#›î'Pî)¯î,õî/2î1‘î4 î6 î= yïÊî ìîœqï{î ìî î¿î? î;î óî#>î%¬î*¹ î1¢î4·î9ûî;ùîAjîC1îDtîHyïÓî ì îÇî3î]îÏîyî¶î!µzïXîïXîðqïjî›{ïjî!qî$rïjïj{î%Oïjïjî&'qî(®ïjïj{î)‹ïjïjî*cqï |î›{ï |î!qî#šï |ï |{î$wï |ï |î%Oqï Žî›{ï Žî!ÿTVm$˜DragonOpcodes155conditionaljumpincorrectlypredicted5SFCI,SFC,SJ4SIFUR32,3,5byteXops21byteXops2conditionaljumpcorrectlypredicted2JB,JDB,DJ,returns,LFC,DFC2EXCH1allothersAdditional1cycledelaysarecausedbythefollowing:*usingtheresultsofacachefetchonthenextEUcycle*aword-boundaryspanninginstructionwhentheinstructionbufferisempty(forexample,jumpingtoaninstructionthatspansawordboundary)Returnsaredelayeduntilpreviouscallsorreturnshavecompleted(3cyclesfromstartofpreviouscallorreturn).Thereareadditionaldelaysduetothefetch-aheadoftheinstructionbuffer.AtthestartofeveryIFUcycleafetch-aheadisperformedifthebusisnotbusyfromtheprevioususeoftheIFUcache.Thismaycausethebustobebusywhenthereisacachemiss,butotherwisedoesnotaddcycles.Forstraightlinecodetheinstructionbuffercanusuallykeepupwithcachemisses.FortheEUcache,assume6cyclesforwritingadirtyvictim,6cyclesforaquadread,and6cyclesforamapmiss.Thesewilltakemoretime,ofcourse,whenthereiscontentionbyotherprocessors.OpcoderestrictionsThissectiondescribesthevariousrestrictionsonopcodes.TheserestrictionsreducetheamountofhardwareintheIFU.Furtherrestrictionsmaybeimposed.ChangesaremostlyatthewhimoftheIFUdesigner(theserestrictionshavebeenchangedseveraltimes).InstructionlengthTheinstructionlengthisinferredfromthe3highbitsoftheopcodebyteasfollows:000=>1byte[000B..037B](1byteXOPs)001=>5bytes[040B..077B]OQBformat01x=>1byte[100B..177B]OI,LRformats10x=>2bytes[200B..277B]OB,LRBformats11x=>3bytes[300B..377B]RR,RJB,ODB,JDB,LRRBformatsFormatrestrictionsLR&LRBformatmustbeinalignedblocksof16opcodes(therearefoursuchblockscurrently)JBB&RJBformatxïgî$`î)StïgîHÝqï_/î›ï_/î! î(:î+Ù î2©ï]Aî›{ï]Aî!qî$rï]Aï]A{î%Oï]Aï]Aî&'qî'Öï]Aï]A{î(³ï]Aï]Aî)‹qï[Sî›{ï[Sî!qïYeî›ïYeî!î$Yî'hïWwî›ïWwî!î"Gî%WïU‰î›ïU‰î! î(:î+Ùî1ïS›î›{ïS›î!qî"ÂïS›ïS›{î#ŸïS›ïS›î$wqî&'ïS›ïS›{î'ïS›ïS›î'Ûqî(³ïS›ïS›î)�{î.›ïS›ïS›î/rqî1"ïS›ïS›{î1ÿïS›ïS›î2×qïQ­î›{ïQ­î!qïO¿î›ïO¿î!î#ïJÈî ì îÆîûînîœîïî kî"gî$Ç ïHÚîîÇîqîÐî îÙîî Ïî$Bî&Iî(¨î+¸î.BïFìîîœî° îMî  î&Øî*xî,Á î3†î7Ÿî8õî=î?ºîEuïEEî1îßîÏ îªîyî#9î$bî'ëïBÊî ìî)î‚îžîêî~î"“î$\î)î,aî3î4Éî8Åî<2î?GîAîFšîI*ïA#î ìï>§î ìî îy î îUî)îóî"n î)õî+Êî.E î5;î:}î<”î?îB;îDîGßï=î ìî Zî~ îåîKî îfî!Àî$Rî%¸î((î+jî.Ìî1&î6°î9 î:Ôî=.î@8îDÕîGêï;Yî ìî ¤îîŸîPîDî�îEî Ñî"?î#lî':î*¯î-3î3_î6’î9 î;Äî@�îCKîH8ï9±î ìî 3î’ îmîœî'î!Úî%+î'>î*Yî.$ï76î ìî ˜îøîƒî¨îqî§îŸî!Ýî&�î'ºî+ î0î1Nî5Fî7„î8¯î<.î?¡îBYîC�îG‡îIÅï5�î ìî îüîþî©î¢î6î!³î#lî(î+Éî/Rî0¾ î7Žî9‰î=( yï.ñî ìîù qï+¢î ìî ëîmî:î~î+ î% î&÷î,êî0Ñ î7²î<î>WîCHîDåï)ûî ìî ¦îîî6 î>î!Nî#Jî)Âî/]î1½î69î7Ýî:Iî>*î?ïîB[îEuï(Tî ìî ï îêî1î�î üî%�xï%î ì îðqï!¶î ìî Ä îŸîÙîEî†î!íî$Mî%‚î(§î+Iî-î/aî4*î7:î8è{ïÈîînqïÈî¢î×ïÈî† î%þî'¬{î*¼ïÈïÈî+”qî-DïÈïÈî-È{ïÚîînqïÚî¢î×ïÚî† î%þî*{ïìîînqïìî¢î×ïìî† î%þî(rî+k{ïþîînqïþî¢î×ïþî† î%þî(Öî,¶{ïîînqïî¢î×ïî† î%þî(ìî,Tî0Kî3Éî8²xïÁî ìîÊ zïrî ìî aî ãîKqï#îîvîgîîéî-îæî!Ëî'î+î-nî0sî3¤î7è zï Ôî ìî ñîsîƒ%TVm$cDragonOpcodes16lowbitsmaygovernthejumpcode(details?)xïgî$`î)StïgîHÝqï_'îî¯îPîTîåîDî ãî$* 4TVm$(DragonOpcodes17CallsandReturnsThissectiongivestentativeinformationaboutthestrategyusedforprocedurecallsandreturnsonDragon.SimplecallThesimplecaseofcallingaprocedurefirstpushesanyargumentsexpectedbytheprocedure,thencallstheprocedureviaDFCorLFC.ThefirstinstructionisnormallyanEPinstruction,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,fetchestheprocedurevariablefromthexïgî$`î)StïgîHÝyï^õî ìîîBqï[¦î ìî þî“îýî� î"î%íî(Dî-Rî0‡î2¼î97î<>î>îîC™îE—xïXWî ìî|qïUîîéîPîAîüîcî�î&î(ïî-yî0î6Ìî<‹î>‰î@ë îGÈïS`îî î‚î{îGïS`ïS`îqïS`îV{î!ïS`ïS`î!ôqî#¤ïS`ïS`î% î'äî*¿ î1œî3 î8Ý{î:ÐïS`ïS`î;¨qïS`î= îD=îHMïQ¹îîjî îXîcî î[ î": î(âî+2î1Ðî6Öî9&î=î@8îEâïPîîî¡ ïM–îîêîîsî.î‘î Ãî"2î$‰î)Vî,Šî.íî1ÿî5vî7uî9Øî=Eî>ÊîBWîCÆ ïKïîî·îfîlîfîVîeî Øî&‡î)kî*×zî.—ïKïïKïî/GqïKïî1Êî4)î6´î9) î@$xïH î ìîfqïEQîî²î4îØîÛî! î"Ûî$'î(kî,Üî0$î1œî3)î5« î>?î@îB›îI@ïC©îî¾îíîÑîñîVî"$î#×î&<î*dî/Aî4sî8î:oî<#î>�{îAïC©ïC©îAÚqïC©îD ïBîî÷î@îÙî6îgî#jî' î)¤î.î22î5Ôî8æî:Jî=ÊîCø{îG ïBïBîGâqï@[î îÉîtîDî`îîî"xî$·î(ºî,�î18î2Æî5î7Óî;Ëî?4îAgîCç ï>³îîMî®îþî€î6 î&/î(Ûî.­î2bî3ºî7Nî=!î>ÐîAGîC§{îGâï>³ï>³îHºqï= îîÁîzîÚ{îï= ï= îëqîsï= ï= îOî"Âî%�î(<î+@î,tî0î2} xï9½î ìî|qï6nîîëîUîGîî î#~î$¬î+3î.1{î0•ï6nï6nî1mqï6nî3¦î8Ìî<ÞîB\îEeîI@ï4Æîî î[î½îü î"Àî$2î&�î)î,âî.=î0¢î5#î89î:ˆî>¦î@éîC�îDëîG.ï3îî†îõîîðî·î 'î#”î'Çî+lî-*î/™î2¸î6<î7¸ î>Þî@qîBàîEÿîIƒï1xîî_î+{îlï1xï1xîDqï1xî�î î#Eî%¼î*"î,� î4$î5‡î7 î<›îBòîD·îG.ï/Ðîîúî¥îî0î�î"î&~î(ôî*äî0_î2eî6“{î8óï/Ðï/Ðî9Ëqï/Ðî<×îA îC xï,�î ìîxqï)2îî«îeî5îGî#žî*î/¿î2î5íî8úî;—î?îBSîCþ ï'‹îî0î� îjî#óî)ªî+ù î4Fî5ðî;8î<âî@êîC´îH�ï%ãîîîîÊî9 î#·î%îî(‰î-Ðî/ î5œî;;î=ªîD<îIƒï$<îîRîšîæî“î î î!Òî%©{î)tï$<ï$<î*Lqî,Ôï$<ï$<î.xî1´ î8çî=î?(îB¼îFgîH�ï"•îîÚî�î îWî"fî%Îî'¾î)mî*–î0<î3Ðî7oî:•î>úîE}xïFî ìîˆ qïöîî® î¨îï î$4î&#î*ßî-2î2î6ìî8Žî:àî>îBîHïOîîàî†îÓîîëî!hî#î$âî&}î-î/àî6Qî;uî=Ÿî@.îDkï¨îî¨îˆî¡îXîõî†î È î'oî)dî,çî.„î0Òî5 î;Ûî>)îCîD©îFøïîîiî@îlîÿî×îÄî î#¾î'³î+Óî2–î4Üî8Mî;î=í{î?wïïî@OqïîCB xï±î ìî¼îqïbîîîÌîî«î#&î&øî,î/î2æî8¾î<#î@ÆîGˆï»îîùîñîhî Îî" î%î*ëî,½î/@î3‡î8¡ î?×îE¶ï îîæ îHîÇî"‚î(uî*\î/\î2¯î4 î78î=îB²îEîHþï lîîÐîeî îÓî#_î&î(Jî*Å î1çî6 î9î?ºîE îH� TVm$ËDragonOpcodes18interfacerecord,andperformsaprocedurevariablecall.MultipleglobalframesAlthoughproceduresmustbespeciallycompiledtousemultipleglobalframes,thereisnoadditionalmechanismbeyondforcingallcallstoroutineswithmultipleglobalframestousetheindirectprocedurecall.Theaddressontopofthestackcanthenbeusedtofindtheglobalframe(probablyviaaddingaconstant).CoroutinesCoroutinecallsarehandledbytraps.Thedatastructurestobeusedarenotyetdefined.However,co-routinecallswillberoughlyasexpensiveasprocessswitches.xïgî$`î)StïgîHÝqï_/îî´î\îî ïî"î(œî-Òxï[àî ìî…îœqïX’îî î î[î 6î%¯î+˜î-0î/�î4óî9î=½îA1îB‡îDw ïVêîî~î¥î”î!Áî% î&ùî,ƒî/Ûî5‘î9ñî>©î@”îCFîEãïUCîîƒîÍî–îrî!jî#Ñî%{î'Íî+1î-®î0Æî2¨î5Öî7vî:Vî<§î@»îD£ïSœîîLîÝî xïPMî ì qïLþîî‡îŒîÖîî! î%=î( î+ î1>î2ãî4Êî7üî:Fî<±î>ñîD¹ïKWî î§î¶îaîRî!hî#î)`î+î/âõTVm$ÞDragonOpcodes19TrapsThissectiongivestentativeinformationabouttrapsgeneratedbytheIFU.Thegeneralapproachtotrapsistohavetheinstructionthatgeneratesthetraphavenoeffect,andthereturnPCforthetraproutinebethePCofthetrappinginstruction.Maskabletraps(Reschedule,EUStackoverflow,andIFUstackoverflow)disablefurthermaskabletrapsuntiltheyarereenabled(usuallyviaRETT).RescheduleTherescheduletrapoccurswhentheRESCHEDULElineisraisedandinterruptsareenabled.AnattemptismadetohaveidleprocessorsnoticetheRESCHEDULElinebeforenon-idleprocessors(thisiscontrolledbysoftware).IftheRESCHEDULElineisraisedwhileinterruptsaredisabled,therescheduletrapwillbedeferreduntilinterruptsareenabledagain.Theresponsetotherescheduletrapisquitecomplex,andwillnotbecoveredinthisnote.EUStackoverflowThestackoverflowtrapoccurswhenanattempttoincreasetheEUstackpointerby1(S_S+1)wouldresultinScrossingthestackoverflowlimitregister(andtrapsareenabled).Thelimit,whichissetbysoftware,mustallowsufficientroomforthetraphandler.ThehandlerforthistrapshouldmigratetheeldestframeintheEUandIFUstackregisterstomemory,thenreturnviaRETT.IFUstackoverflowTheIFUstackoverflowtrapoccurswhenanattempttocallaprocedurewhentheIFUstackisfull(andstackoverflowisenabled).SomenumberofIFUframesarestillavailableafterthistrapoccurs,socallscanbemadebythetraphandler.ThehandlerforthistrapisthesameasforEUstackoverflow.StackunderflowThestackunderflowtrapoccurswhenareturninstruction(RET,RETN,orRETT)triestoreturntoanemptyIFUstack.ThetraphandlermustarrangetomigrateaframefrommemorytotheIFUandEUregisters.Thisisnotatruetrap,sincetheIFUstackisleftemptyonentrytothehandler.Whenthetransfertakesplace,maskabletrapsaredisabled.ALUfaultTheALUfaulttrapoccurswhentheALUdetectsintegeroverflow,aboundscheck(duetotheBNDCKinstruction)oraNILcheck(duetotheNILCKinstruction),orLispNaN.ThehandlerforALUfaultshouldturnthistrapintotheappropriateerror,dependingontheinstructionthatraisedthefault.EUpagefaultTheEUpagefaulttrapoccurswhenareferencetounmappedmemoryismadebytheEU.ThefaultingaddressisavailablethroughaspecialEUregister(MAR).Thehandlershoulddetermineifthepageisvalid,theneithercausethepagetobemadepresent,orcauseapagefaulterror.Interruptsaredisabledduringthetraphandler.IFUpagefaultxïgî$`î)StïgîHÝyï_î ìqï[²î ìî î¦îî¶ î"Bî&%î)�î/Üî1Ùî4:î8(î;î?ÖîEÖîG†ïZ î ìî Xî îNî® îŠîXî"aî$Áî'¥î*ìî,óî1î3Ïî6/î:^î<²î>ðîAPîD4îHþïXcî ìî ‹îîîµîz î!¯î(#î+Ë î40î6úî:ïîA6îD-îG{ïV¼î ìîî¼îeîmî"Õî&î),î+î1Õî7{î9>ïV¼ïV¼î:qî<žïV¼ïV¼î=xïSlî ì qïPîî îôîöîZî#.pî%¬ïPïPî&€qïPî.#î0øî2‚î6£î9y î?äîBVîH›ïNvîîîpî%îÈîî¯ î&;î*Ipî,�ïNvïNvî-qqïNvî4êî7•î;ÙîAG îGÓïLÎîî³ îmî¡ îáî!›pî$3ïLÎïLÎî%qïLÎî,Äî/³î1Wî5’î9 î@îB�îH�ïK'î îàîÆîsîeî!ëî%4 î+�î-Öî3î7�î:fî@ îA½îD ïI€îîòî^îçîÄî{î!&î#›î%Œî*­î,[î.ýxïF0î ìî kîWqïBàîîîŽîXîVî!µî%…î'�î,¶î.î3Ûî6Uî8úî<‡îAjîC�îDÐïA9îî/îìîŒîÉîýî Oî#´î)Uî,�î1^î4€î7Ûî: î@†îCPîFàï?’îîpîƒîtî;î™î 8 î&,î)Ëî+þî.Sî1-î6ÿî9Íî>ÎîAîC™îFrï=ëîîîmîZîPîþî!^î#èî& î)®î-!î2„î43î9øî=îAM{îCŠï=ëï=ëîDbqîFêï=ëï=ëxï:›î ìî åîƒqï7KîîàîèîUîýîÚî$î'Çî)±î.·î0^î2ãî4î:‚î>1î@ŠîC’îFþîHcï5¤îînîîíîˆî#gî'kî,Æî.®î1ëî6•î9î;çîAÐîE:îH ï3ýîî´î€î—î*î#îëî!ïî$Vî'Bî-9î0î5-î7rî:î=î>{î@ãîDhîFîHdï2Uîî�xï/î ìî ×qï+¶îîéî^îøîÞî"%î%Üî'î+8 î2{î2�ï+¶ï+¶î3gqî5ï+¶ï+¶{î5õï+¶ï+¶î6Íqî9Uï+¶ï+¶î:3{î;ùï+¶ï+¶î<Ñqî?Yï+¶ï+¶î@XîC_îEîI@ï*îîîEî[î·î•î!€î&‘î*î.ûî0°î5¶î6æî:ãî>QîCÅîEyîGßï(hîîÁîG î}î’îúî jî!�î$oî'¦î+î-pî0zî3éî5Pî7Àî;öî=÷îA‡îC1îEŒï&Àîî&î†î‘îî ûî'î*kî,¾xï#qî ìî ^qï !îîîºîîî�î#Vî%Öî)‰î.=î2úî9"î:lî?lîCnîFÀîH�{ïzîqïzîÊ îîâî î î$î'0î(ß{î+>ïzïzî,qïzî/ù î7¦î9jî<„î@ÎîC¦îH±ïÓîîžî×îPîRîñî!Òî$§î' î.`î2'î8éî:ìî=I îD!îFìï+îînxïÜî ìî kî¦qïŒîîøî”îìî9î.î!…î%Kî&†î,•î.Uî5Bî:Áî<>î@îBîD�îHïåîî4î-î¨îsî$ºî%óî*~î-î2î7ßî:Æî?áîDlï>îî”îî…îîûîGî"Xî&3î(¸î,$î-øî0î3óî9Eî;.î? î@XîCÄîG%ï–î î{îÏî=î ®î#î%ñxï Gî ìî åî ÿ’TVm$CDragonOpcodes20TheIFUpagefaulttrapoccurswhenareferencetounmappedmemoryismadebytheIFU.ThefaultingaddressisavailableasthereturnPC.Thehandlershoulddetermineifthepageisvalid,theneithercausethepagetobemadepresent,orcauseapagefaulterror.xïgî$`î)StïgîHÝqï_/îîéîûîDîƒîiî!±î%iî&•î,•î.Fî5$î:”î<î?ÆîAÄîD&îHï]ˆîî7î3î²îî!?î#±î'óî+Gî.2î3Oî7Þî>rî?æîBWîE±îG/ï[àîî4î!îÖî6î|î +î"î%Ûî+î,Ëî0�î1ªî4ñî8-çTVm$DragonOpcodes21FieldUnitSpecificationThissectiongivesaMesaspecificationfortheFieldUnitfunctionsandthefielddescriptorformat.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#ofleft-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.<>xïgî$`î)StïgîHÝyï^õî ìîîî qï[¦î ìî îÄîFî�î: î"/î$|î&ìî*›î-çî3öî6¾î9.î¯îî¢î­î:zï=î îqîVîúî†î+ î ‰î"Õî'%|ï;`îxï8î ý|îÆï8ï8pîÄï8ï8îl|ï8îk îëî!/î#mpî-¯ï8ï8î.ƒ|ï8î3»î7 î;\î=Aï6hîîÌî¸î�î)xî-§ zï4Áî îãî îHî¾î î#�î'Þî+.î/�î1âî3¼î8;|ï3îîîî“î,{ zï1qî îãîbîøîmî"{î$3î,Šî.0î0|pï/Éî|ï/Éî¶pîï/Éï/ÉîÑ|ï."îî³î? îpî3'ï."ï."î49|î5‹ï."ï."î5îî;q zï,zî1îbî÷îIî#Mî'Ìî*Xî+ûî.G|ï*Òîî„î îîzï)*î îTîàî†îÒîhîî!aî%ˆpï'ƒî|ï'ƒî¶pîï'ƒï'ƒîÑ|ï'ƒîÞîSîà î$¢î4Œzï%Ûî îPîæîî§îMî™î#/î&Ûî)hî,¥î0hî2 î4¢î6Hî7íî:9|ï$3îpï ãî ý|î…ï ãï ãzï”î ý îêîúî8xïDî|îùïDïDpî÷ïDïDîž|ï�î î5îxî“ pî$vï�ï�î%J|ï�î*‚î/4pî1ï�ï�î1Òï�î7|ï�î;¢zïõî î/î[îæîsî$_î(4î*•î,oî.ûî1ˆî4+î8Ãî;î@+ïMî1îî1î |ï¥î xïVî|îiïVïVpîgïVïVî|ï®î î…îÈîã pî#Æï®ï®î$š|ï®î)Òî.„pî0iï®ï®î1"ï®î6W|ï®î:òzï î î/î[îæîuî$`î'±î*î+ìî.yî1î3©î8@î:Œî>ßï _î1îî1î ˜TVm$¨DragonOpcodes22};SingleWordShiftRight: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<>};xïgî$`î)StïgîHÝ|ï_,î xï[Ýî|î;ï[Ýï[Ýpî9ï[Ýï[Ýîà|ïZ6î î…îÈîã pî#ÆïZ6ïZ6î$š|ïZ6î)Òî.„pî0iïZ6ïZ6î1"ïZ6î6W|ïZ6î:òzïX�î î/î[îæîuî$`î'±î*úî,Ôî/aî1íî4�î9(î;tî?ÇïVçî1îî1î |ïU@î xïQñî|îeïQñïQñpîcïQñïQñî |ïQñî î0pî~ïQñïQñî R|ïQñî%Šî*<pî,!ïQñïQñî,‹|ïQñî0¼zïPJî î/î[îÆîûîÝïN£î1îî1î |ïLûî xïI­î|î«ïI­ïI­pî©ïI­ïI­îP|ïI­îPîupîÄïI­ïI­î˜|ïI­î$Ðî)‚pî+gïI­ïI­î+Ñ|ïI­î0zïHî î/î[îÆîûîÝïF^î1îî1î |ïD·î xïAhî|îOïAhïAhpîMïAhïAhîô|ïAhîôîRpî¡ïAhïAhîu|ïAhî$­î)_pî+DïAhïAhî+®|ïAhî/ßzï?Áî î/î[îÆîûîÝï>î1îî1î |ï=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+1EPOB1L_S+AlphaEXCHOI1[S+1]_[S];[S]_[S-1];[S-1]_[S+1]EXDISOI1[S-1]_[S];S_S-1FSDBODB1Field_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+1LEUROB1[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+1LIFUROB1[S+1]_PReg[Alpha];S_S+1LIQBOQB1[S+1]_AlphaBetaGammaDelta;S_S+1LRInLRB16[S+1]_([L+n]+AlphaZ)^;S_S+1LRnLR16[S+1]_[L+n];S_S+1MDIVOI1[S-2],[S-1]_[S-2],[S-1]/[S];signed,Sign[rem]=Sign[divisor]MULOI1[S-1],[S]_[S-1]*[S];signedOUTOB1([S]+AlphaZ)^_[S-1];S_S-2;special:usesIOlinesPSBOB1([S-1]+AlphaZ)^_[S];S_S-1RADDRR1Rc_Ra+Rb+carry;carry_0;traponoverflowRAILRRB1[L+BetaL]_(AuxRegs[BetaR]+AlphaZ)^RANDRR1Rc_RaANDRbRBOB1[S]_([S]+AlphaZ)^RBCOB1trapifRa<0ORRa-Rb>=0;Ra_RcRDIVOI1[S-2],[S-1]_[S-2],[S-1]/[S];signed,Sign[rem]=Sign[dividend]RETOB1S_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;traponoverfloworLispNaNRLSUBRR1Rc_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;setcarryxïgî$`î)StïgîHÝyï^õî ì îWîWï]„î ýî îkîq 8TVm$(pï\î ýî¶îÃ8TVm$sîÉï\ï\î*îáî#àî&Rî( ÿ>$TVm$pïZ½î ýî¶îÃbTVm$sîÉïZ½ïZ½î* î î"ˆî$AÿjTVm$pïY\î ýî¶îÈTVm$sîÉïY\ïY\î*î"nî$ßî&™ÿ�!TVm$pïWüî ýî¶îòTVm$sîÉïWüïWüîpÿ¸ TVm$pïVœî ýî¶îÃÂTVm$sîÉïVœïVœî‚ÿÈ TVm$pïU<î ýî¶îÃÒTVm$sîÉïU<ïU<î‚ÿØ TVm$pïSÝî ýî¶îÃâTVm$sîÉïSÝïSÝî!î;îCî(îî(î£î$dî&uî'ÍÿêTVm$&pïR|î ýî¶îà TVm$sîÉïR|ïR|î*î$ÿTVm$pî*QïR|ïR|î*þÿ0TVm$sïR|î,î8±2TVm$qî=iïR|ïR|î=öîAÀpïQî ýî¶îÃÿNTVm$sîÉïQïQîgîýî¾îÿdTVm$pïO¼î ýî¶îÂTVm$sîÉïO¼ïO¼î‚ÿˆTVm$pïN\î ýî¶îÃŽTVm$sîÉïN\ïN\î‚î¶îôÿ”TVm$pïLüî ýî¶îêTVm$sîÉïLüïLüî*îÿ°TVm$pïKœî ýî¶îÃÀTVm$sîÉïKœïKœîpÿÆ TVm$pïJ=î ýî¶îÃÐTVm$sîÉïJ=ïJ=î*î î"ˆ ÿØTVm$pïHÜî ýî¶îÃøTVm$sîÉïHÜïHÜî*îLÿTVm$pïG|î ýî¶îÃTVm$sîÉïG|ïG|îp ÿTVm$pïFî ýî¶îÃ(TVm$sîÉïFïFî*ÿ.TVm$qî!eïFïFî!òî%¼î(‡î*pïD¼î ýî¶îÃÿ@TVm$"sîÉïD¼ïD¼î‚ ÿX TVm$pïC\î ýî¶îÃdTVm$sîÉïC\ïC\î‚ÿlTVm$pïAüî ýî¶îÃ| TVm$sîÉïAüïAüî‹îCîÇî¬î½ î)ÿ†TVm$pï@�î ýî¶îäTVm$sîÉï@�ï@�î“îôî^îüî Sî!«î#î$~î%‡î(©î+ïî-„ÿª&TVm$*pï?<î ýî¶îÃÐ TVm$sîÉï?<ï?<î‹îCîêîÐîá î)?ÿÚTVm$pï=Ðî ýî¶îÃøTVm$sîÉï=Ðï=Ðî*î"ÿþTVm$pïTVm$pï9°î ýî¶îÃVTVm$sîÉï9°ï9°î*î&[ÿ^TVm$pï8Oî ýî¶îÃ|TVm$sîÉï8Oï8Oî* î9ÿ‚TVm$pï6îî ýî¶îÔTVm$sîÉï6îï6îî*î!‘ÿœTVm$pï5�î ýî¶îòTVm$sîÉï5�ï5�î*î" ÿºTVm$pï4,î ýî¶îÃÒTVm$sîÉï4,ï4,î*î'tÿÚTVm$pï2Ìî ýî¶îú TVm$sîÉï2Ìï2Ìî*î$ÏÿTVm$pï1kî ýî¶î TVm$sîÉï1kï1kî* îµÿ(TVm$pï0 î ýî¶îÃ:TVm$sîÉï0 ï0 î* îxîµ î#dî$mî&¡î*Äî05î1¹ ÿB:TVm$$pï.©î ýî¶îÃ|TVm$sîÉï.©ï.©î*îxî¶ î"ÿ‚TVm$pï-Hî ýî¶îÜTVm$sîÉï-Hï-Hî*î"eÿ¢TVm$qî&dï-Hï-Hî&ñî*»î-…î/pï+çî ýî¶îÃÿ¼TVm$"sîÉï+çï+çî*î"eÿÖTVm$pï*‡î ýî¶îÃðTVm$sîÉï*‡ï*‡î“ î!mî&6î(¨î*aÿø%TVm$pï)(î ýî¶îÃTVm$sîÉï)(ï)(î*ð!&"TVm$pï'Èî ýî¶îÃHTVm$sîÉï'Èï'Èî“îÙîšÿP TVm$pï&hî ýî¶îÃZTVm$sîÉï&hï&hî*ÿ`TVm$pï%î ýî¶îÃrTVm$sîÉï%ï%î!î;îCîî îî 'î%tî&ÌÿxTVm$$pï#¨î ýî¶îÃ’TVm$sîÉï#¨ï#¨î* îxîµ î#dî$mî&¡î*Äî05î1¹ ÿš;TVm$$pï"Hî ýî¶îÃÖTVm$sîÉï"Hï"Hî‚îÇî!Kî$ ÿÜTVm$pï èî ýî¶îÃôTVm$sîÉï èï èî3îLîÿüTVm$pï‰î ýî¶îà TVm$sîÉï‰ï‰î3îLîî î#úÿTVm$pï)î ýî¶îÃ,TVm$sîÉï)ï)î*ÿ2TVm$pïÉî ýî¶îÃR TVm$sîÉïÉïÉî“î’î£ ÿ\TVm$pïiî ýî¶îÃp TVm$sîÉïiïiî“îî ÿzTVm$pï î ýî¶îÃŽ TVm$sîÉï ï î“îµîÇ ÿ˜TVm$pï©î ýî¶îì TVm$sîÉï©ï©î“îî ÿ¶TVm$pïIî ýî¶îÃÊ TVm$sîÉïIïIî“îµîÇ ÿÔTVm$pïêî ýî¶îÃè TVm$sîÉïêïêî“îLî] ÿòTVm$pïŠî ýî¶îÃTVm$sîÉïŠïŠî“î´î"~î$ðî&©î+jî,åî/rÿ(TVm$"pï*î ýî¶îÃ6TVm$sîÉï*ï*î“îûî!Åî$7î%ðî*±î,,î.¹ÿ>(TVm$"pïÊî ýî¶îÃfTVm$sîÉïÊïÊî“îÙîêÿl TVm$pïjî ýî¶îÃvTVm$sîÉïjïjî*ÿ~TVm$pï î ýî¶îÜTVm$sîÉï ï î*ÿ¢TVm$pï ¨î ýî¶îôTVm$sîÉï ¨ï ¨î*î#ÿºTVm$pï Iî ýî¶îÃÔTVm$sîÉï Iï Iî“ îúî$Äî'6î(ïÿÜ%TVm$pï éî ýî¶îÃTVm$sîÉï éï éî“ î!mî#Zÿ TVm$DragonOpcodes24RUSUBRR1Rc_Ra-Rb-carry;setcarryRVADDRR1Rc_Ra+RbRVSUBRR1Rc_Ra-RbRXORRR1Rc_RaXORRbSEUROB1PReg[Alpha]_[S];S_S-1SFCOI1callprocat[S];S_S-1SFCIOI1callprocat([S])^SHLODB1[S]_FieldUnit[[S],0,AlphaBeta]SHRODB1[S]_FieldUnit[[S],[S],AlphaBeta]SIFUROB1PReg[Alpha]_[S];S_S-1SJOI1PC_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]-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];unsignedUMULOI1[S-1],[S]_[S-1]*[S];unsignedxïgî$`î)StïgîHÝTVm$pï_lî ýî¶îÃTVm$sîÉï_lï_lî“ îúî!èÿTVm$pï^ î ýî¶îÃ0TVm$sîÉï^ ï^ î“ÿ8TVm$pï\­î ýî¶îÃ@TVm$sîÉï\­ï\­î“ÿHTVm$pï[Mî ýî¶îÃPTVm$sîÉï[Mï[Mî“îÙî£ÿX TVm$pïYîî ýî¶îÃbTVm$sîÉïYîïYîî‚î TÿjTVm$pïX�î ýî¶îÀTVm$sîÉïX�ïX�îgîýî¾îîSÿ†TVm$pïW-î ýî¶îÚTVm$sîÉïW-ïW-îgîýî¾îÿ¢TVm$pïUÍî ýî¶îòTVm$sîÉïUÍïUÍî*ÿºTVm$pïTlî ýî¶îÃØTVm$sîÉïTlïTlî*ÿà TVm$pïS î ýî¶îÃTVm$sîÉïS ïS î‚î TÿTVm$pïQ«î ýî¶îÃTVm$sîÉïQ«ïQ«î‚ÿ$ TVm$pïPKî ýî¶î. TVm$sîÉïPKïPKî*î#ÿ8TVm$pïNêî ýî¶îRTVm$sîÉïNêïNêî*îüÿZTVm$pïMŠî ýî¶îÃjTVm$sîÉïMŠïMŠî*î(î#'î%™î'Rÿp$TVm$pïL)î ýî¶îÔTVm$sîÉïL)ïL)î*î!´î$&î%ßÿœ!TVm$pïJÉî ýî¶îþTVm$sîÉïJÉïJÉî*ð!Æ"TVm$pïIiî ýî¶îÃèTVm$sîÉïIiïIiî*î"eÿîTVm$pïHî ýî¶îÃTVm$sîÉïHïHî*ÿTVm$pïF¨î ýî¶îÃ.TVm$sîÉïF¨ïF¨î*î"eÿ4TVm$pïEGî ýî¶îÃNTVm$sîÉïEGïEGî* îxîµ î#dî$mî&¡ÿV$TVm$pïCçî ýî¶îÃzTVm$sîÉïCçïCçî*îxî¶ î"ÿ‚TVm$DragonOpcodes25SamplecodesequencesNotationInthefollowingexamples,FD[insert,mask,shift]denotesafielddescriptorwithindicatedfields.RRformatoperationsarewrittenwiththeoperandsintheorderRa,Rb,Rc.Packedsequencefetch/storeAssumethefollowingCedar/Mesacode:r:REFTEXT;--inlocalregisterLr(32-bitmaxLengthinword1)i:INT;--inlocalregisterLic:CHAR;--inlocalregisterLcc_r[i];--generatesthefollowingcode{11cycles,26bytes}LRILr,1--pushthewordcontainingtheboundRBCLi,[S],[S]--boundschecktheindexgiven(leaveLionstack)SHRFD[0,30,30]--makeawordindexRADD[S],Lr,[S]--getthewordaddress(-1)RB2--fetchthewordcontainingthedesiredcharLRLi--pushthecharacterindexSHLFD[0,5,3]--makeitabitindexintothewordADDDBFD[0,8,8]--addintherestofthefielddescriptorSEURField--settheFieldregistertocontroltheshiftRFU[S]-,C0,Lc--extractthecharandstoreittocr[i]_c;--generatesthefollowingcode{14cycles,32bytes}LRILr,1--pushthewordcontainingtheboundRBCLi,[S],[S]--boundschecktheindexgiven(leaveLionstack)SHRFD[0,30,30]--makeawordindexRADD[S],Lr,[S]--getthewordaddress(-1)RSB2--fetchthearrayword(leaveaddronstack)LIDBFD[1,32,24]--pushthebasefielddescLRLi--pushthecharacterindexSHLFD[0,5,3]--makeitabitindexintothewordSHRFD[1,10,5]--alsoinsertitintothemaskpositionSUB--adjustthefielddescriptorSEURField--settheFieldregistertocontroltheshiftRFULc,[S],[S]--insertthecharintothearraywordWSB2--storethechangedwordProcedurebody&callAddFunny:PROC[x,y:INT]RETURNS[INT]={z:INT_x+y;IFz>1THENz_z+z;RETURN[z];};GeneratesEP377B--pointLatxRADDLx,Ly,[S+1]+--z:INT_x+yxïgî$`î)StïgîHÝyï^õî ìîÃî£xï[¦î ìqïXXî ìî ©î öîõî8î'î, î-#î0A î6›î9£î?„îCïîFsïV°î ì îšîíî î»îî#î$°î'î*ÄxïSaî ìî¿î� qïPî ìîîwî‰ îw|ïNkî ýpî ïNkïNkîSïNkîJ|îIïNkzïNkî~îõî›î!áî&¬î(§î-î4>î5äî95|ïLÄî ýpî ^ïLÄïLÄî È|îiïLÄzïLÄî1î¨îNî”î^|ïKî ýpî –ïKïKîa|îîïKzïKî1î¨îNî”î^|ïGÍî ýî î©zïGÍî1î¨î•îáî!´î$Ïî'eî+žî-„{ïF&î|ïF&îBzïF&î�îî"9î$…î'Õ î.xî0Ä{ïD~î|ïD~îB zïD~î�îî#›î'tî)Àî-xî1î4æî6Àî8³{ïB×î|ïB×îB zïB×î�îî"³î#çî'8{ïA/î|ïA/îB zïA/î�îî!Fî#’î&ãî+ {ï?ˆî|ï?ˆîBzï?ˆî�îî"\î$¨î'ù î.›î0çî5n{ï=áî|ï=áîBzï=áî�îî"9î$…î*p{ï<9î|ï<9îBzï<9î�îî"³î$ î%?î'Gî*ÿî-Æî0{ï:’î|ï:’îBzï:’î�îî!œî#Aî%Žî(%î)Éî,î/ {ï8êî|ï8êîBzï8êî�îî!î#fî&Øî+£î-Hî1Þî4*{ï7Cî|ï7CîB zï7Cî�îî#œî%èî(ùî+œî.åî0<î1á|ï3ôî ýî/î¼zï3ôî1î¨î•îáî!´î$Ïî'eî+žî-„{ï2Lî|ï2LîBzï2Lî�îî"9î$…î'Õ î.xî0Ä{ï0¥î|ï0¥îB zï0¥î�îî#›î'tî)Àî-xî1î4æî6Àî8³{ï.ýî|ï.ýîB zï.ýî�îî"³î#çî'8{ï-Vî|ï-VîB zï-Vî�îî!Fî#’î&ãî+ {ï+¯î|ï+¯îBzï+¯î�îî"\î$¨î(;î+Œî/nî2‡î4z{ï*î|ï*îB zï*î�îî"9î$…î'‰î*�{ï(`î|ï(`îBzï(`î�îî"9î$…î*p{ï&¸î|ï&¸îBzï&¸î�îî"³î$ î%?î'Gî*ÿî-Æî0{ï%î|ï%îB zï%î�îî!Óî%Œî&äî)ªî+öî/Œ{ï#iîzï#iî�îî"ÿî%Lî(P {ï!Âî|ï!ÂîBzï!Âî�îî!î#fî&Øî+£î-Hî1Þî4*{ï î|ï îB zï î�îî"Àî% î(î*ãî-/î0Â{ïsî|ïsîBzïsî�îî"Nî$šî)áxï}î ìîxî¾îKï.î ý|îï.ï.pîï.ï.îª|ï.î©pîÃï.ï.î-|îÎï.ï.pî¶ï.ï.îŠ|ï.î"Ápî#%ï.ï.î#Ž|î%0ï.ï.î&î'ýï†îpî¦ï†ï†î|ï†î6îÃpïßî|ïßî¶îÔî pî=ïßïßî÷|ïßîî!î®îÍî²pï7î|ï7î{ï�îzï éî ý{ï Aî|ï AîBzï Aî�îî"}î#ôî%™{ï šî|ï šîB zï šî&Üî(Sÿ×TVm$àrî)ìï šï šî*hÿØTVm$zï šî,‚î-ïÜTVm$DragonOpcodes26RJLEB6,[S],C1--IFz>1THENRADDLz,Lz,Lz--z_z+zRORLz,Lz,Lx--RETURN[z]RET0--(S_L+0)u_AddFunny[v,w]+1;Assumeu,v,wareinlocalsLu,Lv,LwAssumeAddFunnytobecalledviaDFCGeneratesLRLv--pushvLRLw--pushwDFCAddFunny--AddFunny[v,w]RADD[S-1]-,C1,Lu--u_...+1ArithmeticprecisionchangesMultiple-precisionarithmeticquantitiesarestoredwithhigherorderwordsinloweraddresses,evenwithintheregisterstack.Thatis,thewordat[S-1]ismoresignificantthanthewordat[S].Doubleprecisionnumbersshowupinmultiplicationanddivision.Extend32-bitsignednumberonstackto64-bitsignednumberonstack{3cycles,7bytes}DUP--low-orderwordontopofstackRUADD[S-1],[S],[S]--carrybit_signbit&putgarbagein[S-1]RSUBC0,C0,[S-1]--negatesignbitintohigh-orderword,clearthecarryNarrow64-bitsignednumberonstackto32-bitsignednumberonstack{4cycles,10bytes}RUADD[S]-,[S],[S+1]+--carry_signbitofloworderword,garbageat[S+1]RADD[S-1],C0,[S+1]+--[S+1]+_signbitplushigh-orderwordRBC[S]-,C1,[S]--boundscheckfaultwhen[S]#0,popstackEXDIS--flushthehigh-orderwordExtend16-bitsignednumberonstackto32-bitsignednumberonstack{4cycles,12bytes}RXOR[S+1]+,C0,[S]--pushNOTofthenumberSHRFD[0,17,0]--isolatehighbitsofnumberADDDB100000B--bumpthesign,whichcarriesthroughROR[S-1],[S]-,[S-1]--ORbacktheextensionNarrow32-bitsignednumberonstackto16-bitsignednumberonstack{4cycles,10bytes}DUPSHRFD[0,17,0]--isolatethe17highbits,noshiftADDDB100000B--bumpthesign,whichcarriesthroughRBC[S]-,C1,[S]--boundscheckfaultwhen[S]#0,popstackxïgî$`î)StïgîHÝ{ï_,î|ï_,îBzï_,î�TVm$"rîï_,ï_,î‚ÿTVm$zï_,î ·î!Öî#  TVm$rî$?ï_,ï_,î$øÿ$TVm${ï]…îæ|ï]…îBzï]…î�î “î!²î#î$>î&#{ï[Ýî|ï[ÝîBzï[Ýî�( TVm$.rîï[Ýï[ÝîÑÿHTVm$zï[Ýî$U{ïZ6î|ïZ6îBzïZ6î�î î!éî#V|ïVçî ýî HîÕ îGî-îzïU@îîîzîÎîtî>ïS™îîî¥îJîî úî#-ïQñî ý{ïPJî|ïPJîBzïPJî�îî"9{ïN£î|ïN£îBzïN£î�îî"9{ïLûî|ïLûîBzïLûî�î î'{ïKTî|ïKTîB zïKTî�îî Gî!´î#Aî%&xïF^î ì îºîŠqïCî ìî] îÙ î"î$kî(ˆî+œî/åî3“î7šî9Aî= îCjîFªïAhî ìî aîUîÐî,îî{î!î"Èî&î'šî+C î1ñî5,î7¢î;@î<îî@îEï?Áî ìî�î%î7îå î±î"hzï;žî ýîµî˜î½î¢î–î#!î$Æî(¨î,Îî1³î3¦î71î9î=Pî>„{ï9÷îzï9÷î!§î#î)î,kî._î0´î2W{ï8Pî|ï8PîB zï8Pî!§î#î&›î(£î*î,ëî.óî0uî2×î7ìî9’{ï6¨î|ï6¨îB zï6¨î!§î#î'gî*Bî,Jî/ î5Ÿî9Hî<šî>æï3Zî ýîæîÈîîîÓîÆî#Qî$öî(Øî,þî1ãî3Öî7aî9Fî=€î?e{ï1²î|ï1²îBzï1²î!§î#î&›î( î*ãî,ëî.�î1î4–î8?î=Uî>ú{ï0 î|ï0 îBzï0 î!§î#î(Íî*:î-î/î1õ î8„{ï.dî|ï.dîB zï.dî!§î#î'³î+‹î.¿î2Aî4~î6cî7ðî:…{ï,¼î|ï,¼zï,¼î!§î#î&rî(¾ î/Mï)nî ýîµî˜î½î¢î–î#!î$Æî(¨î,Îî1³î3¦î71î9î=Pî?5{ï'Æî|ï'ÆîB zï'Æî!§î#î&Pî)ãî+†î-Ó{ï&î|ï&îB ï&î!§zî#ï&ï&î#�î'Yî*jî,öî.š{ï$xî|ï$xîBzï$xî!§î#î&Öî)"î,Uî08î4’{ï"Ðî|ï"ÐîBzï"Ðî!§î#î%³î(úî+Fï‚î ýîæîÈîîîÓîÆî#Qî$öî(Øî,þî1ãî3Öî7aî9Fî=€î?e{ïÚîï3î|ï3îB zï3î!§î#î'Yî)¥î+Šî.›î1î3s{ïŒî|ïŒîBzïŒî!§î#î&Öî)"î,Uî08î4’{ïäî|ïäîB zïäî!§î#î'³î+‹î.¿î2Aî4~î6cî7ðî:…NUTVm$éDragonOpcodes27RecentChanges23Aug84definitionfixestoBNDCK&RBC...tofixupcarelessness.22Aug84RBCadded...duetointerestingusesinarithmeticchangesandotherspecialboundschecking.21Aug84Cleanuppass...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.21Mar84Stackunderflowtrapaddedxïgî$`î)StïgîHÝyï^õî ìî�xï[¦î ìî Ñî´zïXVî ì îñî.}îÒïXVïXVîªzïXVîŒ}îïXVïXVîåqïUî ìî wî %î6îI xïQ·î ìî Ñî´}ïNgî ìzïNgî ÷qïKî ìî wî.îÝ î–î�î= î!Àî&íî)¤î-Cî1¿î6žxïGÈî ìî Ñî´zïDyî ìîHqïA)î ìî wî %î6î}î+ î� î#ƒî)_î.Œî1Ý}ï=Úî ìzï=Úî ÷}îyï=Úï=ÚîPzï=Úîƒ}î1ï=Úï=Úî zî¸ï=Úï=Ú}î”ï=Úï=Úîlzîòï=Úï=Ú}îÏï=Úï=Úî¦zî,ï=Úï=Ú}î ï=Úï=Úîàzî"gï=Úï=Ú}î#Cï=Úï=Úî$qï:Šî ìî zîñîî¾îéîIîœî 8î&î+hî-$î0± î8Bî; îA˜{îG ï:Šï:ŠîGâqï8ãî ì{î £ï8ãï8ãî {qï8ãî‡îóîî\îbîEî þ î(gî+î."î0—î2ˆî46î6•î9Åxï5“î ìî Ñî}zï2Dî ìîîZqï.ôî ìî wî %îyî'îlî% î„î"9î%¸xï+¥î ìî !î Ízï(Uî ì}îï(Uï(Uîñzï(Uî%}î§ï(Uï(Uî~qï%î ìî fî î‡îUî‚îÑîE î'_î*&î.ß î6 î7hî:%î=$î?¿îEï#^î ìî;îÀîWzï î ì}îï ï îñzï îM}îÏï ï î§qï¿î ìî ¤î €îbîï îøîBî!{î("ï¿ï¿î(úqï¿î*„î,î0cî2Îî6ýî9<îSEUR&SIFUR,LPR=>LEUR,LIFUR...atthetherequestoftheIFUdesigners.Noticethatthisreversesadecisiontakenon27Feb84.AllinstructionsuseidenticaldecodingofAlpha,soEUregistersandIFUregisterssharethesameencodingspace(seethedeclarationofProcessorRegisterinDragOpsCross).15Mar84RECdumped...sinceitwaslargelyuseless.9Mar840-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.xïgî$`î)StïgîHÝqï_/î ìî €î … î‡îÿî!îî$¯î+„î.¨î2êî6f î>&îBîEðîG§ï]ˆî ìî îÝî‹xïZ8î ìî Ñîë}ïVèî ìzïVèî ÷}îŒïVèïVèîdzïVèîn}îðïVèïVèîÈzî&ïVèïVè}îïVèïVèîÚzïVèî }î¢ïVèïVèî zzî#ïVèïVè}î#ÝïVèïVèî$´qïS™î ìî ƒî )î•îîâî¨îî0 î%"î)¤î,î/-î4pî5¦î; î>Øî@ëîBÜîEÁîHœïQñî ì îaîìî‘î�î!]î%îî'Èî*hî/àî2­î5Òî;Jî>ÿîAtîEïPJî ìî ¡înîÎ îßî˜î&•î(C xïLúî ìî Ñîë}ïI«î ìzïI«î ÷qïF[î ìî wîéî@îëîfxïC î ìî !î:}ï?¼î ìîÐ zï?¼înqïïïî!zïî$ }î&µïïî'�qï±î ìî ‹îîKîî�î€îî!Éî#Úî(jî*óî-hî36î6#î;šî=hîB[îDÄï î ì{î ïï ï îÆqîvï ï zï»î ìî aîöqï kî ìî wî…îðîžî–îDî _î!ªî#Xî$‚4TVm$›DragonOpcodes29RLADD&RLSUBadded...tosupportLisp(&maybeSmalltalk)arithmetic.AnewtraphasbeenaddedforListNaN.21Feb84WriteProtectfaultadded...sowecoulddistiguishitfrompagefault.RIFdumped...sinceitonlyhada1-byteadvantageovertworeadinstructions.10Feb84Codegenerationsamples...wereadded.7Feb84FieldDecsriptormaskfieldwidenedTohelpwithboundaryconditionsingeneratingfielddescriptorsonthefly,themaskfieldofFieldDescriptorwaswidenedtoinclude32.Thisalsomakesitfollowthesameconventionastheshiftfield.Wemaywishtorevisitbothdecisionswhenweseemorecases.NILCKdumpedNILCKisusedtocheckforNILpointersbeforetheyaredereferenced.WedonotanticipateusingNILCKoftenenoughtowarrantitsinclusion.Incaseswherewewoulduseit,insertinganextrafetchthroughthepointerwillbequitesufficient.Wecanevenaffordtokeepallofthelow64Kofvirtualmemoryunmappedtofurtherreducethisproblem.SHL&SHRTwousefulshiftoperations,SHLandSHR,havebeenintroducedtoreplacefrequentlyoccuringcasesofFSDBfollowedbyRFU.6Feb84SFCIreplacesSFCBSFCIreplacesSCFBtosaveabyte,whichincreasesthepossiblenumberofinterfacesthatcanbecalledfromagivenglobalframe,sincewecanhave4bytesoffetchingprecedingtheSFCI.ThisallowsustodumpRIFifitbecomesnecessary.RRXreplacesRFXSimplenamechange.xïgî$`î)StïgîHÝ}ï_/î ìzï_/î¦}î(ï_/ï_/îÿzï_/îáqï[ßî ìî wî %î1îKî\îÍ î"Y î)¸î+Eî.3î1î3‹î6èî; î=Iî@ xïX�î ìî ÑîˆzïU@î ìî Äîzî®qïQðî ìî wî ;îbî. îXî®îî!\}ïN¡î ìzïN¡î ÷qïKQî ìî wîéî@îYîî;îtî!ìî%î'±î*Ì xïHî ìî ÑîˆzïD²î ìî j î qïAbî ìî wîÈxï>î ìî !î ×zï:Ãî ìî ^ îíîƒî‡qï7sî ìî ïîåîÜîí îlîõ î&Šî)– î0cî2Dî4€î6Åî9îVîBIîDÇîG¾ï4%î ìî šî²îîîËî€î§î ûî$Ž}ï0Õî ìzï0Õî¦{ï-†î ìqï-†î¡îî<îãî¿pîõï-†ï-†îÞqï-†î~î"Åî' î*î,c î5cî7çî9çîî3€î6î8ëî:†î>ÃîDï(�î ìî šîCî¿îa}ï%@î ìzï%@î ÷}îyï%@ï%@îPqï!ðî ìî #îNî{ {î“ï!ðï!ðîkqï!ðî±{î!{ï!ðï!ðî"Sqî$ï!ðï!ðî$ñî(Jî+¹ î2½î4}î9N î@îE°îI5{ï Iî ìqï Iî Ðîu{îpï Iï IîHqîøï Iï Ixïùî ìî !î ×zïªî ìî Âîã{ïZî ìqïZî Þ{î.ïZïZîqïZî îÜîîî&î œî$¸î*Œî,úî2Iî7„î9K î?ƒîB_îDøîF÷ï³î ìî ^î’îQî~îØîUî ‡î#î&nî'®î+Mî-î2iî8Ê{î;4ï³ï³î< qî>”ï³ï³î@ îC.îGfîI@ï î ì{î ïï ï îÇqï îûî\î²îL zï¼î ìî iî‹qï lî ìî”îSÿ®TVm$±DragonOpcodes30LCnreplacesLInLCnnowallowsshortaccesstothefirst8constants.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.3Feb84EUregisternames(Field,MQ)TheoldnameQisnowField;ICANDisnowMQ.FieldUnitinstructionschangedTheFieldUnitisnowaccessibleto3instructions:FUDB,FUI,RFUI.Theseinstructionsalltaketwowordsofdata,andtakethefielddescriptorfromeitherAlphaBetaorField,andproduceonewordofoutput.xïgî$`î)StïgîHÝzï_,î ìî îA{ï[Ýî ìqï[Ýî îîSîßîúî·î $î# î$M {î+8ï[Ýï[Ýî,qï[Ýî.R{î3¢ï[Ýï[Ýî4zqî6)ï[Ýï[Ýî7î;0î=éîBªîDfîFÔîIºïZ6î ì zïVçî ìîRî»qïS™î ìî —î* îeî€ î"ßî%®î)Òî.Üî3+î8yî=Ñ }ïPJî ìzî rïPJïPJ}î OïPJïPJî&zîþïPJïPJîÚ}î~ïPJïPJîUzïPJî‰qïLûî ìî €îßî`î¨îGî=î÷î% î*r {î2ÄïLûïLûî3œqî6$ïLûïLû{î7 ïLûïLûî7äqî9”ïLûïLûî:|{î=?ïLûïLûî>qïLûîA.îE¶îG²ïKTî ìzïHî ìî ^îˆ îÅî qïD·î ìî ÀîZî’ îíî/{î#AïD·ïD·î$qïD·î'!î+4î/î4î7´{î:hïD·ïD·î;?qïD·î=oîCHîFâïCî ìî ªî îd{îÞïCïCî¶qî=ïCïC{îïCïCîØqî ˆïCïC{î!JïCïCî""qî$ªïCïCî%�î'Ç {î/3ïCïCî0 qïCî2ü{î5šïCïCî6rqïCî8Œî:Å î@©îB>îD* ïAhî ìî )îôîÆîëîUîßî"Zî$Ïî(Aî-Ñî/«î5î9sî;7î=Sî@îB¿îEØï?Áî ìîhîÚîî®î xïsCcI±PÜX‰_½` 1j&l su v }€�” ›¤¢¹§J¬÷²Ý·j/»¹�TÒ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[]<>Dragon>DragOps.tioga&Thursday, August 23, 1984 10:11 am PDT