欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于使過程返回序列加速的方法和系統(tǒng)的制作方法

文檔序號:6479039閱讀:131來源:國知局
專利名稱:用于使過程返回序列加速的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明大體涉及計(jì)算機(jī)系統(tǒng),且更明確地說涉及一種用于通過識(shí)別處理器內(nèi)的上 托分支指令序列而使返回序列加速的方法和系統(tǒng)。
背景技術(shù)
處理器執(zhí)行的大多數(shù)程序包含子例程或過程。過程是通過過程調(diào)用序列存取的代 碼的模塊。一旦過程完成,指令執(zhí)行就通過過程返回序列的執(zhí)行而返回到調(diào)用程序。在一些處理器結(jié)構(gòu)內(nèi),過程調(diào)用和返回序列可編譯為指令的序列。舉例來說,過程 調(diào)用序列可由推送(PUSH)指令之后是分支和鏈接指令組成。推送指令可將過程內(nèi)的指令 使用的參數(shù)保存到軟件棧上。在推送指令之后,處理器可執(zhí)行分支和鏈接指令。分支和鏈 接指令促使在過程的開始地址處開始指令提取和執(zhí)行,并將分支和鏈接指令之后的下一順 序指令的地址(稱為返回或鏈接地址)保存在鏈接寄存器中。鏈接寄存器可為特殊用途寄 存器或處理器使用的通用寄存器(GPR)之一。在過程內(nèi),通常將鏈接寄存器內(nèi)容推送到軟 件棧上,使得其值在在返回到原始調(diào)用程序之前調(diào)用另一過程的情況下不被覆寫。在過程完成其功能之后,處理器執(zhí)行過程返回序列以在鏈接地址(過程調(diào)用指令 之后的下一順序指令地址)處繼續(xù)進(jìn)行指令執(zhí)行。因?yàn)榉祷氐刂方?jīng)常保存在軟件棧上,所 以過程返回序列必須首先從軟件棧檢索返回地址以使用所述地址來確定待提取的下一指 令群組。過程返回序列可由一個(gè)或一個(gè)以上指令組成。在一些處理器結(jié)構(gòu)中,過程返回序 列可以是單一指令,例如上托(POP)或加載指令,其可從軟件棧讀取下一返回地址并更新 程序計(jì)數(shù)器(PC)?;蛘?,處理器可使用上托或加載指令將鏈接地址從軟件棧讀取到中間寄 存器(例如,GPR)中,之后將所述值移動(dòng)到程序計(jì)數(shù)器以完成過程返回序列。在另一說明性 實(shí)例中,處理器可確定從過程的返回可能是將保存在鏈接寄存器(LR)中的值移動(dòng)到PC中 的指令。當(dāng)處理器在過程調(diào)用之后遇到這些過程返回序列中的任一者時(shí),處理器使用從軟 件棧檢索的返回地址值跳回到過程調(diào)用指令之后的下一順序指令??蓪㈩~外的邏輯添加到處理器的硬件以改進(jìn)指令處理的效率。舉例來說,可將鏈 接棧添加到處理器的提取邏輯以使指令提取加速。所屬領(lǐng)域的技術(shù)人員了解,鏈接??珊?有還可存在于軟件棧上的返回地址。然而,鏈接棧獨(dú)立于軟件棧而操作。與鏈接棧相關(guān)聯(lián) 的硬件邏輯識(shí)別過程調(diào)用和返回。當(dāng)在執(zhí)行之前識(shí)別過程調(diào)用指令時(shí),將相關(guān)聯(lián)的返回地 址加載到鏈接棧上。相反,當(dāng)識(shí)別過程返回時(shí),從鏈接棧檢索相關(guān)聯(lián)的返回地址并使用其來 繼續(xù)進(jìn)行指令提取。代替于等待指令執(zhí)行和從軟件棧檢索返回地址,處理器可使用存儲(chǔ)在 鏈接棧中的地址來推測性地提取指令。隨著處理器的發(fā)展,過程返回序列繼續(xù)變化。在一些處理器結(jié)構(gòu)中,過程返回可包 括多個(gè)指令。如果支持鏈接棧的硬件邏輯不將這些指令辨認(rèn)為過程返回序列,那么可能不 會(huì)從鏈接棧檢索返回地址,且因此鏈接棧可能會(huì)變得與指令序列不同步。當(dāng)鏈接棧變得不 同步時(shí),鏈接棧可能會(huì)提供可導(dǎo)致多個(gè)地址誤預(yù)測的錯(cuò)誤的返回地址信息。

發(fā)明內(nèi)容
因此,業(yè)內(nèi)需要有將某些指令序列(更明確地說,上托(或加載)和分支指令序 列)辨認(rèn)為過程返回序列的處理器電路。本發(fā)明認(rèn)識(shí)到此需要并揭示一種具有在指令管線 中較早識(shí)別對應(yīng)于過程返回的指令的電路的處理器。在識(shí)別過程返回之后,處理器通過使 用來自鏈接棧的下一返回地址而提取下一指令群組。通過將上托和分支指令序列辨認(rèn)為程 序返回,處理器可基于從鏈接棧檢索的正確地址來繼續(xù)提取指令。揭示一種用于當(dāng)從管線處理器中的過程返回時(shí)從鏈接棧檢索返回地址的方法。所 述方法識(shí)別操作以從鏈接棧檢索返回地址的檢索指令。所述方法識(shí)別操作以分支到所述返 回地址的分支指令。所述方法響應(yīng)于所述指令和所述分支指令兩者被識(shí)別而從所述鏈接棧 檢索所述返回地址。所述方法使用所述返回地址來提取后續(xù)指令。揭示一種管線處理器。所述管線處理器具有線緩沖器。線緩沖器耦合到指令高速 緩沖存儲(chǔ)器。處理器還具有耦合到指令高速緩沖存儲(chǔ)器的提取邏輯電路。提取邏輯電路具 有存儲(chǔ)預(yù)測性返回地址的鏈接棧,其中指令從線緩沖器加載到指令高速緩沖存儲(chǔ)器中。提 取邏輯電路從指令高速緩沖存儲(chǔ)器檢索指令。管線處理器還具有與線緩沖器通信的預(yù)解碼 邏輯電路,其中預(yù)解碼邏輯電路具有用于識(shí)別過程返回序列的檢測邏輯電路。過程返回序 列識(shí)別為操作以從軟件棧檢索返回地址的檢索指令,和分支到所檢索的返回地址的分支指 令。管線處理器響應(yīng)于對過程返回序列的識(shí)別而從鏈接棧檢索所預(yù)測的返回地址。揭示一種管線處理器。所述管線處理器具有提取邏輯電路。提取邏輯電路具有存 儲(chǔ)所預(yù)測的返回地址的鏈接棧。提取邏輯電路從指令高速緩沖存儲(chǔ)器提取指令。管線處理 器還具有解碼邏輯電路,所述解碼邏輯電路耦合到提取邏輯電路,其中所提取的指令由解 碼邏輯電路解碼。解碼邏輯電路進(jìn)一步具有檢測邏輯電路,其中所述檢測邏輯電路識(shí)別過 程返回序列。過程返回序列是從軟件棧檢索地址的檢索指令,和操作以分支到所檢索的地 址的分支指令。管線處理器響應(yīng)于對過程返回序列的識(shí)別而從鏈接棧檢索所預(yù)測的返回地 址。管線處理器響應(yīng)于對過程返回的識(shí)別而從鏈接棧檢索所預(yù)測的返回地址。從以下詳細(xì)描述和附圖將了解對本發(fā)明的更完整理解以及本發(fā)明的更多特征和 優(yōu)點(diǎn)。


