專利名稱:用于裝入/移動(dòng)以及復(fù)制指令的處理器、系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器的裝入/移動(dòng)以及復(fù)制指令。
背景技術(shù):
系統(tǒng)體系結(jié)構(gòu)說明處理器操作的模式以及被提供用于支持操作系統(tǒng)的機(jī)制, 該機(jī)制包括面向系統(tǒng)的寄存器和數(shù)據(jù)結(jié)構(gòu)以及面向系統(tǒng)的指令。該系統(tǒng)體系結(jié)構(gòu)也 提供用于在實(shí)際地址和保護(hù)模式之間切換的必要機(jī)制。
對(duì)系統(tǒng)體系結(jié)構(gòu)引入單指令、多數(shù)據(jù)(SIMD)技術(shù)提供了對(duì)包含于64位寄 存器內(nèi)的封包整數(shù)數(shù)據(jù)的并行計(jì)算。SIMD對(duì)例如高級(jí)媒體、圖像處理和數(shù)據(jù) 壓縮應(yīng)用中的處理器提供增強(qiáng)性能。
發(fā)明內(nèi)容
為了解決以上問題,本發(fā)明的第一方面提供了一種處理器,包括存儲(chǔ)單 元;控制器邏輯;以及執(zhí)行單元數(shù)據(jù)路徑,包括算術(shù)邏輯單元和通用寄存器組, 所述算術(shù)邏輯單元響應(yīng)于指令執(zhí)行功能,其中一個(gè)指令包括移動(dòng)和復(fù)制指令, 促使算術(shù)處理器將源的多個(gè)位組裝入目的寄存器的多個(gè)不連續(xù)的位組,并把所 述多個(gè)不連續(xù)的位組中的每個(gè)組復(fù)制到該目的寄存器的后續(xù)位組中。
本發(fā)明的第二方面提供一種方法,所述方法包含在處理器中,將源的多 個(gè)位組裝入到目的寄存器的多個(gè)不連續(xù)的位組;以及把所述目的寄存器中的所 述多個(gè)不連續(xù)的位組中的每個(gè)組復(fù)制到該目的寄存器的后續(xù)位組中。
本發(fā)明的第三方面提供一種系統(tǒng),包括存儲(chǔ)第一指令的存儲(chǔ)器;執(zhí)行所 述第一指令的處理器,使得該處理器將源的多個(gè)位組裝入到目的寄存器的多 個(gè)不連續(xù)的位組中;以及把所述目的寄存器中的所述多個(gè)不連續(xù)的位組中的每個(gè)組復(fù)制到該目的寄存器的后續(xù)位組中。
本發(fā)明的第四方面提供一種處理器,包括存儲(chǔ)單元;控制器邏輯;以及 執(zhí)行單元數(shù)據(jù)路徑,包括算術(shù)邏輯單元和通用寄存器組,所述算術(shù)邏輯單元響 應(yīng)于指令執(zhí)行功能,其中一個(gè)指令包括移動(dòng)封包單浮點(diǎn)高和復(fù)制指令,該指令 促使處理器將源的位[63-32]裝入128位的目的寄存器的位[31-0]中,將目的寄 存器的位[31-0]復(fù)制到目的寄存器的位[63-32]中,將源的位[127-96]裝入目的寄 存器的位[95-64]中,以及在所述目的寄存器的位[127-96]中復(fù)制目的寄存器的 位[95-64]。
本發(fā)明的第五方面提供一種在處理器中執(zhí)行的方法,所述方法包含訪問 源的位[127-0];以及在目的寄存器的位[31-0]中裝入源的位[63-32],并在目的 寄存器的位[63-32]中復(fù)制目的寄存器的位[31-0];以及在所述目的寄存器的位 [95-64]中裝入源的位[127-96],并且在目的寄存器的位[127-96]中復(fù)制目的寄存 器的位[95-64]。
本發(fā)明的第六方面提供一種系統(tǒng),包括存儲(chǔ)第一指令的存儲(chǔ)器;執(zhí)行所 述第一指令的處理器,使得所述處理器在128位的目的寄存器的位[31-0]中 裝入源的位[63-32];在所述目的寄存器的位[63-32]中復(fù)制所述目的寄存器的位 [31-0];在所述目的寄存器的位[95-64]中裝入源的位[127-96];以及在所述目的 寄存器的位[127-96]中復(fù)制所述目的寄存器的位[95-64]。
本發(fā)明的第七方面提供一種處理器,包括存儲(chǔ)單元;控制器邏輯;以及 執(zhí)行單元數(shù)據(jù)路徑,包括算術(shù)邏輯單元和通用寄存器組,所述算術(shù)邏輯單元響 應(yīng)于指令執(zhí)行功能,其中一個(gè)指令包括移動(dòng)封包單浮點(diǎn)低和復(fù)制指令,該指令 促使處理器把源的位[31-0]裝入到128位的目的寄存器的位[31-0]中,在所述目 的寄存器的位[63-32]中復(fù)制該目的寄存器的位[31-0],在所述目的寄存器的位 [95-64]中裝入所述源的位[95-64],以及在所述目的寄存器的位[127-96]中復(fù)制 所述目的寄存器的位[95-64〗。
本發(fā)明的第八方面提供一種方法,所述方法包含在處理器中,在128位 的目的寄存器的位[31-0]中裝入源的位[31-0];在所述目的寄存器的位[63-32]中 復(fù)制目的寄存器的位[31-0];在所述目的寄存器的位[95-64]中裝入所述源的位 [95-64];以及在所述目的寄存器的位[127-96]中復(fù)制所述目的寄存器的位 [95-64]。
本發(fā)明的第九方面提供一種系統(tǒng),包括存儲(chǔ)第一指令的存儲(chǔ)器;執(zhí)行所述第一指令的處理器,使得所述處理器在128位的目的寄存器的位[31-0]中 裝入源的位[31-0];在所述目的寄存器的位[63-32]中復(fù)制所述目的寄存器的位 [31-0];在所述目的寄存器的位[95-64]中裝入所述源的位[95-64];以及在所述 目的寄存器的位[127-96]中復(fù)制所述目的寄存器的位[95-64]。
圖1是處理器的框圖。
圖2是執(zhí)行環(huán)境的框圖。
圖3是字節(jié)順序基本數(shù)據(jù)類型的框圖。
圖4示出浮點(diǎn)格式。
圖5示出概括各種SIMD擴(kuò)展、數(shù)據(jù)類型以及該數(shù)據(jù)類型如何被封包到寄 存器中的表。
具體實(shí)施例方式
參考圖1,示出處理器10。該處理器IO是三路超級(jí)計(jì)數(shù)器、管道體系結(jié) 構(gòu)。處理器10通過使用并行處理技術(shù),平均能夠在每個(gè)時(shí)鐘周期中解碼、分 派以及完成(引出)三條指令的執(zhí)行。為處理這個(gè)水平的指令吞吐量,處理器 IO使用去耦的12階段管道,該管道支持無序的指令執(zhí)行。處理器10的微體系 結(jié)構(gòu)管道被分為4個(gè)部分,g卩, 一級(jí)高速緩存12和二級(jí)高速緩存14、前端16、 無序執(zhí)行核心18,以及引出部分20。指令和數(shù)據(jù)通過與系統(tǒng)總線24連接的總 線接口單元22供給給這些單元。前端16以程序順序向該無序核心18供給指 令,該核心具有非常高的執(zhí)行帶寬且能夠執(zhí)行具有1/2時(shí)鐘周期延時(shí)的基本整 數(shù)操作。前端16讀取指令并將指令解碼為稱作微操作()i-ops)的簡(jiǎn)單操作。前端 16能以最初的程序順序在每周期將多個(gè)微操作提交到無序核心18。前端16執(zhí) 行幾個(gè)基本功能。例如,前端16執(zhí)行很有可能被執(zhí)行的預(yù)取指令、讀取還沒 有被預(yù)取的指令、將指令解碼為微操作、產(chǎn)生復(fù)雜指令和專用碼的微碼、遞送 來自執(zhí)行軌跡高速緩存26的己經(jīng)解碼的指令,以及使用分支預(yù)測(cè)單元28中的 高級(jí)算法來預(yù)測(cè)分支。
處理器IO的前端16被設(shè)計(jì)為解決高速管道微處理器中的某些普通問題。 例如,這些問題中的兩個(gè)是延遲的主要來源。這是解碼從目標(biāo)讀取且由于高速 緩存線中間的分支或分支目標(biāo)而浪費(fèi)解碼帶寬的指令的時(shí)間。執(zhí)行軌跡高速緩存26通過保存已經(jīng)解碼的指令而處理這兩個(gè)問題。通過 轉(zhuǎn)換引擎(未示出)來讀取指令并對(duì)指令進(jìn)行解碼,且將該指令構(gòu)建成稱作軌 跡的微操作序列。這些微操作軌跡被保存在軌跡高速緩存26中。來自最有可 能的分支目標(biāo)的指令立即跟隨在該分支的后面,而不考慮指令地址的連續(xù)性。 一旦建立軌跡,則搜索軌跡高速緩存26查找跟隨在該軌跡后面的指令。若該 指令顯現(xiàn)為現(xiàn)有軌跡內(nèi)的第一條指令,則對(duì)來自存儲(chǔ)器層次的指令30的讀取 和解碼就停止,且軌跡高速緩存26變成新的指令源。
執(zhí)行軌跡高速緩存18和轉(zhuǎn)換引擎(未示出)具有協(xié)同操作分支預(yù)測(cè)硬件。 使用分支目標(biāo)緩沖器(BTBS)28,基于分支目標(biāo)的線性地址來預(yù)測(cè)該分支目標(biāo), 且盡快讀取該分支目標(biāo)。若分支目標(biāo)確實(shí)被緩沖在那里,則從軌跡高速緩存26 讀取該分支目標(biāo);否則,從存儲(chǔ)器層次讀取該分支目標(biāo)。轉(zhuǎn)換引擎的分支預(yù)測(cè) 信息被用來沿著最有可能的路徑來形成軌跡。
核心18無序地執(zhí)行指令,允許處理器IO重排序指令,以使若一個(gè)微操作 在等待數(shù)據(jù)或競(jìng)爭(zhēng)執(zhí)行資源時(shí)被延遲,則其它在程序順序中較后的微操作可在 其周圍繼續(xù)進(jìn)行。處理器10使用幾個(gè)緩沖器來使T操作(T-ops)流平滑。這意 味著當(dāng)管道的一部分經(jīng)歷延遲時(shí),該延遲可被其它并行執(zhí)行的操作或者在緩沖 器中先前排隊(duì)等候的微操作執(zhí)行覆蓋。
核心18被設(shè)計(jì)為促進(jìn)并行執(zhí)行。核心18每周期最多可分派6個(gè)微操作; 注意這個(gè)超過軌跡高速緩存26以及引出20微操作帶寬。絕大多數(shù)的管道可在 每周期開始執(zhí)行新的微操作,以使可在任何時(shí)間對(duì)每個(gè)管道處理幾個(gè)指令。多 個(gè)算術(shù)邏輯單元(ALU)指令可在每周期開始兩個(gè),且多個(gè)浮點(diǎn)指令可在每?jī)蓚€(gè) 周期開始一個(gè)。最終,微操作的數(shù)據(jù)輸入一準(zhǔn)備好且資源一旦可用,微指令就 可開始無序的執(zhí)行。
引出部分20接收來自執(zhí)行核心18的執(zhí)行微操作的結(jié)果,并對(duì)該結(jié)果進(jìn)行 處理,以使根據(jù)最初程序順序來更新適當(dāng)?shù)捏w系結(jié)構(gòu)狀態(tài)。為語義上的正確執(zhí) 行,執(zhí)行的結(jié)果在其引出之前是以最初的程序順序進(jìn)行的??蓪惓W鳛橐?的指令觸發(fā)。這樣,異常不能隨機(jī)地出現(xiàn)。它們以正確的順序出現(xiàn),并且處理 器10可在執(zhí)行后正確的重新啟動(dòng)。
當(dāng)微操作完成其結(jié)果并將其結(jié)果寫到目的文件的時(shí)候,該微操作引出。每 周期引出的微操作可達(dá)3個(gè)。引出部分20中的重排序緩沖器(ROB)(未示出) 是處理器10中的單元,它緩沖已完成的微操作、按照順序更新體系結(jié)構(gòu)狀態(tài),并管理異常的排序。引出部分20也跟蹤分支并將已更新的分支目標(biāo)信息發(fā)送到BTB28,以更 新分支歷史。如此,不再需要的軌跡可從軌跡高速緩存26中清除,并且可讀 取新的分支路徑,這是基于已更新的分支歷史信息的。參考圖2,示出執(zhí)行環(huán)境50。給予處理器10上運(yùn)行的任何程序或任務(wù)(圖 1中的) 一組資源,用于執(zhí)行指令并用于保存代碼、數(shù)據(jù)和狀態(tài)信息。這些資 源組成處理器10的執(zhí)行環(huán)境50。在處理器10上運(yùn)行的應(yīng)用程序和操作系統(tǒng)或 者可執(zhí)行文件共同使用執(zhí)行環(huán)境50。執(zhí)行環(huán)境50包括基本程序執(zhí)行寄存器52、 地址空間54、浮點(diǎn)單元(FPU)寄存器56、多媒體擴(kuò)展寄存器(MMX)58,以及 SIMD擴(kuò)展(SSE和SSE2)寄存器60。在處理器10上運(yùn)行的任何任務(wù)或程序可尋址直到40字節(jié)(232字節(jié))的線性 地址基54以及直到640字節(jié)(236字節(jié))的物理地址空間。地址空間54可為平坦 的或?yàn)榉侄蔚?。使用物理地址擴(kuò)展機(jī)制,可尋址236"的物理地址空間?;境绦驁?zhí)行寄存器52包括8個(gè)通用寄存器62、6個(gè)段寄存器64、EFLAGS 寄存器66,以及EIP (指令指針)寄存器68?;境绦驁?zhí)行寄存器52提供基 本執(zhí)行環(huán)境,在其中執(zhí)行一組通用指令。這些指令對(duì)字節(jié)、字和雙字整數(shù)執(zhí)行 基本整數(shù)算術(shù),處理程序流控制,操作位和字節(jié)強(qiáng)度,并尋址存儲(chǔ)器。FPU寄存器56包括8個(gè)FPU數(shù)據(jù)寄存器70、 FPU控制寄存器72、狀態(tài) 寄存器74、 FPU指令指針寄存器76、 FPU操作數(shù)(數(shù)據(jù))指針寄存器78、 FPU 標(biāo)簽寄存器80以及FPU操作碼寄存器82。 FPU寄存器56提供執(zhí)行環(huán)境,用 于操作單精度、雙精度,以及雙擴(kuò)展精度浮點(diǎn)值,字、雙字,以及四字整數(shù), 還有二進(jìn)制編碼的十進(jìn)制(BCD)值。8個(gè)多媒體擴(kuò)展寄存器58支持64位封包字節(jié)、字和雙字整數(shù)上的單指令、 多數(shù)據(jù)(SIMD)操作的執(zhí)行。SIMD擴(kuò)展(SSE和SSE2)寄存器60包括8個(gè)擴(kuò)展多媒體(XMM)數(shù)據(jù)寄存 器84和MXCSR寄存器86。 SIMD擴(kuò)展(SSE和SSE2)寄存器60支持128位封 包單精度和雙精度浮點(diǎn)值以及128位封包字節(jié)、字、雙字以及四字整數(shù)上的 SIMD操作的執(zhí)行。桟(未示出)支持過程或子例程調(diào)用以及過程或子例程之間的參數(shù)傳遞。通用寄存器62可用于保存操作數(shù)和指針。段寄存器64保存的段選擇器可 達(dá)6個(gè)。EFLAGS (程序狀態(tài)和控制)寄存器66報(bào)告正被執(zhí)行的程序狀態(tài),并允許處理器的有限(應(yīng)用程序級(jí))控制。EIP (指令指針)寄存器68包含指向 下一條要執(zhí)行的指令的32位指針。32位通用寄存器62被提供用于保存邏輯和算術(shù)操作的操作數(shù)、地址計(jì)算 的操作數(shù),以及存儲(chǔ)器指針。段寄存器64保存64位段選擇器。段選擇器是識(shí) 別存儲(chǔ)器中段的特別指針。為訪問存儲(chǔ)器中的特定段,該段的段選擇器必須出 現(xiàn)在適當(dāng)?shù)亩渭拇嫫?4中。當(dāng)編寫應(yīng)用代碼時(shí),程序員通常用匯編命令和符號(hào)生成段選擇器。然后, 匯編程序和其它的工具產(chǎn)生與這些命令和符號(hào)相關(guān)聯(lián)的實(shí)際段選擇器值。若寫 系統(tǒng)代碼,則程序設(shè)計(jì)員可能需要直接產(chǎn)生段選擇器。如何使用段寄存器64取決于操作系統(tǒng)或可執(zhí)行文件正使用的存儲(chǔ)器管理 模式的類型。當(dāng)使用平坦(未分段)存儲(chǔ)器模式時(shí),段寄存器64被裝入指向 重疊段的段選擇器,它們每個(gè)開始于線性地址空間上的地址零。然后,這些重 疊的段包括該程序的線性地址空間。通常,兩個(gè)重疊段被定義 一個(gè)用于代碼, 而另一個(gè)用于數(shù)據(jù)和棧。段寄存器64的CS段寄存器(未示出)指向代碼段, 且所有其它的段寄存器指向數(shù)據(jù)和棧段。當(dāng)使用分段存儲(chǔ)器模式時(shí),每個(gè)段寄存器64 —般被裝入不同的段選擇器, 以使每個(gè)段寄存器64指向線性地址空間內(nèi)的不同段。在任何時(shí)間,程序可這 樣訪問直到線性地址空間中的6個(gè)段。為訪問沒有被其中一個(gè)段寄存器64指 到的段,程序首先裝入要被訪問的段選擇器到段寄存器64中。32位EFLAGS寄存器66包含一組狀態(tài)標(biāo)記、控制標(biāo)記,以及一組系統(tǒng)標(biāo) 記。可使用專用指令來直接修改EFLAGS寄存器66中的某些標(biāo)記。沒有指令 允許整個(gè)寄存器66被直接檢查或修改。然而,下面的指令可被用來將移動(dòng)標(biāo) 記組移入或移出過程棧或通用寄存器LAHF、 SAHF、 push-F、 push-FD、 pop-F, 以及pop-FD。在EFLAGS寄存器66的內(nèi)容已經(jīng)被傳遞到過程?;蛲ㄓ眉拇嫫?之后,可使用處理器IO位操作指令來檢查和修改該標(biāo)記。當(dāng)暫停任務(wù)時(shí),處理器10自動(dòng)保存正被暫停任務(wù)的任務(wù)狀態(tài)段(TSS)(未 示出)中的EFLAGS寄存器66的狀態(tài)。當(dāng)將其自身綁定到新的任務(wù)時(shí),處理 器10將來自新的任務(wù)程序狀態(tài)寄存器(PSS,未示出)的數(shù)據(jù)裝入EFLAGS寄存 器66o當(dāng)調(diào)用中斷或異常處理程序過程時(shí),處理器10自動(dòng)保存過程棧上的 EFLAGS寄存器66的狀態(tài)。當(dāng)用任務(wù)開關(guān)來處理中斷或異常時(shí),EFLAGS寄存器66的狀態(tài)被保存在正被暫停任務(wù)的TSS上。用在處理器10中的基本數(shù)據(jù)類型是字節(jié)、字、雙字、四字和雙四字。字 節(jié)是8位,字是兩個(gè)字節(jié)(16位),雙字是4個(gè)字節(jié)(32位),四字是8個(gè) 字節(jié)(64位),以及雙四字是16個(gè)字節(jié)(128位)。參考圖3,它示出每個(gè)基本數(shù)據(jù)類型在作為存儲(chǔ)器中的操作數(shù)引用時(shí)的字 節(jié)順序。每個(gè)數(shù)據(jù)類型的低字節(jié)(位0 7)占用存儲(chǔ)器中的最低地址,且該地 址也是該操作數(shù)的地址。字、雙字和四字不必在存儲(chǔ)器中在自然邊界上對(duì)齊。字、雙字、四字的自 然邊界分別是已編號(hào)為偶數(shù)的地址、可被4整除的地址,以及被8整除的地址。 然而,為改善程序的性能,數(shù)據(jù)結(jié)構(gòu)(尤其是棧)每逢可能的時(shí)候就應(yīng)在自然 邊界上對(duì)齊。關(guān)于這個(gè)的原因是處理器10需要兩個(gè)存儲(chǔ)器訪問來進(jìn)行不對(duì)齊 的存儲(chǔ)器訪問,然而已經(jīng)對(duì)齊的訪問需要一個(gè)存儲(chǔ)器訪問??缭?字節(jié)邊界的 字或雙字操作數(shù)或者跨越8字節(jié)邊界的四字操作數(shù)被認(rèn)為是未對(duì)齊,且需要兩 個(gè)單獨(dú)的存儲(chǔ)器總線周期來訪問。開始于奇地址但不跨越字邊界的字被認(rèn)為是 已經(jīng)對(duì)齊的,且其仍舊能夠在一個(gè)總線周期內(nèi)被訪問。對(duì)雙四字操作的某些指令需要存儲(chǔ)器操作數(shù)在自然邊界上對(duì)齊。若未對(duì)齊 的操作數(shù)被指定的話,則這些指令產(chǎn)生普通保護(hù)異常^GP)。雙四字的自然邊界 是任何可被16整除的地址。其它對(duì)雙四字操作的指令允許未對(duì)齊的訪問,而 不產(chǎn)生普通保護(hù)異常,然而,我們需要附加的存儲(chǔ)器總線周期來從存儲(chǔ)器訪問 未對(duì)齊數(shù)據(jù)。盡管字節(jié)、字和雙字是處理器10的基本數(shù)據(jù)類型,但是某些指令支持這 些數(shù)據(jù)類型的附加解釋,以允許對(duì)數(shù)字?jǐn)?shù)據(jù)類型執(zhí)行操作。例如,處理器10 定義兩種類型的整數(shù)無符號(hào)的和有符號(hào)的。無符號(hào)的整數(shù)是范圍從零到最大正數(shù)的普通二進(jìn)制數(shù)值,可在選擇的操作數(shù)大小內(nèi)對(duì)其進(jìn)行編碼。有符號(hào)的整 數(shù)是二的補(bǔ)碼二進(jìn)制數(shù)值,其既可被用來代表正整數(shù)值,也可以被用來代表負(fù)整數(shù)值。處理器10定義并操作3種浮點(diǎn)數(shù)據(jù)類型單精度浮點(diǎn)、雙精度浮點(diǎn),以 及雙擴(kuò)展精度浮點(diǎn)。這些數(shù)據(jù)類型的數(shù)據(jù)格式直接對(duì)應(yīng)于二進(jìn)制浮點(diǎn)算術(shù)如在 IEEE標(biāo)準(zhǔn)754中指定的格式。指針是存儲(chǔ)器中位置的地址。處理器IO定義兩種類型的指針近指針(32 位)和遠(yuǎn)指針(48位)。近指針是段內(nèi)32位偏移量(也稱作有效地址)。當(dāng)隱含地確定了被訪問的段的身份時(shí),近指針被用于平坦存儲(chǔ)器模型中的所有存儲(chǔ)器參考或分段模型中的參考。遠(yuǎn)指針是48位邏輯地址,其包含16位段選擇 器和32位偏移量。遠(yuǎn)指針被用于存儲(chǔ)器參考和已分段的存儲(chǔ)器模型,那里正 被訪問段的身份必須被顯式指定。位字段是連續(xù)的位序列。它可開始于存儲(chǔ)器中任何字節(jié)的任何比特位置, 且其包含的位可達(dá)32位。串可為位、字節(jié)、字或雙字的連續(xù)序列。位串可開 始于任何字節(jié)的任何比特位置,且其包含的位可達(dá)232—'位。字節(jié)串可包含字節(jié)、 字或雙字,其范圍可從零到232— 字節(jié)(4G字節(jié))。二進(jìn)制編碼的十進(jìn)制整數(shù)(BCD整數(shù))是具有范圍從0到9的有效值的無 符號(hào)4位整數(shù)。處理器10定義對(duì)位于一個(gè)或多個(gè)通用寄存器62或在一個(gè)或多 個(gè)FPU寄存器56中的BCD整數(shù)的操作。參考圖4,實(shí)數(shù)被表達(dá)為FPU 56浮點(diǎn)寄存器70中的浮點(diǎn)格式100。該浮 點(diǎn)格式包括3部分,S卩,符號(hào)102、有效數(shù)104和指數(shù)106。符號(hào)102是表明 該數(shù)是正(0)或負(fù)(1)的二進(jìn)制數(shù)值。有效數(shù)104有兩個(gè)部分1位二進(jìn)制 整數(shù)(也稱為J位)108和二進(jìn)制分?jǐn)?shù)110。整數(shù)位108通常沒有被表達(dá),而是 隱含的值。指數(shù)106是表達(dá)與有效數(shù)104相乘的以2為底的冪的二進(jìn)制整數(shù)。處理器10定義一組64位和128位封包數(shù)據(jù)類型并對(duì)其操作,這用于SIMD 操作中。這些數(shù)據(jù)類型包括基本數(shù)據(jù)類型(封包字節(jié)、字、雙字和四字)以及 用于封包整數(shù)和封包浮點(diǎn)操作中的基本數(shù)據(jù)類型的數(shù)字解釋。主要在64位多媒體擴(kuò)展寄存器58中操作64位SIMD數(shù)據(jù)類型?;镜?64位封包數(shù)據(jù)類型是封包字節(jié)、封包字和封包雙字。當(dāng)在多媒體擴(kuò)展寄存器 58中的這些數(shù)據(jù)類型上執(zhí)行數(shù)字SIMD操作時(shí),這些數(shù)據(jù)類型被解釋為包含字 節(jié)、字,或雙字整數(shù)值。主要在128位擴(kuò)展多媒體(MMX)寄存器84和存儲(chǔ)器54中操作128位封包 SIMD數(shù)據(jù)類型。基本的128位封包數(shù)據(jù)類型是封包字節(jié)、封包字、封包雙字 和封包四字。當(dāng)在擴(kuò)展多媒體(MMX)寄存器84中的這些基本數(shù)據(jù)類型上執(zhí)行 SIMD操作時(shí),這些數(shù)據(jù)類型被解釋為包含封包的或定標(biāo)器單精度浮點(diǎn)或雙精 度浮點(diǎn)值,或者被解釋為包含封包的字節(jié)、字、雙字、四字整數(shù)值。參考圖5,表120示出這樣的概要,它包含各種SIMD擴(kuò)展、被操作的數(shù) 據(jù)類型,以及這些數(shù)據(jù)類型如何被封包到多媒體擴(kuò)展寄存器58和擴(kuò)展多媒體 (XMM)寄存器84中。如上所述,多媒體擴(kuò)展指令操作包含于存儲(chǔ)器54、多媒體擴(kuò)展寄存器58, 和/或通用寄存器62內(nèi)的封包字節(jié)、字、雙字或四字整數(shù)操作數(shù)。這些多媒體 擴(kuò)展指令包括數(shù)據(jù)傳遞指令、轉(zhuǎn)換指令、封包算術(shù)指令、比較指令、邏輯指令、 移位和旋轉(zhuǎn)指令以及狀態(tài)管理指令。SIMD擴(kuò)展(SSE和SSE2)指令被分為一些組,如4組SIMD單精度浮點(diǎn) 指令,它在擴(kuò)展多媒體(XMM)寄存器84上操作,MXSCR指令,它在MXCSR 寄存器86上操作,64位SIMD整數(shù)指令,它在MMX寄存器58上操作,以及 可高速緩存性控制、預(yù)取還有對(duì)指令進(jìn)行排序的指令。一類指令是移動(dòng)/裝入以及復(fù)制類型指令。這些指令被稱為"組合的"指令, 這是因?yàn)樗鼈儾恍枰诒谎b入的數(shù)值上進(jìn)行顯式操作來獲得例如位的復(fù)制。本 體系結(jié)構(gòu)包括MOVDDUP指令、MOVSHDUP指令和MOVSLDUP指令。提供 這些指令以支持具有封包單精度和封包雙精度浮點(diǎn)數(shù)據(jù)類型的復(fù)雜算術(shù)。這些 指令可被用在不同的應(yīng)用中。例如,這些指令可改善信號(hào)處理應(yīng)用和包括處理 自然數(shù)據(jù)類型的應(yīng)用的效率。MOVDDUP指令是裝入/移動(dòng)64位(若源是寄存器的話,就是位[63-0]) 的移動(dòng)一個(gè)雙浮點(diǎn)并復(fù)制的SSE2指令。MOVDDUP指令的執(zhí)行返回和同一結(jié) 果寄存器的較低和較高的一半兩者中的相同的64位,也就是說,從該源復(fù)制 64位。這樣,若該源具有條目1/0,則該目的文件將具有條目1/0/1/0。 MOVEDDUP指令具有下面的格式MOVEDDUP目的,源其中源操作數(shù)是存儲(chǔ)器位置54或第二個(gè)擴(kuò)展多媒體(XMM)寄存器84,且 該目的操作數(shù)是第一個(gè)擴(kuò)展多媒體(XMM)寄存器84。該源包含雙浮點(diǎn)數(shù)據(jù)類型。在操作中,若源操作數(shù)是存儲(chǔ)器地址,則第一個(gè)擴(kuò)展多媒體(XMM)寄存器 的位[63-0]用該存儲(chǔ)器地址的位[63-0]來裝入,且第一個(gè)擴(kuò)展多媒體(XMM)寄存 器的位[127-64]用存儲(chǔ)器位置的位[63-0]來裝入。若源操作數(shù)是第二個(gè)擴(kuò)展多媒 體(XMM)寄存器,則第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[63-0]被設(shè)置為與第 二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[63-0]相等,且第一個(gè)擴(kuò)展多媒體(XMM)寄 存器的位[127-64]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[63-0]相等。線性地址對(duì)應(yīng)于參考存儲(chǔ)器數(shù)據(jù)的最低有效字節(jié)的地址。當(dāng)指出存儲(chǔ)器地 址時(shí),位于存儲(chǔ)器位置數(shù)據(jù)的16字節(jié)被裝入或被保存。當(dāng)使用寄存器一寄存13器形式的操作時(shí),128位源寄存器的內(nèi)容被復(fù)制到128位目的寄存器中。
MOVSHDUP指令是裝入/移動(dòng)128位并復(fù)制作為結(jié)果的寄存器中的條目1和3的移動(dòng)封包單浮點(diǎn)高并復(fù)制的SSE2指令。在128位源寄存器帶寬的例子中,每個(gè)條目是32位。特別地,具有為3/2/1/0條目的源(O是低的單精度條目,3是高的單精度條目),在MOVSHDUP指令執(zhí)行之后的結(jié)果寄存器將保存被復(fù)制以提供條目3/3/1/1的條目3和1。 MOVSHDUP具有下面的格式MOVSHDUP目的,源
其中源操作數(shù)代表存儲(chǔ)器位置54或第二個(gè)擴(kuò)展多媒體(XMM)寄存器84,且該目的操作數(shù)是第一個(gè)擴(kuò)展多媒體(XMM)寄存器84。該源操作數(shù)具有封包單浮點(diǎn)數(shù)據(jù)類型。
在操作中,若該源操作數(shù)是存儲(chǔ)器地址,則第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[31-0]用該存儲(chǔ)器地址的位[63-32]來裝入,第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位63-32用存儲(chǔ)器地址的位[63-32]來裝入,第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位95-64用存儲(chǔ)器地址的位[127-96]來裝入,且第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位127-96用存儲(chǔ)器地址的位[127-96]來裝入。
若源操作數(shù)是第二個(gè)擴(kuò)展多媒體(XMM)寄存器,則第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[31-0]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的為[63-32]相等,第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[63-32]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[83-32]相等,第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[95-64]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[127-96]相等,且第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[127-96]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[127-96]相等。
線性地址對(duì)應(yīng)于參考存儲(chǔ)器數(shù)據(jù)的最低有效字節(jié)的地址。當(dāng)指示存儲(chǔ)器地址時(shí),位于存儲(chǔ)器位置數(shù)據(jù)的16字節(jié)被裝入或被保存。當(dāng)使用寄存器一寄存器形式的操作時(shí),128位源寄存器的內(nèi)容被復(fù)制到128位目的寄存器中。
MOVSHDUP指令是復(fù)制裝入/移動(dòng)128位并復(fù)制條目0和2的移動(dòng)封包單浮點(diǎn)低并復(fù)制的SSE2指令。特別地,具有為3/2/1/0的源(0是較低的單精度條目),結(jié)果寄存器將保存條目2/2/0/0。 MOVSLDUP指令具有下面的格式
MOVSLDUP目的,源
其中該源操作數(shù)是存儲(chǔ)器位置54或第二個(gè)擴(kuò)展多媒體(XMM)寄存器84,且該目的操作數(shù)是第一個(gè)擴(kuò)展多媒體(XMM)寄存器84。該源操作數(shù)包含封包單浮點(diǎn)數(shù)據(jù)類型。
在操作中,若該源操作數(shù)是存儲(chǔ)器地址,則第一個(gè)擴(kuò)展多媒體(XMM)寄存
器的位[31-0]用該存儲(chǔ)器地址的位[31-0]來裝入,第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[63-32]用存儲(chǔ)器地址的位[31-0]來裝入,第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[95-64]用存儲(chǔ)器地址的位[95-64]來裝入,且第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[127-96]用存儲(chǔ)器地址的位[95-64]來裝入。若源操作數(shù)是寄存器,則第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[31-0]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[31-0]相等,第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[63-32]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[31-0]相等,第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[95-64]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[95-64]相等,且第一個(gè)擴(kuò)展多媒體(XMM)寄存器的位[127-96]被設(shè)置為與第二個(gè)擴(kuò)展多媒體(XMM)寄存器的位[95-64]相等。
線性地址對(duì)應(yīng)于參考存儲(chǔ)器數(shù)據(jù)的最低有效字節(jié)的地址。當(dāng)指示存儲(chǔ)器地址時(shí),位于存儲(chǔ)器位置數(shù)據(jù)的16字節(jié)被裝入或被保存。當(dāng)使用寄存器—寄存器形式的操作時(shí),128位源寄存器的內(nèi)容被復(fù)制到128位目的寄存器中。
因此,其它的實(shí)施例在下面權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
1. 一種處理器,包括一級(jí)數(shù)據(jù)緩存;二級(jí)緩存;分支預(yù)測(cè)單元;通用寄存器組;解碼單元,以解碼包括移動(dòng)和復(fù)制指令的多個(gè)封包的數(shù)據(jù)指令;以及執(zhí)行單元,以響應(yīng)于指令執(zhí)行功能,其中一個(gè)指令包括移動(dòng)和復(fù)制指令,使得所述處理器將將源的多個(gè)位組裝入目的寄存器的多個(gè)不連續(xù)的位組,并把所述多個(gè)不連續(xù)的位組中的每個(gè)組復(fù)制到該目的寄存器的后續(xù)位組中。
2. 如權(quán)利要求1所述的處理器,其特征在于,所述源的所述多個(gè)位組是代表存儲(chǔ)器位置中的雙封包雙浮點(diǎn)數(shù)據(jù)的128位。
3. 如權(quán)利要求1所述的處理器,其特征在于,所述源的所述多個(gè)位組是代表源寄存器中的雙封包雙浮點(diǎn)的128位。
4. 如權(quán)利要求1所述的處理器,其特征在于,所述目的寄存器的多個(gè)位組被裝入所述源的第一組的位[63-0]。
5. 如權(quán)利要求1所述的處理器,其特征在于,所述源是第一寄存器,用于存儲(chǔ)128位的封包數(shù)據(jù),也用作存儲(chǔ)浮點(diǎn)數(shù)據(jù)的浮點(diǎn)寄存器。
6. 如權(quán)利要求1所述的處理器,還包括退役(retirement)單元。
7. —種處理器,包括一級(jí)數(shù)據(jù)緩存;二級(jí)緩存;分支預(yù)測(cè)單元;控制器邏輯單元;通用寄存器組;解碼單元,以解碼包括移動(dòng)和復(fù)制指令的多個(gè)封包的數(shù)據(jù)指令;以及執(zhí)行單元,以響應(yīng)于指令執(zhí)行功能,其中一個(gè)指令包括移動(dòng)封包單浮點(diǎn)高和復(fù)制指令,以使得處理器將源的位[63-32]裝入128位的目的寄存器的位[31-0]中,將目的寄存器的位[31-0]復(fù)制到該目的寄存器的位[63-32]中,將源的位[127-96]裝入目的寄存器的位[95-64]中,以及在所述目的寄存器的位[127-96]中復(fù)制所述目的寄存器的位[95-64〗。
8. 如權(quán)利要求7所述的處理器,其特征在于,所述移動(dòng)和復(fù)制指令還包括源操作數(shù)字段;以及目的操作數(shù)字段。
9. 如權(quán)利要求7所述的處理器,其特征在于,所述源是128位源寄存器。
10. 如權(quán)利要求7所述的處理器,其特征在于,所述源的所述多個(gè)位組是代表存儲(chǔ)器位置中的四封包單浮點(diǎn)數(shù)據(jù)的128位。
11. 如權(quán)利要求7所述的處理器,其特征在于,所述源的所述多個(gè)位組是代表源寄存器中的四封包雙浮點(diǎn)的128位。
12. 如權(quán)利要求7所述的處理器,其特征在于,所述源是第一寄存器,用于存儲(chǔ)128位的封包數(shù)據(jù),也用作存儲(chǔ)浮點(diǎn)數(shù)據(jù)的浮點(diǎn)寄存器。
13. 如權(quán)利要求7所述的處理器,還包括退役單元。
14. 一種處理器,包括一級(jí)數(shù)據(jù)緩存;二級(jí)緩存;分支預(yù)測(cè)單元;通用寄存器組;解碼單元,以解碼包括移動(dòng)和復(fù)制指令的多個(gè)封包的數(shù)據(jù)指令;以及執(zhí)行單元,以響應(yīng)于指令執(zhí)行功能,其中一個(gè)指令包括移動(dòng)封包單浮點(diǎn)低和復(fù)制指令,以使得處理器把源的位[31-0]裝入到128位的目的寄存器的位[31-0]中,在所述目的寄存器的位[63-32]中復(fù)制該目的寄存器的位[31-0],在所述目的寄存器的位[95-64]中裝入所述源的位[95-64],以及在所述目的寄存器的位[127-96]中復(fù)制所述目的寄存器的位[95-64]。
15. 如權(quán)利要求14所述的處理器,其特征在于,所述移動(dòng)和復(fù)制指令還包括源操作數(shù)字段;以及目的操作數(shù)字段。
16. 如權(quán)利要求14所述的處理器,其特征在于,所述源是128位源寄存器。
17. 如權(quán)利要求14所述的處理器,其特征在于,所述源的所述多個(gè)位組是代表存儲(chǔ)器位置中的四封包單浮點(diǎn)數(shù)據(jù)的128位。
18. 如權(quán)利要求14所述的處理器,其特征在于,所述源的所述多個(gè)位組是代表源寄存器中的四封包雙浮點(diǎn)的128位。
19. 如權(quán)利要求14所述的處理器,其特征在于,所述源是第一寄存器,用于存儲(chǔ)128位的封包數(shù)據(jù),也用作存儲(chǔ)浮點(diǎn)數(shù)據(jù)的浮點(diǎn)寄存器。
20. 如權(quán)利要求14所述的處理器,還包括退役單元。
全文摘要
一種方法包括,在處理器中,裝入/移動(dòng)源的第一部分位到目標(biāo)寄存器的第一部分并在目標(biāo)寄存器的后續(xù)部分中復(fù)制所述第一部分位。
文檔編號(hào)G06F1/00GK101520723SQ20091013316
公開日2009年9月2日 申請(qǐng)日期2002年12月12日 優(yōu)先權(quán)日2001年12月20日
發(fā)明者P·羅塞爾 申請(qǐng)人:英特爾公司