碼寄存器操作數(shù)和目的地向量寄存器的VPBROADCASTM指令。
[0069] 在603,通過解碼邏輯解碼VPBROADCASTM指令。依賴于指令的格式,在該階段可解 釋各種數(shù)據(jù),諸如是否有數(shù)據(jù)變換,寫入和/或檢索哪些寄存器、訪問哪些存儲器地址等。
[0070] 在605,檢索/讀取源操作數(shù)值。例如,讀取源寫掩碼寄存器。
[0071] 在607,通過一個或多個功能單元之類的執(zhí)行資源執(zhí)行VPBROADCASTM指令(或構(gòu) 成這一指令的操作,諸如微操作),以便對源寫掩碼操作數(shù)的數(shù)據(jù)進行零擴展(如果需要的 話),使得源寫掩碼操作數(shù)的數(shù)據(jù)與目的地向量寄存器的數(shù)據(jù)元素尺寸相同。
[0072] 在609,將源寫掩碼寄存器的(經(jīng)零擴展的)數(shù)據(jù)廣播(存儲)到目的地向量寄存 器的每個數(shù)據(jù)元素位置。雖然分別示出了 607和609,但在一些實施例中,它們作為指令執(zhí) 行的一部分一起執(zhí)行。
[0073] 圖7示出處理VPBROADCASTM指令的方法的實施例。在該實施例中,假定先前已經(jīng) 執(zhí)行了操作601-605中的一些(若不是全部),然而未示出那些操作,以免模糊下文呈現(xiàn)的 細(xì)節(jié)。例如,未示出取出和解碼,也未示出操作數(shù)檢索。
[0074] 在701,將源寫掩碼寄存器的數(shù)據(jù)零擴展(如果需要的話)成與緊縮數(shù)據(jù)目的地的 緊縮數(shù)據(jù)元素相同的尺寸。例如,如果源寫掩碼寄存器是8位且具有值 X〇l且緊縮數(shù)據(jù)源 和目的地的數(shù)據(jù)元素是16位,則源寫掩碼寄存器的數(shù)據(jù)被擴展8位為X0001。
[0075] 在703,源寫掩碼的(經(jīng)零擴展的)數(shù)據(jù)被寫入到目的地寄存器的最低有效數(shù)據(jù)元 素位置。
[0076] 在705,判斷這是否是目的地位置的最高有效數(shù)據(jù)元素位置。如果是,則在707完 成廣播。在一些實施例中,在寫入最低有效數(shù)據(jù)元素位置后,跳過該步驟。
[0077] 如果否,在709,寫掩碼的(經(jīng)零擴展的)數(shù)據(jù)被寫入到目的地寄存器的下一最低 有效數(shù)據(jù)元素位置。在705,判斷這是否是目的地位置的最高有效數(shù)據(jù)元素位置。
[0078] 盡管關(guān)于圖7的以上描述被示為順序過程,但在一些實施例中,目的地寄存器的 數(shù)據(jù)元素位置被并行寫入。另外,如上所指出的,在一些實施例中,寫掩碼寄存器也可被用 于禁止對數(shù)據(jù)元素位置的寫入。
[0079] 示例件指令格式
[0080] 本文中所描述的指令的實施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性 系統(tǒng)、架構(gòu)、以及流水線。指令的實施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限 于詳述的系統(tǒng)、架構(gòu)、以及流水線。
[0081] 示例性寄存器架構(gòu)
[0082] 圖9是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)900的框圖。在所示出的實施例中, 有32個512位寬的向量寄存器910 ;這些寄存器被引用為zmmO到zmm31。較低的16zmm寄 存器的較低階256個位覆蓋在寄存器ymm〇-16上。較低的16zmm寄存器的較低階128個位 (ymm寄存器的較低階128個位)覆蓋在寄存器xmmO-15上。
[0083] 通用寄存器925-一在所示出的實施例中,有十六個64位通用寄存器,這些寄存 器與現(xiàn)有的x86尋址模式一起使用來尋址存儲器操作數(shù)。這些寄存器通過名稱RAX、RBX、 RCX、RDX、RBP、RSI、RDI、RSP 以及 R8 到 R15 來引用。
[0084]標(biāo)量浮點堆棧寄存器組(x87堆棧)945,在其上面重疊了 MMX緊縮整數(shù)平坦寄存器 組950--在所示出的實施例中,x87堆棧是用于使用x87指令集擴展來對32/64/80位浮 點數(shù)據(jù)執(zhí)行標(biāo)量浮點運算的八元素堆棧;而使用MMX寄存器來對64位緊縮整數(shù)數(shù)據(jù)執(zhí)行操 作,以及為在MMX和XMM寄存器之間執(zhí)行的一些操作保存操作數(shù)。
[0085] 本發(fā)明的替代實施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替代實施 例可以使用更多、更少或不同的寄存器組和寄存器。
[0086] 示例性核架構(gòu)、處理器和計算機架構(gòu)
[0087] 處理器核可以用出于不同目的的不同方式在不同的處理器中實現(xiàn)。例如,這樣的 核的實現(xiàn)可以包括:1)旨在用于通用計算的通用有序核;2)預(yù)期用于通用計算的高性能通 用無序核;3)旨在主要用于圖形和/或科學(xué)(吞吐量)計算的專用核。不同處理器的實現(xiàn) 可包括:1)包括旨在用于通用計算的一個或多個通用有序核和/或旨在用于通用計算的一 個或多個通用無序核的CPU;以及2)包括旨在主要用于圖形和/或科學(xué)(吞吐量)的一個 或多個專用核的協(xié)處理器。這樣的不同處理器導(dǎo)致不同的計算機系統(tǒng)架構(gòu),其可包括:1) 在與CPU分開的芯片上的協(xié)處理器;2)在與CPU相同的封裝中但分開的管芯上的協(xié)處理 器;3)與CPU在相同管芯上的協(xié)處理器(在該情況下,這樣的協(xié)處理器有時被稱為諸如集 成圖形和/或科學(xué)(吞吐量)邏輯等專用邏輯,或被稱為專用核);以及4)可以將所描述 的CPU(有時被稱為應(yīng)用核或應(yīng)用處理器)、以上描述的協(xié)處理器和附加功能包括在同一管 芯上的芯片上系統(tǒng)。接著描述示例性核架構(gòu),隨后描述示例性處理器和計算機架構(gòu)。
[0088] 示例性核架構(gòu)
[0089] 有序和無序核框圖
[0090] 圖10A是示出根據(jù)本發(fā)明的各實施例的示例性有序流水線和示例性的寄存器重 命名的無序發(fā)布/執(zhí)行流水線的框圖。圖10B是示出根據(jù)本發(fā)明的各實施例的要包括在處 理器中的有序架構(gòu)核的示例性實施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核 的框圖。圖10A-B中的實線框示出了有序流水線和有序核,而可選增加的虛線框示出了寄 存器重命名的、無序發(fā)布/執(zhí)行流水線和核。給定有序方面是無序方面的子集的情況下,將 描述無序方面。
[0091] 在圖10A中,處理器流水線1000包括取出級1002、長度解碼級1004、解碼級1006、 分配級1008、重命名級1010、調(diào)度(也稱為分派或發(fā)布)級1012、寄存器讀取/存儲器讀取 級1014、執(zhí)行級1016、寫回/存儲器寫入級1018、異常處理級1022和提交級1024。
[0092] 圖10B示出了包括耦合到執(zhí)行引擎單元1050的前端單元1030的處理器核1090, 且執(zhí)行引擎單元和前端單元兩者都耦合到存儲器單元1070。核1090可以是精簡指令集計 算(RISC)核、復(fù)雜指令集計算(CISC)核、超長指令字(VLIW)核或混合或替代核類型。作 為又一選項,核1090可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用 計算圖形處理器單元(GPGPU)核、或圖形核等等。
[0093] 前端單元1030包括耦合到指令高速緩存單元1034的分支預(yù)測單元1032,該指令 高速緩存單元1034耦合到指令轉(zhuǎn)換后備緩沖器(TLB) 1036,該指令轉(zhuǎn)換后備緩沖器1036耦 合到指令取出單元1038,指令取出單元1038親合到解碼單元1040。解碼單元1040 (或解碼 器)可解碼指令,并生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指 令導(dǎo)出的一個或多個微操作、微代碼進入點、微指令、其他指令、或其他控制信號作為輸出。 解碼單元1040可使用各種不同的機制來實現(xiàn)。合適的機制的示例包括但不限于查找表、硬 件實現(xiàn)、可編程邏輯陣列(PLA)、微代碼只讀存儲器(ROM)等。在一個實施例中,核1090包 括(例如,在解碼單元1040中或否則在前端單元1030內(nèi)的)用于存儲某些宏指令的微代 碼的微代碼ROM或其他介質(zhì)。解碼單元1040耦合到執(zhí)行引擎單元1050中的重命名/分配 單元1052。
[0094] 執(zhí)行引擎單元1050包括重命名/分配器單元1052,該重命名/分配器單元1052 耦合至引退單元1054和一個或多個調(diào)度器單元1056的集合。調(diào)度器單元1056表示任何數(shù) 目的不同調(diào)度器,包括預(yù)留站、中央指令窗等。調(diào)度器單元1056耦合到物理寄存器組單元 1058。每個物理寄存器組單元1058表示一個或多個物理寄存器組,其中不同的物理寄存器 組存儲一種或多種不同的數(shù)據(jù)類型,諸如標(biāo)量整數(shù)、標(biāo)量浮點、緊縮整數(shù)、緊縮浮點、向量整 數(shù)、向量浮點、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個實施例 中,物理寄存器組單元1058包括向量寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以 提供架構(gòu)向量寄存器、向量掩碼寄存器、和通用寄存器。物理寄存器組單元1058與引退單 元1054重疊以示出可以用來實現(xiàn)寄存器重命名和無序執(zhí)行的各種方式(例如,使用重新排 序緩沖器和引退寄存器組;使用將來的文件、歷史緩沖器和引退寄存器組;使用寄存器映 射和寄存器池等等)。引退單元1054和物理寄存器組單元1058耦合到執(zhí)行群集1060。執(zhí) 行群集1060包括一個或多個執(zhí)行單元1062的集合和一個或多個存儲器訪問單元1064的 集合。執(zhí)行單元1062可以對各種類型的數(shù)據(jù)(例如,標(biāo)量浮點、緊縮整數(shù)、緊縮浮點、向量整 型、向量浮點)執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管一些實施例可以包括專 用于特定功能或功能集合的多個執(zhí)行單元,但其他實施例可包括全部執(zhí)行所有功能的僅一 個執(zhí)行單元或多個執(zhí)行單元。調(diào)度器單元1056、物理寄存器組單元1058和執(zhí)行群集1060 被示為可能有多個,因為某些實施例為某些類型的數(shù)據(jù)/操作創(chuàng)建分開的流水線(例如,標(biāo) 量整型流水線、標(biāo)量浮點/緊縮整型/緊縮浮點/向量整型/向量浮點流水線,和/或各自 具有其自己的調(diào)度器單元、物理寄存器組單元和/或執(zhí)行群集的存儲器訪問流水線一一以 及在分開的存儲器訪問流水線的情況下,實現(xiàn)其中僅該流水線的執(zhí)行群集具有存儲器訪問 單元1064的某些實施例)。還應(yīng)當(dāng)理解,在使用分開的流水線的情況下,這些流水線中的一 個或多個可以為無序發(fā)布/執(zhí)行,并且其余流水線可以為有序發(fā)布/執(zhí)行。
[0095] 存儲器訪問單元1064的集合親合到存儲器單元1070,該存儲器單元1070包括親 合到數(shù)據(jù)高速緩存單元1074的數(shù)據(jù)TLB單元1072,其中數(shù)據(jù)高速緩存單元1074耦合到二 級(L2)高速緩存單元1076。在一個示例性實施例中,存儲器訪問單元1064可以包括加載 單元、存儲地址單元和存儲數(shù)據(jù)單元,這些單元中的每一個單元親合到存儲器單元1070中 的數(shù)據(jù)TLB單元1072。指令高速緩存單元1034還耦合到存儲器單元1070中的二級(L2) 高速緩存單元1076。L2高速緩存單元1076耦合到一個或多個其他級的高速緩存,并最終 耦合到主存儲器。
[0096] 作為示例,示例性寄存器重命名的、無序發(fā)布/執(zhí)行核架構(gòu)可以如下實現(xiàn)流水線 1000 :1)指令取出1038執(zhí)行取出和長度解碼級1002和1004 ;2)解碼單元1040執(zhí)行解碼 級1006 ;3)重命名/分配器單元1052執(zhí)行分配級1008和重命名級1010 ;4)調(diào)度器單元 1056執(zhí)行調(diào)度級1012 ;5)物理寄存器組單元1058和存儲器單元1070執(zhí)行寄存器讀取/存 儲器讀取級1014 ;執(zhí)行群集1060執(zhí)行執(zhí)行級1016 ;6)存儲器單元1070和物理寄存器組單 元1058執(zhí)行寫回/存儲器寫入級1018 ;7)各單元可牽涉到異常處理級1022 ;以及8)引退 單元1054和物理寄存器組單元1058執(zhí)行提交級1024。
[0097] 核1090可支持一個或多個指令集(例如,x86指令集(具有與較新版本一起添加 的一些擴展);加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集;加利福尼州桑尼 維爾市的ARM控股的ARM指令集(具有諸如NEON等可選附加擴展)),其中包括本文中描述 的各指令。在一個實施例中,核1090包括用于支持緊縮數(shù)據(jù)指令集擴展(例如,AVX1、AVX2 和/或先前描述的一些形式的一般向量友好指令格式(U = 0和/或U = 1))的邏輯,從而 允許很多多媒體應(yīng)用使用的操作能夠使用緊縮數(shù)據(jù)來執(zhí)行。
[0098] 應(yīng)當(dāng)理解,核可支持多