用于浮點(diǎn)寄存器混疊的處理器和方法
【專利摘要】呈現(xiàn)了用于訪問封裝寄存器的方法、設(shè)備和系統(tǒng)。可跟蹤所述封裝寄存器的狀態(tài),并且可基于所述狀態(tài)確定所述寄存器是否可被直接訪問。如果所述寄存器不可被直接訪問,那么可執(zhí)行允許所述寄存器可被直接訪問的動作。所述動作可包括注入用于識別所述寄存器的所述物理存儲的至少一個(gè)uop,使得其可被直接訪問。所述動作可包括使所述數(shù)據(jù)與物理寄存器的最低有效位對齊或以其它方式使所述數(shù)據(jù)與所述數(shù)據(jù)路徑對齊。所述動作還可包括改變所述封裝寄存器的所述狀態(tài)。
【專利說明】
用于浮點(diǎn)寄存器混疊的處理器和方法
[0001] 相關(guān)申請的交叉引用
[0002] 本申請要求于2013年10月27日提交的美國臨時(shí)專利申請?zhí)?1/896,091的權(quán)益,所 述專利申請的內(nèi)容據(jù)此通過引用的方式并入本文。
技術(shù)領(lǐng)域
[0003] 本發(fā)明通常設(shè)及電子電路,且更具體而言,設(shè)及微處理器和微處理的方法。
[0004] 發(fā)明背景
[0005] 許多計(jì)算機(jī)系統(tǒng)包括被設(shè)計(jì)來對浮點(diǎn)數(shù)執(zhí)行操作的硬件。運(yùn)種硬件可被稱為浮點(diǎn) 單元,并且可與中央處理單元集成。浮點(diǎn)單元(FPU)可用于執(zhí)行浮點(diǎn)指令,并且浮點(diǎn)指令可 引用一組浮點(diǎn)架構(gòu)寄存器。
[0006] 諸如ARM v7的一些指令集架構(gòu)(ISA)可組織浮點(diǎn)架構(gòu)寄存器,使得它們被密集封 裝。例如,可W單位空間可作為為單個(gè)四精度(Q)寄存器、兩個(gè)雙精度(D)寄存器或四個(gè)單精 度(S)寄存器引用的運(yùn)樣一種方式來組織架構(gòu)寄存器。圖1A圖示W(wǎng)該方式組織的示例位空 間。圖1A的位空間可為128位空間,例如,其包括單個(gè)128位Q寄存器、兩個(gè)64位D寄存器和四 個(gè)32位S寄存器。
[0007] 圖1B圖示16個(gè)運(yùn)種位空間的示例集合,其包括總計(jì)16個(gè)Q寄存器(Q0-Q15K32個(gè)D 寄存器(D0-D31)和32個(gè)S寄存器(S0-S31)。應(yīng)注意,在圖1B的實(shí)例中,僅前8個(gè)Q寄存器(Q0- Q7)封裝有S寄存器(總計(jì)80個(gè)架構(gòu)寄存器),然而在概念上,全部Q寄存器封裝有S寄存器。可 將被封裝在給定的全寬度寄存器(包括全寬度寄存器)內(nèi)的架構(gòu)寄存器組稱為"四倍"或稱 為最大寄存器。
[000引在一些應(yīng)用中,可能期望使用關(guān)于浮點(diǎn)指令的寄存器重命名來將運(yùn)種指令的架構(gòu) 寄存器操作數(shù)映射到物理寄存器。寄存器重命名工具可實(shí)現(xiàn)用于該目的。寄存器重命名可 用于浮點(diǎn)指令的反串行化執(zhí)行。通過將被兩個(gè)指令(其中存在虛假依賴性)引用的相同架構(gòu) 寄存器映射到不同的物理寄存器(即,通過將被指令引用的架構(gòu)寄存器"重命名"),例如可 同時(shí)或亂序執(zhí)行另外遇到引用相同架構(gòu)寄存器的風(fēng)險(xiǎn)的指令執(zhí)行。 發(fā)明概要
[0009] -些實(shí)施方案提供一種用于訪問封裝寄存器的方法。存儲封裝寄存器的狀態(tài)。在 指令訪問封裝寄存器的寄存器的條件上,基于所述狀態(tài)確定寄存器是否可被直接訪問。在 寄存器不可被直接訪問的條件上,執(zhí)行允許寄存器可被直接訪問的動作。
[0010] -些實(shí)施方案提供一種被配置來訪問封裝寄存器的設(shè)備。電路存儲封裝寄存器的 狀態(tài)。在指令訪問封裝寄存器的寄存器的條件上,電路確定寄存器是否可被直接訪問。在寄 存器不可被直接訪問的條件上,電路執(zhí)行允許寄存器可被直接訪問的動作。
[0011] 附圖簡述
[0012] 可從結(jié)合附圖通過實(shí)例的方式給出的W下描述獲得更詳細(xì)理解,其中:
[0013] 圖1A是示例密集封裝架構(gòu)寄存器的框圖。
[0014] 圖IB是表示多個(gè)密集封裝架構(gòu)寄存器的框圖。
[0015] 圖2是在其中可實(shí)現(xiàn)一個(gè)或多個(gè)所公開的實(shí)施方案的示例設(shè)備的框圖。
[0016] 圖3是圖示用于解碼指令并處理混疊效應(yīng)的示例電路的框圖。
[0017] 圖4是圖示用于解碼指令并處理混疊效應(yīng)的示例方法的流程圖。
【具體實(shí)施方式】
[0018] 圖2是在其中可實(shí)現(xiàn)一個(gè)或多個(gè)所公開的實(shí)施方案的示例設(shè)備100的框圖。設(shè)備 100可包括例如計(jì)算機(jī)、游戲設(shè)備、手持設(shè)備、機(jī)頂盒、電視機(jī)、移動電話或平板計(jì)算機(jī)。設(shè)備 100包括處理器102、存儲器104、存儲設(shè)備106、一個(gè)或多個(gè)輸入設(shè)備108、和一個(gè)或多個(gè)輸出 設(shè)備110。設(shè)備100還可任選地包括輸入驅(qū)動器112和輸出驅(qū)動器114。應(yīng)理解,設(shè)備100可包 括未在圖1中示出的額外組件。
[0019] 處理器102可包括中央處理單元(CPU)、圖形處理單元(GPU)、位于相同晶粒上的 CPU和GPU、或一個(gè)或多個(gè)處理器核屯、,其中每個(gè)處理器核屯、可為CPU或GPU。存儲器104可位 于與處理器102相同的晶粒上,或可獨(dú)立于處理器102放置。存儲器104可包括易失性或非易 失性存儲器,例如隨機(jī)存取存儲器(RAM)、動態(tài)RAM、或高速緩存。應(yīng)注意,可將存儲器104實(shí) 施為一個(gè)或多個(gè)離散單元,W及設(shè)備100可包括多個(gè)不同的存儲器(未示出)。例如,設(shè)備100 可包括CPU和GPU存儲器(未示出)二者,如在本文中進(jìn)一步討論。
[0020] 存儲裝置106可包括固定或可移動存儲裝置,例如硬盤驅(qū)動器、固態(tài)驅(qū)動器、光盤、 或閃盤驅(qū)動器。輸入設(shè)備108可包括鍵盤、按鍵、觸摸屏、觸摸板、檢測器、麥克風(fēng)、加速計(jì)、巧 螺儀、生物識別掃描儀或網(wǎng)絡(luò)連接(例如,用于傳輸和/或接收無線IEEE 802信號的無線局 域網(wǎng)卡)。輸出設(shè)備110可包括顯示器、揚(yáng)聲器、打印機(jī)、觸覺反饋設(shè)備、一個(gè)或多個(gè)燈、天線 或網(wǎng)絡(luò)連接(用于傳輸和/或接收無線IEEE 802信號的無線局域網(wǎng)卡)。
[0021] 輸入驅(qū)動器112與處理器102和輸入設(shè)備108通信,并且允許處理器102從輸入設(shè)備 108接收輸入。輸出驅(qū)動器114與處理器102和輸出設(shè)備110通信,并且允許處理器102將輸出 發(fā)送到輸出設(shè)備110。應(yīng)注意,輸入驅(qū)動器112和輸出驅(qū)動器114是任選組件,W及如果輸入 驅(qū)動器112和輸出驅(qū)動器114不存在,那么設(shè)備100將W相同方式進(jìn)行操作。
[0022] 為了簡明起見,本文并未詳細(xì)描述關(guān)于集成電路設(shè)計(jì)、緩存、存儲器操作、存儲器 控制器和系統(tǒng)的其它功能方面及系統(tǒng)的個(gè)別操作組件)的常規(guī)技術(shù)。此外,本文所包括 的各個(gè)圖式中所示的連接線旨在表示各個(gè)元件之間的示例性功能關(guān)系和/或物理禪接。應(yīng) 注意,許多替代或額外的功能關(guān)系或物理連接可存在于本主題的實(shí)施方案中。此外,某些技 術(shù)也可在只出于參考目的而在W下描述中使用,且因此不旨在限制,且術(shù)語"第一"、"第二" 和設(shè)及結(jié)構(gòu)的其它運(yùn)樣的數(shù)值術(shù)語并未暗指順序或次序,除非上下文有明確指示。
[0023] W下描述是指"連接"或"禪接"在一起的元件或節(jié)點(diǎn)或特征。如本文所使用,除非 另有明確說明,否則"連接"意指一個(gè)元件/節(jié)點(diǎn)/特征直接接合到另一元件/節(jié)點(diǎn)/特征(或 直接與另一元件/節(jié)點(diǎn)/特征通信),且不一定是機(jī)械接合。同樣地,除非另有明確說明,否則 "禪接"意指一個(gè)元件/節(jié)點(diǎn)/特征直接或間接接合到另一元件/節(jié)點(diǎn)/特征(或直接或間接與 另一元件/節(jié)點(diǎn)/特征通信),且不一定是機(jī)械接合。因此,雖然圖式可描繪特征的一種示例 性布置,但是額外的介入元件、設(shè)備、特征或組件可存在于所描繪的本主題的實(shí)施方案中。
[0024] 雖然W下描述中呈現(xiàn)了至少一個(gè)示例性實(shí)施方案,但是應(yīng)明白,存在大量變動。還 應(yīng)明白,本文描述的(若干)示例性實(shí)施方案不旨在w任何方式限制所述主題的范圍、可應(yīng) 用性或配置。相反地,W上詳述將給所屬領(lǐng)域技術(shù)人員提供用于實(shí)施(若干)所描述的實(shí)施 方案的指導(dǎo)。應(yīng)理解,在不脫離由權(quán)利要求書界定的范圍的情況下,可對元件的功能和布置 作出各種改變。
[0025] 將密集封裝架構(gòu)寄存器(諸如關(guān)于圖1A和圖1B圖示的那些寄存器)存儲在物理寄 存器中可能在一些處理器架構(gòu)中導(dǎo)致有問題的混疊效應(yīng)。例如,當(dāng)將具有不同大小的密集 封裝架構(gòu)寄存器映射到全部具有相同大小的物理寄存器時(shí),混疊效應(yīng)可能引起被寫入或讀 取的無效數(shù)據(jù),除非采取額外措施W糾正映射,如在本文中進(jìn)一步討論。另外,處理器架構(gòu) 的微操作(UOP)流可能要求全部架構(gòu)寄存器被獨(dú)立地讀取并寫入。例如,對于在寫入S3之后 讀取Q0而言,可能需要返回包括寫入S3的結(jié)果的值。處理器架構(gòu)還可能要求任何操作的最 低有效位化SB)與數(shù)據(jù)路徑的LSB對齊。因此,為了讀取S3(與圖1A和圖1B的實(shí)例中的Q0的位 96對齊),首先需要使存儲在物理寄存器中的S3數(shù)據(jù)與位0對齊(如果還未如此對齊)。
[0026] 為了解決運(yùn)種問題,可為被封裝在全寬度架構(gòu)寄存器(例如,四倍)內(nèi)的全部寄存 器存儲寄存器狀態(tài),其反映了四倍寄存器是否已被存儲為完全封裝寄存器(即,在單個(gè)物理 寄存器內(nèi)并且有序)或其是否已被分解成兩個(gè)寄存器(圖1A和圖1B的實(shí)例中的D或64位寄存 器)、四個(gè)寄存器(圖1A和圖1B的實(shí)例中的S或32位寄存器)或Ξ個(gè)寄存器(例如,一個(gè)D寄存 器和2個(gè)S寄存器),運(yùn)些寄存器單獨(dú)存儲在不同物理寄存器中(或亂序地位于相同物理寄存 器中或二者)。
[0027] 當(dāng)指令嘗試訪問全寬度架構(gòu)寄存器或被封裝在其內(nèi)的架構(gòu)寄存器中的一個(gè)時(shí),可 檢查狀態(tài)W確定是否可直接從單個(gè)物理寄存器訪問期望寄存器,是否必須首先從不同物理 寄存器重編數(shù)據(jù),或是否必須重組物理寄存器,例如,通過將存儲在物理寄存器中的數(shù)據(jù)的 一部分寫入到新的物理寄存器的不同位位置中。例如,如果指令嘗試讀取全寬度架構(gòu)寄存 器或被封裝在其內(nèi)的架構(gòu)寄存器中的一個(gè),那么可檢查狀態(tài)W確定是否可直接從單個(gè)物理 寄存器讀取期望寄存器,是否必須首先從不同物理寄存器重編數(shù)據(jù),或是否必須重組物理 寄存器,例如,通過將存儲在物理寄存器中的數(shù)據(jù)的一部分寫入到新的物理寄存器的不同 位位置中。還可檢查狀態(tài)W用于其它類型的訪問,例如,寫入等。
[0028] 在期望獨(dú)立讀取并寫入密集封裝寄存器的處理器架構(gòu)中,在寫入較大的對應(yīng)封裝 寄存器之后,寫入較小寄存器僅可使存儲用于較大封裝寄存器的數(shù)據(jù)的一部分失效。因此, 可能需要保存剩余的數(shù)據(jù)。例如,如果寫入Q0并且隨后寫入S0(映射到與新物理寄存器對應(yīng) 的新物理寄存器名稱(PRN)),那么存儲Q0的物理寄存器內(nèi)的S1、S2和S3的數(shù)據(jù)仍然有效,并 且必須被保存,即不通過覆寫存儲Q0的整個(gè)物理寄存器而丟棄。通過存儲反映如何物理地 存儲封裝寄存器的四倍寄存器Q0的狀態(tài),仍可訪問封裝寄存器中的每一個(gè)。在該實(shí)例中,封 裝寄存器中的一些可直接從物理寄存器訪問,并且一些可能要求重組存儲在物理寄存器內(nèi) 的位,運(yùn)可通過將它們移動到新物理寄存器來完成,如在本文中進(jìn)一步討論。
[0029] 為了促進(jìn)重命名,可將邏輯寄存器名稱化RN)指派到每個(gè)架構(gòu)寄存器。然后,可將 映射存儲在其被寫入的物理寄存器的LRN與PRN之間??蓪琇RN與PRN之間的映射的表稱 為寄存器映射。
[0030] 可為其每次被寫入的架構(gòu)寄存器分配新的物理寄存器(例如W促進(jìn)重命名)。當(dāng)數(shù) 據(jù)不再有效時(shí),所述物理寄存器隨后可被"撤退"并返回到"自由列表"(即,可能使其不可用 于讀取并可用于映射到新的架構(gòu)寄存器)。
[0031] 表1描述在之前已寫入混疊或"封裝"有四倍寄存器的不同架構(gòu)寄存器之后由指令 讀取或?qū)懭刖哂薪o定大小的給定架構(gòu)寄存器的情況下可能導(dǎo)致的示例問題。表1是相對于 封裝有圖2和圖3的Q0的架構(gòu)寄存器進(jìn)行描述。所述表描述在已寫入被封裝在四倍寄存器內(nèi) 的相同或不同Q或D或S寄存器之后讀取或?qū)懭氡环庋b在四倍寄存器內(nèi)的架構(gòu)Q或D或S寄存 器的情況下可能導(dǎo)致的問題。
[0032] 表 1
[0033]
[0034]
[0035]
[0036] 如上文討論,為了解決運(yùn)種問題,可存儲每個(gè)四倍寄存器的寄存器狀態(tài)。為了跟蹤 所述狀態(tài),每個(gè)四倍寄存器可與多個(gè)LRN對應(yīng),多個(gè)LRN各自可獨(dú)立地映射到物理寄存器。可 獨(dú)立映射的LRN的每一個(gè)可表示封裝架構(gòu)寄存器中的一個(gè)或多個(gè)。在圖1A和圖1B的實(shí)例中, 每個(gè)架構(gòu)寄存器可具有四個(gè)LRN。
[0037] 第一 LRN可表示全Q寄存器、下部D寄存器(其與Q寄存器對齊)或最下部S寄存器(其 與Q寄存器和下部D寄存器對齊)。在圖1A的實(shí)例中,運(yùn)些寄存器與Q0、D0和SO對應(yīng),并且可將 第一LRN稱為Q0/D0/S0。第二LRN可僅表示第二S寄存器。在圖1A的實(shí)例中,運(yùn)與S1對應(yīng),并且 可將第二LRN稱為S1。第SLRN可表示上部D寄存器和第SS寄存器二者。在圖1A的實(shí)例中,運(yùn) 些與對齊的D巧日S2對應(yīng),并且可將第SLRN稱為D1/S2。第四LRN可僅表示第四S寄存器。在圖 1A的實(shí)例中,運(yùn)與S3對應(yīng),并且可將第四LRN稱為S3。
[0038] 下文在表2中示出圖1B的示例架構(gòu)寄存器Q0-Q3(及其對應(yīng)的封裝D和S寄存器)的 LRN的實(shí)例集合:
[0039] 表 2
[0040]
[0041] 每個(gè)LRN可獨(dú)立地映射到PRN。下文在表3中示出圖示LRN至化RN的可能映射的示例 寄存器映射。
[0042] 表 3
[0043]
[0044] 必須跟蹤LRN-PRN映射的狀態(tài),W處理上文討論的混疊問題,因?yàn)榱硗饪赡懿淮_定 的是,通過訪問給定LRN讀取的數(shù)據(jù)將是有效的??砂此谋都拇嫫鞲櫭總€(gè)LRN-PRN映射的 狀態(tài)(即,狀態(tài)可能與混疊或封裝在一起的全部LRN有關(guān))。可將四倍寄存器稱為在其內(nèi)封裝 有其它寄存器的Q寄存器。例如,Q0的狀態(tài)可跟蹤LRN 〇0/00/50、51、01/5巧脂3與?1?^之間的 LRN-PRN映射的狀態(tài)。因此,如果Q0處于例如狀態(tài)D0/D1 (本文中進(jìn)一步討論),那么狀態(tài)可表 示在解碼期間,從架構(gòu)寄存器0〇、〇0、01、50、51、52或53的讀取或?qū)軜?gòu)寄存器9〇、00、01、 S0、S1、S2或S3的寫入將需要考慮該狀態(tài),因?yàn)闋顟B(tài)與運(yùn)些架構(gòu)寄存器的全部LRN有關(guān)。表4 圖示LRN-PRN映射的八個(gè)示例寄存器狀態(tài)。
[0045] 表 4
[0046]
[0047]
[004引為了保持跟蹤映射的狀態(tài),可針對每個(gè)四倍寄存器存儲位。運(yùn)些狀態(tài)可由處理器 的解碼單元(DE)或任何其它合適的單元跟蹤和/或存儲。例如,Ξ位可由每個(gè)四倍寄存器的 DE內(nèi)的單元存儲并跟蹤,W跟蹤八種狀態(tài)。在使用八種狀態(tài)的實(shí)例中,可使用表5中描述的 示例位編碼來跟蹤狀態(tài)。
[0049]表 5 [(K)加]
[0化1] 應(yīng)注意,表4和表5中描述的狀態(tài)是示例性的。例如,Quad、D0/Dl、和S0/S1/S2/S3狀 態(tài)對于處理混疊問題可能是必要的。然而,其它狀態(tài)(即,9/01、00/0111、00/52/53和50/51/ D1)可用于性能優(yōu)化目的(例如,如果跟蹤運(yùn)些額外狀態(tài),那么可能需要對物理寄存器中的 數(shù)據(jù)進(jìn)行更少操作)。應(yīng)注意并將理解,例如,可通過增加狀態(tài)的數(shù)量或通過使用不同的狀 態(tài)來進(jìn)一步擴(kuò)展方案W用于任何數(shù)量的優(yōu)化。運(yùn)種額外或不同狀態(tài)可包括D0/D1/S3、Q0/ S3、Q0/S1、D0/S1/D1、D0/S1/S2/S3、D0/S1/S2/S3、D0/S1/D1/S3、S0/S1U/D1、D0/S2/S抓、SO/ S1U/S2/S3、S0/S1/S2/S抓、S0/S1U/S2/S抓等,如可從本文討論的原理推導(dǎo)出。
[0052]如果確定在執(zhí)行指令時(shí)必須操作存儲于物理寄存器中的數(shù)據(jù)W維持?jǐn)?shù)據(jù)的有效 性(基于LRN-PRN映射狀態(tài)W及到混疊寄存器的訪問類型和大?。敲纯赏ㄟ^將額外"修復(fù) (fixup)"微操作(UOP)注入指令的解碼UOP前面的UOP流或緩沖區(qū)中來操作物理寄存器內(nèi)的 數(shù)據(jù)(例如,從物理寄存器的一部分移動到不同物理寄存器的一部分)。處理器的DE或任何 其它合適結(jié)構(gòu)可確定和/或注入修復(fù)UOP。在一些情況下,還可或替代地可能需要改變映射 的狀態(tài),W有效地讀取或?qū)懭爰軜?gòu)寄存器,如將在本文中進(jìn)一步討論。
[0053]修復(fù)uop可被注入指令的uop中或在指令的uop前面,W將寄存器封裝和/或拆封成 各種配置。運(yùn)些UOP或其組合可包括表6中描述的示例修復(fù)UOP中的一個(gè)或多個(gè)。應(yīng)注意,運(yùn) 些UOP的名稱是任意的。還應(yīng)注意,物理寄存器位相對于128位四倍寄存器進(jìn)行描述,然而, 其它位寬可適當(dāng)?shù)馗淖冇糜谄渌軜?gòu)。
[0化4] 表6
[0化5]
[0化6]
[0057]為了確定是否需要注入運(yùn)些修復(fù)UOP中的一個(gè)或多個(gè)和/或改變四倍寄存器的狀 態(tài),處理器的合適部件檢測指令的操作數(shù)架構(gòu)寄存器之間W及被重命名的任何其它指令之 間的任何混疊(即,它們是否共享四倍寄存器),檢查任何運(yùn)種寄存器的狀態(tài),確定針對指令 必須注入哪個(gè)(如果存在任何uop)W基于所述狀態(tài)有效地讀取或?qū)懭脒\(yùn)種寄存器,并且確 定必須將寄存器狀態(tài)更改為哪種狀態(tài)(如果存在任何狀態(tài))。運(yùn)些確定可由例如從例如解碼 單元接收有關(guān)解碼指令的操作數(shù)寄存器的信息的解碼單元或混疊邏輯作出,然而應(yīng)注意, 運(yùn)些確定可由任何合適結(jié)構(gòu)作出。
[005引表7-13圖示對于基于四倍寄存器的當(dāng)前狀態(tài)(即,在其內(nèi)封裝有架構(gòu)寄存器的四 倍寄存器的LRN-PRN映射的狀態(tài))讀取或?qū)懭爰軜?gòu)寄存器而言是必要的示例狀態(tài)轉(zhuǎn)換和UOP 注入。狀態(tài)名稱使用Q0表示,但是與改變的封裝架構(gòu)寄存器Q0-Q15中的任何一個(gè)相關(guān),如將 在本文中進(jìn)一步圖示。
[0059]表 7
[00化]表10
[0067]表11
[0069]表12
[0071]表13
[0073] 為了跟蹤每個(gè)四倍寄存器的狀態(tài),可維持寄存器狀態(tài)表。表14圖示反映封裝有架 構(gòu)寄存器Q0-Q3的寄存器的示例狀態(tài)的寄存器狀態(tài)表,
[0074] 表14
[0075]
[0076] 圖3是圖示如上所述用于編碼指令并處理混疊效應(yīng)的示例電路300的框圖。電路 300包括指令提取邏輯305、指令解碼單元310、315、320、混疊和狀態(tài)跟蹤邏輯325和UOP緩沖 器330。電路300可為諸如處理器102(圖2)的處理器的一部分。應(yīng)注意,運(yùn)些單元僅為示例性 的,并且在一些實(shí)施方案中,可適當(dāng)替換并省略。
[0077] 提取邏輯305接收指令流,從所述流提取N個(gè)指令(在該實(shí)例中,為浮點(diǎn)指令),并且 將指令加載到N個(gè)解碼單元中。示出了Ξ個(gè)解碼單元310、315、320,然而應(yīng)注意,解碼單元和 提取指令的數(shù)量可如期望那樣為更多或更少。
[0078] 提取邏輯305可從指令取出單元(未示出)或從任何其它合適源接收指令流。提取 邏輯305可隨后將提取的指令加載到解碼單元310、315、320中。雖然僅示出Ξ個(gè)解碼單元用 于解碼=個(gè)提取指令,但是原則上,任意數(shù)量的解碼單元可用于解碼任意數(shù)量的提取指令。
[0079] 解碼單元310將指令I(lǐng)NST1解碼成一個(gè)或多個(gè)uopW供執(zhí)行,并且將uop加載到uop 緩沖器330。應(yīng)注意,在一些實(shí)施方式(未示出)中,uop緩沖器330可被省略,并且uop僅可被 下游地分發(fā)到執(zhí)行單元335。解碼單元310還將有關(guān)INST1的操作數(shù)寄存器的信息傳輸?shù)竭?輯325。解碼單元315將指令I(lǐng)NST2解碼成一個(gè)或多個(gè)uopW供執(zhí)行,并且將解碼的uop加載到 uop緩沖器330。解碼單元315還將有關(guān)INST2的操作數(shù)寄存器的信息傳輸?shù)竭壿?25。解碼單 元320將指令I(lǐng)NST3解碼成一個(gè)或多個(gè)uopW供執(zhí)行,并且將解碼的uop加載到uop緩沖器 330。解碼單元320還將有關(guān)INST3的操作數(shù)寄存器的信息傳輸?shù)竭壿?25。應(yīng)注意,解碼單元 315、320、325可同時(shí)解碼Ξ個(gè)指令;然而,在其它實(shí)施方式中,可W不同時(shí)解碼指令。
[0080] 邏輯325檢查INST1的每個(gè)操作數(shù)寄存器的LRN-PRN映射的狀態(tài),W確定其是否有 效。如果狀態(tài)映射無效,那么邏輯325確定是否必須注入U(xiǎn)OP,并且確定是否需要改變狀態(tài)。 如果uop注入是必要的,那么邏輯325將適當(dāng)修復(fù)uop注入在uop緩沖器330中的INST1的解碼 uop前面。如上討論,應(yīng)注意,在一些實(shí)施方式(未示出)中,uop緩沖器330可被省略,并且uop 僅可注入在INST1的解碼uop前面并且被下游地分發(fā)到執(zhí)行單元335。如果需要進(jìn)行狀態(tài)改 變,那么邏輯325更新四倍寄存器的映射的狀態(tài)。邏輯325還針對INST2和INST3執(zhí)行運(yùn)些相 同任務(wù)。
[0081 ] 在已將INSTUINST2和INST3的全部解碼op加載到緩沖器330、注入任何需要的修 復(fù)op并且根據(jù)需要已更新狀態(tài)之后,將uop緩沖器330中的uop的隊(duì)列分發(fā)到一個(gè)或多個(gè)執(zhí) 行單元335W供執(zhí)行。如上所述,在不使用uop緩沖器(未示出)的實(shí)施方式中,uop可能已經(jīng) 被下游地分發(fā)到執(zhí)行單元335。
[0082] 圖4是圖示如上所述用于解碼指令的示例方法400的流程圖。
[0083] 在步驟405中,確定是否任何指令可用于解碼。如果指令可用于解碼,那么在步驟 410中,可將它們解碼成uop。所述確定可由解碼單元作出,并且uop可被緩沖,諸如關(guān)于圖3 進(jìn)行討論。
[0084] 在步驟415中,確定指令的操作數(shù)寄存器中的任何一個(gè)是否已被檢查用于有效的 LRN-PRN狀態(tài)映射。如果是,那么在步驟420中,檢查每個(gè)寄存器的狀態(tài)。運(yùn)些確定可由接收 關(guān)于操作數(shù)寄存器的信息的混疊邏輯作出,諸如關(guān)于圖3進(jìn)行討論。
[0085] 應(yīng)注意,在一些實(shí)施方案(未示出)中,可在解碼uop之前或同時(shí)檢查LRN-PRN狀態(tài) 映射的有效性。
[0086] 如果寄存器狀態(tài)被確定為無效,那么在步驟425中,確定是否需要注入修復(fù)uop。該 確定由混疊邏輯作出。如果需要注入修復(fù)UOP,那么在步驟430中,注入uop??蓪⑿迯?fù)uop注 入在指令的解碼uop前面的uop隊(duì)列中并且可被緩沖,諸如關(guān)于圖3進(jìn)行討論。
[0087] 在步驟425中確定是否注入U(xiǎn)OP,在步驟435中也確定是否需要改變LRN-PRN映射的 狀態(tài)。如果是,那么在步驟440中,更新映射。在任何一種情況下,流程返回到步驟415。
[0088] 如果不存在需要檢查有效狀態(tài)的其它寄存器,那么在步驟445中,解碼和注入的 uop可被分發(fā)用于執(zhí)行。
[0089] Ξ個(gè)浮點(diǎn)指令的W下示例并行解碼說明了本文討論的原理,并且可使用關(guān)于圖1- 4討論的結(jié)構(gòu)和方法進(jìn)行執(zhí)行。然而,應(yīng)注意,許多修改和精化是可能的。對于該實(shí)例,每個(gè) 四倍寄存器的LRN-PRN映射的初始狀態(tài)(即,寄存器狀態(tài)化表15示出。應(yīng)注意,在該實(shí)例中, 僅使用四個(gè)四倍寄存器,并且相應(yīng)地,將僅圖示四種狀態(tài)。
[0090] 表15
[0091]
[0092] 初始LRN-PRN映射(即,寄存器映射化表16示出。
[0093] 表16
[0094]
[0095] 物理寄存器文件(PRF)的初始內(nèi)容由表17示出:
[0096] 表17
[0097]
[0098] 在該實(shí)例中將被解碼的Ξ個(gè)示例浮點(diǎn)指令為:
[0099] INSTl:Add Q0 = Q1+Q2
[0100] INST2:Sub D0 = D1-D2
[0101] INST3:Mul Q3 = Q0 女 Q1
[0102] 在該實(shí)例中,指令由如圖3中示出的解碼單元310、315、320并行解碼。然而,應(yīng)注 意,在其它實(shí)施方式中,可有序或無序解碼指令。
[0103] 解碼單元310解碼INST1并且將INST1的UOP下游地傳遞到緩沖器330中W供稍后執(zhí) 行。解碼單元310還將指示其操作數(shù)為寄存器Q0、Q1和Q2的信息傳輸?shù)竭壿?25。邏輯325檢 測到架構(gòu)寄存器Q0、Q1和Q2不彼此混疊。相應(yīng)地,不需要在INST1的UOP前面注入任何UOP,并 且不需要改變寄存器狀態(tài)。
[0104] 解碼單元315解碼INST2并且將INST2的uop下游地傳遞到緩沖器330中w供稍后在 INST1的UOP之后執(zhí)行。解碼單元315還將指示其操作數(shù)為寄存器D0、D1和D2的信息傳輸?shù)竭?輯325。
[0105] 邏輯325檢測到寄存器D2與處于狀態(tài)Q的Q1混疊。邏輯325還檢測到D1的讀取和DO 的寫入與處于狀態(tài)Q的Q0的寄存器混疊。
[0106] D2可從處于狀態(tài)Q的Q1讀取。運(yùn)是因?yàn)镈2是Q1的下部雙倍寄存器,并且當(dāng)Q1處于狀 態(tài)Q時(shí)有效用于讀取。相應(yīng)地,邏輯325不在INST2的UOP前面注入任何UOP,并且不針對該混 疊改變寄存器狀態(tài)。
[0107] 當(dāng)Q0處于狀態(tài)卵寸,D1不適用于讀取。相應(yīng)地,對D1的讀取需要fkregq2d D1、Q0的 注入和Q0從Q到Q0/D1的狀態(tài)轉(zhuǎn)換。相應(yīng)地,邏輯325在隊(duì)列中的INST2的uop前面注入該uop, 并且更新Q0的狀態(tài)位W反映狀態(tài)Q0/D1。運(yùn)樣做是因?yàn)镈1是上部雙倍寄存器,并且當(dāng)Q0處于 狀態(tài)Q時(shí),不與物理寄存器的LSB對齊。
[0108] 所注入的uop fkregq2d D1、Q0將截取存儲Q0(即,高64位-D1的數(shù)據(jù))的物理寄存 器的上部雙倍寄存器,并且將該數(shù)據(jù)寫到新物理寄存器的下部雙倍寄存器。在執(zhí)行該uop之 后,將D1映射到該新物理寄存器,并且D1的數(shù)據(jù)將與物理寄存器的LSB對齊,且因此可有效 讀取。應(yīng)注意,該uop將不會將PRN返回到自由列表,并且原始數(shù)據(jù)將保留在原始物理寄存器 中。
[0109] 在該拆封之后,Q0的狀態(tài)(其表示在Q0內(nèi)封裝的全部架構(gòu)寄存器)將被更改為Q/ D1,W指示對于quad狀態(tài)有效的讀數(shù)仍然有效(即,該數(shù)據(jù)如先前一樣保留在原始物理寄存 器中),而D1的讀數(shù)如今也有效,因?yàn)镈1被映射到新物理寄存器。
[0110] 當(dāng)Q0處于狀態(tài)Q/D1時(shí),在不注入任何uop的情況下可寫入DO。然而,在寫入之后,將 DO映射到新物理寄存器,并且D1將保留用于其它物理寄存器中的有效讀取。Q0因此不再直 接可讀,且因此Q0的狀態(tài)必須從Q/D1更新到D1/D0。相應(yīng)地,邏輯325更新Q0的狀態(tài)位W反映 狀態(tài)D1/D0。
[0111] 該點(diǎn)處的寄存器狀態(tài)由表18反映。
[0112] 表18
[0113]
[0114] ~解碼單元320解碼INST3并將INST3的uop下游地傳遞到緩沖器330中W供稍后在 INST2的uop之后執(zhí)行。解碼單元320還將指示其操作數(shù)為Q3、Q0和Q1的信息傳輸?shù)竭壿?25。 邏輯325檢測到寄存器Q0與DO和D1混疊。
[0115] Q0處于狀態(tài)D0/D1,并且Q0在該狀態(tài)下無法被直接讀取。運(yùn)是因?yàn)閷O和D1寄存器 映射到不同的物理寄存器。為了讀取D0,必須通過注入uop改變狀態(tài)。相應(yīng)地,邏輯325在 INST3的uop前面注入兩個(gè)連續(xù)uop。第一uop(fkreclaimprn D1)將D1被映射回到的物理寄 存器放在自由列表上,但是使其映射在寄存器映射中。運(yùn)對于第二uop而言是準(zhǔn)備步驟。第 二uop(fkregd2q Q0、D0、D1)為Q0分配新的物理寄存器,將來自被映射到DO的物理寄存器的 下部雙倍寄存器寫到新物理寄存器的下部雙倍寄存器,并且將被映射到D1的物理寄存器的 下部雙倍寄存器寫到新寄存器的上部雙倍寄存器。運(yùn)樣"重組"新寄存器中的四倍寄存器, 使其有效用于讀取Q0。因此隨后將被封裝到Q0中的寄存器的狀態(tài)更改為Q。應(yīng)注意,在一些 實(shí)施方式(未示出)中,fkreclaimprn D1 uop可被省略,并且可將狀態(tài)更改為Q/D1,從而使 D1的PRN被映射。還應(yīng)注意,f kreclainprn uop可能通常與第二修復(fù)uop (在本文為 fkregd2q)原子地執(zhí)行,諸如例如在表6中示出。
[0116] 該點(diǎn)處的寄存器狀態(tài)由表19反映。
[0117] 表 19 [011 引
[0119] ~在解碼指令、注入uop和/或適當(dāng)?shù)馗淖兗拇嫫鳡顟B(tài)之后,指令uop的隊(duì)列為:
[0120] l)add Q0 = Q1+Q2的uop
[0121] 2)fkregq2d D1,Q0的uop
[0122] 3)Sub D0 = D1-D2的uop
[0123] 4)fkreclaimp;rn D1 的uop
[0124] 5)fkregd2q Q0,D1的uop
[0125] 6)mul Q3 = Q0*Q1 的uop
[01 %] -旦已因此解碼指令,已注入修復(fù)uop,W及已經(jīng)適當(dāng)?shù)馗聽顟B(tài),則uop可由邏輯 325的寄存器映射邏輯處理如下。
[0127]當(dāng)關(guān)于add Q0 = Q1+Q2的解碼uop被寄存器映射邏輯處理時(shí),將用于存儲Q0的新 PRN(PR肥)映射到封裝在Q0(即90/00/50、51、01/52、和53)內(nèi)的架構(gòu)寄存器的11?^。還使用映 射將操作轉(zhuǎn)換成Add PRNE = PRNB+PRNC。在該操作后的寄存器映射的狀態(tài)由表20示出。
[012引表20
[0129]
[0130] 當(dāng)fkregq2d D1、Q0的注入uop由寄存器映射邏輯處理時(shí),將用于存儲D1的新PRN (PRNF)映射到封裝在D1 (即,D1/S2和S3)內(nèi)的架構(gòu)寄存器的LRN。還使用映射將操作轉(zhuǎn)換成 fkregq2d ?1?^。= 口1?肥[127:64]。在該操作后的寄存器映射的狀態(tài)由表21示出。
[0131] 表21
[0132]
[0133] 當(dāng)sub D0 = D1-D2的解碼uop被寄存器映射邏輯處理時(shí),將用于存儲DO的新PRN (PRNG) 映射到封裝在DO(即,Q0/D0/S0和S1)內(nèi)的架構(gòu)寄存器LRN。使用映射將操作轉(zhuǎn)換成 SUB PRNG = PRNF-PRNC。在該操作后的寄存器的狀態(tài)由表22示出:
[0134] 表22
[0135]
[0136] 當(dāng)fkreclainprn D1的注入uop被寄存器映射邏輯處理時(shí),寄存器映射不發(fā)生任何 變化,并且使用映射將操作轉(zhuǎn)換成fkrelaimprn PRNF。
[0137] 當(dāng)fkregd2q Q0、D1的注入uop被寄存器映射邏輯處理時(shí),將用于存儲Q0的新PRN (PRNH) 映射到封裝在Q0(即,Q0/D0/S0、S1、D1/S2和S3)內(nèi)的架構(gòu)寄存器的LRN。將操作轉(zhuǎn)換 成fkregd2q PRN叫127:0]=PRNF[63:0],PRNG[63:0]。在該操作后的寄存器的狀態(tài)由表23 示出。
[013引 表23
[0139]
[0140] 當(dāng)Mul Q3 = Q0XQ1的解碼uop被寄存器映射邏輯處理時(shí),將用于存儲Q3的新PRN (PRNI) 映射到封裝在Q3(即,Q3/D6/S12、S13、D7/S14和S15)內(nèi)的架構(gòu)寄存器的LRN。使用映 射將操作轉(zhuǎn)換成mul PRNI =PRNHX PRNH。該操作之后的寄存器的狀態(tài)由表24示出。
[0141] 表24
[0142]
[0143] 在全部uop已被寄存器映射邏輯處理之后,它們可由執(zhí)行單元335(或單元)執(zhí)行, 從而引起PRF的如下變化。
[0144] a.add PR肥= PRNB+PRNC(來自add Q0 = Q1+Q2)。在對應(yīng)的op被執(zhí)行之后的PRF狀 態(tài)由表25示出。
[0145] 表25
[0146]
[0147] b.fkregq2d PRNF = PRNE[127:64](來自fkregq2d D1,Q0)。在對應(yīng)的op被執(zhí)行之 后的PRF狀態(tài)由表26示出。
[014引 表26
[0149]
[0150] c.sub PRNG = PRNF-PRNB(來自 sub D0 = D1-D2)。在對應(yīng)的op被執(zhí)行之后的PRF狀 態(tài)由表27執(zhí)行。
[0151] 表27
[0152]
[0153] d.fkreclaimprn PRNF(來自fkreclaimprn Dl)ePRF在fkreclaimprn停止之前不 發(fā)生任何變化,在運(yùn)種情況下,將寄存器返回到自由列表,然而,fkreclaimprn必須在下一 個(gè)uop時(shí)停止。相應(yīng)地,將在與fkreclaimprn為原子性的fkregd2q之后發(fā)生PRN效應(yīng)。
[0154] e.fkregd2q PRNH[127:0]=PRNF[63:0],PRNG[63:0](fkregd2q Q0,D1)。在對應(yīng) op被執(zhí)行之后的PRF狀態(tài)由表28示出。
[0155] 表28
[0156]
[0157] f.mul PRNI = PRNHXPRNB(來自mul Q3 = Q0XQ1)。在對應(yīng)op被執(zhí)行之后的PRF狀 態(tài)由表29示出。
[015引 表29
[0159]
[0160] 在一些實(shí)施方式中,可跟蹤特定寄存器的封裝一段時(shí)間,W優(yōu)化指令的解碼。運(yùn)種 跟蹤可在混疊和狀態(tài)跟蹤邏輯或處理器的另一合適部件中完成,或可用于最小化對注入重 新封裝的U0P的需要。例如,如果指令流包括W與所述寄存器的大部分使用沖突的方式訪問 特定寄存器的少量指令,那么處理器可改變其解碼所述少量指令的方式。更具體而言,如果 指令流包括使用與寄存器通常被訪問的大小沖突的寄存器大小訪問特定封裝寄存器的少 量指令,那么處理器可改變解碼具有沖突大小的那些指令的方式。
[0161] 運(yùn)種沖突可能由于ISA的結(jié)構(gòu)引起。例如,在僅包括一個(gè)設(shè)定大小的負(fù)載或存儲指 令(例如,64位)的ISA中,其它指令可利用那些負(fù)載的結(jié)果或存儲為不同大?。ɡ?,128 位)。運(yùn)種沖突還可由于在類似行為中導(dǎo)致的特定編碼風(fēng)格引起。例如,特定程序可W-個(gè) 大小或一組大小加載或存儲,并且甚至在ISA并未W此方式約束的情況下在所存儲的數(shù)據(jù) 上操作為不同大小或大小組。
[0162] 為了解決運(yùn)種問題,可跟蹤寄存器的封裝的歷史記錄。在一些實(shí)施方式中,可針對 每個(gè)寄存器維持一個(gè)或多個(gè)計(jì)數(shù)器,W便跟蹤訪問的大小。飽和計(jì)數(shù)器可用于運(yùn)種目的。例 如,飽和計(jì)數(shù)器可被維持用于對例如Q0的訪問,其中運(yùn)種計(jì)數(shù)器對于每次四倍大小訪問增 量,并且對于每次雙倍大小訪問減量??纱_定闊值點(diǎn),因此處理器將注入2個(gè)64位負(fù)載U0P或 1個(gè)128位負(fù)載U0P,運(yùn)取決于Q0是否作為四倍寄存器或雙倍寄存器被更頻繁地訪問。應(yīng)注 意,其它歷史記錄跟蹤策略的可能的。
[0163] 例如,還可或替代地跟蹤修復(fù)uop注入的歷史記錄,并且處理器可使用該歷史記錄 信息檢測W不同的方式解碼指令可產(chǎn)生更好性能的情況。在一些實(shí)施方式中,可使用散列 算法來分析被解碼的指令的地址,并且可將運(yùn)種歷史記錄存儲于每個(gè)寄存器的存儲器中。 為了說明,如果Q〇(例如,128位)首先分兩段進(jìn)行加載(例如,首先加載DO并且然后加載D1), 并且然后作為四倍寄存器(例如,128位)被訪問,那么可在加載之前注入uopW首先拆封Q0, 并且還可在訪問之前注入uopW重新封裝Q0。然而,如果特定指令流主要訪問作為四倍寄存 器的Q〇(例如,128位),并且主要分兩段加載寄存器(例如,首先加載D0,然后加載D1),那么 處理器可通過跟蹤指令流的uop的注入一段時(shí)間而檢測到運(yùn)種情況。一旦檢測到該行為(例 如,使用歷史記錄、飽和計(jì)數(shù)器或例如如上所述從統(tǒng)計(jì)的角度上)而不是發(fā)送將執(zhí)行2個(gè)64 位負(fù)載的uop發(fā)送到連續(xù)D寄存器,則處理器僅可向全四倍寄存器發(fā)布1個(gè)128位負(fù)載UOP,從 而在使用之前,消除對在加載之前拆封Q0并且在加載之后重新封裝Q0的需要。運(yùn)種檢測可 具有通過減少加載和存儲所需的uop的凈數(shù)量來提供性能的優(yōu)點(diǎn)。該跟蹤的各種其它置換 將對本領(lǐng)域的技術(shù)人員顯而易見。
[0164] W下示例優(yōu)化可作為寄存器映射的函數(shù)被執(zhí)行。如上文討論,在一些架構(gòu)中,可能 僅存在一個(gè)固定支持負(fù)載大小。例如,示例矢量負(fù)載指令化D*的唯一支持負(fù)載大小可為64 位。在運(yùn)種情況下,執(zhí)行128位算法的指令可能需要使用之前在兩個(gè)64位分塊中加載的數(shù) 據(jù)。
[0165] 在運(yùn)種情況下,目的地寄存器的當(dāng)前映射連同負(fù)載的長度W及起始的目的地寄存 器數(shù)量可被處理器用來確定是否作為雙倍寄存器或四倍寄存器加載數(shù)據(jù)。如果指令加載偶 數(shù)個(gè)寄存器,那么第一寄存器為偶數(shù)個(gè)寄存器,并且當(dāng)前映射表明目的地之前被用作四倍 寄存器,W及數(shù)據(jù)可被加載為四倍數(shù)據(jù)。如果指令加載奇數(shù)個(gè)寄存器,那么W奇數(shù)的寄存器 開始,或當(dāng)前映射表明寄存器的之前使用并非是四倍寄存器,數(shù)據(jù)可被加載為雙倍數(shù)據(jù)。
[0166] 類似優(yōu)化可適用于存儲指令。也許可能將源存儲為雙倍寄存器或四倍寄存器,運(yùn) 取決于當(dāng)前映射、是否存儲偶數(shù)或奇數(shù)個(gè)寄存器、W及是否所述存儲開始于偶數(shù)或奇數(shù)寄 存器。
[0167] -般而言,延長數(shù)據(jù)(即,對比源寄存器中的一個(gè)或多個(gè)長的架構(gòu)寄存器的寫入) 的指令可能容易經(jīng)受運(yùn)種優(yōu)化。運(yùn)種指令的實(shí)例可具有被指定為雙倍寄存器的源和被指定 為四倍寄存器的目的地中的一個(gè)或二者。由于將運(yùn)些指令解碼成uop的方式,可在不拆封源 的情況下執(zhí)行運(yùn)種指令(如果它們當(dāng)前被封裝為四倍寄存器并且如果解碼器可有序地轉(zhuǎn)換 uop) 〇
[016引例如,可將指令VA孤L. S8<Qd>、<化>、<Dm>分解成延長Dn和Dm中的數(shù)據(jù)的兩 個(gè)混洗uop和第SuopW執(zhí)行add?;煜磚op可例如從高位或低位(64位)延長指令的寄存器。 在具體實(shí)例中,fkpmovsxbw<目的地> <源>可用于延長封裝在源的位63:0中的數(shù)據(jù),而 fkpmovsxbwh<目的地> <源>可用于延長封裝在源的位127:64中的數(shù)據(jù)。例如,在指令源 為當(dāng)前被封裝為四倍寄存器的位127:64的奇數(shù)D寄存器的情況下,可使用fkpmovsxbwh uop 而不是fkpmovsxbw,并且可能不需要使用注入的uop拆封寄存器。如果基于寄存器是奇數(shù)或 偶數(shù)W及寄存器是否被封裝為四倍寄存器或雙倍寄存器來轉(zhuǎn)換前兩個(gè)混洗OP,那么uop可 能如下(假設(shè)寄存器不被封裝為單寄存器):
[0169] l)If(Dn為偶數(shù)或被封裝為雙倍寄存器)then(fkpmovsxbw FT0,Dn)else (fkpmovsxbwh FTO,Qx),其中x=(n-l)/2。
[0170] 2) If (Dm 為偶數(shù)或被封裝為雙倍寄存器)then(fkpmovsxbw FTl ,Dm)else (fkpmovsxbwh FTl ,Qy),其中y = (m-l)/2。
[0171] 3)fkpaddw Qd,FT0,FTl
[0172] 同樣的情況也適用于擴(kuò)大指令,其中源中只有一個(gè)為雙倍寄存器而其它為四倍寄 存器并且目的地為四倍寄存器。在運(yùn)種情況下,可針對源雙倍寄存器執(zhí)行上文所述的op轉(zhuǎn) 換。
[0173] 雖然已關(guān)于浮點(diǎn)單元和浮點(diǎn)寄存器描述了各種實(shí)施方案,但是應(yīng)注意,運(yùn)些概念 也可適用于其它處理器單元和其中可發(fā)生混疊效應(yīng)的封裝寄存器。例如,本文中描述的概 念可適用于ISA將寄存器而不是浮點(diǎn)寄存器組織在與圖1A和圖1B中示出的配置類似的密集 封裝配置中的情況。
[0174] 本文中提供的方法或流程可在并入非臨時(shí)性計(jì)算機(jī)可讀存儲介質(zhì)的計(jì)算機(jī)程序、 軟件或固件中實(shí)施,W供通用計(jì)算機(jī)或處理器執(zhí)行。非臨時(shí)性計(jì)算機(jī)可讀存儲介質(zhì)的實(shí)例 包括只讀存儲器(ROM)、隨機(jī)存取存儲器(RAM)、寄存器、高速緩存存儲器、半導(dǎo)體存儲器設(shè) 備、磁介質(zhì)(諸如內(nèi)置硬盤和移動硬盤)、磁光介質(zhì)和光介質(zhì)(諸如CD-ROM磁盤)、和數(shù)字通用 磁盤(DVD)。
[01巧]實(shí)施方案:
[0176] 1.-種用于訪問存儲于物理存儲器中的封裝寄存器的方法,其包括:存儲所述封 裝寄存器的狀態(tài);在指令訪問所述封裝寄存器的寄存器的條件上,基于所述封裝寄存器的 所述狀態(tài)確定所述寄存器是否可被直接訪問;W及在所述寄存器不可被直接訪問的條件 上,執(zhí)行允許所述寄存器可被直接訪問的動作。
[0177] 2.根據(jù)實(shí)施方案1所述的方法,其中所述動作包括注入至少一個(gè)UOP或改變所述狀 態(tài)。
[0178] 3.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述動作包括改變所述狀態(tài)。
[0179] 4.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述動作包括使所述寄存器中的最 低有效位化SB)與物理寄存器的LSB對齊。
[0180] 5.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述訪問包括讀操作和寫操作。
[0181 ] 6.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述訪問包括寫操作。
[0182] 7.根據(jù)任何先前實(shí)施方案中所述的方法,其中將所述封裝寄存器的位存儲在所述 物理存儲器的至少一個(gè)物理寄存器中。
[0183] 8.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述物理存儲器包括物理寄存器文 件。
[0184] 9.根據(jù)任何先前實(shí)施方案中所述的方法,其包括跟蹤所述動作和后續(xù)動作、或所 述寄存器的封裝和所述寄存器的后續(xù)封裝W創(chuàng)建歷史記錄,W及基于所述歷史記錄確定是 否需要未來動作或需要哪種未來動作。
[0185] 10.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述動作包括在訪問之前注入至 少一個(gè)UOP,所述至少一個(gè)UOP將所述封裝寄存器的所述位的至少一部分存儲在第二物理寄 存器中。
[0186] 11.根據(jù)任何先前實(shí)施方案中所述的方法,其中在執(zhí)行所述注入的至少一個(gè)UOP之 后,在所述第二物理寄存器處可直接訪問所述寄存器。
[0187] 12.根據(jù)任何先前實(shí)施方案中所述的方法,其中在執(zhí)行所述注入的至少一個(gè)UOP之 后,所述寄存器的最低有效位化SB)與所述第二物理寄存器的LSB對齊。
[0188] 13.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述狀態(tài)指示所述封裝寄存器是 否存儲在單個(gè)物理寄存器內(nèi)或一個(gè)W上的物理寄存器內(nèi)。
[0189] 14.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述狀態(tài)指示將所述存儲的封裝 寄存器布置在至少一個(gè)物理寄存器內(nèi)的順序。
[0190] 15.根據(jù)任何先前實(shí)施方案中所述的方法,其中將所述封裝寄存器各自映射到物 理寄存器。
[0191] 16.根據(jù)任何先前實(shí)施方案中所述的方法,其中多個(gè)邏輯寄存器名稱化RN)各自與 所述封裝寄存器中的一個(gè)或多個(gè)相關(guān)聯(lián),并且將每個(gè)LRN映射到與物理寄存器相關(guān)聯(lián)的物 理寄存器名稱(PRN)。
[0192] 17.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述狀態(tài)反映所述封裝寄存器的 每個(gè)LRN到PRN映射的有效性。
[0193] 18.根據(jù)任何先前實(shí)施方案中所述的方法,其中如果所述寄存器的最低有效位 (LSB)與物理寄存器的LSB對齊,那么所述寄存器可被直接訪問。
[0194] 19.根據(jù)任何先前實(shí)施方案中所述的方法,其中如果在訪問所述位之前不移動存 儲在物理寄存器中的寄存器的位的情況下,所述寄存器可被所述指令訪問,那么可直接訪 問所述寄存器。
[01M] 20.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述寄存器是浮點(diǎn)寄存器。
[0196] 21.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述指令是浮點(diǎn)指令。
[0197] 22.根據(jù)任何先前實(shí)施方案中所述的方法,其中在所述指令的至少一個(gè)解碼UOP前 面注入所述注入的至少一個(gè)UOP,使得所述注入的至少一個(gè)UOP在所述解碼的至少一個(gè)UOP 之前被執(zhí)行。
[0198] 23.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述注入的至少一個(gè)UOP包括兩個(gè) uop〇
[0199] 24.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述兩個(gè)UOP被配置來原子性地執(zhí) 行。
[0200] 25.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述兩個(gè)U0P中的兩個(gè)被配置來在 更新狀態(tài)之前執(zhí)行。
[0201] 26.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述封裝寄存器包括一個(gè)四精度 寄存器、兩個(gè)雙精度寄存器、和四個(gè)單精度寄存器。
[0202] 27.根據(jù)任何先前實(shí)施方案中所述的方法,其中在寫入所述封裝寄存器中的一個(gè) 之后,所述封裝寄存器中被封裝在其內(nèi)的較大一個(gè)是可讀的。
[0203] 28.根據(jù)任何先前實(shí)施方案中所述的方法,其中所述封裝寄存器是架構(gòu)寄存器。
[0204] 29.-種被配置來訪問存儲在物理寄存器中的封裝寄存器的設(shè)備,其包括:存儲所 述封裝寄存器的狀態(tài)的電路;在指令訪問所述封裝寄存器的寄存器的條件上,基于所述狀 態(tài)確定所述寄存器是否可被直接訪問的電路;和在所述寄存器不可被直接訪問的條件上, 執(zhí)行允許所述寄存器可被直接訪問的動作的電路。
[0205] 30.根據(jù)實(shí)施方案29中所述的設(shè)備,其中所述動作包括注入至少一個(gè)uop。
[0206] 31.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述動作包括改變所述狀態(tài)。
[0207] 32.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述動作包括使所述寄存器的最 低有效位化SB)與物理寄存器的LSB對齊。
[0208] 33.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述訪問是讀操作。
[0209] 34.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述訪問是寫操作。
[0210] 35.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中將所述封裝寄存器的位存儲在所 述物理存儲器的至少一個(gè)物理寄存器中。
[0211] 36.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述物理存儲器包括物理寄存器 文件。
[0212] 37.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其包括跟蹤所述動作和后續(xù)動作、或所 述寄存器的封裝和所述寄存器的后續(xù)封裝的電路;和基于所述歷史記錄確定是否需要未來 動作或需要哪種未來動作的電路。
[0213] 38.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其包括在訪問之前注入將所述封裝寄 存器的所述位的至少一部分存儲在第二物理寄存器中的至少一個(gè)UOP的電路。
[0214] 39.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中在執(zhí)行所述注入的至少一個(gè)UOP之 后,在所述第二物理寄存器處可直接訪問所述寄存器。
[0215] 40.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中在執(zhí)行所述注入的至少一個(gè)UOP之 后,使所述寄存器的最低有效位化SB)與所述第二物理寄存器的LSB對齊。
[0216] 41.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述狀態(tài)指示所述封裝寄存器是 否存儲在單個(gè)物理寄存器內(nèi)或一個(gè)W上的物理寄存器內(nèi)。
[0217] 42.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述狀態(tài)指示將所述存儲的封裝 寄存器布置在至少一個(gè)物理寄存器內(nèi)的順序。
[0218] 43.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中將所述封裝寄存器各自映射到物 理寄存器。
[0219] 44.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中多個(gè)邏輯寄存器名稱化RN)各自與 所述封裝寄存器中的一個(gè)或多個(gè)相關(guān)聯(lián),并且將每個(gè)LRN映射到與物理寄存器相關(guān)聯(lián)的物 理寄存器名稱(PRN)。
[0220] 45.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述狀態(tài)反映所述封裝寄存器的 每個(gè)LRN到PRN映射的有效性。
[0221] 46.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中如果所述寄存器的最低有效位 (LSB)與物理寄存器的LSB對齊,那么可直接訪問所述寄存器。
[0222] 47.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中如果在訪問所述位之前不移動存 儲在物理寄存器中的寄存器的位的情況下,所述寄存器可被所述指令訪問,那么可直接訪 問所述寄存器。
[0223] 48.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述寄存器是浮點(diǎn)寄存。
[0224] 49.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述指令是浮點(diǎn)指令。
[0225] 50.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中在所述指令的至少一個(gè)解碼UOP前 面注入所述注入的至少一個(gè)UOP,使得所述注入的至少一個(gè)UOP在所述解碼的至少一個(gè)UOP 之前被執(zhí)行。
[0226] 51.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述注入的至少一個(gè)uop包括兩個(gè) uop〇
[0227] 52.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,所述兩個(gè)uop被配置來原子性地執(zhí)行。
[0228] 53.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述兩個(gè)uop中的兩個(gè)被配置來在 更新狀態(tài)之前執(zhí)行。
[0229] 54.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述封裝寄存器包括一個(gè)四精度 寄存器、兩個(gè)雙精度寄存器、和四個(gè)單精度寄存器。
[0230] 55.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,在寫入所述封裝寄存器中的一個(gè)之后, 所述封裝寄存器中被封裝在其內(nèi)的較大一個(gè)是可讀的。
[0231] 56.根據(jù)任何先前實(shí)施方案中所述的設(shè)備,其中所述封裝寄存器是架構(gòu)寄存器。
【主權(quán)項(xiàng)】
1. 一種用于訪問存儲于物理存儲器中的封裝寄存器的方法,其包括: 存儲所述封裝寄存器的狀態(tài); 在指令包括所述封裝寄存器的寄存器的訪問的條件上,基于所述封裝寄存器的所述狀 態(tài)確定所述寄存器是否可被直接訪問;以及 在所述寄存器不可被直接訪問的條件上,執(zhí)行允許所述寄存器可被直接訪問的動作。2. 根據(jù)權(quán)利要求1所述的方法,其中所述動作包括注入至少一個(gè)uop、改變所述狀態(tài)、或 使所述寄存器的最低有效位(LSB)與物理寄存器的LSB對齊中的至少一個(gè)。3. 根據(jù)權(quán)利要求1所述的方法,其中所述訪問包括讀操作和寫操作,并且所述動作允許 寄存器被直接讀取或?qū)懭搿?. 根據(jù)權(quán)利要求1所述的方法,其中將所述封裝寄存器的位存儲在物理寄存器文件的 至少一個(gè)物理寄存器中。5. 根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括: 跟蹤所述動作和至少一個(gè)后續(xù)動作、所述寄存器的所述封裝和所述寄存器的至少一個(gè) 后續(xù)封裝、或所述寄存器的所述狀態(tài)和至少一個(gè)后續(xù)狀態(tài)中的至少一個(gè),以創(chuàng)建歷史記錄, 以及 基于所述歷史記錄確定是否需要未來動作或需要哪種未來動作。6. 根據(jù)權(quán)利要求4所述的方法,其中所述動作包括在訪問之前注入至少一個(gè)uop,所述 至少一個(gè)uop將所述封裝寄存器的所述位的至少一部分存儲在第二物理寄存器中。7. 根據(jù)權(quán)利要求1所述的方法,其中所述狀態(tài)指示所述封裝寄存器是否存儲在單個(gè)物 理寄存器內(nèi)、所述封裝寄存器是否存儲在一個(gè)以上的物理寄存器內(nèi)、或?qū)⑺龃鎯Φ姆庋b 寄存器布置在至少一個(gè)物理寄存器內(nèi)的順序中的至少一個(gè)。8. 根據(jù)權(quán)利要求1所述的方法,其中將所述封裝寄存器各自映射到物理寄存器。9. 根據(jù)權(quán)利要求1所述的方法,其中多個(gè)邏輯寄存器名稱(LRN)各自與所述封裝寄存器 中的一個(gè)或多個(gè)相關(guān)聯(lián),并且其中將每個(gè)LRN映射到與物理寄存器相關(guān)聯(lián)的物理寄存器名 稱(PRN)。10. 根據(jù)權(quán)利要求9所述的方法,其中所述狀態(tài)反映所述封裝寄存器的每個(gè)LRN到PRN映 射的有效性。11. 根據(jù)權(quán)利要求1所述的方法,其中如果所述寄存器的最低有效位(LSB)與物理寄存 器的LSB對齊,那么可直接訪問所述寄存器。12. 根據(jù)權(quán)利要求1所述的方法,其中如果在訪問所述位之前不移動存儲在物理寄存器 中的寄存器的位的情況下,所述寄存器可被所述指令訪問,那么可直接訪問所述寄存器。13. 根據(jù)權(quán)利要求2所述的方法,其中在所述指令的至少一個(gè)解碼uop前面注入所述注 入的至少一個(gè)uop,使得所述注入的至少一個(gè)uop在所述解碼的至少一個(gè)uop之前被執(zhí)行。14. 根據(jù)權(quán)利要求1所述的方法,其中所述封裝寄存器包括一個(gè)四精度寄存器、兩個(gè)雙 精度寄存器、和四個(gè)單精度寄存器。15. 根據(jù)權(quán)利要求1所述的方法,其中在寫入所述封裝寄存器中的一個(gè)之后,所述封裝 寄存器中被封裝在其內(nèi)的較大一個(gè)是可讀的。16. 根據(jù)權(quán)利要求1所述的方法,其中所述封裝寄存器是架構(gòu)寄存器。17. -種用于訪問存儲在物理寄存器中的封裝寄存器的設(shè)備,其包括: 電路,其存儲所述封裝寄存器的狀態(tài); 電路,其在指令訪問所述封裝寄存器的寄存器的條件上,基于所述狀態(tài)確定所述寄存 器是否可被直接訪問;和 電路,其在所述寄存器不可被直接訪問的條件上,執(zhí)行允許所述寄存器可被直接訪問 的動作。18. 根據(jù)權(quán)利要求17所述的設(shè)備,其中所述動作包括注入至少一個(gè)uop、改變所述狀態(tài)、 或使所述寄存器的最低有效位(LSB)與物理寄存器的LSB對齊中的至少一個(gè)。19. 根據(jù)權(quán)利要求17所述的設(shè)備,其進(jìn)一步包括: 電路,其跟蹤所述動作和至少一個(gè)后續(xù)動作、所述寄存器的所述封裝和所述寄存器的 至少一個(gè)后續(xù)封裝、或所述寄存器的所述狀態(tài)和至少一個(gè)后續(xù)狀態(tài)中的至少一個(gè),以創(chuàng)建 歷史記錄;和 電路,其基于所述歷史記錄確定是否需要未來動作或需要哪種未來動作。20. 根據(jù)權(quán)利要求17所述的設(shè)備,其中所述狀態(tài)指示所述封裝寄存器是否存儲在單個(gè) 物理寄存器內(nèi)、所述封裝寄存器是否存儲在一個(gè)以上的物理寄存器內(nèi)、或?qū)⑺龃鎯Φ姆?裝寄存器布置在至少一個(gè)物理寄存器內(nèi)的順序中的至少一個(gè)。
【文檔編號】G06F9/30GK105993000SQ201480064205
【公開日】2016年10月5日
【申請日】2014年10月24日
【發(fā)明人】羅伯特·E·匯達(dá)納, 杰伊·E·傅禮士曼, 邁克爾·C·賽德馬克, 邁克爾·埃斯特利克, 理查德·麥高恩, 埃米爾·達(dá)佩斯
【申請人】超威半導(dǎo)體公司