二進制轉譯堆棧操作加速處理方法及其處理器的制造方法
【專利摘要】一種二進制轉譯堆棧操作加速處理方法,包括一條堆棧數(shù)據(jù)加載指令和一條堆棧數(shù)據(jù)存儲指令,這兩條指令基于堆棧邊界通用寄存器、堆棧指針通用寄存器、堆棧越界轉移地址通用寄存器、源通用寄存器集合和目標通用寄存器集合完成對二進制轉譯堆棧數(shù)據(jù)的讀寫、堆棧指針的改寫、堆棧越界的檢查和堆棧越界的處理,并根據(jù)堆棧訪問是否越界完成對處理器狀態(tài)的更新。以及提供一種二進制轉譯堆棧操作加速處理器。本發(fā)明在保證處理器硬件資源不變的情況下,有力提升二進制轉譯系統(tǒng)性能和代碼密度。
【專利說明】二進制轉譯堆棧操作加速處理方法及其處理器
【技術領域】
[0001]本發(fā)明涉及Java虛擬機領域,尤其是一種二進制轉譯堆棧操作加速處理方法及其處理器。
【背景技術】
[0002]二進制轉譯系統(tǒng)(如Java虛擬機)一般通過堆棧傳遞程序變量,每次變量傳遞包括寫堆棧和讀堆棧兩個過程,寫堆棧用于將需要傳遞的變量數(shù)據(jù)存入堆棧指針指向的堆棧地址處并調整堆棧指針,讀堆棧用于從堆棧中獲取所需數(shù)據(jù)并調整堆棧指針。基于系統(tǒng)的安全性考慮,每次寫堆棧和讀堆棧之前,都需根據(jù)傳遞的數(shù)據(jù)量和當前堆棧指針對堆棧越界行為進行檢測和處理。這些堆棧操作往往需要多條處理器指令才能完成,頻繁的變量傳遞帶來的大量堆棧操作是二進制轉譯技術的性能瓶頸之一。
[0003]如何加速二進制轉譯堆棧操作以快速進行變量傳遞是二進制轉譯系統(tǒng)設計人員必須面對的問題。針對堆棧數(shù)據(jù)讀寫以及堆棧指針調整,很多動態(tài)轉譯系統(tǒng)通過引入把連續(xù)內存區(qū)域數(shù)據(jù)加載到多個通用寄存器指令和把多個通用寄存器數(shù)據(jù)存儲到連續(xù)內存區(qū)域的指令以加速對二進制轉譯堆棧數(shù)據(jù)的讀寫操作,還有一些動態(tài)轉譯系統(tǒng)向以上所述兩條指令加入堆棧指針調整功能以進一步加速對二進制轉譯堆棧的操作;針對堆棧邊界檢查,大多數(shù)二進制轉譯系統(tǒng)通過使用比較并跳轉指令完成該檢查操作,也有部分二進制轉譯系統(tǒng)通過弓I入專有硬件模塊完成該檢查操作。這些方法由于通過軟件串行的處理堆棧操作,因此獲得的加速效果有限。雖然采用專有的硬件越界檢測模塊可以獲得較好的二進制轉譯系統(tǒng)性能,但是該方法需要增加一定的處理器硬件資源,成本較高。
【發(fā)明內容】
[0004]為了克服現(xiàn)有的二進制轉譯系統(tǒng)在處理堆棧操作時需要多條處理器指令影響二進制轉譯系統(tǒng)性能和代碼密度這一問題,本發(fā)明提供一種二進制轉譯堆棧操作加速處理方法及其處理器,提出了一種二進制轉譯堆棧操作加速指令對,只需一條指令即可完成對二進制轉譯堆棧數(shù)據(jù)的讀或寫、堆棧指針的調整以及堆棧邊界的檢查和越界處理,在保證處理器硬件資源不變的情況下,有力提升二進制轉譯系統(tǒng)性能和代碼密度。
[0005]本發(fā)明解決其技術問題所采用的技術方案是:
[0006]一種二進制轉譯堆棧操作加速處理方法,該加速處理方法包括一條堆棧數(shù)據(jù)加載指令和一條堆棧數(shù)據(jù)存儲指令;
[0007]該堆棧數(shù)據(jù)加載指令的處理過程為:根據(jù)堆棧邊界通用寄存器和堆棧指針通用寄存器完成對二進制轉譯堆棧邊界的檢測,當檢測到堆棧訪問未越界時根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,然后將該地址指向堆棧處的數(shù)據(jù)按序加載到目標通用寄存器集合,并根據(jù)加載的數(shù)據(jù)寬度調整堆棧指針通用寄存器;當檢測到堆棧訪問越界時,將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行;
[0008]該堆棧數(shù)據(jù)存儲指令的處理過程為:根據(jù)堆棧邊界通用寄存器和堆棧指針通用寄存器完成對二進制轉譯堆棧邊界的檢測,當檢測到堆棧訪問未越界時根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,然后將源通用寄存器集合的數(shù)據(jù)按序存儲到該地址指向堆棧處,并根據(jù)存儲的數(shù)據(jù)寬度調整堆棧指針通用寄存器;當檢測到堆棧訪問越界時,將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行。
[0009]進一步,所述堆棧邊界通用寄存器包括堆棧上邊界通用寄存器和堆棧下邊界通用寄存器,該堆棧上邊界通用寄存器、堆棧下邊界通用寄存器、堆棧指針通用寄存器以及堆棧越界轉移地址通用寄存器對應的寄存器號或者在指令編碼中指定,或者隱式地固定為特定值。
[0010]再進一步,所述二進制轉譯堆棧操作包括堆棧讀操作、堆棧寫操作、堆棧指針調整操作、堆棧越界檢測操作和堆棧越界處理操作;
[0011]該堆棧讀操作指:根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,當檢測到堆棧訪問未越界時,將從該堆棧訪問地址處獲得的堆棧數(shù)據(jù)按序存儲到目標通用寄存器集合中;
[0012]該堆棧寫操作指:根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,當檢測到堆棧訪問未越界時,將源通用寄存器集合中的數(shù)據(jù)按序存儲到該堆棧訪問地址指向的堆棧中;
[0013]該堆棧指針調整操作指:當檢測到堆棧訪問未越界時,給堆棧指針通用寄存器加上或者減去從堆棧加載或者向堆棧存儲的總數(shù)據(jù)寬度,可采用兩種不同的堆棧指針調整策略:
[0014]堆棧指針調整策略一:堆棧數(shù)據(jù)存儲指令用堆棧指針通用寄存器加上向堆棧存儲的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器,堆棧數(shù)據(jù)加載指令用堆棧指針通用寄存器減去從堆棧加載的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器;
[0015]堆棧指針調整策略二:堆棧數(shù)據(jù)存儲指令用堆棧指針通用寄存器減去向堆棧存儲的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器,堆棧數(shù)據(jù)加載指令用堆棧指針通用寄存器加上從堆棧加載的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器;
[0016]該堆棧越界檢測操作指:判斷堆棧訪問地址是否處在堆棧上邊界通用寄存器和堆棧下邊界通用寄存器所指定的地址范圍內,當采用上述堆棧指針調整策略一時,堆棧數(shù)據(jù)存儲指令可僅對堆棧上邊界越界行為進行檢查,堆棧數(shù)據(jù)加載指令可僅對堆棧下邊界越界行為進行檢查;當采用上述堆棧指針調整策略二時,堆棧數(shù)據(jù)存儲指令可僅對堆棧下邊界越界行為進行檢查,堆棧數(shù)據(jù)加載指令可僅對堆棧上邊界越界行為進行檢查;
[0017]該堆棧越界處理操作指:將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行。
[0018]更進一步,所述數(shù)據(jù)寬度指從堆棧中加載或者向堆棧存入數(shù)據(jù)的總字節(jié)數(shù),由堆棧數(shù)據(jù)加載指令指定的目標通用寄存器集合中通用寄存器數(shù)目或者堆棧數(shù)據(jù)存儲指令指定的源通用寄存器集合中通用寄存器數(shù)目乘以每個通用寄存器從堆棧加載或者向堆棧存儲的元數(shù)據(jù)寬度獲得,該元數(shù)據(jù)寬度由指令編碼中的特定位指定。
[0019]所述指令寬度指堆棧數(shù)據(jù)加載指令或堆棧數(shù)據(jù)存儲指令對應指令碼的字節(jié)數(shù)。
[0020]一種二進制轉譯堆棧操作加速處理器,所述處理器包括:
[0021]二進制轉譯堆棧操作加速指令對譯碼單元,根據(jù)指令碼獲知當前處理的指令是否為堆棧數(shù)據(jù)加載指令或者堆棧數(shù)據(jù)存儲指令,并獲得元數(shù)據(jù)寬度以及堆棧上邊界通用寄存器、堆棧下邊界通用寄存器、堆棧指針通用寄存器、堆棧越界轉移地址通用寄存器、目標通用寄存器集合和源通用寄存器集合對應寄存器號;
[0022]二進制轉譯堆棧操作控制單元,連接于二進制轉譯堆棧操作加速指令對譯碼單元的輸出端和二進制轉譯堆棧操作數(shù)據(jù)處理單元的輸出端,用以接收來自該二進制轉譯堆棧操作加速指令對譯碼單元的譯碼信息和來自該二進制轉譯堆棧操作數(shù)據(jù)處理單元的堆棧越界檢查信息,根據(jù)堆棧數(shù)據(jù)加載指令和堆棧數(shù)據(jù)存儲指令,以及判斷堆棧檢查是否越界后,進行加載、存儲和越界控制;
[0023]二進制轉譯堆棧操作數(shù)據(jù)處理單元,連接于通用寄存器堆的輸出端和二進制轉譯堆棧操作控制單元的輸出端,根據(jù)堆棧指針通用寄存器和堆棧邊界通用寄存器完成二進制轉譯堆棧訪問是否越界的檢測,同時接收來自該二進制轉譯堆棧操作控制單元的控制信息,利用這些控制信息:根據(jù)堆棧指針通用寄存器和已訪問的堆棧數(shù)據(jù)寬度完成二進制轉譯堆棧訪問地址的計算,根據(jù)堆棧指針通用寄存器和總訪問的堆棧數(shù)據(jù)寬度完成堆棧指針通用寄存器更新值的計算,根據(jù)鏈接寄存器和指令寬度完成鏈接寄存器更新值的計算,根據(jù)堆棧越界轉移地址通用寄存器完成堆棧越界轉移地址的計算,并準備向堆棧存儲的數(shù)據(jù)或者接收從堆棧加載的數(shù)據(jù)以完成堆棧的讀寫;
[0024]通用寄存器堆,連接于二進制轉譯堆棧操作控制單元的輸出端和二進制轉譯堆棧操作數(shù)據(jù)處理單元的輸出端,用于提供二進制轉譯堆棧操作所需數(shù)據(jù),并根據(jù)二進制轉譯堆棧操作控制單元提供的通用寄存器號和二進制轉譯堆棧操作數(shù)據(jù)處理單元提供的數(shù)據(jù)完成二進制轉譯堆棧操作相關寄存器的回寫操作。
[0025]進一步,所述二進制轉譯堆棧操作控制單元中,當譯碼信息指示當前指令為堆棧數(shù)據(jù)加載指令且堆棧檢查未越界時,該二進制轉譯堆棧操作控制單元生成堆棧指針通用寄存器、目標通用寄存器集合的回寫控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元計算堆棧訪問地址以訪問堆棧獲得目標通用寄存器集合回寫數(shù)據(jù)并完成堆棧指針通用寄存器回寫值的計算。
[0026]所述二進制轉譯堆棧操作控制單元中,當譯碼信息指示當前指令為堆棧數(shù)據(jù)存儲指令且堆棧檢查未越界時,該二進制轉譯堆棧操作控制單元生成堆棧指針通用寄存器和堆棧的回寫控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元準備堆?;貙憯?shù)據(jù)和回寫地址以回寫堆棧并完成堆棧指針通用寄存器回寫值的計算。
[0027]所述二進制轉譯堆棧操作控制單元中,當譯碼信息指示當前指令為二進制轉譯堆棧操作加速指令對中指令且堆棧檢查越界時,該二進制轉譯堆棧操作控制單元生成鏈接寄存器的回寫控制信息以及堆棧越界轉移控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元完成鏈接寄存器回寫值的計算和堆棧越界轉移地址的計算。
[0028]本裝置的技術構思為:二進制轉譯系統(tǒng)堆棧操作包括堆棧數(shù)據(jù)讀寫、堆棧指針調整、堆棧邊界檢查和堆棧越界處理等,目前大多數(shù)二進制轉譯系統(tǒng)廣泛使用連續(xù)內存區(qū)域數(shù)據(jù)加載和存儲指令對以加速堆棧數(shù)據(jù)讀寫和堆棧指針調整操作,使用比較并跳轉指令或者專有的硬件模塊加速堆棧邊界檢查和處理操作。這些方法或者未充分發(fā)掘堆棧操作的并行性,或者為處理器增加了較多的額外硬件資源和成本。本發(fā)明為微處理器引入一種二進制轉譯堆棧操作加速指令對,只需一條指令即可并行的完成堆棧數(shù)據(jù)讀或寫、堆棧指針維護、堆棧越界檢查和越界處理等二進制轉譯堆棧操作,可在不影響處理器硬件成本的前提下有效提高二進制轉譯系統(tǒng)性能。該指令對包括堆棧數(shù)據(jù)加載指令和堆棧數(shù)據(jù)存儲指令,其中堆棧數(shù)據(jù)加載指令在完成讀堆棧的同時隱式地進行堆棧越界檢查和處理,堆棧數(shù)據(jù)存儲指令在完成寫堆棧的同時隱式地進行堆棧越界檢查和處理。本發(fā)明完成堆棧越界檢查和處理時,將堆棧上邊界寄存器、堆棧下邊界寄存器以及堆棧越界轉移地址寄存器等固定為處理器通用寄存器,無需為處理器增加額外的寄存器資源,同時還增強了本方法的靈活性和使用范圍。
[0029]本發(fā)明的有益效果主要表現(xiàn)在:只需一條微處理器指令即可完成二進制轉譯堆棧相關的操作,有力提高了二進制轉譯系統(tǒng)的性能;同時將堆棧邊界檢查和越界處理所需信息存儲在通用寄存器中,增強了本方法的靈活性和使用范圍。
【專利附圖】
【附圖說明】
[0030]圖1為堆棧數(shù)據(jù)加載指令流程圖。
[0031]圖2為堆棧數(shù)據(jù)存儲指令流程圖。
[0032]圖3為二進制轉譯堆棧操作堆棧上邊界通用寄存器、堆棧下邊界通用寄存器以及堆棧越界轉移地址通用寄存器指定方案的示意圖,其中(a)為隱式制定所有堆棧相關寄存器,(b)為顯式指定堆棧指針通用寄存器,(C)為顯式指定堆棧指針通用寄存器和堆棧邊界通用寄存器,(d)為顯式指定堆棧指針通用寄存器和堆棧越界轉移地址通用寄存器,(e)為顯式堆棧越界轉移地址通用寄存器和堆棧邊界通用寄存器,(f)為顯式指定所有堆棧相關寄存器。
[0033]圖4為引入二進制轉譯堆棧操作加速指令對的微處理器結構圖。
[0034]圖5為引入二進制轉譯堆棧操作加速指令對的微處理器中每個單元結構圖,其中,(a)為通用寄存器堆,(b)為堆棧數(shù)據(jù)加載和存儲指令譯碼單元,(C)為數(shù)據(jù)處理單元堆棧訪問地址產生模塊,(d)為數(shù)據(jù)處理單元堆棧讀寫模塊,(e)為數(shù)據(jù)處理單元堆棧越界檢查模塊,(f)為數(shù)據(jù)處理單元堆棧越界轉移目標地址計算模塊,(g)為二進制轉譯堆棧操作控制單元。
【具體實施方式】
[0035]下面結合附圖對本發(fā)明作進一步描述。
[0036]實施例1
[0037]參照圖1?圖5,一種二進制轉譯堆棧操作加速處理方法,該加速處理方法包括一條堆棧數(shù)據(jù)加載指令和一條堆棧數(shù)據(jù)存儲指令;
[0038]該堆棧數(shù)據(jù)加載指令的處理過程為:根據(jù)堆棧邊界通用寄存器和堆棧指針通用寄存器完成對二進制轉譯堆棧邊界的檢測,當檢測到堆棧訪問未越界時根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,然后將該地址指向堆棧處的數(shù)據(jù)按序加載到目標通用寄存器集合,并根據(jù)加載的數(shù)據(jù)寬度調整堆棧指針通用寄存器;當檢測到堆棧訪問越界時,將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行;
[0039]該堆棧數(shù)據(jù)存儲指令的處理過程為:根據(jù)堆棧邊界通用寄存器和堆棧指針通用寄存器完成對二進制轉譯堆棧邊界的檢測,當檢測到堆棧訪問未越界時根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,然后將源通用寄存器集合的數(shù)據(jù)按序存儲到該地址指向堆棧處,并根據(jù)存儲的數(shù)據(jù)寬度調整堆棧指針通用寄存器;當檢測到堆棧訪問越界時,將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行。
[0040]本實施例中,堆棧數(shù)據(jù)加載指令,基于堆棧邊界通用寄存器、堆棧指針通用寄存器、堆棧越界轉移地址通用寄存器和目標通用寄存器集合完成對二進制轉譯堆棧的堆棧讀操作、堆棧指針調整操作、堆棧越界檢測操作和堆棧越界處理操作:根據(jù)堆棧邊界通用寄存器和堆棧指針通用寄存器完成對二進制轉譯堆棧邊界的檢測,當檢測到堆棧訪問未越界時將堆棧指針通用寄存器指向堆棧處的數(shù)據(jù)加載到目標通用寄存器集合,并根據(jù)加載的數(shù)據(jù)寬度調整堆棧指針通用寄存器;當檢測到堆棧訪問越界時,將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行。
[0041 ] 堆棧數(shù)據(jù)存儲指令,基于堆棧邊界通用寄存器、堆棧指針通用寄存器、堆棧越界轉移地址通用寄存器和源通用寄存器集合完成對二進制轉譯堆棧的堆棧寫操作、堆棧指針調整操作、堆棧越界檢測操作和堆棧越界處理操作:根據(jù)堆棧邊界通用寄存器和堆棧指針通用寄存器完成對二進制轉譯堆棧邊界的檢測,當檢測到堆棧訪問未越界時將源通用寄存器集合的數(shù)據(jù)存儲到堆棧指針通用寄存器指向堆棧處,并根據(jù)存儲的數(shù)據(jù)寬度調整堆棧指針通用寄存器;當檢測到堆棧訪問越界時,將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行。
[0042]進一步,所述堆棧邊界通用寄存器包括堆棧上邊界通用寄存器和堆棧下邊界通用寄存器,該堆棧上邊界通用寄存器、堆棧下邊界通用寄存器、堆棧指針通用寄存器以及堆棧越界轉移地址通用寄存器對應的寄存器號或者在指令編碼中指定,或者隱式地固定為特定值。
[0043]再進一步,所述二進制轉譯堆棧操作包括堆棧讀操作、堆棧寫操作、堆棧指針調整操作、堆棧越界檢測操作和堆棧越界處理操作;
[0044]該堆棧讀操作指:根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,當檢測到堆棧訪問未越界時,將從該堆棧訪問地址處獲得的堆棧數(shù)據(jù)按序存儲到目標通用寄存器集合中;
[0045]該堆棧寫操作指:根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,當檢測到堆棧訪問未越界時,將源通用寄存器集合中的數(shù)據(jù)按序存儲到該堆棧訪問地址指向的堆棧中;
[0046]該堆棧指針調整操作指:當檢測到堆棧訪問未越界時,給堆棧指針通用寄存器加上或者減去從堆棧加載或者向堆棧存儲的總數(shù)據(jù)寬度,可采用兩種不同的堆棧指針調整策略:
[0047]堆棧指針調整策略一:堆棧數(shù)據(jù)存儲指令用堆棧指針通用寄存器加上向堆棧存儲的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器,堆棧數(shù)據(jù)加載指令用堆棧指針通用寄存器減去從堆棧加載的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器;
[0048]堆棧指針調整策略二:堆棧數(shù)據(jù)存儲指令用堆棧指針通用寄存器減去向堆棧存儲的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器,堆棧數(shù)據(jù)加載指令用堆棧指針通用寄存器加上從堆棧加載的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器;
[0049]該堆棧越界檢測操作指:判斷堆棧訪問地址是否處在堆棧上邊界通用寄存器和堆棧下邊界通用寄存器所指定的地址范圍內,當采用上述堆棧指針調整策略一時,堆棧數(shù)據(jù)存儲指令可僅對堆棧上邊界越界行為進行檢查,堆棧數(shù)據(jù)加載指令可僅對堆棧下邊界越界行為進行檢查;當采用上述堆棧指針調整策略二時,堆棧數(shù)據(jù)存儲指令可僅對堆棧下邊界越界行為進行檢查,堆棧數(shù)據(jù)加載指令可僅對堆棧上邊界越界行為進行檢查;
[0050]該堆棧越界處理操作指:將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行。
[0051]更進一步,所述數(shù)據(jù)寬度指從堆棧中加載或者向堆棧存入數(shù)據(jù)的總字節(jié)數(shù),由堆棧數(shù)據(jù)加載指令指定的目標通用寄存器集合中通用寄存器數(shù)目或者堆棧數(shù)據(jù)存儲指令指定的源通用寄存器集合中通用寄存器數(shù)目乘以每個通用寄存器從堆棧加載或者向堆棧存儲的元數(shù)據(jù)寬度獲得,該元數(shù)據(jù)寬度由指令編碼中的特定位指定。
[0052]所述指令寬度指堆棧數(shù)據(jù)加載指令或堆棧數(shù)據(jù)存儲指令對應指令碼的字節(jié)數(shù)。
[0053]參照圖3所示,堆棧上邊界通用寄存器、堆棧下邊界通用寄存器以及堆棧越界轉移地址通用寄存器的設定有多種方案,處理器設計人員在處理器中具體實現(xiàn)該二進制轉譯堆棧操作加速指令對時,即可以在指令編碼中顯式的指定這些寄存器,也可以隱式地將特定的通用寄存器指定為這些寄存器。
[0054]實施例2
[0055]參照圖4和圖5,一種二進制轉譯堆棧操作加速處理器,包括二進制轉譯堆棧操作加速指令對譯碼單元、二進制轉譯堆棧操作控制單元、二進制轉譯堆棧操作數(shù)據(jù)處理單元和通用寄存器堆:
[0056]二進制轉譯堆棧操作加速指令對譯碼單元,根據(jù)指令碼獲知當前處理的指令是否為堆棧數(shù)據(jù)加載指令或者堆棧數(shù)據(jù)存儲指令,并獲得元數(shù)據(jù)寬度以及堆棧上邊界通用寄存器、堆棧下邊界通用寄存器、堆棧指針通用寄存器、堆棧越界轉移地址通用寄存器、目標通用寄存器集合和源通用寄存器集合對應寄存器號;
[0057]二進制轉譯堆棧操作控制單元,連接于二進制轉譯堆棧操作加速指令對譯碼單元的輸出端和二進制轉譯堆棧操作數(shù)據(jù)處理單元的輸出端,用以接收來自該二進制轉譯堆棧操作加速指令對譯碼單元的譯碼信息和來自該二進制轉譯堆棧操作數(shù)據(jù)處理單元的堆棧越界檢查信息,根據(jù)這些信息分別進行如下處理:
[0058](I)當譯碼信息指示當前指令為堆棧數(shù)據(jù)加載指令且堆棧檢查未越界時,該二進制轉譯堆棧操作控制單元生成堆棧指針通用寄存器、目標通用寄存器集合的回寫控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元計算堆棧訪問地址以訪問堆棧獲得目標通用寄存器集合回寫數(shù)據(jù)并完成堆棧指針通用寄存器回寫值的計算;
[0059](2)當譯碼信息指示當前指令為堆棧數(shù)據(jù)存儲指令且堆棧檢查未越界時,該二進制轉譯堆棧操作控制單元生成堆棧指針通用寄存器和堆棧的回寫控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元準備堆?;貙憯?shù)據(jù)和回寫地址以回寫堆棧并完成堆棧指針通用寄存器回寫值的計算;
[0060](3)當譯碼信息指示當前指令為二進制轉譯堆棧操作加速指令對且堆棧檢查越界時,該二進制轉譯堆棧操作控制單元生成鏈接寄存器的回寫控制信息以及堆棧越界轉移控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元完成鏈接寄存器回寫值的計算和堆棧越界轉移地址的計算;
[0061]二進制轉譯堆棧操作數(shù)據(jù)處理單元,連接于通用寄存器堆的輸出端和二進制轉譯堆棧操作控制單元的輸出端,根據(jù)堆棧指針通用寄存器和堆棧邊界通用寄存器完成二進制轉譯堆棧訪問是否越界的檢測,同時接收來自該二進制轉譯堆棧操作控制單元的控制信息,利用這些控制信息:根據(jù)堆棧指針通用寄存器和已訪問的堆棧數(shù)據(jù)寬度完成二進制轉譯堆棧訪問地址的計算,根據(jù)堆棧指針通用寄存器和總訪問的堆棧數(shù)據(jù)寬度完成堆棧指針通用寄存器更新值的計算,根據(jù)鏈接寄存器和指令寬度完成鏈接寄存器更新值的計算,根據(jù)堆棧越界轉移地址通用寄存器完成堆棧越界轉移地址的計算,并準備向堆棧存儲的數(shù)據(jù)或者接收從堆棧加載的數(shù)據(jù)以完成堆棧的讀寫;
[0062]通用寄存器堆,連接于二進制轉譯堆棧操作控制單元的輸出端和二進制轉譯堆棧操作數(shù)據(jù)處理單元的輸出端,用于提供二進制轉譯堆棧操作所需數(shù)據(jù),并根據(jù)二進制轉譯堆棧操作控制單元提供的通用寄存器號和二進制轉譯堆棧操作數(shù)據(jù)處理單元提供的數(shù)據(jù)完成二進制轉譯堆棧操作相關寄存器的回寫操作。
【權利要求】
1.一種二進制轉譯堆棧操作加速處理方法,其特征在于:該加速處理方法包括一條堆棧數(shù)據(jù)加載指令和一條堆棧數(shù)據(jù)存儲指令; 該堆棧數(shù)據(jù)加載指令的處理過程為:根據(jù)堆棧邊界通用寄存器和堆棧指針通用寄存器完成對二進制轉譯堆棧邊界的檢測,當檢測到堆棧訪問未越界時根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,然后將該地址指向堆棧處的數(shù)據(jù)按序加載到目標通用寄存器集合,并根據(jù)加載的數(shù)據(jù)寬度調整堆棧指針通用寄存器;當檢測到堆棧訪問越界時,將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行; 該堆棧數(shù)據(jù)存儲指令的處理過程為:根據(jù)堆棧邊界通用寄存器和堆棧指針通用寄存器完成對二進制轉譯堆棧邊界的檢測,當檢測到堆棧訪問未越界時根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,然后將源通用寄存器集合的數(shù)據(jù)按序存儲到該地址指向堆棧處,并根據(jù)存儲的數(shù)據(jù)寬度調整堆棧指針通用寄存器;當檢測到堆棧訪問越界時,將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行。
2.如權利要求1所述的一種二進制轉譯堆棧操作加速處理方法,其特征在于:所述堆棧邊界通用寄存器包括堆棧上邊界通用寄存器和堆棧下邊界通用寄存器,該堆棧上邊界通用寄存器、堆棧下邊界通用寄存器、堆棧指針通用寄存器以及堆棧越界轉移地址通用寄存器對應的寄存器號或者在指令編碼中指定,或者隱式地固定為特定值。
3.如權利要求1或2所述的一種二進制轉譯堆棧操作加速處理方法,其特征在于:所述二進制轉譯堆棧操作包括堆棧讀操作、堆棧寫操作、堆棧指針調整操作、堆棧越界檢測操作和堆棧越界處理操作; 該堆棧讀操作指:根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,當檢測到堆棧訪問未越界時,將從該堆棧訪問地址處獲得的堆棧數(shù)據(jù)按序存儲到目標通用寄存器集合中;該堆棧寫操作指:根據(jù)堆棧指針通用寄存器計算獲得堆棧訪問地址,當檢測到堆棧訪問未越界時,將源通用寄存器集合中的數(shù)據(jù)按序存儲到該堆棧訪問地址指向的堆棧中;該堆棧指針調整操作指:當檢測到堆棧訪問未越界時,給堆棧指針通用寄存器加上或者減去從堆棧加載或者向堆棧存儲的總數(shù)據(jù)寬度,可采用兩種不同的堆棧指針調整策略:堆棧指針調整策略一:堆棧數(shù)據(jù)存儲指令用堆棧指針通用寄存器加上向堆棧存儲的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器,堆棧數(shù)據(jù)加載指令用堆棧指針通用寄存器減去從堆棧加載的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器; 堆棧指針調整策略二:堆棧數(shù)據(jù)存儲指令用堆棧指針通用寄存器減去向堆棧存儲的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器,堆棧數(shù)據(jù)加載指令用堆棧指針通用寄存器加上從堆棧加載的總數(shù)據(jù)寬度的結果來更新堆棧指針通用寄存器; 該堆棧越界檢測操作指:判斷堆棧訪問地址是否處在堆棧上邊界通用寄存器和堆棧下邊界通用寄存器所指定的地址范圍內,當采用上述堆棧指針調整策略一時,堆棧數(shù)據(jù)存儲指令可僅對堆棧上邊界越界行為進行檢查,堆棧數(shù)據(jù)加載指令可僅對堆棧下邊界越界行為進行檢查;當采用上述堆棧指針調整策略二時,堆棧數(shù)據(jù)存儲指令可僅對堆棧下邊界越界行為進行檢查,堆棧數(shù)據(jù)加載指令可僅對堆棧上邊界越界行為進行檢查; 該堆棧越界處理操作指:將堆棧數(shù)據(jù)加載指令的程序計數(shù)器加上該指令寬度的結果存儲到鏈接寄存器,然后跳轉到通過堆棧越界轉移地址通用寄存器運算獲得的地址處執(zhí)行。
4.如權利要求1或2所述的一種二進制轉譯堆棧操作加速處理方法,其特征在于:所述數(shù)據(jù)寬度指從堆棧中加載或者向堆棧存入數(shù)據(jù)的總字節(jié)數(shù),由堆棧數(shù)據(jù)加載指令指定的目標通用寄存器集合中通用寄存器數(shù)目或者堆棧數(shù)據(jù)存儲指令指定的源通用寄存器集合中通用寄存器數(shù)目乘以每個通用寄存器從堆棧加載或者向堆棧存儲的元數(shù)據(jù)寬度獲得,該元數(shù)據(jù)寬度由指令編碼中的特定位指定。
5.如權利要求1或2所述的一種二進制轉譯堆棧操作加速處理方法,其特征在于:所述指令寬度指堆棧數(shù)據(jù)加載指令或堆棧數(shù)據(jù)存儲指令對應指令碼的字節(jié)數(shù)。
6.一種二進制轉譯堆棧操作加速處理器,其特征在于:所述處理器包括: 二進制轉譯堆棧操作加速指令對譯碼單元,根據(jù)指令碼獲知當前處理的指令是否為堆棧數(shù)據(jù)加載指令或者堆棧數(shù)據(jù)存儲指令,并獲得元數(shù)據(jù)寬度以及堆棧上邊界通用寄存器、堆棧下邊界通用寄存器、堆棧指針通用寄存器、堆棧越界轉移地址通用寄存器、目標通用寄存器集合和源通用寄存器集合對應寄存器號; 二進制轉譯堆棧操作控制單元,連接于二進制轉譯堆棧操作加速指令對譯碼單元的輸出端和二進制轉譯堆棧操作數(shù)據(jù)處理單元的輸出端,用以接收來自該二進制轉譯堆棧操作加速指令對譯碼單元的譯碼信息和來自該二進制轉譯堆棧操作數(shù)據(jù)處理單元的堆棧越界檢查信息,根據(jù)堆棧數(shù)據(jù)加載指令和堆棧數(shù)據(jù)存儲指令,以及判斷堆棧檢查是否越界后,進7TT加載、存儲和越界控制; 二進制轉譯堆棧操作數(shù)據(jù)處理單元,連接于通用寄存器堆的輸出端和二進制轉譯堆棧操作控制單元的輸出端,根據(jù)堆棧指針通用寄存器和堆棧邊界通用寄存器完成二進制轉譯堆棧訪問是否越界的檢測,同時接收來自該二進制轉譯堆棧操作控制單元的控制信息,利用這些控制信息:根據(jù)堆棧指針通用寄存器和已訪問的堆棧數(shù)據(jù)寬度完成二進制轉譯堆棧訪問地址的計算,根據(jù)堆棧指針通用寄存器和總訪問的堆棧數(shù)據(jù)寬度完成堆棧指針通用寄存器更新值的計算,根據(jù)鏈接寄存器和指令寬度完成鏈接寄存器更新值的計算,根據(jù)堆棧越界轉移地址通用寄存器完成堆棧越界轉移地址的計算,并準備向堆棧存儲的數(shù)據(jù)或者接收從堆棧加載的數(shù)據(jù)以完成堆棧的讀寫; 通用寄存器堆,連接于二進制轉譯堆棧操作控制單元的輸出端和二進制轉譯堆棧操作數(shù)據(jù)處理單元的輸出端,用于提供二進制轉譯堆棧操作所需數(shù)據(jù),并根據(jù)二進制轉譯堆棧操作控制單元提供的通用寄存器號和二進制轉譯堆棧操作數(shù)據(jù)處理單元提供的數(shù)據(jù)完成二進制轉譯堆棧操作相關寄存器的回寫操作。
7.如權利要求6所述的二進制轉譯堆棧操作加速處理器,其特征在于:所述二進制轉譯堆棧操作控制單元中,當譯碼信息指示當前指令為堆棧數(shù)據(jù)加載指令且堆棧檢查未越界時,該二進制轉譯堆棧操作控制單元生成堆棧指針通用寄存器、目標通用寄存器集合的回寫控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元計算堆棧訪問地址以訪問堆棧獲得目標通用寄存器集合回寫數(shù)據(jù)并完成堆棧指針通用寄存器回寫值的計算。
8.如權利要求6所述的二進制轉譯堆棧操作加速處理器,其特征在于:所述二進制轉譯堆棧操作控制單元中,當譯碼信息指示當前指令為堆棧數(shù)據(jù)存儲指令且堆棧檢查未越界時,該二進制轉譯堆棧操作控制單元生成堆棧指針通用寄存器和堆棧的回寫控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元準備堆棧回寫數(shù)據(jù)和回寫地址以回寫堆棧并完成堆棧指針通用寄存器回寫值的計算。
9.如權利要求6所述的二進制轉譯堆棧操作加速處理器,其特征在于:所述二進制轉譯堆棧操作控制單元中,當譯碼信息指示當前指令為二進制轉譯堆棧操作加速指令對中指令且堆棧檢查越界時,該二進制轉譯堆棧操作控制單元生成鏈接寄存器的回寫控制信息以及堆棧越界轉移控制信息,并指示二進制轉譯堆棧操作數(shù)據(jù)處理單元完成鏈接寄存器回寫值的計算和堆棧越界轉移地址的計算。
【文檔編號】G06F9/455GK104461676SQ201410583847
【公開日】2015年3月25日 申請日期:2014年10月27日 優(yōu)先權日:2014年10月27日
【發(fā)明者】劉智力, 盧星星, 張文蒙 申請人:杭州中天微系統(tǒng)有限公司