專利名稱:選擇子例程返回機(jī)制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理系統(tǒng),尤其涉及在從子例程返回時對使用哪 個子例程返回機(jī)制進(jìn)行控制。
背景技術(shù):
支持子例程的數(shù)據(jù)處理系統(tǒng)是眾所周知的。
一種類型的子例程執(zhí)并且在子例程結(jié)束時過程返回指令被執(zhí)行,以在過程調(diào)用程序指令 后將程序流改向到程序指令。處理系統(tǒng)的操作模式通常不被這種過 程調(diào)用改變。異常處理子例程(如異常處理程序例程)也可在數(shù)據(jù)處理系統(tǒng)內(nèi) 被支持,并由正常處理期間產(chǎn)生的異常/中斷觸發(fā)。這些異常/中斷觸 發(fā)異常處理子例程的執(zhí)行。這種異常處理子例程以一個異常返回指 令結(jié)束,該指令觸發(fā)返回到原程序指令流內(nèi)的適當(dāng)點(diǎn)(它可能是產(chǎn) 生異常的指令、后續(xù)指令或某另一點(diǎn))。眾所周知,與這種異常處 理例程相關(guān)聯(lián)的是提供上下文切換,該切換單元存儲表征系統(tǒng)在異 常發(fā)生點(diǎn)的狀態(tài)的變量,然后恢復(fù)這些變量從而恢復(fù)異常返回指令 執(zhí)行時的上下文。異常返回指令一旦被執(zhí)行后的行為,如從堆棧存 儲器恢復(fù)上下文變量或其他上下文恢復(fù)操作,不同于過程返回指令 被執(zhí)行時的行為。為使這兩種不同類型的行為可在子例程結(jié)束時被 適當(dāng)?shù)卣{(diào)用,已知的方式是提供分別用于觸發(fā)異常返回處理或過程 返回處理的單獨(dú)的返回指令。該已知的方法的結(jié)果是,子例程必須編寫成可使最后的返回指令對于子例程的性質(zhì)是適合的。因此,這樣做是正常的手工編寫或
以匯編程序編寫某些子例程(如異常處理子例程),以使適當(dāng)?shù)漠?常返回指令可被用于終止子例程,如此當(dāng)被執(zhí)行時必要的上下文恢 復(fù)和其他操作將在返回時被執(zhí)行。這種要求手工編寫或以匯編程序 編寫異常處理子例程是一個缺點(diǎn),因?yàn)樗懦耸褂酶呒売?jì)算機(jī)語言(如C語言)來編寫整個異常處理代碼和其他子例程。 發(fā)明內(nèi)容本發(fā)明的 一個形態(tài),提供了用于執(zhí)行由程序指令規(guī)定的數(shù)據(jù)處理操作的裝置,所述裝置包括返回邏輯部件,響應(yīng)具有作為輸入操作數(shù)的地址的返回指令而觸 發(fā)返回來執(zhí)行由所述地址指示的程序指令;其中(1 )如果所述地址具有不與一個或多個預(yù)定地址值相匹配的值, 則所述返回邏輯部件觸發(fā)第一返回指令響應(yīng),該第一返回指令響應(yīng) 包含一個或多個第 一返回響應(yīng)操作以產(chǎn)生第 一返回狀態(tài);以及(2 )如果所述地址具有與一個或多個預(yù)定地址值相匹配的值, 則所述返回邏輯部件觸發(fā)第二返回指令響應(yīng),該第二返回指令響應(yīng) 包含一個或多個第二返回響應(yīng)才喿作以產(chǎn)生第二返回狀態(tài),所述一個 或多個第二返回指令響應(yīng)操作不同于所述一個或多個第一返回指令響應(yīng)操作。本發(fā)明認(rèn)識到不同類型的返回響應(yīng)操作的區(qū)別,可能在作為返回 指令的輸入操作數(shù)的地址值內(nèi)產(chǎn)生。硬件然后可檢測與 一個或多個 預(yù)定地址值相匹配的地址值,并適當(dāng)?shù)剡x擇將根據(jù)該檢測執(zhí)行的返 回指令響應(yīng)操作。這使得同一返回指令能被使用,并且依賴于數(shù)據(jù) 值而指令代碼中不作任何改變地調(diào)用不同形式的返回指令響應(yīng)操 作。從而,通過安排那些要求返回指令響應(yīng)操作的類型與一個或多 個預(yù)定地址相關(guān)聯(lián)的指令來提供這樣的作為返回指令的輸入操作數(shù) 的地址(如子例程的返回地址),然后必要的返回指令響應(yīng)操作可 被調(diào)用。
本方法將要纟皮使用的返回指令標(biāo)準(zhǔn)化,從而使更高級的語言可被 統(tǒng) 一 用在編寫子例程代碼中,并代之以將內(nèi)存映像的小區(qū)域?qū)S糜?在必要時觸發(fā)不同類型的返回指令響應(yīng)操作的一個或多個預(yù)定值。 公知的是,在數(shù)據(jù)處理系統(tǒng)內(nèi)提供不能用于正??蓤?zhí)行代碼的特定 目的內(nèi)存區(qū)域,因此在這些現(xiàn)有內(nèi)存區(qū)域內(nèi)提供這種一個或多個預(yù) 定值不代表現(xiàn)有系統(tǒng)中的重要的折衷或限制。盡管本方法可^皮用于區(qū)分各種不同類型的返回指令響應(yīng),但該方 法對于在過程返回響應(yīng)和異常返回響應(yīng)之間作出區(qū)分尤為有用,前一種響應(yīng)中,地址值被裝回到程序計(jì)數(shù)寄存器中;而在后一種響應(yīng) 中,存儲在堆棧存儲器內(nèi)的返回地址被重新裝入程序計(jì)數(shù)寄存器中, 上下文4皮恢復(fù)。要被檢測的一個或多個預(yù)定地址值也被用于將被一個或多個第二 返回指令響應(yīng)操作恢復(fù)的系統(tǒng)的狀態(tài)變量有效地編碼。用于觸發(fā)第二返回指令響應(yīng)操作的預(yù)定地址值范圍提供了附加的位空間,要被 恢復(fù)的狀態(tài)變量可在其中編碼,從而克服狀態(tài)變量存儲機(jī)制中的局 限并恢復(fù)凈皮4是供到系統(tǒng)內(nèi)其他部分的資源。當(dāng)知,盡管系統(tǒng)提供單個類型的返回指令,但該指令可根據(jù)與其 相關(guān)的地址可導(dǎo)致不同的返回指令響應(yīng),本方法的優(yōu)選實(shí)施例可提 供適用本方法的多種形式的返回指令,從而返回指令響應(yīng)受控于作 為對返回指令的輸入操作數(shù)被凈是供的地址和一個或多個預(yù)定地址值 之間的匹配4全測。本發(fā)明的另 一形態(tài),提供了執(zhí)行由程序指令規(guī)定的數(shù)據(jù)處理操作 的方法,所述方法包括如下步-銀響應(yīng)具有作為輸入操作數(shù)的地址的返回指令,觸發(fā)一個返回而執(zhí) 行由所述地址指示的程序指令;其中(1 )如果所述地址具有不與一個或多個預(yù)定地址值相匹配的值, 則觸發(fā)第一返回指令響應(yīng),該第一返回指令響應(yīng)包含一個或多個第 一返回響應(yīng)操作以產(chǎn)生第一返回狀態(tài);以及(2 )如果所述地址具有與一個或多個預(yù)定地址值相匹配的值,則觸發(fā)第二返回指令響應(yīng),該第二返回指令響應(yīng)包含一個或多個第 二返回響應(yīng)操作以產(chǎn)生笫二返回狀態(tài),所述一個或多個第二返回指 令響應(yīng)操作不同于所述一個或多個第一返回指令響應(yīng)操作。本發(fā)明的 一個附加形態(tài),提供了具有可執(zhí)行計(jì)算機(jī)程序的計(jì)算機(jī) 程序產(chǎn)品,該程序用來根據(jù)前逸方法控制數(shù)據(jù)處理裝置。本發(fā)明上述的以及其他目的、特征和優(yōu)點(diǎn),通過結(jié)合附圖閱讀的 下面的解釋性實(shí)施例的詳細(xì)描迷當(dāng)會更加明顯。
圖1示意說明過程調(diào)用子例程; 圖2示意說明異常調(diào)用子例程;圖3是示意說明返回指令收到后即被執(zhí)行的處理的流程圖;以及 圖4示意說明根據(jù)圖3中說明的不同類型的返回指令響應(yīng)來操作 的數(shù)據(jù)處理裝置。
具體實(shí)施方式
圖1說明程序指令序列A、 B、 C...的執(zhí)行,在這些程序指令內(nèi) 有一調(diào)用指令,它是用于將處理改向到包含程序指令a、 b、 c...的子 例程的過程調(diào)用。當(dāng)該調(diào)用指令被執(zhí)行時,被存儲在PC寄存器內(nèi)的 當(dāng)前程序計(jì)數(shù)寄存器值被保存到連接寄存器LR并且程序計(jì)數(shù)寄存器 PC被載入了子例程內(nèi)的第一條指令的地址,即指令a。然后進(jìn)行子 例程的執(zhí)行,直至遇到子例程末的返回指令。在該點(diǎn),返回指令響 應(yīng)被調(diào)用,從而被存儲的連接寄存器LR的值與一個或多個預(yù)定值比 較且沒有匹配檢測到。因此,過程返回指令響應(yīng)4皮調(diào)用,從而將連 接寄存器LR的值裝回到程序計(jì)數(shù)寄存器PC (實(shí)際上,連接寄存器 LR的值指向調(diào)用指令后的程序指令),并且程序執(zhí)行在E處繼續(xù)。 在圖1的過程調(diào)用中不涉及上下文切換,因此,不必一返回就進(jìn)行 方式轉(zhuǎn)換或寄存器保存或恢復(fù)操作。
圖2示意說明異常子例程調(diào)用。主程序指令A(yù)、 B、 C...的執(zhí)行 如前進(jìn)行,但在指令D正^皮執(zhí)行時,發(fā)生了異常。當(dāng)知,異??赡?在指令執(zhí)行期間產(chǎn)生以使指令在從異常處理子例程返回時必須重新 執(zhí)行或后續(xù)指令應(yīng)纟皮執(zhí)行。這兩個行為被包含在本方法內(nèi)并可在必 要時由適當(dāng)?shù)漠惓L幚碜永炭刂???赡墚a(chǎn)生的另一類型的異常來 自中斷(通常是異步的),由此,中斷處理程序在下一指令分界處 被調(diào)用。如果圖2中說明的異常被中斷取代,那么子例程將在指令 D和指令E之間的界面處被調(diào)用。中斷處理子例程將在指令E處重 新繼續(xù)扭J亍。如圖2所示,異常子例程調(diào)用時的行為不同于圖1的過程調(diào)用的 行為。尤其是,參與異常/中斷檢測的硬件機(jī)構(gòu)用于使與一個或多個 預(yù)定地址(exc—return)相匹配的地址存儲在連接寄存器LR內(nèi)。處 理器的當(dāng)前上下文也被保存在堆棧存儲器區(qū)域,其中包含當(dāng)前程序 計(jì)數(shù)寄存器PC的值。然后異常處理子例程a、 b、 c...被執(zhí)行,直至 遇到最后的返回指令。在該點(diǎn),連接寄存器如圖1被讀出并與已知 的一個或多個預(yù)定地址比較,以與異常返回指令行為相對應(yīng)。在此 例中,會有一個匹配并且若干異常返回指令響應(yīng)操作因此將被觸發(fā), 其中包括從存儲在堆棧存儲器內(nèi)的值恢復(fù)處理器的上下文,以及 根據(jù)存儲在堆棧存儲器內(nèi)的值來恢復(fù)程序計(jì)數(shù)寄存器PC的值,而不 是使用已被硬件設(shè)置成特定exc一retum值的連接寄存器LR內(nèi)的值。圖3是示意說明圖1和2 iJt明的行為的流程圖。在步驟10,系 統(tǒng)等待要被接收的返回指令。當(dāng)知,在數(shù)據(jù)處理系統(tǒng)內(nèi),不同功能 單元的各部分,如取指令單元、指令解碼單元、指令執(zhí)行單元等的 各部分都可被認(rèn)為貢獻(xiàn)了返回指令邏輯部件的部分功能,該部件適 當(dāng)?shù)仨憫?yīng)返回指令并調(diào)用必要的返回指令響應(yīng)操作。圖3的步驟10 等待到返回指令被接收,隨后步驟12判定與該返回指令相關(guān)聯(lián)的返 回地址是否與一個或多個預(yù)定;也址相匹配。在此例中,判定該返回 地址是否大于0xFFFFFFF0。 如果在步驟12中判定為不匹配,則該返回指令^皮i人為是過程調(diào) 用返回指令,過程進(jìn)行到步驟14,在步驟14中,來自連接寄存器LR 的返回地址被恢復(fù)回程序計(jì)數(shù)寄存器PC中。如果在步驟12判定為匹配,則過程進(jìn)到步驟16,在步驟16中, 異常調(diào)用返回指令響應(yīng)操作被調(diào)用,該操作包括恢復(fù)在步驟16中返 回地址自身的最低有效位(LSB)內(nèi)編碼的一個或多個狀態(tài)變量,然 后,在步驟18恢復(fù)處理器的上下文,包括存儲在堆棧存儲器上的各 寄存器值。圖4是體現(xiàn)本方法的數(shù)據(jù)處理裝置的部分的示意圖。當(dāng)知,所畫 出的元件不是相對按比例測定的并且在實(shí)踐中,很多其他電路元件 將在完整系統(tǒng)中出現(xiàn)。取指令單元20包括存儲指示當(dāng)前執(zhí)行的程序 指令的地址的程序計(jì)數(shù)寄存器22。當(dāng)知,在流水線系統(tǒng)內(nèi),在存于 取指令單元20內(nèi)的程序計(jì)數(shù)值和在下游執(zhí)行級實(shí)際被執(zhí)行的指令之 間可能存在偏移。增量器24用于在根據(jù)正常指令流程取得各指令時 增加程序計(jì)數(shù)值。如果執(zhí)行單元26或裝載存儲單元28用來執(zhí)行適 當(dāng)?shù)倪^程調(diào)用指令,則這將通過使過程調(diào)用指令規(guī)定的地址通過多 路復(fù)用器30和32裝入程序計(jì)^L寄存器22來觸發(fā)向過程子例程的轉(zhuǎn) 移。在子例程結(jié)束時,返回指令將被取指令單元20獲取,并開始由 裝載存儲單元38或#^亍單元26來繼續(xù)解碼并適當(dāng)?shù)豝執(zhí)行。當(dāng)這樣 的返回指令^皮執(zhí)行時,它會試圖將返回地址值通過多路復(fù)用器30和 32寫到程序計(jì)數(shù)寄存器22。返回地址檢查電路34檢查正被寫到程 序計(jì)數(shù)寄存器22的返回地址,且如果該地址與已知的對應(yīng)于異常返 回行為的 一個或多個預(yù)定地址相匹配,則它會觸發(fā)適當(dāng)?shù)牧魉€清 倉和異常返回操作,前者由流水線控制電路36執(zhí)行,后者包括要被 執(zhí)行的從主存42內(nèi)的堆棧存儲器40恢復(fù)與再裝載上下文數(shù)據(jù)。在該典型實(shí)施例中,該被檢測是否匹配的一個或多個預(yù)定地址是 32位存儲器空間內(nèi)的16個最高位地址。當(dāng)用作返回地址時,這些地 址的最低有效位用于編碼要在異常返回時隨即恢復(fù)的狀態(tài)變量,這些變量包括哪個堆棧存儲器將被用于從中恢復(fù);返回后哪個堆棧 寄存器將^^使用;以及返回后系統(tǒng)的激活級(activation level),指 示哪些中斷可或不可用于中斷在返回時執(zhí)行的處理。異常進(jìn)入和返回控制邏輯部件38也響應(yīng)外部異步中斷信號irq來觸發(fā)異常處理子 例程執(zhí)行,如圖2所示。執(zhí)行單元26未定義指令的嘗試、執(zhí)行也可能 產(chǎn)生異常行為,裝載存儲單元28的某種嘗試操作和系統(tǒng)內(nèi)別處的操 作也可能產(chǎn)生異常行為。 一旦進(jìn)入異常子例程, 一些代表要在執(zhí)行 返回時隨即恢復(fù)的狀態(tài)的數(shù)據(jù)在返回地址的最低有效位內(nèi)編碼(本 例中是4位)。盡管本文中已參照附圖詳細(xì)說明了本發(fā)明的解釋性實(shí)施例,當(dāng)知 本發(fā)明并不限于這些精確實(shí)施例,在不背離附加的權(quán)利要求書確定 的本發(fā)明的范圍和精神的前提下,本領(lǐng)域技術(shù)人員可在其中進(jìn)行各 種改變和-修正。
權(quán)利要求
1.用于執(zhí)行由程序指令規(guī)定的數(shù)據(jù)處理操作的裝置,所述裝置包括返回邏輯部件,響應(yīng)具有作為輸入操作數(shù)的地址的返回指令來觸發(fā)返回以執(zhí)行由所述地址指示的程序指令;其中(1)如果所述地址具有不與一個或多個預(yù)定地址值相匹配的值,則所述返回邏輯部件觸發(fā)第一返回指令響應(yīng),其中包括一個或多個第一返回響應(yīng)操作以產(chǎn)生第一返回狀態(tài);以及(2)如果所述地址具有與一個或多個預(yù)定地址值相匹配的值,則所述返回邏輯部件觸發(fā)第二返回指令響應(yīng),其中包括一個或多個第二返回響應(yīng)操作以產(chǎn)生第二返回狀態(tài),所述一個或多個第二返回指令響應(yīng)操作不同于所述一個或多個第一返回指令響應(yīng)操作。
2. 權(quán)利要求l所述的裝置,包括用以規(guī)定多個程序指令內(nèi)的執(zhí)行 點(diǎn)的程序計(jì)數(shù)器。
3. 權(quán)利要求2所述的裝置,其中所迷第一返回指令響應(yīng)是過程 返回響應(yīng),包括裝入具有所述地址的所述程序計(jì)數(shù)寄存器。
4. 權(quán)利要求2所述的裝置,包括堆棧存儲器邏輯部件,用來將 數(shù)據(jù)存儲到堆棧存儲器以及從所述堆棧存儲器中讀出數(shù)據(jù),其中所述 第二返回指令響應(yīng)是異常返回響應(yīng),包括從所述堆棧存儲器讀出被存儲地址并用所述被存儲地址裝入所述程序計(jì)數(shù)寄存器。
5. 權(quán)利要求l所述的裝置,包括可用來存儲所迷地址的連接寄存器。
6. 權(quán)利要求4所述的裝置,包括異常處理邏輯部件,響應(yīng)異常的 發(fā)生而觸發(fā)(1 )在所述連接寄存器內(nèi)存儲與所述一個或多個預(yù)定地址值相匹 配的值;(2) 在所述堆棧存儲器內(nèi)存儲所述被存儲地址;以及(3) 執(zhí)行異常處理例程。
7. 權(quán)利要求l所述的裝置,其中當(dāng)與所述一個或多個預(yù)定地址 值匹配時,所述地址包括要被所述一個或多個第二返回指令響應(yīng)操作 恢復(fù)的所述裝置的一個或多個位編碼狀態(tài)變量。
8. 權(quán)利要求7所述的裝置,其中所述狀態(tài)變量包括一個或多個 (1 )控制所述第二返回指令響應(yīng)操作期間應(yīng)從多個堆棧存儲器值中的哪個讀值的變量;(2)控制所述第二返回響應(yīng)之后多個堆棧存儲器中哪個的值應(yīng)被 使用的變量;以及(3 )指示激活級的變量,用以控制被允許中斷當(dāng)前處理的中斷事 件的級。
9. 權(quán)利要求l所述的裝置,其中所述返回邏輯部件響應(yīng)多種形 式的返回指令,取決于作為所逸輸入操作數(shù)的所述地址的值,所述多 種形式的返回指令可各自導(dǎo)致所述第一返回指令響應(yīng)或所述第二返回 指令響應(yīng)。
10. 執(zhí)行由程序指令規(guī)定的數(shù)據(jù)處理操作的方法,所述方法包括 如下步驟響應(yīng)具有作為輸入操作數(shù)的地址的返回指令而觸發(fā)返回,以執(zhí)行 由所述地址表示的程序指令;其中(1 )如果所述地址具有不與一個或多個預(yù)定地址值相匹配的值, 則觸發(fā)笫一返回指令響應(yīng),其中包含一個或多個第一返回響應(yīng)操作以產(chǎn)生第一返回狀態(tài);以及(2)如果所述地址具有與一個或多個預(yù)定地址值相匹配的值,則 觸發(fā)第二返回指令響應(yīng),其中包含一個或多個第二返回響應(yīng)操作以產(chǎn) 生第二返回狀態(tài),所述一個或多個第二返回指令響應(yīng)操作不同于所述一個或多個第一返回指令響應(yīng)操作。
11. 一種計(jì)算機(jī)程序產(chǎn)品,其上載有可用來控制數(shù)據(jù)處理裝置執(zhí) 行如權(quán)利要求10所述的方法的計(jì)算機(jī)程序。
全文摘要
在子例程執(zhí)行之后,具有作為輸入操作數(shù)的地址的返回指令被執(zhí)行。該輸入操作數(shù)被與一個或多個預(yù)定值比較以檢測是否匹配,且返回指令響應(yīng)根據(jù)是否檢測到匹配而被選擇。因此,返回地址值可用來調(diào)用不同的返回指令響應(yīng),如異常返回響應(yīng)或程序返回響應(yīng)。一個或多個預(yù)定地址可被方便地分配給內(nèi)存映像內(nèi)的最高內(nèi)存地址。
文檔編號G06F9/40GK101156137SQ200680010991
公開日2008年4月2日 申請日期2006年2月1日 優(yōu)先權(quán)日2005年3月30日
發(fā)明者D·J·西爾, P·基梅爾曼, R·R·格里森思懷特 申請人:Arm有限公司