圖1展示使用本發(fā)明的一實(shí)施例的處理器的高級邏輯硬件框圖。圖2展示由圖1的處理器執(zhí)行的示范性指令群組。圖3顯示根據(jù)本發(fā)明的一個(gè)實(shí)施例并入有檢測邏輯電路的圖1的CPU的上部和下 部管線的更詳細(xì)框圖。圖4展示圖3的提取邏輯電路的更詳細(xì)視圖。圖5展示利用檢測邏輯電路的上部和下部管線的替代實(shí)施例。圖6展示說明由圖1的處理器執(zhí)行的指令處理流的流程圖,所述處理器辨認(rèn)程序 返回并使用鏈接棧來提取指令。圖7展示說明由處理器使用圖4的上部管線執(zhí)行的替代指令處理流的流程圖。
具體實(shí)施例方式下文結(jié)合附圖陳述的詳細(xì)描述希望作為對本發(fā)明的各種實(shí)施例的描述,且不希望 表示其中可實(shí)踐本發(fā)明的僅有實(shí)施例。詳細(xì)描述包含特定細(xì)節(jié)以用于提供對本發(fā)明的徹底 理解。然而,所屬領(lǐng)域的技術(shù)人員將了解,可在沒有這些特定細(xì)節(jié)的情況下實(shí)踐本發(fā)明。在 一些例子中,以框圖形式展示眾所周知的結(jié)構(gòu)和組件以免混淆本發(fā)明的概念??蓛H為了方 便和清楚而使用首字母縮寫詞和其它描述性術(shù)語,且其不希望限制本發(fā)明的范圍。圖1展示利用如下文描述的本發(fā)明的一個(gè)實(shí)施例的超標(biāo)量處理器100的高級視 圖。處理器100具有中央處理單元(CPU) 102,其經(jīng)由控制信號104耦合到指令高速緩沖存 儲(chǔ)器106。指令高速緩沖存儲(chǔ)器106還耦合到線緩沖器107且通過通用總線110耦合到存 儲(chǔ)器108。CPU 102控制經(jīng)由線緩沖器107將指令從存儲(chǔ)器108加載到指令高速緩沖存儲(chǔ) 器106中。CPU 102具有耦合到下部管線160和165的上部管線150。在下部管線160和 165內(nèi)是執(zhí)行級220和225。在執(zhí)行級220內(nèi)是執(zhí)行單元(EU) 130A,且在執(zhí)行級225內(nèi)是 EU 130B。如所屬領(lǐng)域的技術(shù)人員了解,指令高速緩沖存儲(chǔ)器106可以是經(jīng)設(shè)計(jì)以彌合存儲(chǔ) 器108與處理器100之間的速度差距的專用存儲(chǔ)器。將從存儲(chǔ)器108提取的指令放置在能 夠以處理器時(shí)鐘速度讀取的較快指令高速緩沖存儲(chǔ)器106中。如果指令不存在于指令高速 緩沖存儲(chǔ)器106中,那么處理器100從存儲(chǔ)器108檢索指令。當(dāng)從存儲(chǔ)器108檢索到指令 時(shí),將其首先加載到線緩沖器107中且最終寫入到指令高速緩沖存儲(chǔ)器106中。在指令高速緩沖存儲(chǔ)器106中加載了指令之后,CPU 102經(jīng)由控制信號104存取 所述指令。將指令從指令高速緩沖存儲(chǔ)器106加載到上部管線150中。在上部管線150中 處理指令且接著將所述指令發(fā)送到下部管線160或165以供進(jìn)一步處理。如結(jié)合圖3-5的 論述所描述,處理器可具有經(jīng)設(shè)計(jì)以檢測特定指令序列的邏輯電路。這些特定指令序列可 對應(yīng)于過程返回。在已識(shí)別過程返回指令序列之后,處理器100可根據(jù)本發(fā)明的多個(gè)實(shí)施 例基于那些指令執(zhí)行功能。在上部管線150中對指令執(zhí)行的一些示范性處理功能可包含提取指令、將指令對 準(zhǔn)、對指令進(jìn)行解碼、將指令發(fā)布到下部管線160或165等。在下部管線160和165內(nèi),可 由執(zhí)行單元130A和130B執(zhí)行指令,并記錄結(jié)果。圖2中說明具有使用上托和分支指令序列的過程返回的說明性指令群組200。顯 示指令260、指令270的操作和執(zhí)行指令的模塊280。出于清楚的目的,從此指令群組200 中省略將在軟件棧上推送參數(shù)以供過程本身使用的任何指令。也省略將組成過程執(zhí)行的實(shí) 際功能的任何指令。圖2中描繪的指令是調(diào)用過程、將返回地址保存在鏈接寄存器(在此 實(shí)例中為GPR R14)中、將返回地址存儲(chǔ)到軟件棧上、從軟件棧檢索返回地址,并繼續(xù)處理位 于返回地址處的指令的指令。圖2中以指令群組200在追蹤指令執(zhí)行時(shí)將呈現(xiàn)的程序次序 顯示指令群組200。所屬領(lǐng)域的技術(shù)人員了解,所追蹤的指令是處理器可能已提取的實(shí)際代 碼的子集,且以其將被執(zhí)行的狀態(tài)展示。指令群組200由三個(gè)嵌套過程組成。在指令群組200內(nèi)是三個(gè)過程調(diào)用及其相關(guān)聯(lián)的返回。第一過程調(diào)用是指令A(yù),其 調(diào)用過程PR0C1。指令B是過程PROCl內(nèi)的預(yù)備指令,其將當(dāng)前返回地址保存到軟件棧上。 指令C是第二過程調(diào)用指令,其調(diào)用過程PR0C2。指令D是過程PR0C2內(nèi)的另一預(yù)備指令, 其將與PR0C2相關(guān)聯(lián)的返回地址保存到軟件棧上。最后過程調(diào)用指令是指令E,其調(diào)用過程raoc3。對應(yīng)于過程調(diào)用指令的是過程返回指令。第一過程返回指令是指令F。在先前處 理器結(jié)構(gòu)中,將指令F辨認(rèn)為過程返回指令。接下來兩個(gè)指令(指令G與H組合)表示另一 過程返回。通常,在先前處理器結(jié)構(gòu)中,上托和分支指令的指令組合可能不會(huì)被正確地識(shí)別 為供硬件鏈接棧使用的過程返回。因此在這些先前處理器中,當(dāng)識(shí)別指令G和H時(shí),可能未 檢索鏈接棧上的下一返回地址。使用一個(gè)實(shí)施例的處理器可緩解此可能的鏈接棧訛誤。在 一個(gè)實(shí)施例中,在將指令H識(shí)別為過程返回指令之后,處理器100可從鏈接棧檢索下一地址 并使用所檢索的地址來繼續(xù)提取指令。在此實(shí)例中,鏈接棧上的下一地址指回過程PR0C1, 且更明確地說其指向指令C之后的下一順序指令(指令I(lǐng))。指令H也可稱為隱式分支指 令。接下來兩個(gè)指令(指令I(lǐng)和J)也解譯為過程返回序列。當(dāng)指令J由處理器100 識(shí)別為過程返回指令時(shí),檢索鏈接棧上的下一地址并使用所述地址來繼續(xù)指令提取。指令 J是顯式分支指令。在此實(shí)例中,鏈接棧外的下一地址將程序執(zhí)行指回主程序。在先前處 理器結(jié)構(gòu)中,指令I(lǐng)與J的組合可能未被正確地識(shí)別為供硬件鏈接棧使用的過程返回序列。 如圖3-7的論述中更詳細(xì)描述,本發(fā)明的各種實(shí)施例將上托和分支指令的組合識(shí)別為過程 返回序列。圖3顯示利用本發(fā)明實(shí)施例的CPU 102的更詳細(xì)框圖。在CPU 102內(nèi),上部管線 150具有提取級203,其含有通過控制信號104耦合到指令高速緩沖存儲(chǔ)器106的提取邏輯 電路202。同樣在CPU 102中的是具有檢測邏輯電路250的預(yù)解碼邏輯電路201。預(yù)解碼 邏輯電路201耦合到線緩沖器107,所述線緩沖器107耦合到指令高速緩沖存儲(chǔ)器106。提 取級203耦合到解碼級205,解碼級205又耦合到發(fā)布級207。耦合到解碼級205的是解碼 邏輯電路(為了便于說明未圖示),其對關(guān)于指令的特定信息進(jìn)行解碼。在發(fā)布級207內(nèi)的 可為若干指令隊(duì)列(為了便于說明未圖示),其在指令發(fā)布到下部管線160和165之前保持 指令。如所屬領(lǐng)域的技術(shù)人員可了解,管線級可具有經(jīng)設(shè)計(jì)以保持指令的寄存器或寄存 器群組。當(dāng)指令進(jìn)入特定級時(shí),處理器100將指令加載到鏈接到所述級的寄存器或寄存器 群組中。當(dāng)指令保持在每一級內(nèi)的寄存器或寄存器群組中時(shí),邏輯電路可依據(jù)指令而執(zhí)行 某些操作。在邏輯電路已執(zhí)行既定操作之后,指令接著傳遞到下一順序級。另外,當(dāng)指令在 上部管線150中時(shí),其由各種邏輯電路“處理”。處理指令可包含提取指令、對指令進(jìn)行解 碼、將指令對準(zhǔn)、發(fā)布指令等。指令進(jìn)入上部管線150并從提取級203移動(dòng)穿過發(fā)布級207。指令在提取級203 期間由提取邏輯電路202提取。在提取指令之后,其在解碼級205期間由解碼邏輯電路解 碼。在解碼級205之后,在發(fā)布級207中處理指令。在指令離開發(fā)布級207之后,在下部管 線160或下部管線165中執(zhí)行指令。如先前論述,在下部管線160內(nèi)的是執(zhí)行級220和EU 130A。在下部管線165內(nèi)的是執(zhí)行級225和EU 130B。下部管線160和165分別存取寄存 器堆230或235。預(yù)解碼邏輯電 路201可由處理器100使用以在指令保存在指令高速緩沖存儲(chǔ)器 106中之前對關(guān)于指令的信息進(jìn)行部分解碼和識(shí)別。經(jīng)預(yù)解碼的信息可在指令存儲(chǔ)在指令 高速緩沖存儲(chǔ)器106中時(shí)連同指令一起保存。在預(yù)解碼邏輯電路201內(nèi),檢測邏輯電路250可識(shí)別指令之間的相依性。舉例來說,檢測邏輯電路250可經(jīng)設(shè)計(jì)以識(shí)別何時(shí)上托指令和 分支指令利用相同寄存器。如圖4的論述中所闡釋,在檢測邏輯電路250將由上托和分支 指令組成的指令序列識(shí)別為來自過程調(diào)用的返回之后,提取邏輯電路202在從指令高速緩 沖存儲(chǔ)器106提取分支指令時(shí)解譯此信息。當(dāng)指令加載到指令高速緩沖存儲(chǔ)器106中時(shí),可通過設(shè)定與指令相關(guān)聯(lián)的信息字 段內(nèi)的特定位置中的位來實(shí)現(xiàn)將經(jīng)預(yù)解碼的信息與指令相關(guān)聯(lián)。將經(jīng)預(yù)解碼的信息保存 在指令高速緩沖存儲(chǔ)器106中也可稱為以旗標(biāo)標(biāo)記指令。舉例來說,在確定指令是過程返 回指令之后,可在指令標(biāo)頭中的一個(gè)位置中設(shè)定一位,其識(shí)別所述指令是過程返回指令?;?者,處理器100可針對經(jīng)識(shí)別的指令將經(jīng)預(yù)解碼的信息編碼到指令標(biāo)頭中。以此方式,處理 器100可針對不同指令基于選定或預(yù)定標(biāo)準(zhǔn)使用多個(gè)位來編碼不同信息??稍谡龔闹噶罡?速緩沖存儲(chǔ)器106提取指令時(shí)檢索經(jīng)預(yù)解碼的信息。處理器100可接著基于經(jīng)識(shí)別的信息 執(zhí)行某些功能。圖4顯示根據(jù)本發(fā)明一個(gè)實(shí)施例的提取邏輯電路202。提取邏輯電路202包含控制地址選擇多路復(fù)用器302的地址選擇器邏輯電路320。地址選擇器邏輯電路320包含返 回選擇器邏輯電路350。耦合到地址選擇多路復(fù)用器302的輸入的是來自鏈接棧304的鏈 接棧輸出316。鏈接棧邏輯電路310與地址選擇器邏輯電路320通信并控制鏈接棧304的 輸入和輸出兩者。當(dāng)識(shí)別過程調(diào)用時(shí),鏈接棧304從地址總線接收返回地址。在鏈接棧304內(nèi),可保存預(yù)測性返回地址。鏈接棧304可以是存儲(chǔ)器的存儲(chǔ)對應(yīng) 于與過程返回相關(guān)聯(lián)的返回地址的指令地址的后進(jìn)先出(LIFO)部分。鏈接棧304獨(dú)立于 軟件棧而操作。當(dāng)指令在指令管線中較早地被識(shí)別為過程返回指令時(shí),處理器100可使用 存儲(chǔ)在鏈接棧上的返回地址搶先提取指令,而不是等待過程返回在下部管線160或165中 執(zhí)行。如圖4中顯示,地址選擇多路復(fù)用器302可接收下一順序程序地址。下一順序程 序地址可以是當(dāng)前程序計(jì)數(shù)器遞增8個(gè)地址位置(PC+8)。在此實(shí)施例中,從指令高速緩沖 存儲(chǔ)器106提取指令,一次提取兩個(gè)指令,其中每一指令為四個(gè)字節(jié)長。在其它處理器實(shí)施 例中,下一順序程序地址可以是遞增不同量的程序計(jì)數(shù)器。如先前所提及,地址選擇多路復(fù) 用器302還可從鏈接棧304接收預(yù)測性地址信息。當(dāng)處理器100確定已發(fā)生過程返回時(shí), 檢索鏈接棧304中的下一地址并將其用作開始位置以提取下一指令群組。地址選擇多路復(fù)用器302可從其它來源接收地址信息。舉例來說,分支目標(biāo)地址 高速緩沖存儲(chǔ)器(BTAC)可提供用于提取指令的地址?;蛘?,中斷地址可用于提取指令。為 了便于說明,未展示地址的這些其它來源。地址選擇器邏輯電路320確定其輸入中的哪一者將通過地址選擇多路復(fù)用器302 并用于提取下一指令群組。如果地址選擇器邏輯電路320確定待提取的下一地址群組是下 一順序地址(PC+8),那么選擇PC+8輸入,或者,如果地址選擇器邏輯電路320內(nèi)的返回選擇 器邏輯電路350確定鏈接棧304含有下一提取地址,那么選擇鏈接棧輸出316。為了利用鏈接棧304,處理器100需要確定何時(shí)在上部管線150內(nèi)的指令處理序列 期間識(shí)別過程調(diào)用和對應(yīng)的返回。由于鏈接棧304用于預(yù)測性地提取指令,所以處理器100 不會(huì)等到指令執(zhí)行再提取后續(xù)指令。替代地,在處理器100已識(shí)別為上部管線150中的過 程調(diào)用指令之后,處理器100經(jīng)由地址總線將與過程調(diào)用相關(guān)聯(lián)的返回地址加載到鏈接棧304上。接著處理器100提取過程的指令。在過程結(jié)束時(shí),處理器100遇到過程返回序列。由于過程返回序列的緣故,處理器將“上托”鏈接棧304以檢索對應(yīng)的返回地址并分支到所述返回地址以繼續(xù)進(jìn)行指令提取。 處理器100識(shí)別過程返回指令并檢索鏈接棧外的下一返回地址。過程返回指令可以是上托 指令或加載指令,其讀取軟件棧并寫入PC。如果返回選擇器邏輯電路350識(shí)別特定上托指 令是過程返回,那么返回選擇器邏輯電路350接著促使地址選擇器邏輯電路320促使引導(dǎo) 鏈接棧輸出316穿過地址選擇多路復(fù)用器302。接著用取自鏈接棧304的返回地址來提取 下一指令集。如先前所描述,過程返回序列可由一個(gè)或一個(gè)以上指令組成。舉例來說,在一些 ARM實(shí)施方案中,到存儲(chǔ)在鏈接寄存器(R14)中的值的分支指令可解譯為過程返回?;蛘?, 將鏈接寄存器(R14)的值移動(dòng)到程序計(jì)數(shù)器(R15)中的移動(dòng)指令也可解譯為過程返回。重要 的是,處理器100準(zhǔn)確地識(shí)別過程返回。如果處理器100未準(zhǔn)確地識(shí)別過程返回,那么鏈接 棧304將變得相對于過程返回指令不同步。如果鏈接棧304變得不同步,那么處理器100 可能必須進(jìn)入分支校正序列,且可影響執(zhí)行性能。由于處理器指令集已發(fā)展,可將替代指令序列識(shí)別為過程返回序列。在一個(gè)示范 性實(shí)施例中,將返回地址上托到特定寄存器的上托或加載指令(其不更新PC)之后是到特 定寄存器中存儲(chǔ)的值的分支指令可解譯為過程返回序列。分支指令可能是或可能不是上托 指令之后的下一順序指令。為了促進(jìn)識(shí)別由上托和分支指令組成的過程返回序列,搜集關(guān)于所述兩個(gè)指令的 信息。過程返回的上托指令可涉及一個(gè)或一個(gè)以上寄存器。當(dāng)識(shí)別上托指令時(shí),可保存上 托指令的寄存器列表并將其與任何后續(xù)指令的寄存器目標(biāo)進(jìn)行比較。寄存器列表的保存和 比較也可稱為認(rèn)定已識(shí)別上托指令。如果不分支(non-branching)指令在遇到到與上托指 令相關(guān)聯(lián)的寄存器列表中識(shí)別的寄存器的分支之前利用所述寄存器,那么將所述寄存器從 所保存的寄存器列表中扣除。如果在確實(shí)使用所保存的寄存器列表中的寄存器的分支指令 之前遇到不使用所保存的寄存器列表中的寄存器的分支指令,那么對先前上托的上托-分 支返回序列的搜索終止。當(dāng)遇到使用寄存器列表中的寄存器的分支指令時(shí),處理器100可 接著確定過程返回正被處理。因此,鏈接棧304的頂部處的地址可接著被檢索并用于提取 下一指令群組。如先前所描述,預(yù)解碼邏輯電路201 (圖3)可能已識(shí)別利用相同寄存器的上托和 分支指令序列,且因此分支指令被識(shí)別為過程返回指令。處理器100可能已在分支指令被 存儲(chǔ)到指令高速緩沖存儲(chǔ)器106中時(shí)將此信息保存到指令標(biāo)頭中。當(dāng)提取邏輯電路202檢 索隨分支指令保存的經(jīng)預(yù)解碼信息時(shí),處理器100使用返回選擇器邏輯電路350來識(shí)別分 支指令是過程返回。在返回選擇器邏輯電路350已確定分支指令是過程返回之后,返回選 擇器邏輯電路350促使地址選擇邏輯電路320引導(dǎo)鏈接棧輸出316穿過地址選擇多路復(fù)用 器302。返回選擇器邏輯電路350還與鏈接棧邏輯電路310通信,從而促使返回鏈接棧中的 下一值。因此,用鏈接棧地址來提取下一指令集。圖5顯示根據(jù)替代實(shí)施例的具有上部管線151的CPU 102,所述CPU 102具有能夠 檢測由上托/分支指令序列組成的過程返回的解碼邏輯電路。更明確地說,CPU 102含有 具有檢測邏輯電路450的解碼邏輯電路406。當(dāng)解碼邏輯電路406對指令進(jìn)行解碼時(shí),識(shí)別關(guān)于指令的信息。檢測邏輯電路450可監(jiān)視經(jīng)解碼指令以確定何時(shí)識(shí)別過程返回。如先前 所論述,過程返回序列可由一個(gè)或一個(gè)以上指令組成。當(dāng)上托指令和后續(xù)分支指令被解碼 時(shí),檢測邏輯電路450可確定發(fā)生過程返回序列。當(dāng)檢測邏輯電路450確定已經(jīng)識(shí)別過程返回時(shí),檢測邏輯電路450將此信息傳送 到返回選擇器邏輯電路350,返回選擇器邏輯電路350又將此信息傳送到鏈接棧邏輯電路 310 (圖4)。返回選擇器邏輯電路350接著促使地址選擇器邏輯電路320引導(dǎo)鏈接棧輸出 316穿過地址選擇多路復(fù)用器302。接著使用取自鏈接棧304的返回地址來提取下一指令
集。 可通過返回參考圖2中的指令群組200來進(jìn)一步闡釋與實(shí)施例相關(guān)聯(lián)的發(fā)明概 念。指令A(yù)是過程PROCl的調(diào)用。當(dāng)指令A(yù)分支到PROCl時(shí),處理器100將下一順序地址 存儲(chǔ)到鏈接寄存器(R14)中。下一順序地址是與返回到主程序相關(guān)聯(lián)的返回地址。當(dāng)指令 A被識(shí)別為過程調(diào)用時(shí),鏈接棧邏輯電路310促使將與指令A(yù)相關(guān)聯(lián)的返回地址加載到鏈接 棧304上。如圖2中顯示,指令A(yù)是主程序的一部分。指令A(yù)分支到PROCl且下一經(jīng)處理 指令為指令B。指令B是PROCl內(nèi)的第一指令且是過程PR0C2的調(diào)用的預(yù)備指令。指令B通過將 R14的值推送到軟件棧上來保存當(dāng)前返回地址。接下來,處理指令C。指令C是過程PR0C2 的調(diào)用。當(dāng)指令C被識(shí)別為過程調(diào)用時(shí),鏈接棧邏輯電路310將與指令C相關(guān)聯(lián)的返回地 址保存到鏈接棧304上。指令C分支到過程PR0C2且經(jīng)處理的下一指令為指令D。指令D是過程PR0C2內(nèi)的第一指令,且通過將R14的值推送到軟件棧上來保存當(dāng)前 返回地址。指令D是另一預(yù)備指令,其為下一過程調(diào)用指令(指令E)作準(zhǔn)備。當(dāng)指令E被 識(shí)別為過程調(diào)用時(shí),鏈接棧邏輯電路310促使將與指令E相關(guān)聯(lián)的返回地址加載到鏈接棧 304上。指令E是過程PR0C2內(nèi)的第二指令且調(diào)用過程PR0C3。指令E分支到與指令F相 關(guān)聯(lián)的地址,指令F是過程PR0C3內(nèi)的第一指令。指令F是過程PR0C3內(nèi)僅有的指令且是 返回。明確地說,指令F分支到當(dāng)前在鏈接寄存器(R14)中的值。通常,在現(xiàn)有處理器結(jié)構(gòu) 中,將指令F辨認(rèn)為指令返回。當(dāng)處理指令F時(shí),檢測邏輯電路450確定指令F是過程返回 且促使檢索鏈接棧304上的下一返回地址。處理器使用返回地址而返回到過程PR0C2。在過程PR0C2內(nèi),待處理的下一指令是指令G,其將當(dāng)前值從軟件?!吧贤小背鰜?并將其保存到寄存器R12中。為了便于說明,指令G “上托”單一寄存器。然而,在替代實(shí)施 例中,上托指令可返回多個(gè)寄存器的多個(gè)值。在此替代實(shí)施例中,處理器100可保持“經(jīng)上 托”寄存器的列表以便使用寄存器列表中的那些寄存器中的一者作為分支目標(biāo)地址而將寄 存器列表與后續(xù)分支指令進(jìn)行比較。在一個(gè)實(shí)施例中,檢測邏輯電路450可存儲(chǔ)“經(jīng)上托” 寄存器的列表。指令H分支到現(xiàn)在在R12中的所檢索的地址。盡管指令H不是顯式分支指令(BX), 但其是等效分支指令。如所屬領(lǐng)域的技術(shù)人員了解,M0V、PC、RN也可解譯為隱式分支指令。 如圖6和7的指令流程圖600和700中所闡釋,檢測邏輯電路250、450確定上托指令(指 令G)連同到“經(jīng)上托”寄存器(指令H的R12)的分支指令一起組成過程返回序列。因此, 處理器100使用鏈接棧304來提供下一提取地址,且指令提取返回到過程PROCl。在處理指令H之后,指令提取返回到過程PROCl并識(shí)別指令I(lǐng)。指令I(lǐng)將下一值 從軟件棧上托出來到R2中。仍在過程PROCl內(nèi),指令J分支到存儲(chǔ)在R2中的地址。類似于指令H,指令J分支到存儲(chǔ)在先前“經(jīng)上托”寄存器中的地址。因此,檢測邏輯電路250、450 確定指令J是過程返回指令,且使用來自鏈接棧304的下一值來提取下一指令群組。在此 實(shí)例中,在處理指令J之后,提取指令K。指令K可以是如圖3中顯示的主程序內(nèi)的任何指 令。 在一個(gè)實(shí)施例中,處理器100使用檢測邏輯電路250來識(shí)別指令F和指令G與H以 及I與J的序列將解譯為過程返回。因此,當(dāng)檢測邏輯電路250在線緩沖器107中遇到指 令集200時(shí),將指令F、H和J預(yù)解碼為過程返回指令,其中經(jīng)預(yù)解碼信息保存在指令高速緩 沖存儲(chǔ)器106中。因此,當(dāng)提取邏輯電路202從指令高速緩沖存儲(chǔ)器106提取指令F、H和 J時(shí),返回選擇邏輯電路350促使從鏈接304檢索返回地址,所述返回地址用于提取下一指 令群組。在替代實(shí)施例中,檢測邏輯電路450也可經(jīng)設(shè)計(jì)以識(shí)別指令F和指令G與H以及I 與J的序列將解譯為過程返回。在此情況下,當(dāng)在解碼級205中對指令群組200進(jìn)行解碼 時(shí),檢測邏輯電路450識(shí)別指令F、H和J為過程返回指令并將此傳送到返回選擇器邏輯電 路350。返回選擇器邏輯電路350接著促使使用鏈接棧304內(nèi)的下一返回地址來確定下一 提取地址。圖6顯示說明由處理器100執(zhí)行的步驟的指令流600,所述處理器100具有圖3 的CPU 102內(nèi)的檢測邏輯電路250。為了便于說明,流程圖600假定CPU 102內(nèi)的線緩沖 器107的寬度僅為單一指令,且指令從高速緩沖存儲(chǔ)器線地址的開始依次返回。所屬領(lǐng)域 的技術(shù)人員了解,一些處理器可具有能夠不以順序次序處理多個(gè)指令的線緩沖器。本文描 述的發(fā)明概念可應(yīng)用于任一類型的處理器。指令流600在開始框602處開始。指令流從框602進(jìn)行到框604,其中線緩沖器 107中的第一指令由檢測邏輯電路250處理。指令流600接著進(jìn)行到?jīng)Q策框606。在決策 框606中,檢測邏輯電路250確定指令是否為已知的過程返回。如先前論述,已知的過程返 回可以是先前識(shí)別的過程返回中的任一者,上托/分支序列除外。如果在決策框606處檢 測邏輯電路250確定指令是先前已知的過程返回,那么指令流600進(jìn)行到框626,其中將指 令識(shí)別或以旗標(biāo)標(biāo)記為過程返回。如果在決策框606處檢測邏輯電路250確定指令不是先 前已知的過程返回,那么指令流進(jìn)行到?jīng)Q策框610。在決策框610處,檢測邏輯電路250確定指令是否為不具有經(jīng)上托寄存器列表中 的程序計(jì)數(shù)器(PC)的上托指令。如果指令不是沒有寄存器列表中的PC的上托指令,那么 指令流600進(jìn)行到?jīng)Q策框628。否則,如果指令是不含有寄存器列表中的PC的上托指令,那 么指令流600進(jìn)行到框612。在框612處,檢測邏輯電路250保存上托指令的寄存器列表以 供用于分析線緩沖器107中的任何后續(xù)指令。指令流從框612進(jìn)行到框614。在框614處,檢測邏輯電路250從線緩沖器107檢 索下一指令。處理流從框614繼續(xù)到?jīng)Q策框616。在決策框616處,檢測邏輯電路250確定 線緩沖器107中的下一指令是否為到寄存器列表中所保存的寄存器中的任一者的分支指 令。如果指令是到寄存器列表中的寄存器的分支,那么指令流進(jìn)行到框626,其中將指令以 旗標(biāo)標(biāo)記為過程返回指令。如果在決策框616處檢測邏輯電路250確定指令不是到所保存 的寄存器列表中的寄存器的分支指令,那么指令流600繼續(xù)到?jīng)Q策框617。在決策框617處,檢測邏輯電路250確定指令是否為分支指令。如果指令為分支指令,那么指令流進(jìn)行到?jīng)Q策框628。如果在決策框617處檢測邏輯電路250確定指令不是 分支指令,那么指令流進(jìn)行到?jīng)Q策框618。在決策框618處,檢測邏輯電路250確定指令是 否覆寫所保存的寄存器列表中的寄存器中的任一者。如果指令覆寫所保存的寄存器列表中 的寄存器中的任一者,那么指令流600繼續(xù)到框620,其中從所保存的寄存器列表移除被覆 寫的寄存器。指令流600從框620繼續(xù)到?jīng)Q策框622。如果在決策框618處檢測邏輯電路250確定指令未覆寫所保存的寄存器列表中的 任何寄存器,那么指令流600進(jìn)行到?jīng)Q策框622。在決策框622處,檢測邏輯電路250確定 針對線緩沖器107是否存在任何剩余指令。如果針對線緩沖器不存在剩余指令,那么指令 流600在框624處結(jié)束。如果線緩沖器107中存在剩余指令,那么指令流600回到框614, 其中處理線緩沖器107中的下一指令。在框626處,檢測邏輯電路將指令以旗標(biāo)標(biāo)記為返回指令。如先前所提及,以旗標(biāo) 標(biāo)記返回指令允許提取邏輯電路202在從指令高速緩沖存儲(chǔ)器106提取返回指令時(shí)識(shí)別所 述返回指令。指令流600從框626進(jìn)行到?jīng)Q策框628。在決策框628處,檢測邏輯電路250 確定是否存在待在線緩沖器107中處理的任何剩余指令。如果不存在待在線緩沖器107中 處理的剩余指令,那么指令流600在框624處結(jié)束。如果存在待處理的剩余額外指令,那么 指令流600進(jìn)行到框604,其中檢測邏輯電路250處理下一指令。圖7顯示說明由CPU 102執(zhí)行的步驟的指令流700,所述CPU 102內(nèi)具有耦合到 圖4的上部管線151的解碼邏輯電路406中的檢測邏輯電路450。為了便于說明,對指令流 700中概述的指令的處理假定解碼邏輯電路406每處理器循環(huán)處理單一指令。所屬領(lǐng)域 的 技術(shù)人員了解,一些處理器可具有能夠每處理器循環(huán)處理多個(gè)指令的解碼邏輯電路。本文 描述的發(fā)明概念可應(yīng)用于任一類型的處理器。指令流700在開始框702處開始。指令流從框702進(jìn)行到框704,其中解碼邏輯電 路406在解碼級205中處理指令。指令流從框704繼續(xù)到?jīng)Q策框706。在決策框706處,檢 測邏輯電路450確定指令是否為過程返回。在此實(shí)例中,如果指令是除上托/分支序列外 的先前已知的過程返回中的任一者,那么檢測邏輯電路450確定指令為過程返回。如果檢 測邏輯電路450確定指令為過程返回,那么指令流700繼續(xù)到框708。如果檢測邏輯電路 450確定指令不是過程返回,那么指令流繼續(xù)到?jīng)Q策框710。在決策框710處,檢測邏輯電路450確定指令是否為不具有寄存器列表中的程序 計(jì)數(shù)器(PC)的上托指令。如果指令不是沒有其寄存器列表中的PC的上托指令,那么處理 流返回到框704。如果在決策框710處檢測邏輯電路450確定經(jīng)解碼指令是不含有其寄存 器列表中的PC的上托指令,那么指令流700繼續(xù)到框712。由于處理器100可能能夠從軟 件棧上托多個(gè)寄存器,所以在框712處檢測邏輯電路450保存經(jīng)上托寄存器列表。指令流 700從框712進(jìn)行到框714。在框714處,處理器100將下一指令加載到解碼級205中,且解碼邏輯電路406處 理所述指令。在在框714處加載指令之后,指令流700進(jìn)行到?jīng)Q策框716。在決策框716處, 檢測邏輯電路450確定指令是否為到所保存寄存器列表中的寄存器的分支。如果檢測邏輯 電路450確定指令是到所保存寄存器列表中的寄存器的分支,那么處理流繼續(xù)到框708。如 果檢測邏輯電路450確定指令不是到所保存的寄存器列表中的寄存器的分支指令,那么指 令流700繼續(xù)到?jīng)Q策框718。
在決策框718處,檢測邏輯電路450確定指令是否為分支指令。如果指令為分支 指令,那么指令流返回到框704,其中將下一指令加載到解碼級205中。如果在決策框718 處指令不是分支指令,那么指令流700進(jìn)行到?jīng)Q策框720。在決策框720處,檢測邏輯電路 450確定指令是否覆寫所保存的寄存器列表中的寄存器。如果指 令未覆寫所保存的寄存器列表中的寄存器,那么指令流700返回到框714, 其中將下一指令加載到解碼級205且由解碼邏輯電路406處理所述指令。如果在決策框 720處指令覆寫所保存的寄存器列表中的寄存器,那么指令流700繼續(xù)到框722,其中從所 保存的寄存器列表移除經(jīng)覆寫的寄存器。指令流700從框722返回到框714,其中將下一指 令加載到解碼級205中且由解碼邏輯電路406處理所述指令。結(jié)合本文所揭示的實(shí)施例而描述的各種說明性邏輯塊、模塊、電路、元件和/或 組件可用通用處理器、數(shù)字信號處理器(DSP)、專用集成電路(ASIC)、現(xiàn)場可編程門陣列 (FPGA)或其它可編程邏輯組件、離散門或晶體管邏輯、離散硬件組件或其經(jīng)設(shè)計(jì)以執(zhí)行本 文所描述的功能的任何組合來實(shí)施或執(zhí)行。通用處理器可以是微處理器,但在替代實(shí)施例 中,處理器可以是任何常規(guī)處理器、控制器、微控制器或狀態(tài)機(jī)。處理器也可實(shí)施為計(jì)算組 件的組合,例如DSP與微處理器的組合、多個(gè)微處理器、結(jié)合DSP核心的一個(gè)或一個(gè)以上微 處理器,或任何其它此配置。盡管本文已說明和描述特定實(shí)施例,但所屬領(lǐng)域的一般技術(shù)人員了解,預(yù)計(jì)實(shí)現(xiàn) 相同目的的任何布置可替代所展示的特定實(shí)施例,且本發(fā)明在其它環(huán)境中具有其它應(yīng)用。 本申請案希望涵蓋本發(fā)明的任何修改或變化。所附權(quán)利要求書決不希望將本發(fā)明的范圍限 于本文描述的特定實(shí)施例。
權(quán)利要求
一種用于當(dāng)從管線處理器中的過程返回時(shí)從鏈接棧檢索返回地址的方法,其包括識(shí)別可操作以從軟件棧檢索返回地址的檢索指令;識(shí)別可操作以分支到所述返回地址的分支指令;響應(yīng)于所述指令和所述分支指令兩者被識(shí)別而從所述鏈接棧檢索所述返回地址;以及使用所述返回地址來提取后續(xù)指令。
2.根據(jù)權(quán)利要求1所述的方法,其中所述檢索指令是上托指令。
3.根據(jù)權(quán)利要求1所述的方法,其中所述檢索指令是加載指令。
4.根據(jù)權(quán)利要求1所述的方法,其中所述分支指令是BX指令。
5.根據(jù)權(quán)利要求1所述的方法,其中所述分支指令是MOV指令。
6.根據(jù)權(quán)利要求1所述的方法,其中所述識(shí)別所述檢索指令進(jìn)一步包括識(shí)別含有所述 返回地址的寄存器。
7.根據(jù)權(quán)利要求1所述的方法,其中識(shí)別所述檢索指令進(jìn)一步包括維持寄存器列表, 其中所述寄存器列表具有多個(gè)寄存器,其中所述多個(gè)寄存器中的至少一個(gè)寄存器含有所述 返回地址。
8.根據(jù)權(quán)利要求7所述的方法,其中維持所述寄存器列表包括在所述多個(gè)寄存器中的 任一者由后續(xù)指令覆寫的情況下從所述寄存器列表移除寄存器。
9.根據(jù)權(quán)利要求1所述的方法,其中由檢測邏輯電路執(zhí)行識(shí)別所述分支指令。
10.根據(jù)權(quán)利要求9所述的方法,其中預(yù)解碼邏輯電路中包含所述檢測邏輯電路。
11.根據(jù)權(quán)利要求9所述的方法,其中解碼邏輯電路中包含所述檢測邏輯電路。
12.根據(jù)權(quán)利要求1所述的方法,其中識(shí)別所述分支指令進(jìn)一步包括在指令高速緩沖 存儲(chǔ)器中以旗標(biāo)標(biāo)記所述分支指令。
13.一種管線處理器,其包括線緩沖器,所述線緩沖器耦合到指令高速緩沖存儲(chǔ)器,提取邏輯電路,其耦合到所述指令高速緩沖存儲(chǔ)器,所述提取邏輯電路具有存儲(chǔ)預(yù)測 性返回地址的鏈接棧,其中指令從所述線緩沖器加載到所述指令高速緩沖存儲(chǔ)器中,所述 提取邏輯電路從所述指令高速緩沖存儲(chǔ)器檢索指令,預(yù)解碼邏輯電路,其與所述線緩沖器通信,其中所述預(yù)解碼邏輯電路進(jìn)一步包括用于 識(shí)別過程返回序列的檢測邏輯電路,所述過程返回序列包括可操作以從軟件棧檢索返回地 址的檢索指令和分支到所述檢索的返回地址的分支指令,所述管線處理器響應(yīng)于對所述過 程返回序列的所述識(shí)別而從所述鏈接棧檢索所述預(yù)測的返回地址。
14.根據(jù)權(quán)利要求13所述的管線處理器,其中當(dāng)所述分支指令從所述線緩沖器加載到 所述指令高速緩沖存儲(chǔ)器中時(shí),所述檢測邏輯電路以旗標(biāo)標(biāo)記所述過程返回序列的所述分 支指令。
15.根據(jù)權(quán)利要求14所述的管線處理器,其中所述提取邏輯電路根據(jù)所述以旗標(biāo)標(biāo)記 的信息識(shí)別所述過程返回序列。
16.根據(jù)權(quán)利要求15所述的管線處理器,其中所述提取邏輯電路內(nèi)的返回選擇器邏輯 電路根據(jù)所述以旗標(biāo)標(biāo)記的信息識(shí)別所述返回序列。
17.根據(jù)權(quán)利要求13所述的管線處理器,其中所述檢索指令是上托指令。
18.根據(jù)權(quán)利要求13所述的管線處理器,其中所述檢索指令是加載指令。
19.根據(jù)權(quán)利要求13所述的管線處理器,其中所述分支指令是BX指令。
20.一種管線處理器,其包括提取邏輯電路,其具有存儲(chǔ)所預(yù)測的返回地址的鏈接棧,所述提取邏輯電路從指令高 速緩沖存儲(chǔ)器提取指令,解碼邏輯電路,所述解碼邏輯電路耦合到所述提取邏輯電路,其中所述提取的指令由 所述解碼邏輯電路解碼,所述解碼邏輯電路進(jìn)一步包括檢測邏輯電路,其中所述檢測邏輯 電路識(shí)別過程返回序列,所述過程返回序列包括可操作以從軟件棧檢索地址的檢索指令和 可操作以分支到所述檢索的地址的分支指令,所述管線處理器響應(yīng)于對所述過程返回序列 的所述識(shí)別而從所述鏈接棧檢索所述預(yù)測的返回地址。
21.根據(jù)權(quán)利要求20所述的管線處理器,其中所述提取邏輯電路使用所述檢索的地址 來提取指令。
22.根據(jù)權(quán)利要求20所述的管線處理器,其中所述檢索指令是上托指令。
23.根據(jù)權(quán)利要求20所述的管線處理器,其中所述檢索指令是加載指令。
24.根據(jù)權(quán)利要求20所述的管線處理器,其中所述分支指令分支到所述檢索指令所識(shí) 別的地址。
25.根據(jù)權(quán)利要求20所述的管線處理器,其中所述分支指令是MOV指令。
全文摘要
本發(fā)明揭示一種用于當(dāng)從管線處理器中的過程返回時(shí)從鏈接棧檢索返回地址的方法。所述方法識(shí)別可操作以從軟件棧檢索返回地址的檢索指令。所述方法進(jìn)一步識(shí)別可操作以分支到所述返回地址的分支指令。所述方法響應(yīng)于所述指令和所述分支指令兩者被識(shí)別而從所述鏈接棧檢索所述返回地址,并使用所述返回地址來提取指令。
文檔編號G06F9/32GK101884025SQ200880118806
公開日2010年11月10日 申請日期2008年10月31日 優(yōu)先權(quán)日2007年11月2日
發(fā)明者詹姆斯·諾里斯·迪芬德爾費(fèi)爾, 邁克爾·威廉·莫羅 申請人:高通股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
罗田县| 临江市| 巴南区| 昌都县| 西安市| 曲水县| 兰州市| 罗城| 东辽县| 铅山县| 日土县| 寻乌县| 额济纳旗| 南京市| 洛宁县| 平定县| 梁山县| 会同县| 洛浦县| 缙云县| 永嘉县| 张家港市| 巍山| 宁晋县| 和硕县| 阳江市| 溧水县| 西贡区| 宁陵县| 韩城市| 黎川县| 邢台县| 荣成市| 甘洛县| 婺源县| 新绛县| 新津县| 洛浦县| 赣榆县| 威信县| 信宜市|