專利名稱:裝飾器模式的指令的存取方法
技術領域:
本發(fā)明屬計算機體系架構領域,特別涉及體系架構描述語言ADL。
背景技術:
隨著嵌入式處理器越來越復雜和引進各樣新的特征,同時編譯器不斷開發(fā)新的優(yōu) 化技術,為編譯器詳細描述處理器和體系架構信息越來越復雜,嵌入式處理器與編譯器的 鴻溝也越來越大。表達能力強、簡潔、可擴展的高質量體系架構描述語言成為迫切需要的工 具。很多編譯器難以重定向,它們需要大量的編碼和錯誤調試工作以及對編譯器的深 入了解。而另一方面,許多體系架構描述語言(ADL)為模擬器設計,難以為編譯器重定向提 取出語義信息。雖然存在支持編譯器的ADL和語義擴展工作,對一個架構的完整描述仍然 需要大量的工作,由于各種各樣的特征和大量的指令。而且,修改描述很麻煩,并由于冗余 信息和一致性問題可能產生難以發(fā)現的bug,這對面向應用程序的處理器(ASIP)可能是重 要問題,因為它們需要經常調整指令。傳統(tǒng)上的體系結構描述語言主要為了單一目標如生成模擬器或編譯器重定向設 計,然后擴展到其他應用,因此對一個設計工具很直接但不適應其他工具,這由于開發(fā)工具 箱需要硬件行為的不同抽象層次的描述。其他ADL為設計工具集設計,但主要關注于周期 精確的模擬器而缺乏對編譯器的有效支持。根據其目標的不同,ADL分為三類結構、行為 和混合。MIMOLA屬于第一類。在MIMOLA中,硬件結構用一個類似HDL的語言建模為寄存器 轉移netlist,門層級的模塊為netlist的特例。MIMOLA的結構化方法的優(yōu)點是同一描述 能用于處理器合成、代碼生成、測試和模擬。但是這個語言非常低級,書寫工作量很大,而且 用于編譯器的靈活性受嚴格限制。nML和ISDL是行為類的例子。它們捕獲典型程序員手冊提供的指令集層的處理器 信息來生成設計工具箱,用屬性文法描述指令集。ISDL主要為VLIW架構設計。這些語言不 描述顯式流水線結構和詳細微操作,缺乏生成周期精確模擬器的能力。大多數ADL屬于混合類。MDes和EXPRESSION是兩個類似LISP的ADL,它們同時 捕獲結構和行為的架構信息,主要為設計空間探索(DSE)設計。在MDes中,信息分為幾個 段格式、資源使用、延遲、操作、寄存器等。而EXPRESSION將描述劃分為兩類指令集和結 構。每一類進一步細分為三個子類操作、指令和操作影射;組件、流水線/數據轉移路徑和 內存子系統(tǒng)。MDes有define預處理特征用于簡潔描述。EXPRESSION被用于同構可編程架 構的DSE,并用于可編程SOC的架構探索工具的生成。但是,歷史上這些語言在編譯器中應 用的不多。LISA有一個類似C的語法,主要設計用于周期和位精確的快速編譯模擬器,其主 要特征是使用計時模型在操作層對流水線的描述。RADL擴展LISA支持多流水線,用于周期 和相精確的模擬器。但是這些語言缺乏編譯器重定向所需的高層語義,因為這些信息一般無法從任意的C語句中提取。ArchC是一個關注于SystemC用戶的ADL,它主要基于C++和SystemC的語法。其 主要特征是基于存儲的一致性驗證。ArchC已被用于生成一些架構的模擬器和匯編器。但是,沒有工作為裝飾器模式的指令將面向對象機制引入ADL。裝飾器模式的指令 出現頻繁且具有例行的模式,手工描述復雜且很乏味,并容易出現冗余和信息不一致等問 題。本發(fā)明提出一個面向對象的方法進行ADL描述,解決了存取裝飾器模式的指令的問題, 其充分消除了描述的冗余,語言簡潔靈活健壯,從而使編寫和維護均比其它ADL簡單的多。
發(fā)明內容
本發(fā)明利用計算機體系架構存取技術,設計出一種裝飾器模式的指令的存取方 法,該方法將指令抽象為基本指令和裝飾器,并用一個繼承機制將體系架構信息描述為類、 屬性和對象。它不僅有高度的簡潔性和表達能力,而且比其它體系架構描述語言ADL的冗 余少的多,而且會產生高質量的描述而有更少的錯誤。本發(fā)明的裝飾器模式的指令的存取方法,是在目標機中依次按以下步驟實現的1.裝飾器模式的指令的存取方法,其特征在于,所述方法是在目標機中依次按以 下步驟實現的步驟(1),目標機的初始化設立體系架構描述語言ADL描述文件和體系架構描述語言ADL分析程序,以下簡 稱ADL描述文件和ADL分析程序,其中ADL描述文件,至少包括裝飾器描述部分和指令描述部分,其中裝飾器描述部分,設立下述6條執(zhí)行加法操作的指令add,表示兩寄存器相加,addc,是指add carrying,表示兩寄存器相加并設置進位,adde,是指add extended,表示兩寄存器相加并加進位并設置進位,addi,是指add immediate,表示寄存器與立即數相加,addic,是指add immediate carrying,表示寄存器與立即數相加并加進位,addis,是指add immediate shift,表示寄存器與左移16位的立即數相加,定義下述裝飾器=Carrying裝飾器、extended裝飾器、immediate裝飾器, immediate shift 裝飾器,其中carrying裝飾器,表示使用進位CARRY位,extended裝飾器,表示使用和設置進位CARRY位,immediate裝飾器,表示操作數為立即數,immediate shift裝飾器,表示操作數為左移16位的立即數,以上裝飾器也適用于同樣模式的其他類型指令,其中包括減法sub、乘法mul, immediate裝飾器和immediate shift裝飾器裝飾器也可于二進制操作指令如算術與and、 算術或or,與后取反nand,定義裝飾器模式的指令,是指一組執(zhí)行相同類型的操作的指令,只要用操作數或 特定的子操作加以區(qū)別,于是,便能將有區(qū)別的操作數或子操作用一個特定的裝飾器來加以控制,一個指令能有若干個裝飾器,一個裝飾器也能用于多種類型的指令,將裝飾器提取出作為語義類,將執(zhí)行相同類型的操作而帶有不同裝飾器的指令抽 象合并為一條基本指令,所述裝飾器被描述為〈class name =,,ExtendedDecorator,,base =,,Decorator,,suffix =,,e,,>,其 中關鍵詞class定義為一個類,屬性name表示類名,屬性suffix表示裝飾器的后綴為e,屬性base表示裝飾器的分析處理器Decorator,定義一個該裝飾器修改基本指令的語義動作action段,該指令動作段由所述基 本指令中的指令動作再添加對基本指令動作的修改動作形成,所述指令動作action段 被描述為$action(% instruction),表示基本指令動作,testset CARRY表示測試進位 CARRY, $action (% instruction) testset CARRY表示在指令動作完成后一旦滿足條件就修 改進位CARRY位,對修改指令操作數的immediate裝飾器,則在操作數operand段中重新定義一個 修改的操作數段,<src2 type =” imml6”/>,表示源操作數2的類型為16位立即數;指令描述部分,每條基本指令在以其指令名稱為XML標記的一個指令信息段中描 述,所述指令信息包括指令動作action、指令編碼encoding、指令操作數operand以及指 令匯編格式assembly pattern,對于每條指令若該指令沒有裝飾器則為普通指令,則直接定義該指令自身的信息,若該指令具有裝飾器則為基本指令,則在其中定義相應的裝飾器decorator段, 每個裝飾器段表示一條裝飾器模式的指令,通過屬性name指定其裝飾器類名,然后定義指 令自身的信息,如果裝飾器模式的指令有裝飾器類未定義的修改,則在裝飾器段中定義;ADL分析程序,含有裝飾器分析模塊,指令分析模塊和指令處理模塊,其中裝飾器分析模塊,定義一個裝飾器內存對象類,指令裝飾器信息類和一個指令信 息類,其中裝飾器內存對象類,包括裝飾器的名稱、裝飾器的后綴、指令動作action和指令 操作數operand,以用于存儲和處理裝飾器覆蓋的各基本指令的信息,從而建立裝飾器類名 到該裝飾器內存對象的映射表DecoratorMap,指令裝飾器信息類,包括裝飾器類名稱、是否有裝飾器類未描述的附加修改、一個 裝飾器內存對象用于存儲和處理裝飾器類未描述的附加修改,以用于存儲指令的裝飾器信 息;指令信息類,包括指令名稱、指令裝飾器信息數組、指令動作action、指令編碼 encoding、指令操作數operand和指令匯編格式assembly pattern,用于存儲和處理所述 指令描述部分中的各指令信息,指令分析模塊,分析所述指令描述部分的每一條基本指令,其中包括指令名稱、指 令各裝飾器信息及所述指令信息,然后再建立所述指令描述部分中該條指令信息的類別,指令處理模塊,根據所述裝飾器分析模塊建立的DecoratorMap和指令分析模塊建立的指令信息,處理生成裝飾器模式的指令信息;步驟(2),依次按以下步驟生成ADL源文件步驟(2. 1),所述目標機對每一種輸入的指令格式進行步驟(1)所述的裝飾器描 述和指令描述,步驟(2. 2),所述裝飾器分析模塊依次按以下步驟對輸入的裝飾器描述部分進行 分析處理步驟(2. 2. 1),分析各裝飾器的名稱、后綴以便建立該裝飾器的內存對象,步驟(2. 2. 2),判斷裝飾器是否定義指令動作段,若有定義則讀取指令動作段,分 析出用$acti0n表示的原始指令動作部分和對基本指令增加的指令動作部分,將分析結果 存儲在步驟(2. 2. 1)建立的裝飾器內存對象中,步驟(2. 2. 3),判斷裝飾器是否定義指令操作數段,若有定義則讀取指令操作數 段,分析出裝飾器修改的作為子段的指令操作數,將分析結果存儲在步驟(2. 2. 1)建立的 裝飾器內存對象中,步驟(2. 2. 4),判斷裝飾器是否定義指令編碼段,若有定義則讀取指令編碼段,分 析出該裝飾器修改的位的位置和值,步驟(2. 2. 5),對所述ADL描述文件的指令格式描述中的每個裝飾器定義,重復步 驟(2. 2. 1) 步驟(2. 2. 4),在內存中建立相應的裝飾器內存對象,然后把裝飾器類名和分 析建立的裝飾器內存對象添加到所述映射表DecoratorMap中;步驟(2. 3),指令分析模塊對輸入的所述ADL描述文件的指令描述部分中的各條 指令,分析出所述指令裝飾器信息類和指令信息類中的各屬性,建立各指令信息對象,其中分析指令裝飾器信息的詳細步驟如下,對每一個裝飾器段,分析出其裝飾器 類名稱,判斷其是否有附加的段以定義裝飾器未描述的附加修改,如果有,則調用裝飾器內 存對象類對各附加的段進行分析和處理,建立一個裝飾器類對象,然后根據分析的結果建 立指令裝飾器信息對象,并將該指令裝飾器信息對象添加到指令裝飾器信息數組中;步驟(2. 4),指令處理模塊根據步驟(2. 3)中分析建立的每一個指令信息類對象, 判斷其是否有裝飾器,(i)如果有裝飾器,則對每一個指令裝飾器信息A,根據其裝飾器類 名通過所述DecoratorMap取得相應的裝飾器類內存對象,以該指令信息對象為參數調用 該裝飾器類內存對象進行處理,生成相應裝飾器類描述的指令信息B,如果A同時具有裝飾 器類未描述的附加修改,則再以生成的指令信息B為參數調用A中的裝飾器類內存對象,生 成帶有相應裝飾器的指令信息,( )如果沒有裝飾器,則該指令不變;其中情況(i)中裝飾器內存對象對指令信息進行處理的詳細步驟如下,根據步驟 (2.2)和步驟(2.3)的分析,對修改指令動作的裝飾器,將原始指令動作部分替換為指令自 身的動作,并附加指令格式增加的指令動作即得到生成的指令動作;對修改指令操作數的 裝飾器,則用分析出的裝飾器修改的操作數替換該指令在相應位置的操作數,即得到所生 成指令的指令操作數;對每個修改指令編碼的裝飾器,則用分析出的裝飾器修改的編碼位 的位置的值替換該指令編碼在相應位置的值,即得到所生成指令的指令編碼;步驟(3),把步驟(2. 4)生成的各條指令信息轉換為指令描述輸出,以生成相應的 ADL源文件。本發(fā)明的裝飾器模式的指令的存取方法的所需的ADL描述文件具有簡潔、表達能力強、描述質量高等優(yōu)點,它比其它體系架構描述語言ADL的冗余少的多而產生更少的錯 誤,同時更容易修改和維護。該裝飾器模式的指令的存取方法可與各類通用處理器、圖形處理器、嵌入式處理 器等的設計和相關工具鏈如模擬器、編譯器、匯編器的開發(fā)相結合,應用于軟硬件協(xié)同設 計。并且,該方法也可作為硬件描述方法用于編譯器的跨體系架構的自動重定向的研發(fā)。
圖1示出了本發(fā)明的流程圖;圖2示出了本發(fā)明示例的ADL指令描述文件;圖3示出了圖2示例的ADL指令描述文件對應的ADL分析程序輸出的ADL指令描 述源文件。
具體實施例方式本發(fā)明的目標機的指令集中有一些形成裝飾器(decorator)模式的指令,裝飾器 模式的指令是指一組指令執(zhí)行相同類型的操作,而只在操作數或特定的子操作有區(qū)別,則 可將有區(qū)別的操作數或子操作看作由特定的裝飾器控制,一個指令或許有幾個裝飾器,一 個裝飾器也可能用于多種類型的指令;如對6條執(zhí)行加法操作的指令add(兩寄存器相加)、addC(add carrying,兩寄存 器相加并影響進位)、adde (add extended,兩寄存器相加并加進位且影響進位)、addi (add i_ediate,寄存器與立即數相加)、addic(add immediate carrying,寄存器與立即數相加 并加進位)、addis (add immediate shift,寄存器與左移16位的立即數相加);carrying 裝飾器意為使用CARRY位,extended意為使用和設置CARRY位,immediate裝飾器表示操 作數為立即數,immediate shift裝飾器表示操作數為左移16位的立即數,Carrying和 extended 也用于 subf 指令,immediate 禾口 shift 也用于 mul、and 禾口 or 等;由于裝飾器模式的指令具有很多類似之處,可以將裝飾器提取出作為語義類,將 執(zhí)行相同類型的操作、而帶有不同裝飾器的指令抽象合并為一條基本指令,然后僅需給基 本指令添加不同的裝飾器,即可描述大量的指令,具有出色的靈活性和可擴展性。裝飾器指令的存取方法包括體系架構描述語言ADL描述文件和ADL分析程序,其 中ADL描述文件中至少包括裝飾器描述部分和指令描述部分,ADL分析程序中設立裝飾器 分析模塊、指令分析模塊、指令處理模塊,通過本方法處理最終生成ADL源文件,所述方法 包括如下步驟步驟(1),所述ADL描述文件中的裝飾器描述;在所述ADL描述文件的裝飾器描述部分中對每一種需要的裝飾器以class關鍵字 定義一個類,通過name屬性指出其類名,通過suffix屬性指出裝飾器的后綴;通過base屬 性指定其基類為裝飾器Decorator,表明定義的是裝飾器類,所述裝飾器分析模塊將調用裝 飾器內存對象類的方法對所描述的指令格式進行分析和處理;如果裝飾器修改某些指令屬性,如指令動作或指令操作數,則在裝飾器類中定義 相應的段以覆蓋指令相應段的信息,對指令動作段,可以用” $acti0n(% instruction) ”代 指指令定義中的指令動作,再添加裝飾器對指令的修改動作,對指令操作數段,可重新定義所修改的指令操作數的名稱和類別;如對carrying裝飾器,則在裝飾器中覆蓋指令動作 action段,在其中添加對CARRY位的修改動作,類似” $action (% instruction) testset CARRY”,表明指令完成其自身語義動作后在滿足條件時設置控制寄存器中的比較標志位, 對immediate裝飾器,則在裝飾器中的指令操作數operand段中的一個覆蓋源操作數段,在 其中重新定義立即數源操作數;步驟(2),所述ADL描述文件中的指令描述;在所述ADL描述文件中的指令描述部分中,每條指令在以其名稱為XML標記的一 個信息段中描述,對每條指令,(i)如果其有裝飾器是基本指令,則在指令信息段中對每個 裝飾器定義一個裝飾器(decorator)段,然后定義基本指令自身的信息,在每個裝飾器段 定義中以name屬性指出裝飾器類的名稱,如果基本指令同時也是一條無裝飾器的處理器 指令,則定義一個name為“ ”表示空名稱的裝飾器段,(ii)如果指令沒有裝飾器,則直接定 義指令自身的信息;每個裝飾器段中可定義該裝飾器生成的指令需要對基本指令進行修改而裝飾器 類未修改的指令信息,如指令編碼;每條指令自身的信息在指令信息段中的各子段中定 義,包括指令動作(action)、指令編碼(encoding)、指令操作數(operand)、指令匯編格式 (assembly);步驟(3),所述ADL分析程序的裝飾器分析模塊;定義一個裝飾器內存對象類,用于存儲和處理裝飾器類中各段的信息,包括指令 后綴、指令動作和指令操作數; 定義一個指令裝飾器信息類,用于存儲指令的裝飾器信息,包括裝飾器類名稱、是 否有裝飾器類未描述的附加修改、一個裝飾器內存對象用于存儲和處理裝飾器類未描述的 附加修改;定義一個指令信息類,用于存儲和處理所述指令描述部分中的各指令信息,包括 指令名稱、指令裝飾器信息數組、指令動作、指令編碼、指令操作數和指令匯編格式;在內存中建立裝飾器類名到裝飾器內存對象的映射表DecoratorMap ;對指令動作段,分析出原始指令動作部分和該指令格式增加的指令動作,對指令 操作數段,分析出裝飾器修改的指令操作數的位置和類別;對所述ADL描述文件的裝飾器描述中的每一個裝飾器類,ADL分析程序調用裝飾 器內存對象類的方法對裝飾器類中的各段進行分析和處理,在內存中建立相應的裝飾器類 內存對象,然后將裝飾器類名和分析建立的裝飾器內存對象添加到映射表DecoratorMap 中;步驟(4),所述ADL分析程序的指令分析模塊,其中對所述ADL描述文件的指令描 述中的每一條指令,ADL分析程序分析處理指令描述,包括指令名稱、指令裝飾器信息、指 令動作、指令編碼各位代表的信息、指令操作數和指令匯編格式,然后建立指令信息類的對 象;其中分析指令裝飾器信息的詳細步驟如下,對每一個裝飾器段,分析出其裝飾器 類名稱,判斷其是否有附加的段以定義裝飾器未描述的附加修改,如果有,則調用裝飾器內 存對象類的方法對各附加的段進行分析和處理,建立一個裝飾器類對象,然后根據分析的 結果建立指令裝飾器信息對象,并將該指令裝飾器信息對象添加到指令裝飾器信息數組中;步驟(5),所述ADL分析程序的指令處理模塊,其中對步驟(4)中分析建立的每 一個指令信息類對象,判斷其是否有裝飾器,(i)如果有裝飾器,則對每一個指令裝飾器信 息A,根據其裝飾器類名通過DecoratorMap取得相應的裝飾器類內存對象,以該指令信息 對象為參數調用該裝飾器類內存對象的方法進行處理,生成相應裝飾器類描述的指令信息 B,如果A同時具有裝飾器類未描述的附加修改,則再以生成的指令信息B為參數調用A中 的裝飾器類內存對象,生成帶有相應裝飾器的指令信息,( )如果沒有裝飾器,則該指令不 變;其中情況(i)中裝飾器內存對象對指令信息進行處理的詳細步驟如下,根據步驟 (3)和步驟(4)的分析,對修改指令動作的裝飾器,將原始指令動作部分替換為指令自身的 動作,并附加指令格式增加的指令動作即得到生成的指令動作;對修改指令操作數的裝飾 器,則用分析出的裝飾器修改的操作數替換該指令在相應位置的操作數,即得到所生成指 令的指令操作數;對每個修改指令編碼的裝飾器,則用分析出的裝飾器修改的編碼位的位 置的值替換該指令編碼在相應位置的值,即得到所生成指令的指令編碼;步驟(6),將步驟5處理生成的各條指令信息轉換為指令描述輸出生成相應的ADL 源文件。為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明的實施 方式作進一步地詳細描述。圖1示出了本發(fā)明的流程圖。如圖1所示,在ADL描述文件中描述裝飾器。本示 例描述整數運算指令的一個子集add (兩寄存器相加),adde (兩寄存器相加并加進位且影 響進位),addi (寄存器與立即數相加),其中adde和addi分別帶extended和immediate 裝飾器,而add指令不帶有裝飾器。圖2示出了本發(fā)明示例的ADL指令描述文件。圖3示 出了圖2示例的ADL指令描述文件對應的ADL分析程序輸出的ADL指令描述源文件。
權利要求
裝飾器模式的指令的存取方法,其特征在于,所述方法是在目標機中依次按以下步驟實現的步驟(1),目標機的初始化設立體系架構描述語言ADL描述文件和體系架構描述語言ADL分析程序,以下簡稱ADL描述文件和ADL分析程序,其中ADL描述文件,至少包括裝飾器描述部分和指令描述部分,其中裝飾器描述部分,設立下述6條執(zhí)行加法操作的指令add,表示兩寄存器相加,addc,是指add carrying,表示兩寄存器相加并設置進位,adde,是指add extended,表示兩寄存器相加并加進位并設置進位,addi,是指add immediate,表示寄存器與立即數相加,addic,是指add immediate carrying,表示寄存器與立即數相加并加進位,addis,是指add immediate shift,表示寄存器與左移16位的立即數相加,定義下述裝飾器carrying裝飾器、extended裝飾器、immediate裝飾器,immediate shift裝飾器,其中carrying裝飾器,表示使用進位CARRY位,extended裝飾器,表示使用和設置進位CARRY位,immediate裝飾器,表示操作數為立即數,immediate shift裝飾器,表示操作數為左移16位的立即數,以上裝飾器也適用于同樣模式的其他類型指令,其中包括減法sub、乘法mul,immediate裝飾器和immediate shift裝飾器裝飾器也可于二進制操作指令如算術與and、算術或or,與后取反nand,定義裝飾器模式的指令,是指一組執(zhí)行相同類型的操作的指令,只要用操作數或特定的子操作加以區(qū)別,于是,便能將有區(qū)別的操作數或子操作用一個特定的裝飾器來加以控制,一個指令能有若干個裝飾器,一個裝飾器也能用于多種類型的指令,將裝飾器提取出作為語義類,將執(zhí)行相同類型的操作而帶有不同裝飾器的指令抽象合并為一條基本指令,所述裝飾器被描述為<class name=”ExtendedDecorator”base=”Decorator”suffix=”e”>,其中關鍵詞class定義為一個類,屬性name表示類名,屬性suffix表示裝飾器的后綴為e,屬性base表示裝飾器的分析處理器Decorator,定義一個該裝飾器修改基本指令的語義動作action段,該指令動作段由所述基本指令中的指令動作再添加對基本指令動作的修改動作形成,所述指令動作action段被描述為$action(%instruction),表示基本指令動作,testset CARRY表示測試進位CARRY,$action(%instruction)testset CARRY表示在指令動作完成后一旦滿足條件就修改進位CARRY位,對修改指令操作數的immediate裝飾器,則在操作數operand段中重新定義一個修改的操作數段,<src2type=”imm16”/>,表示源操作數2的類型為16位立即數;指令描述部分,每條基本指令在以其指令名稱為XML標記的一個指令信息段中描述,所述指令信息包括指令動作action、指令編碼encoding、指令操作數operand以及指令匯編格式assembly pattern,對于每條指令若該指令沒有裝飾器則為普通指令,則直接定義該指令自身的信息,若該指令具有裝飾器則為基本指令,則在其中定義相應的裝飾器decorator段,每個裝飾器段表示一條裝飾器模式的指令,通過屬性name指定其裝飾器類名,然后定義指令自身的信息,如果裝飾器模式的指令有裝飾器類未定義的修改,則在裝飾器段中定義;ADL分析程序,含有裝飾器分析模塊,指令分析模塊和指令處理模塊,其中裝飾器分析模塊,定義一個裝飾器內存對象類,指令裝飾器信息類和一個指令信息類,其中裝飾器內存對象類,包括裝飾器的名稱、裝飾器的后綴、指令動作action和指令操作數operand,以用于存儲和處理裝飾器覆蓋的各基本指令的信息,從而建立裝飾器類名到該裝飾器內存對象的映射表DecoratorMap,指令裝飾器信息類,包括裝飾器類名稱、是否有裝飾器類未描述的附加修改、一個裝飾器內存對象用于存儲和處理裝飾器類未描述的附加修改,以用于存儲指令的裝飾器信息;指令信息類,包括指令名稱、指令裝飾器信息數組、指令動作action、指令編碼encoding、指令操作數operand和指令匯編格式assembly pattern,用于存儲和處理所述指令描述部分中的各指令信息,指令分析模塊,分析所述指令描述部分的每一條基本指令,其中包括指令名稱、指令各裝飾器信息及所述指令信息,然后再建立所述指令描述部分中該條指令信息的類別,指令處理模塊,根據所述裝飾器分析模塊建立的DecoratorMap和指令分析模塊建立的指令信息,處理生成裝飾器模式的指令信息;步驟(2),依次按以下步驟生成ADL源文件步驟(2.1),所述目標機對每一種輸入的指令格式進行步驟(1)所述的裝飾器描述和指令描述,步驟(2.2),所述裝飾器分析模塊依次按以下步驟對輸入的裝飾器描述部分進行分析處理步驟(2.2.1),分析各裝飾器的名稱、后綴以便建立該裝飾器的內存對象,步驟(2.2.2),判斷裝飾器是否定義指令動作段,若有定義則讀取指令動作段,分析出用$action表示的原始指令動作部分和對基本指令增加的指令動作部分,將分析結果存儲在步驟(2.2.1)建立的裝飾器內存對象中,步驟(2.2.3),判斷裝飾器是否定義指令操作數段,若有定義則讀取指令操作數段,分析出裝飾器修改的作為子段的指令操作數,將分析結果存儲在步驟(2.2.1)建立的裝飾器內存對象中,步驟(2.2.4),判斷裝飾器是否定義指令編碼段,若有定義則讀取指令編碼段,分析出該裝飾器修改的位的位置和值,步驟(2.2.5),對所述ADL描述文件的指令格式描述中的每個裝飾器定義,重復步驟(2.2.1)~步驟(2.2.4),在內存中建立相應的裝飾器內存對象,然后把裝飾器類名和分析建立的裝飾器內存對象添加到所述映射表DecoratorMap中;步驟(2.3),指令分析模塊對輸入的所述ADL描述文件的指令描述部分中的各條指令,分析出所述指令裝飾器信息類和指令信息類中的各屬性,建立各指令信息對象,其中分析指令裝飾器信息的詳細步驟如下,對每一個裝飾器段,分析出其裝飾器類名稱,判斷其是否有附加的段以定義裝飾器未描述的附加修改,如果有,則調用裝飾器內存對象類對各附加的段進行分析和處理,建立一個裝飾器類對象,然后根據分析的結果建立指令裝飾器信息對象,并將該指令裝飾器信息對象添加到指令裝飾器信息數組中;步驟(2.4),指令處理模塊根據步驟(2.3)中分析建立的每一個指令信息類對象,判斷其是否有裝飾器,(i)如果有裝飾器,則對每一個指令裝飾器信息A,根據其裝飾器類名通過所述DecoratorMap取得相應的裝飾器類內存對象,以該指令信息對象為參數調用該裝飾器類內存對象進行處理,生成相應裝飾器類描述的指令信息B,如果A同時具有裝飾器類未描述的附加修改,則再以生成的指令信息B為參數調用A中的裝飾器類內存對象,生成帶有相應裝飾器的指令信息,(ii)如果沒有裝飾器,則該指令不變;其中情況(i)中裝飾器內存對象對指令信息進行處理的詳細步驟如下,根據步驟(2.2)和步驟(2.3)的分析,對修改指令動作的裝飾器,將原始指令動作部分替換為指令自身的動作,并附加指令格式增加的指令動作即得到生成的指令動作;對修改指令操作數的裝飾器,則用分析出的裝飾器修改的操作數替換該指令在相應位置的操作數,即得到所生成指令的指令操作數;對每個修改指令編碼的裝飾器,則用分析出的裝飾器修改的編碼位的位置的值替換該指令編碼在相應位置的值,即得到所生成指令的指令編碼;步驟(3),把步驟(2.4)生成的各條指令信息轉換為指令描述輸出,以生成相應的ADL源文件。
全文摘要
裝飾器模式的指令的存取方法屬于體系架構描述語言ADL技術領域,其特征在于,在目標機上設置ADL描述文件和ADL分析程序,ADL描述文件依次進行裝飾器描述和指令描述,ADL分析程序中的裝飾器分析模塊、指令分析模塊和指令處理模塊把體系架構信息描述為類、屬性和對象,分別表示具有非常類似的行為、而只有一些例行行為有別的一些指令,格式化的指令所述的裝飾器的屬性以及指令本身的信息,在此基礎上的加在裝飾器后的后綴表示不同裝飾器模式的指令的繼承機制,不僅具有高度的簡潔性和表達力,而且比其他ADL描述文件的冗余少得多而且會產生更高質量的描述而有更少的程序錯誤。
文檔編號G06F9/44GK101923466SQ201010237450
公開日2010年12月22日 申請日期2010年7月23日 優(yōu)先權日2010年7月23日
發(fā)明者曹震, 王生原, 董淵 申請人:清華大學