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

打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合處理器、方法、系統(tǒng)及指令的制作方法

文檔序號:6485518閱讀:188來源:國知局
打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合處理器、方法、系統(tǒng)及指令的制作方法
【專利摘要】一方面的方法包括接收打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令。打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令指示第一打包數(shù)據(jù)操作掩碼寄存器,指示第二打包數(shù)據(jù)操作掩碼寄存器,并指示目的地存儲位置。響應(yīng)于打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令,第一打包數(shù)據(jù)操作掩碼寄存器的至少部分位和第二打包數(shù)據(jù)操作掩碼寄存器的至少對應(yīng)部分位的算術(shù)組合被存儲在目的地存儲位置中。公開了其它方法、裝置、系統(tǒng)和指令。
【專利說明】打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合處理器、方法、系統(tǒng)及指 令
[0001] 背景

【技術(shù)領(lǐng)域】
[0002] 實施例涉及處理器。具體地,實施例涉及用于響應(yīng)于打包數(shù)據(jù)操作掩碼寄存器算 術(shù)組合指令而算術(shù)地組合打包數(shù)據(jù)操作掩碼寄存器的至少部分的處理器。
[0003] 背景信息
[0004] 許多處理器具有單指令多數(shù)據(jù)(SMD)架構(gòu)。該SMD架構(gòu)通常有助于顯著提高處 理速度。在SIMD架構(gòu)中,與僅在一個數(shù)據(jù)元素或一對數(shù)據(jù)元素上操作的標(biāo)量指令不同,打 包數(shù)據(jù)指令、向量指令、或SIMD指令可在多個數(shù)據(jù)元素、或多對數(shù)據(jù)元素上同時或并行地 操作。處理器可具有并行執(zhí)行硬件,該并行執(zhí)行硬件響應(yīng)于打包數(shù)據(jù)指令來同時或并行地 執(zhí)行多個操作。
[0005] 在SMD架構(gòu)中,可將多個數(shù)據(jù)元素打包在一個寄存器或存儲器位置內(nèi)作為打包 數(shù)據(jù)或向量數(shù)據(jù)。在打包數(shù)據(jù)中,寄存器或者其他存儲位置的位可被邏輯地分成多個固定 尺寸的數(shù)據(jù)元素的序列。數(shù)據(jù)元素中的每一個可表示個體數(shù)據(jù)片,該個體數(shù)據(jù)片連同通常 具有相同尺寸的其他數(shù)據(jù)元素一起被存儲在寄存器或存儲位置中。例如,256位寬寄存器可 具有四個64位寬打包數(shù)據(jù)元素,八個32位寬打包數(shù)據(jù)元素,十六個16位寬打包數(shù)據(jù)元素, 或三十二個8位寬打包數(shù)據(jù)元素。每一打包數(shù)據(jù)元素可表示單獨的個體數(shù)據(jù)片(例如,像 素顏色等),該數(shù)據(jù)片可單獨地操作或與其他數(shù)據(jù)獨立地操作。
[0006] 代表性地,一種類型的打包數(shù)據(jù)指令、向量指令或SMD指令(例如,打包加法指 令)可指定在來自兩個源打包數(shù)據(jù)操作數(shù)的所有相應(yīng)數(shù)據(jù)元素對上以垂直方式執(zhí)行單個 打包數(shù)據(jù)操作(例如,加法)以生成目的地或結(jié)果打包數(shù)據(jù)。這些源打包數(shù)據(jù)操作數(shù)是相 同尺寸,可包含相同寬度的數(shù)據(jù)元素,并因此可各自包含相同數(shù)量的數(shù)據(jù)元素。兩個源打包 數(shù)據(jù)操作數(shù)中的相同的位位置中的源數(shù)據(jù)元素可表示相應(yīng)的數(shù)據(jù)元素對??蓡为毜鼗颡毩?地對這些相應(yīng)的源數(shù)據(jù)元素對中的每一個執(zhí)行打包數(shù)據(jù)操作,以便生成匹配數(shù)量的結(jié)果數(shù) 據(jù)元素,且因而每一對相應(yīng)的源數(shù)據(jù)元素可以具有相應(yīng)的結(jié)果數(shù)據(jù)元素。通常,這種指令的 結(jié)果數(shù)據(jù)元素呈相同的次序,且它們常常具有相同的尺寸。
[0007] 除這種示例性類型的打包數(shù)據(jù)指令之外,還有各種其它類型的打包數(shù)據(jù)指令。例 如,存在僅具有一個源打包數(shù)據(jù)操作數(shù)或具有兩個以上的源打包數(shù)據(jù)操作數(shù)的打包數(shù)據(jù)指 令、以水平方式而不是垂直方式操作的打包數(shù)據(jù)指令、生成不同尺寸的結(jié)果打包數(shù)據(jù)操作 數(shù)的打包數(shù)據(jù)指令、具有不同尺寸的數(shù)據(jù)元素的打包數(shù)據(jù)指令和/或具有不同的數(shù)據(jù)元素 次序的打包數(shù)據(jù)指令。
[0008] 附圖的若干視圖的簡要說明
[0009] 通過參考用來說明本發(fā)明的實施例的以下描述和附圖,可最好地理解本發(fā)明。在 附圖中:
[0010] 圖1是具有含一個或多個打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令的指令集的處 理器的示例實施例的框圖。
[0011] 圖2A是示出采取合并的依掩碼的打包數(shù)據(jù)操作的第一代表性示例實施例的框 圖。
[0012] 圖2B是示出采取歸零的依掩碼的打包數(shù)據(jù)操作的第二代表性示例實施例的框 圖。
[0013] 圖3是包括存儲有打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令的機器可讀的存儲介 質(zhì)的制品(例如,計算機程序產(chǎn)品)的框圖。
[0014] 圖4是具有可操作用于執(zhí)行指令的執(zhí)行單元的指令處理裝置的示例實施例的框 圖,所述指令包括打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令的示例實施例。
[0015] 圖5是打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令的示例實施例的處理方法的示例 實施例的流程框圖。
[0016] 圖6是一組合適的打包數(shù)據(jù)寄存器的示例實施例的框圖。
[0017] 圖7是示出合適打包數(shù)據(jù)格式的若干示例實施例的框圖。
[0018] 圖8是示出打包數(shù)據(jù)操作掩碼位的數(shù)量依賴于打包數(shù)據(jù)寬度和打包數(shù)據(jù)元素寬 度的表格。
[0019] 圖9是一組合適的打包數(shù)據(jù)操作掩碼寄存器的示例實施例的框圖。
[0020] 圖10是示出在打包數(shù)據(jù)操作掩碼寄存器的示例實施例中可被用作打包數(shù)據(jù)操作 掩碼和/或用于掩碼操作的位的數(shù)量依賴于打包數(shù)據(jù)寬度和數(shù)據(jù)元素寬度的示圖。
[0021] 圖11A-11D示出打包數(shù)據(jù)操作掩碼寄存器加法指令和其操作的多種特定示例實 施例。
[0022] 圖12A示出示例性AVX指令格式,包括VEX前綴、實操作碼字段、MoDR/M字節(jié)、SIB 字節(jié)、位移字段以及IMM8。
[0023] 圖12B示出來自圖12A的哪些字段構(gòu)成完整操作碼字段和基礎(chǔ)操作字段。
[0024] 圖12C示出來自圖12A的哪些字段構(gòu)成寄存器索引字段。
[0025] 圖13是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)的框圖。
[0026] 圖14A是示出根據(jù)本發(fā)明的各實施例的示例性有序流水線和示例性的寄存器重 命名的無序發(fā)布/執(zhí)行流水線的框圖。
[0027] 圖14B示出了包括耦合到執(zhí)行引擎單元的前端單元的處理器核,且執(zhí)行引擎單元 和前端單元兩者都耦合到存儲器單元。
[0028] 圖15A是根據(jù)本發(fā)明的各實施例的單個處理器核以及它與管芯上互連網(wǎng)絡(luò)的連 接及其二級(L2)高速緩存的本地子集的框圖。
[0029] 圖15B是根據(jù)本發(fā)明的各實施例的圖15A中的處理器核的一部分的展開圖。
[0030] 圖16是根據(jù)本發(fā)明的實施例的可具有超過一個的核、可具有集成的存儲器控制 器、并且可具有集成圖形的處理器的框圖。
[0031] 圖17所示的是根據(jù)本發(fā)明的一個實施例的系統(tǒng)的框圖。
[0032] 圖18所示的是根據(jù)本發(fā)明的實施例的第一更具體的示例性系統(tǒng)的框圖。
[0033] 圖19所示的是根據(jù)本發(fā)明的實施例的第二更具體的示例性系統(tǒng)的框圖。
[0034] 圖20所示的是根據(jù)本發(fā)明的實施例的SoC的框圖。
[0035] 圖21是根據(jù)本發(fā)明的各實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進 制指令轉(zhuǎn)換成目標(biāo)指令集中的二進制指令的框圖。

【具體實施方式】
[0036] 本文中公開的是打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令、用于執(zhí)行打包數(shù)據(jù)操作 掩碼寄存器算術(shù)組合指令的處理器、該處理器在處理或執(zhí)行打包數(shù)據(jù)操作掩碼寄存器算術(shù) 組合指令時執(zhí)行的方法、以及包含用于處理或執(zhí)行打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令 的一個或多個處理器的系統(tǒng)。在以下描述中,陳述了多個具體細節(jié)。然而,應(yīng)當(dāng)理解的是, 可不通過這些具體細節(jié)來實施本發(fā)明的實施例。在其它實例中,未詳細示出公知的電路、結(jié) 構(gòu)以及技術(shù),以免模糊對本描述的理解。
[0037] 圖1是具有指令集的處理器100的示例實施例的框圖,所述指令集包括一個或 多個打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令105。該處理器可以是各種復(fù)雜指令集計算 (CISC)處理器、各種精簡指令集計算(RISC)處理器、各種超長指令字(VLIW)處理器、其各 種混合、或完全其他類型的處理器中的任何處理器。在一些實施例中,處理器可以是通用處 理器(例如,具有在臺式、膝上型等計算機中使用的類型的通用微處理器),但這不是必須 的。替換地,指令處理處理裝置可以是專用處理器。合適的專用處理器的示例包括但不限 于,網(wǎng)絡(luò)處理器、通信處理器、加密處理器、圖形處理器、協(xié)處理器、嵌入式處理器、數(shù)字信號 處理器(DSP)以及控制器(例如,微控制器),此處僅是列舉數(shù)例。
[0038] 處理器具有指令集架構(gòu)(ISA) 101。ISA表示處理器的架構(gòu)中涉及編程的那部分。 ISA通常包括原生指令、架構(gòu)寄存器、數(shù)據(jù)類型、尋址模式、存儲器架構(gòu)、中斷和異常處理以 及處理器的外部輸入和輸出(I/O)。ISA與微架構(gòu)不同,微架構(gòu)通常表示選擇用于實現(xiàn)指令 集架構(gòu)的特定處理器設(shè)計技術(shù)。帶有不同的微架構(gòu)的處理器可以共享共同的指令集架構(gòu)。.
[0039] ISA包括架構(gòu)寄存器(例如,架構(gòu)寄存器組)106。所示出的架構(gòu)寄存器包括打包 數(shù)據(jù)寄存器107。每個打包數(shù)據(jù)寄存器可操作用于存儲打包數(shù)據(jù)、向量數(shù)據(jù)或者SIMD數(shù)據(jù)。 所示出的架構(gòu)寄存器還包括打包的數(shù)據(jù)操作掩碼寄存器108。打包數(shù)據(jù)操作掩碼寄存器中 的每一個都可操作用于存儲打包數(shù)據(jù)操作掩碼。
[0040] 架構(gòu)寄存器表示板載處理器存儲位置。架構(gòu)寄存器此處也可以被簡稱為寄存器。 短語架構(gòu)寄存器、寄存器組、以及寄存器在本申請中用于表示對軟件和/或編程者可見(例 如,軟件可見的)的寄存器和/或由宏指令指定用來標(biāo)識操作數(shù)的寄存器,除非另外指定或 明顯可知。這些寄存器不同于給定微架構(gòu)中的其他非架構(gòu)式寄存器(例如,臨時寄存器、重 排序緩沖器、引退寄存器等)。
[0041] 所示出的ISA還包括處理器支持的指令集102。指令集包括若干不同類型的指令。 指令集的這些指令表示宏指令(例如,提供給處理器以供執(zhí)行的指令),與微指令或微操作 (例如,處理器的解碼器解碼宏指令而得到的微指令或微操作)相對。
[0042] 指令集包括一個或多個依掩碼的(masked)打包數(shù)據(jù)指令103。依掩碼的打包數(shù)據(jù) 指令可類似于在背景部分中提及的打包數(shù)據(jù)指令,且具有幾項顯著的差別。類似于前述打 包數(shù)據(jù)指令,依掩碼的打包數(shù)據(jù)指令中的每一個指令可操作用于致使或?qū)е绿幚砥髟谠摯?包數(shù)據(jù)指令所指示的一個或多個打包操作數(shù)的數(shù)據(jù)元素上執(zhí)行打包數(shù)據(jù)操作。打包數(shù)據(jù)操 作數(shù)可被存儲在打包數(shù)據(jù)寄存器107中。然而,依掩碼的打包數(shù)據(jù)指令中的每一個指令可 使用一個或多個打包數(shù)據(jù)操作掩碼寄存器108和/或打包數(shù)據(jù)操作掩碼,從而對打包數(shù)據(jù) 處理進行掩碼、斷言或有條件地控制。打包數(shù)據(jù)操作掩碼和/或掩碼寄存器可表示掩碼操 作數(shù)、斷言操作數(shù)或條件操作控制操作數(shù)。
[0043] 打包數(shù)據(jù)操作掩碼和/或掩碼寄存器可操作用于在逐數(shù)據(jù)元素的粒度下對打包 數(shù)據(jù)處理進行掩碼或有條件地控制。例如,打包數(shù)據(jù)操作掩碼可操作用于掩碼控制:是否要 將在來自單個源打包數(shù)據(jù)操作數(shù)的各個數(shù)據(jù)元素或在來自兩個源打包數(shù)據(jù)操作數(shù)的各個 相應(yīng)數(shù)據(jù)元素對上所執(zhí)行的、依掩碼的打包數(shù)據(jù)指令的打包數(shù)據(jù)操作的結(jié)果存儲到打包數(shù) 據(jù)結(jié)果中。依掩碼的打包數(shù)據(jù)指令可允許單獨地且與數(shù)據(jù)元素相獨立地斷言或有條件地控 制對每個數(shù)據(jù)元素或每對相對應(yīng)數(shù)據(jù)元素的打包數(shù)據(jù)處理。依掩碼的打包數(shù)據(jù)指令、操作 和掩碼可提供某些優(yōu)點,諸如增加的代碼密度和/或較高的指令吞吐量。
[0044] 再次參考圖1,指令集還包括一個或多個打包數(shù)據(jù)操作掩碼和/或掩碼寄存器操 縱指令104。打包數(shù)據(jù)操作掩碼和/或掩碼寄存器操縱指令中的每一個可操作用于致使或 導(dǎo)致處理器對一個或多個打包數(shù)據(jù)操作掩碼寄存器108和/或掩碼進行操縱或操作。如所 示,打包數(shù)據(jù)操作掩碼和/或掩碼寄存器操縱指令可包括一個或多個打包數(shù)據(jù)操作掩碼寄 存器算術(shù)組合指令105。打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令105中的每一個指令可操 作用于致使或?qū)е绿幚砥鲗蓚€或更多打包數(shù)據(jù)操作掩碼寄存器108的至少部分算術(shù)地 組合。以下進一步公開打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令的各不同實施例。
[0045] 處理器還包括執(zhí)行邏輯109。執(zhí)行邏輯可操作用于執(zhí)行或處理指令集的指令(例 如,依掩碼的打包數(shù)據(jù)指令和打包數(shù)據(jù)操作掩碼算術(shù)組合指令)。執(zhí)行邏輯可包括執(zhí)行單 元、功能單元、算術(shù)單元、加法器、算術(shù)邏輯單元等。
[0046] 為了進一步說明打包數(shù)據(jù)操作掩碼,考慮它們的使用的代表示例可能是有用的。 圖2A是示出采取合并的依掩碼的打包數(shù)據(jù)操作203A的第一代表性示例實施例的框圖???響應(yīng)于依掩碼的打包數(shù)據(jù)指令(例如,圖1的依掩碼的打包數(shù)據(jù)指令103)或者作為該指令 的結(jié)果來執(zhí)行依掩碼的打包數(shù)據(jù)操作。
[0047] 用于所說明的依掩碼的打包數(shù)據(jù)操作的指令指示第一源打包數(shù)據(jù)210-1和第二 源打包數(shù)據(jù)210-2。其他依掩碼的打包數(shù)據(jù)指令可指示僅單個源打包數(shù)據(jù),或多于兩個源打 包數(shù)據(jù)。在例示中,第一和第二源打包數(shù)據(jù)具有相同尺寸,包含相同寬度的數(shù)據(jù)元素,且因 此各自包含相同數(shù)量的數(shù)據(jù)元素。在例示中,第一和第二源打包數(shù)據(jù)中的每一個具有十六 個數(shù)據(jù)元素。作為示例,第一和第二源打包數(shù)據(jù)可各自為512位寬,并且可各自包括十六個 32位雙字數(shù)據(jù)元素。兩個源打包數(shù)據(jù)中相同位位置中(例如,在相同垂直位置中)的源數(shù) 據(jù)元素表示相對應(yīng)數(shù)據(jù)元素的對。數(shù)據(jù)元素中的每一個具有在方框內(nèi)示出的表示該數(shù)據(jù)元 素的數(shù)值。例如,第一源打包數(shù)據(jù)的最低位數(shù)據(jù)元素(右側(cè))具有值3,第一源打包數(shù)據(jù)的 次最低位數(shù)據(jù)元素具有值7,第一源打包數(shù)據(jù)的最高位數(shù)據(jù)元素(左側(cè))具有值12,依此類 推。
[0048] 依掩碼的打包數(shù)據(jù)操作的指令還指示打包數(shù)據(jù)操作掩碼211。打包數(shù)據(jù)操作掩碼 包括多個掩碼元素、斷言元素、條件控制元素或標(biāo)志。可包括元素或標(biāo)志,使其與一個或多 個相對應(yīng)源數(shù)據(jù)元素有一對一的對應(yīng)關(guān)系。例如,如圖示所示,在操作涉及兩個源打包數(shù)據(jù) 操作數(shù)的情況下,對于每對相應(yīng)源數(shù)據(jù)元素,可以有一個這樣的元素或標(biāo)志。打包數(shù)據(jù)操作 掩碼的每個元素或標(biāo)志可操作用于對一個或多個相應(yīng)的源打包數(shù)據(jù)元素上的獨立打包數(shù) 據(jù)操作進行掩碼。例如,在該示例中,每個元素或標(biāo)志可對相應(yīng)源打包數(shù)據(jù)元素對上的獨立 打包數(shù)據(jù)操作進行掩碼。
[0049] 如圖示中所示的,通常每個元素或標(biāo)志可以是單個位。單個位可允許指定兩個不 同可能性(例如,執(zhí)行操作或不執(zhí)行操作,存儲操作的結(jié)果或不存儲操作的結(jié)果,等等)中 的任一個。替代地,如果需要在多于兩個的不同選項中進行選擇,則可對每個標(biāo)志或元素使 用兩個或更多個位。在圖示中,打包數(shù)據(jù)操作掩碼包括十六個位(即,0011100001101011)。 十六個位中的每一個與第一和第二打包數(shù)據(jù)的十六個相應(yīng)數(shù)據(jù)元素對之一具有有序?qū)?yīng) 關(guān)系。例如,掩碼的最低位的位對應(yīng)于第一和第二打包數(shù)據(jù)的相應(yīng)最低位數(shù)據(jù)元素對,掩碼 的最高位的位對應(yīng)于相應(yīng)最高位數(shù)據(jù)元素對,依次類推。在替換實施例中,其中源打包數(shù)據(jù) 具有更少或更多的數(shù)據(jù)元素,打包數(shù)據(jù)操作掩碼可類似地具有更少或更多的數(shù)據(jù)元素。
[0050] 具體示出的依掩碼的打包數(shù)據(jù)操作是依掩碼的打包數(shù)據(jù)加法操作,其可操作用于 根據(jù)打包數(shù)據(jù)操作掩碼211的相應(yīng)位提供的條件操作控制或斷言,將來自第一和第二源打 包數(shù)據(jù)210-U210-2的相應(yīng)數(shù)據(jù)元素對之和有條件地存儲在打包數(shù)據(jù)結(jié)果212中。該具體 的依掩碼的打包數(shù)據(jù)加法操作指定:在每對相應(yīng)的數(shù)據(jù)元素上單獨地或與其它對獨立地、 以垂直方式、有條件地執(zhí)行單個操作(在這種情況下是加法)。目的地操作數(shù)或打包數(shù)據(jù)結(jié) 果與源打包數(shù)據(jù)的尺寸相同且具有與源打包數(shù)據(jù)相同數(shù)量的數(shù)據(jù)元素。因此,每對相應(yīng)的 源數(shù)據(jù)元素在打包數(shù)據(jù)結(jié)果中的與它們的相應(yīng)源數(shù)據(jù)元素對在源打包數(shù)據(jù)中的位置相同 的位位置中具有相應(yīng)結(jié)果數(shù)據(jù)元素。
[0051] 再次參考打包數(shù)據(jù)操作掩碼211。打包數(shù)據(jù)操作掩碼的十六個位中的每一個被置 位(即,具有二進制值1)或者被清零(即,具有二進制值〇)。根據(jù)所例示的協(xié)定,每個位被 分別置位(即,1)或清零(即,〇),以允許或不允許將在第一和第二源打包數(shù)據(jù)的相應(yīng)數(shù)據(jù) 元素對上執(zhí)行的打包數(shù)據(jù)操作的結(jié)果存儲在打包數(shù)據(jù)結(jié)果的相應(yīng)數(shù)據(jù)元素中。例如,打包 數(shù)據(jù)操作掩碼中的次最低位的位被置位(即,1),且表示在相應(yīng)的次最低位數(shù)據(jù)元素對上 執(zhí)行的打包數(shù)據(jù)加法操作(即,7+1)的結(jié)果的和(即,8)被存儲在打包數(shù)據(jù)結(jié)果的相應(yīng)次 最低位的數(shù)據(jù)元素中。在例示中,和被標(biāo)以下劃線。
[0052] 相反,當(dāng)給定的位被清零(即,0)時,則不允許對相應(yīng)數(shù)據(jù)元素對的打包數(shù)據(jù)操作 的結(jié)果被存儲在打包數(shù)據(jù)結(jié)果的對應(yīng)數(shù)據(jù)元素中。相反,可將另一個值存儲在結(jié)果數(shù)據(jù)元 素中。例如,如圖示所示,來自第二源打包數(shù)據(jù)的相應(yīng)數(shù)據(jù)元素的值可被存儲在打包數(shù)據(jù)結(jié) 果的相應(yīng)數(shù)據(jù)元素中。例如,打包數(shù)據(jù)操作掩碼中最高位的位被清零(即,〇),且來自第二 源打包數(shù)據(jù)的最高位數(shù)據(jù)元素的數(shù)值(即,15)被存儲在打包數(shù)據(jù)結(jié)果的最高位結(jié)果數(shù)據(jù) 元素中。這稱為合并-掩碼。與所示相反的協(xié)定也是可能的,其中位被清零(即,0)以允許 存儲結(jié)果,或被置位(即,1)以不允許存儲結(jié)果。
[0053] 在一些實施例中,打包數(shù)據(jù)操作可任選地在第一和第二源打包數(shù)據(jù)的所有相應(yīng)數(shù) 據(jù)元素對上執(zhí)行,而不管打包數(shù)據(jù)操作掩碼的相應(yīng)位被置位還是清零,但是打包數(shù)據(jù)操作 的結(jié)果可被存儲或可不被存儲在打包數(shù)據(jù)結(jié)果中,這取決于打包數(shù)據(jù)操作掩碼的相應(yīng)位被 置位還是清零。替代地,在另一實施例中,如果打包數(shù)據(jù)操作掩碼的相應(yīng)位指定操作的結(jié) 果將不被存儲在打包數(shù)據(jù)結(jié)果操作中,則打包數(shù)據(jù)操作可被任選地略去(即,不被執(zhí)行)。 在一些實施例中,異常(例如,異常標(biāo)志)或違例(violation)可被可任選地抑制,或者 在被掩碼掉(masked-off)元素上的打包數(shù)據(jù)操作不引起異常(例如,異常標(biāo)志)或違例 (violation)。在一些實施例中,對于具有存儲器操作數(shù)的依掩碼的打包數(shù)據(jù)指令,可任選 地,為被掩碼掉的數(shù)據(jù)元素抑制存儲器錯誤。該特征可有助于實現(xiàn)控制流斷言,因為掩碼可 實際上提供合并行為打包數(shù)據(jù)寄存器,但不是必須的。
[0054] 圖2B是示出采取歸零(zeroing)的依掩碼的打包數(shù)據(jù)操作203B的第二代表性示 例實施例的框圖。采取歸零的依掩碼的打包數(shù)據(jù)操作類似于前述的采取合并的依掩碼打包 數(shù)據(jù)操作。為了避免使描述變得模糊,不再重復(fù)相似之處,而是將主要提及不同之處。一個 顯著的不同之處在于,與將源打包數(shù)據(jù)(例如,圖2A中的第二源打包數(shù)據(jù)210-2)的數(shù)據(jù)元 素的值合并或存儲到打包數(shù)據(jù)結(jié)果的相應(yīng)數(shù)據(jù)元素中不同,在打包數(shù)據(jù)結(jié)果的相應(yīng)位被掩 碼掉(例如,清除為〇)時打包數(shù)據(jù)結(jié)果的相應(yīng)數(shù)據(jù)元素被歸零。例如,雙字結(jié)果打包數(shù)據(jù) 元素的所有32個位可具有零值。這稱為歸零-掩碼。替換地,也可任選地使用除零之外的 其他預(yù)定值。
[0055] 這些僅僅是依掩碼打包數(shù)據(jù)操作的幾個示例性示例。應(yīng)當(dāng)理解,處理器可支持寬 泛的各種不同類型的依掩碼的打包數(shù)據(jù)操作。例如,這些操作可包括僅具有一個源打包數(shù) 據(jù)或具有兩個以上的源打包數(shù)據(jù)的操作、生成不同尺寸的結(jié)果打包數(shù)據(jù)的操作、具有不同 尺寸的數(shù)據(jù)元素的操作和/或具有不同的結(jié)果數(shù)據(jù)元素順序的操作、及其組合。
[0056] 圖3是包括存儲有打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令305的機器可讀的存儲 介質(zhì)314的制品(例如,計算機程序產(chǎn)品)313的框圖。在一些實施例中,機器可讀存儲介質(zhì) 可為有形的和/或非瞬態(tài)的機器可讀存儲介質(zhì)。在各示例實施例中,機器可讀存儲介質(zhì)314 可包括軟盤、光盤、CD-ROM、磁盤、磁光盤、只讀存儲器(ROM)、可編程ROM (PR0M)、可擦除可 編程ROM (EPR0M)、電可擦除可編程ROM (EEPR0M)、隨機存取存儲器(RAM)、靜態(tài)RAM (SRAM)、 動態(tài)RAM (DRAM)、閃存、相變存儲器、半導(dǎo)體存儲器、其它類型的存儲器或它們的組合。在一 些實施例中,介質(zhì)可包括一個或多個固態(tài)材料,例如半導(dǎo)體材料、相變材料、磁性材料、光學(xué) 透明固體材料等等。
[0057] 打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令305可操作用于指定或以其它方式指示 第一打包數(shù)據(jù)操作掩碼寄存器,用于指定或以其它方式指示第二打包數(shù)據(jù)操作掩碼寄存 器,并用于指定或以其它方式指示目的地存儲位置。在一些實施例中,該指令可操作用于明 確指定第一打包數(shù)據(jù)操作掩碼寄存器、第二打包數(shù)據(jù)操作掩碼寄存器、和目的地存儲位置 (其在某些方面也可以是打包數(shù)據(jù)操作掩碼寄存器)中的每一個。該指令可具有由指令格 式或指令的編碼所定義的一個或多個字段,以明確指定寄存器和存儲位置。在一些實施例 中,指令可遵循VEX編碼方案,但這不是必須的。VEX編碼方案的進一步的細節(jié)(如果需要 的話,但對于理解本發(fā)明而言不是必須的)可在以下文件中獲得:加利福尼亞州圣克拉拉 市的英特爾公司,英特爾? 64和IA-32架構(gòu)軟件開發(fā)者手冊,序號:253666-039US,2011年 5月。替代地,指令可隱含地指示寄存器或存儲位置中的一個或多個。在一些實施例中,目 的地存儲位置可不同于第一和第二源打包數(shù)據(jù)操作掩碼寄存器。在其他實施例中,第一和 第二源打包數(shù)據(jù)操作掩碼寄存器中的一個可被用作目的地存儲位置(例如,可被算術(shù)組合 至少部分地蓋寫)。
[0058] 打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令,若被機器(例如,處理器或指令處理裝 置)所執(zhí)行,可操作用于致使機器將所述第一打包數(shù)據(jù)操作掩碼寄存器的至少部分位和所 述第二打包數(shù)據(jù)操作掩碼寄存器的至少對應(yīng)部分位的算數(shù)組合存儲在目的地存儲位置中。 應(yīng)意識到的是,也可將用于執(zhí)行本文公開的一個或多個操作或方法的其他指令或指令序列 (例如,利用打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令的例程或算法)存儲在存儲介質(zhì)上。
[0059] 不同類型的機器的示例包括但不限于指令處理裝置、指令執(zhí)行裝置、處理器(例 如,通用處理器和專用處理器)以及具有一個或多個指令處理裝置、指令執(zhí)行裝置和/或處 理器的各種電子設(shè)備。這種電子設(shè)備的幾個代表示例包括但不限于計算機系統(tǒng)、臺式機、膝 上型計算機、筆記本、服務(wù)器、網(wǎng)絡(luò)路由器、網(wǎng)絡(luò)交換機、上網(wǎng)計算機、機頂盒、蜂窩電話、視 頻游戲控制器等。
[0060] 圖4是具有可操作用于執(zhí)行指令的執(zhí)行單元417的指令處理裝置415的示例實施 例的框圖,該指令包含打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令405的示例實施例。在一些 實施例中,指令處理裝置可以是處理器和/或可被包括在處理器中。例如,在一些實施例 中,指令處理裝置可以是圖1的處理器100或類似設(shè)備,或者可以被包括在圖1的處理器 100或類似設(shè)備中。替代地,指令處理裝置可被包括在不同的處理器或電子系統(tǒng)中。
[0061] 指令處理裝置415可接收打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令405。打包數(shù) 據(jù)操作掩碼寄存器算術(shù)組合指令可表示由指令處理裝置識別的機器指令、宏指令或控制信 號。指令處理裝置可具有專用的或特定的電路或其它邏輯(例如,與硬件和/或固件相結(jié) 合的軟件),該專用的或特定的電路或其它邏輯可操作用于處理指令,和/或存儲響應(yīng)于該 指令或作為該指令結(jié)果的結(jié)果。
[0062] 指令處理裝置的所示實施例包括指令解碼器416。解碼器可接收并解碼較高級的 機器指令或宏指令,諸如所接收的打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令。解碼器可以生 成并輸出一個或多個較低級的微操作、微代碼進入點、微指令、或其他較低級的指令或控制 信號,它們反映和/或衍生于原始較高級的指令。該一個或多個較低級指令或控制信號可 通過一個或多個較低級(例如,電路級或硬件級)操作來實現(xiàn)較高級指令的操作。解碼器 可以使用各種不同的機制來實現(xiàn)。合適機制的示例包括但不限于微代碼只讀存儲器(ROM)、 查找表、硬件實現(xiàn)、可編程邏輯陣列(PLA)、用于實現(xiàn)本領(lǐng)域已知的解碼器的其他機制等。
[0063] 替換地,代替具有解碼器416,在一個或多個其它實施例中,該裝置可具有指令仿 真器、轉(zhuǎn)換器、變形器(morpher)、解釋器或者其他指令變換邏輯。各種不同類型的指令變換 邏輯在本領(lǐng)域中是已知的,并且可在軟件、硬件、固件、或者其組合中實現(xiàn)。指令轉(zhuǎn)換邏輯可 接收打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令,仿真、翻譯、變形、解釋、或者以其他方式將該 指令轉(zhuǎn)換成一個或多個對應(yīng)的衍生指令或控制信號。在又一個其它實施例中,指令處理裝 置可具有解碼器和附加的指令變換邏輯二者。例如,指令處理裝置可具有:指令變換邏輯, 用于將打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令變換成第二指令;以及解碼器,用于將該第 二指令解碼成可由指令處理裝置的原生硬件執(zhí)行的一個或多個較低級的指令或控制信號。 指令變換邏輯中的一些或全部可位于其余指令處理裝置的管芯外,諸如在單獨的管芯上或 在管芯外的存儲器中。
[0064] 再次參考附圖4,指令處理裝置還包括第一打包數(shù)據(jù)操作掩碼寄存器408-1和第 二打包數(shù)據(jù)操作掩碼寄存器408-2。如前所述,該指令可明確地指定(例如,通過一個或 多個字段)或以其它方式指示第一打包數(shù)據(jù)操作掩碼寄存器、第二打包數(shù)據(jù)操作掩碼寄存 器、和目的地存儲位置419。在一些實施例中,目的地存儲位置可以是第三打包數(shù)據(jù)操作掩 碼寄存器408-3。替換地,目的地存儲位置可以是另一個寄存器或存儲器位置。在一些實施 例中,第一、第二和第三打包數(shù)據(jù)操作掩碼寄存器可在一組打包數(shù)據(jù)操作掩碼寄存器(例 如,寄存器組)408中。
[0065] 打包數(shù)據(jù)操作掩碼寄存器可各自表示板載處理器存儲位置。打包數(shù)據(jù)操作掩碼寄 存器可表示架構(gòu)寄存器。打包數(shù)據(jù)操作掩碼寄存器可對于軟件和/或編程器可見(例如, 軟件可見),和/或可以是宏指令(例如,打包數(shù)據(jù)操作掩碼算術(shù)組合指令)所指示或指定 的用以標(biāo)識操作數(shù)的寄存器。打包數(shù)據(jù)操作掩碼寄存器可通過使用公知技術(shù)以不同方式實 現(xiàn)于不同的微架構(gòu)中,并且不限于任何已知的特定類型的電路。各種不同類型的寄存器是 適用的,只要它們能夠存儲并提供在本申請中描述的數(shù)據(jù)。合適類型的寄存器的示例包括 但不限于專用物理寄存器、使用寄存器重命名的動態(tài)分配的物理寄存器、及其組合。
[0066] 指令處理裝置還包括執(zhí)行單元417。執(zhí)行單元與第一、第二、和第三打包數(shù)據(jù)操作 掩碼寄存器相耦合。執(zhí)行單元還與解碼器耦合。執(zhí)行單元可從解碼器接收一個或多個微操 作、微代碼進入點、微指令、其他指令或其他控制信號,它們反映了打包數(shù)據(jù)操作掩碼寄存 器算術(shù)組合指令或者是從打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令衍生出的。
[0067] 執(zhí)行單元可操作用于,響應(yīng)于打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令和/或作為 該指令的結(jié)果,將第一打包數(shù)據(jù)操作掩碼寄存器的至少部分位和第二打包數(shù)據(jù)操作掩碼寄 存器的至少對應(yīng)部分位存儲在目的地存儲位置中。作為示例,執(zhí)行單元可包括算術(shù)單元、算 術(shù)邏輯單元、加法單元,加法器單元、減法單元、減法器單元、功能單元等。執(zhí)行單元可包括 可操作用于執(zhí)行算術(shù)組合的算術(shù)組合邏輯(例如,集成電路)418。執(zhí)行單元和/或算術(shù)組 合邏輯可包括可操作用于實現(xiàn)指令的操作(例如,執(zhí)行一個或多個微指令)的電路或其它 執(zhí)行邏輯(例如,軟件、固件、硬件或組合)。
[0068] 在一些實施例中,指令405可以是打包數(shù)據(jù)操作掩碼寄存器加法指令,且執(zhí)行單 元可操作用于對第一和第二掩碼寄存器的至少對應(yīng)部分位做加法和/或求和。在其它實施 例中,指令405可以是打包數(shù)據(jù)操作掩碼寄存器減法指令,且執(zhí)行單元可操作用于對第一 和第二掩碼寄存器的至少對應(yīng)部分位做減法和/或求差。應(yīng)注意,通過使用負/求反操作, 加法可由減法指令來執(zhí)行,且通過使用負/求反操作,減法可由加法指令來執(zhí)行。
[0069] 在一些實施例中,第一和第二掩碼寄存器的對應(yīng)部分位可以是相同尺寸的部分, 且依賴于和該相同尺寸的部分相關(guān)聯(lián)的打包數(shù)據(jù)寬度和數(shù)據(jù)元素寬度,每個部分的尺寸可 為8位、16位、32位、或64位(例如,一個部分中的每個位可對應(yīng)于不同的打包數(shù)據(jù)元素)。 在一些情況下,指令處理裝置的指令集可包括用于這些不同的8位、16位、32位、64位尺寸 部分的每一種的不同指令,且部分的尺寸可對于指令是隱含的(例如,對于指令的操作碼 是隱含的),但這不是必須的。打包數(shù)據(jù)操作掩碼寄存器可至少與所支持的打包數(shù)據(jù)操作掩 碼的最大尺寸一樣大或任選地比該最大尺寸更大。在一個示例中,打包數(shù)據(jù)操作掩碼寄存 器可以為64位寬,但這不是必須的。
[0070] 在一些實施例中,執(zhí)行單元417可操作用于將第一和第二打包數(shù)據(jù)操作寄存器的 對應(yīng)最低位(或最低有效)的部分位的和或差存儲在目的地存儲位置的對應(yīng)最低位(或最 低有效)的部分位中,且執(zhí)行單元可操作用于對目的地存儲位置的最高位(或最高有效) 的部分位歸零(或替代地,將最高有效的部分位設(shè)為另一預(yù)定值)。被操作的部分可表示有 效位、被使用位,或寄存器中的有意義位,而寄存器中的剩余最高位的位可表示非有效位、 未被使用位、無意義位、或多余位。替代地,可在最高位的部分上求和和/或求差,且目的地 存儲器位置的最低位的部分位被歸零。
[0071] 為了避免混淆描述,已示出和描述了相對簡單的指令處理裝置。在其他實施例中, 該指令處理裝置或處理器可任選地包括其他公知組件,諸如舉例而言,指令取出單元、指令 調(diào)度單元、分支預(yù)測單元、指令和數(shù)據(jù)高速緩存、指令和數(shù)據(jù)轉(zhuǎn)換后備緩沖器、預(yù)取緩沖器、 微指令隊列、微指令序列發(fā)生器、總線接口單元、二級或更高級高速緩存、引退單元、寄存器 重命名單元、或其各種不同的組合。此外其它實施例可具有多種不同類型的執(zhí)行單元,這些 執(zhí)行單元中的至少一個響應(yīng)于本文公開的指令的實施例。再其它的實施例可具有多個核、 邏輯處理器、或執(zhí)行引擎??刹僮饔糜趫?zhí)行本文公開的指令的實施例的執(zhí)行單元可被包含 在核、邏輯處理器或執(zhí)行引擎中的至少一個、至少兩個、大多數(shù)或全部中。實際上在處理器 和其它指令處理裝置中存在這些組件的多種不同的可能組合和配置。本發(fā)明的范圍不僅限 于任何已知的這樣的組合或配置。
[0072] 圖5是打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令的示例實施例的處理方法520的示 例實施例的流程框圖。在各實施例中,方法可由通用處理器、專用處理器(例如,圖形處理 器或數(shù)字信號處理器)、或其他類型的數(shù)字邏輯設(shè)備或指令處理裝置執(zhí)行。在一些實施例 中,方法520可由圖1的處理器100、圖4的指令處理裝置415或類似的處理器或指令處理 裝置執(zhí)行。替代地,方法520可由處理器或指令處理裝置的不同實施例執(zhí)行。此外,圖1的 處理器100和圖4的指令處理裝置415可執(zhí)行與圖5的方法520的實施例相同、類似或不 同的操作和方法的實施例。
[0073] 方法包括在框521處接收打包數(shù)據(jù)操作掩碼算術(shù)組合指令。打包數(shù)據(jù)操作掩碼 寄存器算術(shù)組合指令指定或以其它方式指示第一打包數(shù)據(jù)操作掩碼寄存器,指定或以其它 方式指示第二打包數(shù)據(jù)操作掩碼寄存器,并指定或以其它方式指示目的地存儲位置。在一 些實施例中,指令格式或指令的編碼可具有用于明確指定這些操作數(shù)的位或一個或多個字 段。在各個方面,該指令可在處理器、指令處理裝置或者其一部分(例如,解碼器、指令變換 器等)處接收。在各個方面,指令可從處理器外的源(例如,從主存儲器、盤、或總線或互 連)或者從處理器上的源(例如,從指令高速緩存)接收。
[0074] 隨后,在框522,響應(yīng)于打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令,第一打包數(shù)據(jù)操 作掩碼寄存器的至少部分位和第二打包數(shù)據(jù)操作掩碼寄存器的至少對應(yīng)部分位的算術(shù)組 合被存儲在目的地存儲位置中。作為示例,執(zhí)行單元、指令處理裝置或處理器可生成或計算 算術(shù)組合。
[0075] 在一些實施例中,所接收的指令可以是打包數(shù)據(jù)操作掩碼寄存器加法指令,且算 術(shù)組合可為第一和第二掩碼寄存器的至少對應(yīng)部分位的求和和/或相加。在其他實施例 中,所接收的指令可以是打包數(shù)據(jù)操作掩碼寄存器減法指令,且算術(shù)組合可以是第一和第 二掩碼寄存器的至少對應(yīng)部分位的求差和/或相減。
[0076] 在一些實施例中,第一和第二掩碼寄存器的對應(yīng)部分位可以是相同尺寸的部分, 且依賴于和該相同尺寸的部分相關(guān)聯(lián)的打包數(shù)據(jù)寬度和數(shù)據(jù)元素寬度,每個部分的尺寸可 為8位、16位、32位、或64位(例如,一個部分中的每個位可對應(yīng)于不同的打包數(shù)據(jù)元素)。 在一些情況下,指令處理裝置的指令集可包括用于這些不同的8位、16位、32位、64位尺寸 部分的每一種的不同指令,且部分的尺寸可對于指令是隱含的(例如,對于指令的操作碼 是隱含的),但這不是必須的。打包數(shù)據(jù)操作掩碼寄存器可至少與所支持的打包數(shù)據(jù)操作掩 碼的最大尺寸一樣大或任選地比該最大尺寸更大。在一個示例中,打包數(shù)據(jù)操作掩碼寄存 器可以為64位寬,但這不是必須的。
[0077] 在一些實施例中,方法可包括:將第一和第二打包數(shù)據(jù)操作寄存器的對應(yīng)最低位 (或最低有效)的部分位的和或差存儲在目的地存儲位置的對應(yīng)最低位(或最低有效)的 部分位中,并對目的地存儲位置的最高位(或最高有效)的部分位歸零(或替代地,將最高 有效的部分位設(shè)為另一預(yù)定值)。替代地,可在最高位的部分上求和和/或求差,且目的地 存儲器的最低位的部分位被歸零(或設(shè)為另一預(yù)定值)。
[0078] 所示的方法包括從處理器或指令處理裝置外部可見的操作(例如,從軟件視角)。 在其它實施例中,該方法可任選地包括一個或多個其它操作(例如,在處理器或指令處理 器裝置內(nèi)部發(fā)生的一個或多個操作)。作為示例,在接收到指令之后,可將指令解碼、轉(zhuǎn)換、 仿真或以其它方式變換成一個或多個其它指令或控制信號??稍L問和/或接收第一和第二 打包數(shù)據(jù)操作掩碼??蓡⒂脠?zhí)行單元以根據(jù)指令生成或計算算術(shù)組合,并可生成或計算算 術(shù)組合。
[0079] 然而,該方法還可與其它操作和/或方法一起使用。例如,如下文將進一步討論 的,該方法可任選地作為算法或指令序列的部分,用于相加大數(shù)(例如,大整數(shù)),且與序列 的其他指令相關(guān)的操作可被添加至該方法。例如,另一指令可存儲第一打包數(shù)據(jù)操作掩碼 寄存器的部分位,且這些位可表示和兩個打包數(shù)據(jù)操作數(shù)的對應(yīng)打包數(shù)據(jù)元素的加法相關(guān) 聯(lián)的進位輸出信息,如下文將進一步解釋的。
[0080] 圖6是一組合適的打包數(shù)據(jù)寄存器607的示例實施例的框圖。所示打包數(shù)據(jù) 寄存器包括三十二個512位寬打包數(shù)據(jù)或矢量寄存器。這些三十二個512位寬寄存器 被標(biāo)記為ΖΜΜ0至ZMM31。在所示實施例中,這些寄存器中的較低十六個的較低階256 位(S卩,ZMM0-ZMM15)被混疊或者覆蓋在相應(yīng)256位寬打包數(shù)據(jù)或矢量寄存器(標(biāo)記為 YMM0-YMM15)上,但是這不是必須的。同樣,在所示實施例中,YMM0-YMM15的較低階128位 被混疊或者覆蓋在相應(yīng)128位打包數(shù)據(jù)或向量寄存器(標(biāo)記為XMM0-XMM1)上,但是這也不 是必須的。512位寬寄存器ΖΜΜ0至ZMM31可操作用于保持512位打包數(shù)據(jù)、256位打包數(shù) 據(jù)、或者128位打包數(shù)據(jù)。256位寬寄存器YMM0-YMM15可操作用于保持256位打包數(shù)據(jù)或 者128位打包數(shù)據(jù)。128位寬寄存器XMM0-XMM1可操作用于保持128位打包數(shù)據(jù)。每一寄 存器可用于存儲打包浮點數(shù)據(jù)或打包整數(shù)數(shù)據(jù)。支持不同數(shù)據(jù)元素尺寸,包括至少8位字 節(jié)數(shù)據(jù)、16位字數(shù)據(jù)、32位雙字或單精度浮點數(shù)據(jù)、以及64位四字或雙精度浮點數(shù)據(jù)。打 包數(shù)據(jù)寄存器的替代實施例可包括不同數(shù)量的寄存器、不同尺寸的寄存器,并且可以或者 可以不將較大寄存器混疊(alias)在較小寄存器上。
[0081] 圖7是示出具有合適打包數(shù)據(jù)格式的若干示例實施例的框圖。256位打包字格式 710-1是256位寬,并且包括十六個16位字數(shù)據(jù)元素。在圖示中十六個16位字數(shù)據(jù)元素從 最低有效位位置至最高有效位位置標(biāo)記為字〇至字15。256位打包雙字格式710-2是256 位寬,并且包括八個32位雙字(dword)數(shù)據(jù)元素。在圖示中八個32位雙字數(shù)據(jù)元素從最 低有效位位置至最高有效位位置標(biāo)記為雙字0至雙字7。256位打包四字格式710-3是256 位寬,并且包括四個64位四字數(shù)據(jù)元素。在圖示中四個64位四字數(shù)據(jù)元素從最低有效位 位置至最高有效位位置標(biāo)記為四字〇至四字3。
[0082] 其他打包數(shù)據(jù)結(jié)果也是合適的。例如,其他合適的256位打包數(shù)據(jù)格式包括256位 打包8位字節(jié)格式,256位打包32位單精度浮點格式,以及256位打包64位雙精度浮點格 式。單精度浮點格式和雙精度浮點格式可分別看起來類似于所示的雙字格式710-2和四字 格式710-3,然而數(shù)據(jù)元素內(nèi)的位的含義/解釋可不同。此外,大于和/或小于256位的打 包數(shù)據(jù)格式也是合適的。例如,前述數(shù)據(jù)類型的512位(或更大)打包數(shù)據(jù)格式和/或128 位(或更?。┐虬鼣?shù)據(jù)格式也是合適的。通常,對于相同數(shù)據(jù)類型而言,512位打包數(shù)據(jù)格 式可具有為256位打包數(shù)據(jù)格式的兩倍之多的數(shù)據(jù)元素,而對于相同數(shù)據(jù)類型而言,128位 打包數(shù)據(jù)格式可具有為256位打包數(shù)據(jù)格式的一半那么多的數(shù)據(jù)元素。通常,打包數(shù)據(jù)元 素的數(shù)量等于以位計的打包數(shù)據(jù)的尺寸除以以位計的打包數(shù)據(jù)元素的尺寸。
[0083] 圖8是示出打包數(shù)據(jù)操作掩碼位823的數(shù)量依賴于打包數(shù)據(jù)寬度和打包數(shù)據(jù)元素 寬度的表格。示出了 128位、256位和512位的打包數(shù)據(jù)寬度,但是其它寬度也是可能的。 考慮了 8位字節(jié)、16位字、32位雙字(dwords)或單精度浮點、以及64位四字(Qwords)或 雙精度浮點的打包數(shù)據(jù)元素寬度,然而其它寬度也是可能的。
[0084] 如所示,當(dāng)打包數(shù)據(jù)寬度是128位時,當(dāng)打包數(shù)據(jù)元素寬度是8位時可將16位用 于掩碼,當(dāng)打包數(shù)據(jù)元素寬度是16位時可將8位用于掩碼,當(dāng)打包數(shù)據(jù)元素寬度是32位時 可將4位用于掩碼,當(dāng)打包數(shù)據(jù)元素寬度是64位時可將2位用于掩碼。當(dāng)打包數(shù)據(jù)寬度是 256位時,當(dāng)打包數(shù)據(jù)元素寬度是8位時可將32位用于掩碼,當(dāng)打包數(shù)據(jù)元素寬度是16位 時可將16位用于掩碼,當(dāng)打包數(shù)據(jù)元素寬度是32位時可將8位用于掩碼,當(dāng)打包數(shù)據(jù)元素 寬度是64位時可將4位用于掩碼。當(dāng)打包數(shù)據(jù)寬度是512位時,當(dāng)打包數(shù)據(jù)元素寬度是8 位時可將64位用于掩碼,當(dāng)打包數(shù)據(jù)元素寬度是16位時可將32位用于掩碼,當(dāng)打包數(shù)據(jù) 元素寬度是32位時可將16位用于掩碼,當(dāng)打包數(shù)據(jù)元素寬度是64位時可將8位用于掩碼。
[0085] 圖9是一組合適的打包數(shù)據(jù)操作掩碼寄存器908的示例實施例的方框圖。打包數(shù) 據(jù)操作掩碼寄存器中的每一個可用于存儲打包數(shù)據(jù)操作掩碼。在所例示的實施例中,該組 包括標(biāo)示為K0至k7的八個打包數(shù)據(jù)操作掩碼寄存器。替代的實施例可包括比八個更少 (例如,兩個、四個、六個等)或比八個更多(例如,十六個、二十個、三十二個等)的打包數(shù) 據(jù)操作掩碼寄存器。在所例示的實施例中,打包數(shù)據(jù)操作掩碼寄存器中的每一個為64位 寬。在替代實施例中,打包數(shù)據(jù)操作掩碼寄存器的寬度可以比64位更寬(例如,80位,128 位等)或比64位更窄(例如,8位、16位、32位等)。打包數(shù)據(jù)操作掩碼寄存器可通過使用 公知技術(shù)以不同方式實現(xiàn),并且不限于任何已知的特定類型的電路。各種不同類型的寄存 器是適用的,只要它們能夠存儲并提供在本申請中描述的數(shù)據(jù)。合適類型的寄存器的示例 包括但不限于專用物理寄存器、使用寄存器重命名的動態(tài)分配的物理寄存器、及其組合。
[0086] 在一些實施例中,打包數(shù)據(jù)操作掩碼寄存器908可以是架構(gòu)寄存器的單獨、專用 的集合。在一些實施例中,與用于編碼或指定其它類型的寄存器(例如,圖1的打包數(shù)據(jù) 寄存器108)的位或字段相比,指令可使用指令格式的不同位或一個或多個不同字段組合 來編碼或指定打包數(shù)據(jù)操作掩碼寄存器。作為示例,依掩碼的打包數(shù)據(jù)指令可使用三個位 (例如,3位字段)來編碼或指定八個打包數(shù)據(jù)操作掩碼寄存器k0至k7中的任一個。在替 代實施例中,在有更少或更多打包數(shù)據(jù)操作掩碼寄存器時,可分別使用更少或更多位。在一 個特定實現(xiàn)中,僅打包數(shù)據(jù)操作掩碼寄存器kl至k7 (而非k0)可被尋址作為斷言操作數(shù)以 用于斷言依掩碼打包數(shù)據(jù)操作。寄存器k0可被用作常規(guī)源或目的地,但是可不被編碼為斷 言操作數(shù)(例如,如果k0被指定,則其具有全一或"無掩碼"編碼)。在其他實施例中,寄存 器中的全部或僅一些可被編碼為斷言操作數(shù)。
[0087] 圖10是例示打包數(shù)據(jù)操作掩碼寄存器1008的示例實施例并且示出可被用作打包 數(shù)據(jù)操作掩碼和/或用于掩碼操作的位的數(shù)量依賴于打包數(shù)據(jù)寬度和數(shù)據(jù)元素寬度的示 圖。所例示的打包數(shù)據(jù)操作掩碼寄存器的示例實施例為64位寬,但這并不是必須的。依賴 于打包數(shù)據(jù)寬度和數(shù)據(jù)元素寬度的組合,可將全部64位或僅64位的子集用作用來進行掩 碼操作的打包數(shù)據(jù)操作掩碼。一般而言,當(dāng)單個、逐元素的掩碼控制位被使用時,打包數(shù)據(jù) 操作掩碼寄存器中用于掩碼操作的位的數(shù)量等于以位計的打包數(shù)據(jù)寬度除以以位計的打 包數(shù)據(jù)元素寬度。
[0088] 示出若干示例性示例。即,當(dāng)打包數(shù)據(jù)寬度為512位而打包數(shù)據(jù)元素寬度為64位 時,則僅寄存器的最低位8位被用作打包數(shù)據(jù)操作掩碼。當(dāng)打包數(shù)據(jù)寬度為512位而打包 數(shù)據(jù)元素寬度為32位時,則僅寄存器的最低位16位被用作打包數(shù)據(jù)操作掩碼。當(dāng)打包數(shù) 據(jù)寬度為512位而打包數(shù)據(jù)元素寬度為16位時,則僅寄存器的最低位32位被用作打包數(shù) 據(jù)操作掩碼。當(dāng)打包數(shù)據(jù)寬度為512位而打包數(shù)據(jù)元素寬度為8位時,則寄存器的全部64 位被用作打包數(shù)據(jù)操作掩碼。根據(jù)所例示的實施例,依掩碼的打包數(shù)據(jù)指令可基于該指令 的相關(guān)聯(lián)打包數(shù)據(jù)寬度和數(shù)據(jù)元素寬度而僅訪問和/或利用寄存器中所述數(shù)量的被用于 打包數(shù)據(jù)操作掩碼的最低位或最低有效位。
[0089] 在所例示的實施例中,寄存器的最低位的子集或部分被用于掩碼操作,但是這不 是必須的。在替代實施例中,可任選地使用最高位的子集或某一其他子集。此外,在所例示 的實施例中,僅考慮了 512位打包數(shù)據(jù)寬度,然而,相同的原理適用于其他打包數(shù)據(jù)寬度, 諸如例如256位和128位寬度。如先前提及的,并非必須使用64位打包數(shù)據(jù)操作掩碼寄存 器。
[0090] 圖11A-11D示出打包數(shù)據(jù)操作掩碼寄存器加法指令和其操作的多種特定示例實 施例。在這些圖中,SRC1是第一源,SRC2是第二源,DEST是目的地,MAX_KL表示DEST的 位數(shù),符號一表示存儲。在一些實施例中,SRCUSRC2和DEST各自是打包數(shù)據(jù)操作掩碼寄 存器,且在一些實施例中MAX_KL是64位,但這不是必須的。在其他實施例中,不是將DEST 的最高位部分歸零,而是可給予其另一預(yù)定值(例如,全為1,或保持、或合并來自SRC1或 SRC2中一個的值)。再其他的實施例包括打包數(shù)據(jù)操作掩碼寄存器減法指令,其和每個所 例示的指令相同,區(qū)別在于以減法操作替換加法操作。
[0091] 本文公開的打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令具有一般用途。例如,它們可 用于以對于特定應(yīng)用、算法、代碼或?qū)崿F(xiàn)而言有用且期望的方式來相加、相減、或算術(shù)地組 合打包數(shù)據(jù)操作掩碼和/或掩碼寄存器。本領(lǐng)域技術(shù)人員將將會在不同算法(例如,組合 掩碼)中以多種不同方式來使用這些通用的指令。
[0092] 在某些實施例中,打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令可被用于在掩碼寄存器 中的掩碼上執(zhí)行位操縱(例如,和其他指令一同使用以創(chuàng)建具有特定屬性的掩碼寄存器)。 作為一個具體的示例,所述指令可被用作算法的一部分,以在第一掩碼中定位最低有效設(shè) 定位的位置,并創(chuàng)建第二掩碼,該掩碼從所定位的位置往下至最低有效位的所有位被設(shè)定 (即1),并且在所定位位置以上所有位被清零(即0)。在一個方面,還可使用異或或(xor) 型操作。
[0093] 在其他實施例中,打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令和/或本文所公開的操 作可與執(zhí)行大整數(shù)加法和/或減法相協(xié)同使用,這對于多種不同的應(yīng)用是有用的。大整數(shù) 加法和/或減法可牽涉到相加或相減兩個或更多個大整數(shù)(例如,具有至少128位、至少 256位、或至少512位的整數(shù))。處理器通常不支持諸如128位或256位之類大尺寸的數(shù)據(jù) 元素,而是通常支持具有例如64位或32位的更小最大尺寸的數(shù)據(jù)元素。大整數(shù)的每一個 可跨越打包數(shù)據(jù)寄存器中的多個較小數(shù)據(jù)元素(例如,32位或64位數(shù)據(jù)元素)。例如,兩 個512位整數(shù)的每一個可跨越512位打包數(shù)據(jù)或寄存器內(nèi)的十六個32位數(shù)據(jù)元素或八個 64位數(shù)據(jù)元素。
[0094] 為了進一步說明特定的概念,考慮通過十六次單獨的32位加法進行的兩個512位 整數(shù)的加法。最初,可在包括大整數(shù)的兩個打包數(shù)據(jù)上執(zhí)行打包數(shù)據(jù)加法指令/操作,所述 大整數(shù)各自跨越十六個32位數(shù)據(jù)元素。打包數(shù)據(jù)加法指令可將相應(yīng)位置中的相應(yīng)的32位 數(shù)據(jù)元素對的每一對相加,并在目的地中存儲和。相應(yīng)32位數(shù)據(jù)元素對的每次相加會可能 地(依賴于被相加的32位數(shù)據(jù)元素的值)牽涉到進位輸出。當(dāng)和的大小過大以致不能在 可用于結(jié)果數(shù)據(jù)元素的數(shù)量的位(例如32位)中被表示時,可發(fā)生進位輸出。任何來自該 十六個加法的進位輸出將會丟失。
[0095] 接下來,可確定加法中的哪個牽涉到丟失的進位輸出。這可以用不同的方式來完 成。作為一個示例,打包數(shù)據(jù)比較指令可被用于執(zhí)行比較,從而確定加法中的哪個牽涉到進 位輸出。打包數(shù)據(jù)比較指令可將每個和的大小和被相加的一個或多個源的對應(yīng)數(shù)據(jù)元素的 大小進行比較。當(dāng)相加無符號整數(shù)時,如果和小于任一個源,則可推斷存在進位輸出。當(dāng)和 的大小小于任一個源的對應(yīng)數(shù)據(jù)元素的大小時,加法可被確定為牽涉到進位輸出。相反,當(dāng) 和的大小大于或等于任一個源的對應(yīng)數(shù)據(jù)元素的大小時,加法可被確定為不牽涉到進位輸 出。當(dāng)加法被確定為牽涉到進位輸出時,第一打包數(shù)據(jù)操作掩碼(即,暫且稱為K1)的打包 數(shù)據(jù)操作掩碼位可被設(shè)定(即1),或當(dāng)加法被確定為不牽涉到進位輸出時,其被清零(即 〇)。第一打包數(shù)據(jù)操作掩碼(K1)中每個被設(shè)定的位表示進位輸出信息,其指示對應(yīng)的32 位數(shù)據(jù)元素對的對應(yīng)加法產(chǎn)生了進位輸出,而K1中每個被清零的位指示對應(yīng)的32位數(shù)據(jù) 元素對的對應(yīng)加法沒有產(chǎn)生進位輸出。
[0096] 存在一種可能,即與相鄰較低位數(shù)據(jù)元素對的和的進位輸出相對應(yīng)的進位輸入可 引發(fā)進入較高位數(shù)據(jù)元素的進一步進位輸出。因為進位輸入僅是二進制的1,僅當(dāng)進位輸入 所被相加的和最初具有全為二進制1的值(即,11··· 11)時,所引發(fā)的進位輸出才會發(fā)生。 當(dāng)進位輸入被相加到具有全二進制1的元素時,則所引發(fā)的進位輸出會發(fā)生。由此,在將進 位輸入加至較高位的和時,可首先執(zhí)行檢查以查看是否該進位輸入會引發(fā)進位輸出。這可 以用不同的方式來執(zhí)行。在一個示例中,可將和與另一個包括全二進制1(即11…11)的源 進行打包比較。依賴于該第二比較的結(jié)果,第二打包數(shù)據(jù)操作掩碼(暫且稱為K2)中的位 可被設(shè)定或清零。具體地,當(dāng)任何和等于全二進制1時,第二打包數(shù)據(jù)操作掩碼(K2)的位 可被設(shè)定(即1),否則其被清零(即〇)。因此,K2指示哪些進位輸入會引發(fā)附加的進位輸 出。
[0097] 隨后,第一打包數(shù)據(jù)操作掩碼(K1)的位可被移位,以使得所設(shè)定的進位輸出位被 移到它們將被作為進位輸入而相加的和/數(shù)據(jù)元素(例如,向右移動1位)。K1中的被設(shè) 定位現(xiàn)在表示準(zhǔn)備好被加到和上的進位輸入。
[0098] 接下去,可使用本文所公開的打包數(shù)據(jù)操作掩碼寄存器加法指令和/或操作來將 被移位的第一打包數(shù)據(jù)操作掩碼寄存器(K1)和第二打包數(shù)據(jù)操作掩碼寄存器(K2)相加。 例如,該操作可由Kaddw kl,kl,k2表示。這可有助于將所引發(fā)的進位輸出考慮在內(nèi)。所產(chǎn) 生的打包數(shù)據(jù)操作掩碼寄存器K1現(xiàn)在包含來自于原始加法的、且與所引發(fā)的進位相組合 的進位輸入。這可有助于針對所丟失的中間進位來調(diào)節(jié)大整數(shù)和。
[0099] 接下去,可執(zhí)行X0R來進行一些調(diào)整和/或校正。首先,X0R可有助于校正可能已 有二級進位但沒有進位輸入的情況。如果在原始求和之后,元素是全二進制1,但沒有進位 輸入,則這些進位可被移除。當(dāng)二級進位確實將具有對應(yīng)的進位輸入時,X0R可僅允許二級 進位。因為K1和K2都具有1,這些二級進位被移除。其次,X0R校正其中二級進位的相加 抬高原始進位從而在中間元素中留下不正確的"〇"的情況。這些中間元素將利用X0R將它 們的值設(shè)置回"1",確保對應(yīng)數(shù)據(jù)元素將具有正確的進位調(diào)節(jié)。K1現(xiàn)在具有全部正確的進 位以對被分成32個位元素/段的原始加法進行完全地校正。
[0100] 隨后,在經(jīng)調(diào)節(jié)的第一打包數(shù)據(jù)操作掩碼(K1)中所反映的經(jīng)調(diào)節(jié)的進位輸入可 被加到和上,以產(chǎn)生最終期望的大整數(shù)加法和??蓤?zhí)行打包數(shù)據(jù)加法指令/操作,其中當(dāng)被 第一打包數(shù)據(jù)操作掩碼(K1)所斷言時,加上進位。
[0101] 這只是一個說明性示例。也可執(zhí)行更大或更小整數(shù)的加法,還可執(zhí)行大整數(shù)減法。 可使用該算法的多次迭代來執(zhí)行更大的加法。當(dāng)在其中實現(xiàn)算法以對打包數(shù)據(jù)操作掩碼寄 存器進行操作的給定ISA中所述指令不可用時,掩碼可被移到通用寄存器并在該處操縱, 且隨后被移回打包數(shù)據(jù)操作掩碼寄存器以用于Kadd指令。
[0102] 指令集包括一個或多個指令格式。給定指令格式定義各個字段(位的數(shù)量、位的 位置)以指定要執(zhí)行的操作(操作碼)以及對其要執(zhí)行該操作的操作數(shù)等。通過指令模板 (或子格式)的定義來進一步分解一些指令格式。例如,給定指令格式的指令模板可被定 義為具有指令格式的字段(所包括的字段通常按照相同的順序,但是至少一些字段具有不 同的位位置,因為包括更少的字段)的不同子集,和/或被定義為對給定字段不同地進行解 釋。由此,ISA的每一指令使用給定指令格式(并且如果定義,則在該指令格式的指令模板 的給定一個中)來表達,并且包括用于指定操作和操作數(shù)的字段。例如,示例性ADD指令具 有專用操作碼以及包括指定該操作碼的操作碼字段和選擇操作數(shù)的操作數(shù)字段(源1/目 的地以及源2)的指令格式;并且該ADD指令在指令流中的出現(xiàn)將具有選擇專用操作數(shù)的操 作數(shù)字段中的專用內(nèi)容。已經(jīng)發(fā)布和/或公布了被稱為高級向量擴展(AVX) (AVX1和AVX2) 且使用向量擴展(VEX)編碼方案的SMD擴展集(例如,參見2011年10月的Intel? 64和 IA-32架構(gòu)軟件開發(fā)者手冊,并且參見2011年6月的Intel?高級向量擴展編程參考)。
[0103] 示例性指令格式
[0104] 本文中所描述的指令的實施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性 系統(tǒng)、架構(gòu)、以及流水線。指令的實施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限 于詳述的系統(tǒng)、架構(gòu)、以及流水線。
[0105] VEX指令格式
[0106] VEX編碼允許指令具有兩個以上操作數(shù),并且允許SMD向量寄存器比128位長。 VEX前綴的使用提供了三操作數(shù)(或者更多)句法。例如,先前的兩操作數(shù)指令執(zhí)行改寫源 操作數(shù)的操作(諸如A = A+B)。VEX前綴的使用使操作數(shù)能執(zhí)行非破壞性操作,諸如A = B+C。
[0107] 圖12A示出示例性AVX指令格式,包括VEX前綴1202、實操作碼字段1230、M〇D R/ Μ字節(jié)1240、SIB字節(jié)1250、位移字段1262以及IMM81272。圖12B示出來自圖12A的哪些 字段構(gòu)成完整操作碼字段1274和基礎(chǔ)操作字段1242。圖12C示出來自圖12A的哪些字段 構(gòu)成寄存器索引字段1244。
[0108] VEX前綴(字節(jié)0-2) 1202以三字節(jié)形式進行編碼。第一字節(jié)是格式字段1240 (VEX 字節(jié)0,位[7:0]),該格式字段1240包含明確的C4字節(jié)值(用于區(qū)分C4指令格式的唯一 值)。第二-第三字節(jié)(VEX字節(jié)1-2)包括提供專用能力的多個位字段。具體地,REX字段 1205 (VEX 字節(jié) 1,位[7-5])由 VEX. R 位字段(VEX 字節(jié) 1,位[7] - R)、VEX. X 位字段(VEX 字 節(jié)1,位[6] - X)以及VEX. B位字段(VEX字節(jié)1,位[5] - B)組成。這些指令的其他字段對如 在本領(lǐng)域中已知的寄存器索引的較低三個位(rrr、XXX以及bbb)進行編碼,由此可通過增 加 VEX. R、VEX. X以及VEX. B來形成Rrrr、Xxxx以及Bbbb。操作碼映射字段1215 (VEX字節(jié) 1,位[4:0] -mmmmm)包括對隱含的前導(dǎo)操作碼字節(jié)進行編碼的內(nèi)容。W字段1264 (VEX字節(jié) 2,位[7] -W)由記號VEX. W表示,并且提供取決于該指令而不同的功能。VEX. WW1220 (VEX 字節(jié)2,位[6:3]-vvvv)的作用可包括如下:1) VEX. vvvv編碼第一源寄存器操作數(shù)且對具有 兩個或兩個以上源操作數(shù)的指令有效,第一源寄存器操作數(shù)以反轉(zhuǎn)(1補碼)形式被指定; 2) VEX. vvvv編碼目的地寄存器操作數(shù),目的地寄存器操作數(shù)針對特定向量位移以1補碼的 形式被指定;或者3)VEX. vvvv不編碼任何操作數(shù),保留該字段,并且應(yīng)當(dāng)包含1111b。如果 VEX. L1268尺寸字段(VEX字節(jié)2,位[2]-L) =0,則它指示128位向量;如果VEX. L= 1,則 它指示256位向量。前綴編碼字段1225(VEX字節(jié)2,位[1:0]-ρρ)提供了用于基礎(chǔ)操作字 段的附加位。
[0109] 實操作碼字段1230(字節(jié)3)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中 被指定。
[0110] MOD R/Μ 字段 1240(字節(jié) 4)包括 MOD 字段 1242(位[7-6])、Reg 字段 1244(位 [5-3])、以及R/Μ字段1246(位[2-0])。Reg字段1244的作用可包括如下:對目的地寄存 器操作數(shù)或源寄存器操作數(shù)(Rrrr中的rrr)進行編碼;或者被視為操作碼擴展且不用于對 任何指令操作數(shù)進行編碼。R/Μ字段1246的作用可包括如下:對引用存儲器地址的指令操 作數(shù)進行編碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼。
[0111] 比例、索弓丨、基址(SIB) -比例字段1250(字節(jié)5)的內(nèi)容包括用于存儲器地址生 成的SS1252(位[7-6])。先前已經(jīng)針對寄存器索引Xxxx和Bbbb參考了 SIB. xxxl254(位 [5-3])和 SIB.bbbl256(位[2-0])的內(nèi)容。
[0112] 位移字段1262和立即數(shù)字段(IMM8) 1272包含地址數(shù)據(jù)。
[0113] 示例性寄存器架構(gòu)
[0114] 圖13是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)1300的框圖。在所示出的實施 例中,有32個512位寬的向量寄存器1310 ;這些寄存器被引用為zmmO到zmm31。較低的 16zmm寄存器的較低階256個位覆蓋在寄存器ymm〇-16上。較低的16zmm寄存器的較低階 128個位(ymm寄存器的較低階128個位)覆蓋在寄存器xmmO-15上。
[0115] 寫掩碼寄存器1315 -在所示的實施例中,存在8個寫掩碼寄存器(k0至k7),每一 寫掩碼寄存器的尺寸是64位。在替代實施例中,寫掩碼寄存器1315的尺寸是16位。如先 前所述的,在本發(fā)明的一個實施例中,向量掩碼寄存器k0無法用作寫掩碼;當(dāng)正常指示k0 的編碼用作寫掩碼時,它選擇硬連線的寫掩碼OxFFFF,從而有效地停用該指令的寫掩碼操 作。
[0116] 通用寄存器1325--在所示出的實施例中,有十六個64位通用寄存器,這些寄存 器與現(xiàn)有的x86尋址模式一起使用來尋址存儲器操作數(shù)。這些寄存器通過名稱RAX、RBX、 RCX、RDX、RBP、RSI、RDI、RSP 以及 R8 到 R15 來引用。
[0117] 標(biāo)量浮點堆棧寄存器組(x87堆棧)1345,在其上面使用了別名MMX打包整數(shù) 平坦寄存器組1350--在所示出的實施例中,x87堆棧是用于使用x87指令集擴展來對 32/64/80位浮點數(shù)據(jù)執(zhí)行標(biāo)量浮點運算的八元素堆棧;而使用MMX寄存器來對64位打包 整數(shù)數(shù)據(jù)執(zhí)行操作,以及為在MMX和XMM寄存器之間執(zhí)行的一些操作保存操作數(shù)。
[0118] 本發(fā)明的替代實施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替代實施 例可以使用更多、更少或不同的寄存器組和寄存器。
[0119] 示例性核架構(gòu)、處理器和計算機架構(gòu)
[0120] 處理器核可以用出于不同目的的不同方式在不同的處理器中實現(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)。
[0121] 示例性核架構(gòu)
[0122] 有序和無序核框圖
[0123] 圖14A是示出根據(jù)本發(fā)明的各實施例的示例性有序流水線和示例性的寄存器重 命名的無序發(fā)布/執(zhí)行流水線的框圖。圖14B是示出根據(jù)本發(fā)明的各實施例的要包括在處 理器中的有序架構(gòu)核的示例性實施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核 的框圖。圖14A-B中的實線框示出了有序流水線和有序核,而可選增加的虛線框示出了寄 存器重命名的、無序發(fā)布/執(zhí)行流水線和核。給定有序方面是無序方面的子集的情況下,將 描述無序方面。
[0124] 在圖14A中,處理器流水線1400包括取出級1402、長度解碼級1404、解碼級1406、 分配級1408、重命名級1410、調(diào)度(也稱為分派或發(fā)布)級1412、寄存器讀取/存儲器讀取 級1414、執(zhí)行級1416、寫回/存儲器寫入級1418、異常處理級1422和提交級1424。
[0125] 圖14B示出了包括耦合到執(zhí)行引擎單元1450的前端單元1430的處理器核1490, 且執(zhí)行引擎單元和前端單元兩者都耦合到存儲器單元1470。核1490可以是精簡指令集計 算(RISC)核、復(fù)雜指令集計算(CISC)核、超長指令字(VLIW)核或混合或替代核類型。作 為又一選項,核1490可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用 計算圖形處理器單元(GPGPU)核、或圖形核等等。
[0126] 前端單元1430包括耦合到指令高速緩存單元1434的分支預(yù)測單元1432,該指令 高速緩存單元耦合到指令轉(zhuǎn)換后備緩沖器(TLB) 1436,該指令轉(zhuǎn)換后備緩沖器耦合到指令 取出單元1438,該指令取出單元耦合到解碼單元1440。解碼單元1440 (或解碼器)可解碼 指令,并生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指令導(dǎo)出的一 個或多個微操作、微代碼進入點、微指令、其他指令、或其他控制信號作為輸出。解碼單元 1440可使用各種不同的機制來實現(xiàn)。合適的機制的示例包括但不限于查找表、硬件實現(xiàn)、可 編程邏輯陣列(PLA)、微代碼只讀存儲器(ROM)等。在一個實施例中,核1490包括(例如, 在解碼單元1440中或否則在前端單元1430內(nèi)的)用于存儲某些宏指令的微代碼的微代碼 ROM或其他介質(zhì)。解碼單元1440耦合到執(zhí)行引擎單元1450中的重命名/分配單元1452。
[0127] 執(zhí)行引擎單元1450包括重命名/分配器單元1452,該重命名/分配器單元耦合至 引退單元1454和一個或多個調(diào)度器單元1456的集合。調(diào)度器單元1456表示任何數(shù)目的 不同調(diào)度器,包括預(yù)留站、中央指令窗等。調(diào)度器單元1456耦合到物理寄存器組單元1458。 每個物理寄存器組單元1458表示一個或多個物理寄存器組,其中不同的物理寄存器組存 儲一種或多種不同的數(shù)據(jù)類型,諸如標(biāo)量整數(shù)、標(biāo)量浮點、打包整數(shù)、打包浮點、向量整數(shù)、 向量浮點、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個實施例中, 物理寄存器組單元1458包括向量寄存器單元、寫掩碼寄存器單元和標(biāo)量寄存器單元。這些 寄存器單元可以提供架構(gòu)向量寄存器、向量掩碼寄存器、和通用寄存器。物理寄存器組單元 1458與引退單元1454重疊以示出可以用來實現(xiàn)寄存器重命名和無序執(zhí)行的各種方式(例 如,使用重新排序緩沖器和引退寄存器組;使用將來的文件、歷史緩沖器和引退寄存器組; 使用寄存器映射和寄存器池等等)。引退單元1454和物理寄存器組單元1458耦合到執(zhí)行 群集1460。執(zhí)行群集1460包括一個或多個執(zhí)行單元1462的集合和一個或多個存儲器訪 問單元1464的集合。執(zhí)行單元1462可以對各種類型的數(shù)據(jù)(例如,標(biāo)量浮點、打包整數(shù)、 打包浮點、向量整型、向量浮點)執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管一些 實施例可以包括專用于特定功能或功能集合的多個執(zhí)行單元,但其他實施例可包括全部執(zhí) 行所有功能的僅一個執(zhí)行單元或多個執(zhí)行單元。調(diào)度器單元1456、物理寄存器組單元1458 和執(zhí)行群集1460被示為可能有多個,因為某些實施例為某些類型的數(shù)據(jù)/操作創(chuàng)建分開的 流水線(例如,標(biāo)量整型流水線、標(biāo)量浮點/打包整型/打包浮點/向量整型/向量浮點流 水線,和/或各自具有其自己的調(diào)度器單元、物理寄存器組單元和/或執(zhí)行群集的存儲器訪 問流水線--以及在分開的存儲器訪問流水線的情況下,實現(xiàn)其中僅該流水線的執(zhí)行群集 具有存儲器訪問單元1464的某些實施例)。還應(yīng)當(dāng)理解,在使用分開的流水線的情況下,這 些流水線中的一個或多個可以為無序發(fā)布/執(zhí)行,并且其余流水線可以為有序發(fā)布/執(zhí)行。
[0128] 存儲器訪問單元1464的集合耦合到存儲器單元1470,該存儲器單元包括耦合到 數(shù)據(jù)高速緩存單元1474的數(shù)據(jù)TLB單元1472,其中所述數(shù)據(jù)高速緩存單元耦合到二級 (L2)高速緩存單元1476。在一個示例性實施例中,存儲器訪問單元1464可以包括加載單 元、存儲地址單元和存儲數(shù)據(jù)單元,這些單元中的每一個單元稱合到存儲器單元1470中的 數(shù)據(jù)TLB單元1472。指令高速緩存單元1434還耦合到存儲器單元1470中的二級(L2)高 速緩存單元1476。L2高速緩存單元1476耦合到一個或多個其他級的高速緩存,并最終耦 合到主存儲器。
[0129] 作為示例,示例性寄存器重命名的、無序發(fā)布/執(zhí)行核架構(gòu)可以如下實現(xiàn)流水線 1400 :1)指令取出1438執(zhí)行取出和長度解碼級1402和1404 ;2)解碼單元1440執(zhí)行解碼 級1406 ;3)重命名/分配器單元1452執(zhí)行分配級1408和重命名級1410 ;4)調(diào)度器單元 1456執(zhí)行調(diào)度級1412 ;5)物理寄存器組單元1458和存儲器單元1470執(zhí)行寄存器讀取/存 儲器讀取級1414 ;執(zhí)行群集1460執(zhí)行執(zhí)行級1416 ;6)存儲器單元1470和物理寄存器組單 元1458執(zhí)行寫回/存儲器寫入級1418 ;7)各單元可牽涉到異常處理級1422 ;以及8)引退 單元1454和物理寄存器組單元1458執(zhí)行提交級1424。
[0130] 核1490可支持一個或多個指令集(例如,x86指令集(具有與較新版本一起添加 的一些擴展);加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集;加利福尼州桑尼 維爾市的ARM控股的ARM指令集(具有諸如NEON等可選附加擴展)),其中包括本文中描述 的各指令。在一個實施例中,核1490包括用于支持打包數(shù)據(jù)指令集擴展(例如AVX1,AVX2) 的邏輯,藉此允許使用打包數(shù)據(jù)來執(zhí)行被許多多媒體應(yīng)用所使用的操作。
[0131] 應(yīng)當(dāng)理解,核可支持多線程化(執(zhí)行兩個或更多個并行的操作或線程的集合),并 且可以按各種方式來完成該多線程化,此各種方式包括時分多線程化、同步多線程化(其 中單個物理核為物理核正在同步多線程化的各線程中的每一個線程提供邏輯核)、或其組 合(例如,時分取出和解碼以及此后諸如用Intel?超線程化技術(shù)來同步多線程化)。
[0132] 盡管在無序執(zhí)行的上下文中描述了寄存器重命名,但應(yīng)當(dāng)理解,可以在有序架構(gòu) 中使用寄存器重命名。盡管所示出的處理器的實施例還包括分開的指令和數(shù)據(jù)高速緩存單 元1434/1474以及共享L2高速緩存單元1476,但替代實施例可以具有用于指令和數(shù)據(jù)兩 者的單個內(nèi)部高速緩存,諸如例如一級(L1)內(nèi)部高速緩存或多個級別的內(nèi)部高速緩存。在 一些實施例中,該系統(tǒng)可包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組 合?;蛘撸懈咚倬彺娑伎梢栽诤撕?或處理器的外部。
[0133] 具體的示例性有序核架構(gòu)
[0134] 圖15A-B示出了更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯 塊之一(包括相同類型和/或不同類型的其他核)。根據(jù)應(yīng)用,這些邏輯塊通過高帶寬的互 連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與一些固定的功能邏輯、存儲器I/O接口和其它必要的I/O邏輯 通信。
[0135] 圖15A是根據(jù)本發(fā)明的各實施例的單個處理器核以及它與管芯上互連網(wǎng)絡(luò)1502 的連接及其二級(L2)高速緩存的本地子集1504的框圖。在一個實施例中,指令解碼器1500 支持具有打包數(shù)據(jù)指令集擴展的x86指令集。L1高速緩存1506允許對進入標(biāo)量和向量單 元中的高速緩存存儲器的低等待時間訪問。盡管在一個實施例中(為了簡化設(shè)計),標(biāo)量 單元1508和向量單元1510使用分開的寄存器集合(分別為標(biāo)量寄存器1512和向量寄存 器1514),并且在這些寄存器之間轉(zhuǎn)移的數(shù)據(jù)被寫入到存儲器并隨后從一級(L1)高速緩存 1506讀回,但是本發(fā)明的替代實施例可以使用不同的方法(例如使用單個寄存器集合或包 括允許數(shù)據(jù)在這兩個寄存器組之間傳輸而無需被寫入和讀回的通信路徑)。
[0136] L2高速緩存的本地子集1504是全局L2高速緩存的一部分,該全局L2高速緩存被 劃分成多個分開的本地子集,即每個處理器核一個本地子集。每個處理器核具有到其自己 的L2高速緩存的本地子集1504的直接訪問路徑。被處理器核讀出的數(shù)據(jù)被存儲在其L2 高速緩存子集1504中,并且可以與其他處理器核訪問其自己的本地L2高速緩存子集并行 地被快速訪問。被處理器核寫入的數(shù)據(jù)被存儲在其自己的L2高速緩存子集1504中,并在 必要的情況下從其它子集清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以 允許諸如處理器核、L2高速緩存和其它邏輯塊之類的代理在芯片內(nèi)彼此通信。每個環(huán)形數(shù) 據(jù)路徑為每個方向1012位寬。
[0137] 圖15B是根據(jù)本發(fā)明的各實施例的圖15A中的處理器核的一部分的展開圖。圖 15B包括L1高速緩存1504的L1數(shù)據(jù)高速緩存1506A部分,以及關(guān)于向量單元1510和向 量寄存器1514的更多細節(jié)。具體地說,向量單元1510是16寬向量處理單元(VPU)(見16 寬ALU1528),該單元執(zhí)行整型、單精度浮點以及雙精度浮點指令中的一個或多個。該VPU通 過混合單元1520支持對寄存器輸入的混合、通過數(shù)值轉(zhuǎn)換單元1522A-B支持數(shù)值轉(zhuǎn)換、并 通過復(fù)制單元1524支持對存儲器輸入的復(fù)制。寫掩碼寄存器1526允許斷言所得的向量寫 入。
[0138] 具有集成存儲器控制器和圖形器件的處理器
[0139] 圖16是根據(jù)本發(fā)明的各實施例可能具有一個以上核、可能具有集成存儲器控制 器、以及可能具有集成圖形器件的處理器1600的框圖。圖16中的實線框示出處理器1600, 該處理器具有單個核1602A、系統(tǒng)代理1610、一個或多個總線控制器單元1616的集合,而虛 線框的可選附加示出替代處理器1600,該替代處理器具有多個核1602A-N、系統(tǒng)代理單元 1610中的一個或多個集成存儲器控制器單元1614的集合以及專用邏輯1608。
[0140] 因此,處理器1600的不同實現(xiàn)可包括:1)CPU,其中專用邏輯1608是集成圖形和/ 或科學(xué)(吞吐量)邏輯(其可包括一個或多個核),并且核1602A-N是一個或多個通用核 (例如,通用的有序核、通用的無序核、這兩者的組合);2)協(xié)處理器,其中核1602A-N是旨 在主要用于圖形和/或科學(xué)(吞吐量)的多個專用核;以及3)協(xié)處理器,其中核1602A-N 是多個通用有序核。因此,處理器1600可以是通用處理器、協(xié)處理器或?qū)S锰幚砥鳎T如例 如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高吞吐量的集 成眾核(MIC)協(xié)處理器(包括30個或更多核)、或嵌入式處理器等。該處理器可以被實現(xiàn) 在一個或多個芯片上。處理器1600可以是一個或多個襯底的一部分,和/或可以使用諸如 例如BiCM0S、CM0S或NM0S等的多個加工技術(shù)中的任何一個技術(shù)將處理器1600實現(xiàn)在一個 或多個襯底上。
[0141] 存儲器層次結(jié)構(gòu)包括在各核內(nèi)的一個或多個級別的高速緩存、一個或多個共享高 速緩存單元1606的集合、以及耦合至集成存儲器控制器單元1614的集合的外部存儲器 (未示出)。該共享高速緩存單元1606的集合可以包括一個或多個中間級高速緩存,諸如 二級(L2)、三級(L3)、四級(L4)或其他級別的高速緩存、末級高速緩存(LLC)、和/或其組 合。盡管在一個實施例中,基于環(huán)的互連單元1612將集成圖形邏輯1608、共享高速緩存單 元1606的集合以及系統(tǒng)代理單元1610/集成存儲器控制器單元1614互連,但替代實施例 可使用任何數(shù)量的公知技術(shù)來將這些單元互連。在一個實施例中,可以維護一個或多個高 速緩存單元1606和核1602-A-N之間的一致性(coherency)。
[0142] 在一些實施例中,核1602A-N中的一個或多個核能夠多線程化。系統(tǒng)代理1610包 括協(xié)調(diào)和操作核1602A-N的那些組件。系統(tǒng)代理單元1610可包括例如功率控制單元(PCU) 和顯示單元。P⑶可以是或包括用于調(diào)整核1602A-N和集成圖形邏輯1608的功率狀態(tài)所需 的邏輯和組件。顯示單元用于驅(qū)動一個或多個外部連接的顯示器。
[0143] 核1602A-N在架構(gòu)指令集方面可以是同構(gòu)的或異構(gòu)的;S卩,這些核1602A-N中的兩 個或更多個核可能能夠執(zhí)行相同的指令集,而其他核可能能夠執(zhí)行該指令集的僅僅子集或 不同的指令集。
[0144] 示例性計算機架構(gòu)
[0145] 圖17-20是示例性計算機架構(gòu)的框圖。本領(lǐng)域已知的對膝上型設(shè)備、臺式機、手持 PC、個人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機、嵌入式處理器、數(shù) 字信號處理器(DSP)、圖形設(shè)備、視頻游戲設(shè)備、機頂盒、微控制器、蜂窩電話、便攜式媒體播 放器、手持設(shè)備以及各種其他電子設(shè)備的其他系統(tǒng)設(shè)計和配置也是合適的。一般地,能夠包 含本文中所公開的處理器和/或其它執(zhí)行邏輯的多個系統(tǒng)和電子設(shè)備一般都是合適的。
[0146] 現(xiàn)在參見圖17,所示為根據(jù)本發(fā)明的一個實施例的系統(tǒng)1700的框圖。系統(tǒng)1700 可以包括一個或多個處理器1710、1715,這些處理器耦合到控制器中樞1720。在一個實 施例中,控制器中樞1720包括圖形存儲器控制器中樞(GMCH) 1790和輸入/輸出中樞 (Ι0Η) 1750 (其可以在分開的芯片上);GMCH1790包括存儲器和圖形控制器,存儲器1740和 協(xié)處理器1745耦合到該存儲器和圖形控制器;I0H1750將輸入/輸出(I/O)設(shè)備1760耦合 到GMCH1790?;蛘?,存儲器和圖形控制器中的一個或兩者可以被集成在處理器內(nèi)(如本文 中所描述的),存儲器1740和協(xié)處理器1745直接耦合到處理器1710以及控制器中樞1720, 該控制器中樞1720與I0H1750處于單個芯片中。
[0147] 附加處理器1715的任選性質(zhì)用虛線表示在圖17中。每一處理器1710、1715可包 括本文中描述的處理核中的一個或多個,并且可以是處理器1600的某一版本。
[0148] 存儲器1740可以是例如動態(tài)隨機存取存儲器(DRAM)、相變存儲器(PCM)或這兩者 的組合。對于至少一個實施例,控制器中樞1720經(jīng)由諸如前端總線(FSB)之類的多分支總 線、諸如快速通道互連(QPI)之類的點對點接口、或者類似的連接1795與處理器1710、1715 進行通信。
[0149] 在一個實施例中,協(xié)處理器1745是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng) 絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。在一個實施例中,控 制器中樞1720可以包括集成圖形加速器。
[0150] 在物理資源1710、2715之間可以存在包括架構(gòu)、微架構(gòu)、熱、和功耗特征等的一系 列品質(zhì)度量方面的各種差異。
[0151] 在一個實施例中,處理器1710執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。協(xié)處理 器指令可嵌入在這些指令中。處理器1710將這些協(xié)處理器指令識別為應(yīng)當(dāng)由附連的協(xié)處 理器1745執(zhí)行的類型。因此,處理器1710在協(xié)處理器總線或者其他互連上將這些協(xié)處理 器指令(或者表示協(xié)處理器指令的控制信號)發(fā)布到協(xié)處理器1745。協(xié)處理器1745接受 并執(zhí)行所接收的協(xié)處理器指令。
[0152] 現(xiàn)在參考圖18,所示為根據(jù)本發(fā)明的一實施例的更具體的第一示例性系統(tǒng)1800 的框圖。如圖18所示,多處理器系統(tǒng)1800是點對點互連系統(tǒng),并包括經(jīng)由點對點互連1850 耦合的第一處理器1870和第二處理器1880。處理器1870和1880中的每一個都可以是處 理器1600的某一版本。在本發(fā)明的一個實施例中,處理器1870和1880分別是處理器1710 和1715,而協(xié)處理器1838是協(xié)處理器1745。在另一實施例中,處理器1870和1880分別是 處理器1710和協(xié)處理器1745。
[0153] 處理器1870和1880被示為分別包括集成存儲器控制器(MC)單元1872和1882。 處理器1870還包括作為其總線控制器單元的一部分的點對點(P-P)接口 1876和1878 ;類 似地,第二處理器1880包括點對點接口 1886和1888。處理器1870、1880可以使用點對點 (P-P)電路1878、1888經(jīng)由P-P接口 1850來交換信息。如圖18所示,頂C1872和1882將 各處理器耦合至相應(yīng)的存儲器,即存儲器1832和存儲器1834,這些存儲器可以是本地附連 至相應(yīng)的處理器的主存儲器的部分。
[0154] 處理器1870、1880可各自經(jīng)由使用點對點接口電路1876、1894、1886、1898的各個 P-P接口 1852U854與芯片組1890交換信息。芯片組1890可以可選地經(jīng)由高性能接口 1838 與協(xié)處理器1839交換信息。在一個實施例中,協(xié)處理器1838是專用處理器,諸如例如高吞 吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。
[0155] 共享高速緩存(未示出)可以被包括在任一處理器之內(nèi),或被包括在兩個處理器 外部但仍經(jīng)由P-P互連與這些處理器連接,從而如果將某處理器置于低功率模式時,可將 任一處理器或兩個處理器的本地高速緩存信息存儲在該共享高速緩存中。
[0156] 芯片組1890可經(jīng)由接口 1896耦合至第一總線1816。在一個實施例中,第一總線 1816可以是外圍組件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總 線之類的總線,但本發(fā)明的范圍并不受此限制。
[0157] 如圖18所示,各種I/O設(shè)備1814可以連同總線橋1818耦合到第一總線1816,總 線橋1818將第一總線1816耦合至第二總線1820。在一個實施例中,諸如協(xié)處理器、高吞吐 量MIC處理器、GPGPU的處理器、加速器(諸如例如圖形加速器或數(shù)字信號處理器(DSP)單 元)、現(xiàn)場可編程門陣列或任何其他處理器的一個或多個附加處理器1815耦合到第一總線 1816。在一個實施例中,第二總線1820可以是低引腳計數(shù)(LPC)總線。各種設(shè)備可以被耦 合至第二總線1820,在一個實施例中這些設(shè)備包括例如鍵盤/鼠標(biāo)1822、通信設(shè)備1827以 及諸如可包括指令/代碼和數(shù)據(jù)1828的盤驅(qū)動器或其它大容量存儲設(shè)備的存儲單元1830。 此外,音頻1/01824可以被耦合至第二總線1820。注意,其它架構(gòu)是可能的。例如,代替圖 18的點對點架構(gòu),系統(tǒng)可以實現(xiàn)多分支總線或其它這類架構(gòu)。
[0158] 現(xiàn)在參考圖19,所示為根據(jù)本發(fā)明的實施例的更具體的第二示例性系統(tǒng)1900的 框圖。圖18和圖19中的相同部件用相同附圖標(biāo)記表示,并從圖19中省去了圖18中的某 些方面,以避免使圖19的其它方面變得模糊。
[0159] 圖19示出處理器1870、1880可分別包括集成存儲器和I/O控制邏輯("CL") 1872 和1882。因此,CL1872、1882包括集成存儲器控制器單元并包括I/O控制邏輯。圖19不僅 示出存儲器1832、1834耦合至CL1872、1882,而且還示出I/O設(shè)備1914也耦合至控制邏輯 1872、1882。傳統(tǒng)I/O設(shè)備1915被耦合至芯片組1890。
[0160] 現(xiàn)在參考圖20,所示為根據(jù)本發(fā)明的一實施例的S〇C2000的框圖。在圖16中,相 似的部件具有同樣的附圖標(biāo)記。另外,虛線框是更先進的SoC的可選特征。在圖20中,互 連單元2002被耦合至:應(yīng)用處理器2010,該應(yīng)用處理器包括一個或多個核202A-N的集合 以及共享高速緩存單元1606 ;系統(tǒng)代理單元1610 ;總線控制器單元1616 ;集成存儲器控制 器單元1614 ;-組或一個或多個協(xié)處理器2020,其可包括集成圖形邏輯、圖像處理器、音頻 處理器和視頻處理器;靜態(tài)隨機存取存儲器(SRAM)單元2030 ;直接存儲器存取(DMA)單元 2032 ;以及用于耦合至一個或多個外部顯示器的顯示單元2040。在一個實施例中,協(xié)處理 器2020包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量MIC處理 器、或嵌入式處理器等等。
[0161] 本文公開的機制的各實施例可以被實現(xiàn)在硬件、軟件、固件或這些實現(xiàn)方法的組 合中。本發(fā)明的實施例可實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,該可編程 系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至 少一個輸入設(shè)備以及至少一個輸出設(shè)備。
[0162] 可將程序代碼(諸如圖18中示出的代碼1830)應(yīng)用于輸入指令,以執(zhí)行本文描述 的各功能并生成輸出信息??梢园匆阎绞綄⑤敵鲂畔?yīng)用于一個或多個輸出設(shè)備。為了 本申請的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號處理器(DSP)、微控制器、專用集成電 路(ASIC)或微處理器之類的處理器的任何系統(tǒng)。
[0163] 程序代碼可以用高級程序化語言或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以便與處理系統(tǒng) 通信。在需要時,也可用匯編語言或機器語言來實現(xiàn)程序代碼。事實上,本文中描述的機制 不限于任何特定編程語言的范圍。在任一情形下,該語言可以是編譯語言或解釋語言。
[0164] 至少一個實施例的一個或多個方面可以由存儲在機器可讀介質(zhì)上的表示性指令 來實現(xiàn),指令表示處理器中的各種邏輯,指令在被機器讀取時使得該機器制作用于執(zhí)行本 文所述的技術(shù)的邏輯。被稱為"IP核"的這些表示可以被存儲在有形的機器可讀介質(zhì)上,并 被提供給多個客戶或生產(chǎn)設(shè)施以加載到實際制造該邏輯或處理器的制造機器中。
[0165] 這樣的機器可讀存儲介質(zhì)可以包括但不限于通過機器或設(shè)備制造或形成的物品 的非瞬態(tài)的有形安排,其包括存儲介質(zhì),諸如:硬盤;任何其它類型的盤,包括軟盤、光盤、 緊致盤只讀存儲器(CD-ROM)、緊致盤可重寫(CD-RW)以及磁光盤;半導(dǎo)體器件,例如只讀存 儲器(ROM)、諸如動態(tài)隨機存取存儲器(DRAM)和靜態(tài)隨機存取存儲器(SRAM)之類的隨機 存取存儲器(RAM)、可擦除可編程只讀存儲器(EPROM)、閃存、電可擦除可編程只讀存儲器 (EEPR0M);相變存儲器(PCM);磁卡或光卡;或適于存儲電子指令的任何其它類型的介質(zhì)。
[0166] 因此,本發(fā)明的各實施例還包括非瞬態(tài)的有形機器可讀介質(zhì),該介質(zhì)包含指令或 包含設(shè)計數(shù)據(jù),諸如硬件描述語言(HDL),它定義本文中描述的結(jié)構(gòu)、電路、裝置、處理器和 /或系統(tǒng)特征。這些實施例也被稱為程序產(chǎn)品。
[0167] 仿真(包括二進制變換、代碼變形等)
[0168] 在一些情況下,指令轉(zhuǎn)換器可用來將指令從源指令集轉(zhuǎn)換至目標(biāo)指令集。例如,指 令轉(zhuǎn)換器可以變換(例如使用靜態(tài)二進制變換、包括動態(tài)編譯的動態(tài)二進制變換)、變形、 仿真或以其它方式將指令轉(zhuǎn)換成將由核來處理的一個或多個其它指令。指令轉(zhuǎn)換器可以用 軟件、硬件、固件、或其組合實現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處 理器上且部分在處理器外。
[0169] 圖21是根據(jù)本發(fā)明的各實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進 制指令轉(zhuǎn)換成目標(biāo)指令集中的二進制指令的框圖。在所示的實施例中,指令轉(zhuǎn)換器是軟件 指令轉(zhuǎn)換器,但作為替代,該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實現(xiàn)。圖21 示出可以使用x86編譯器2104來編譯利用高級語言2102的程序,以生成可以由具有至少 一個x86指令集核的處理器2116原生執(zhí)行的x86二進制代碼2106。具有至少一個x86指 令集核的處理器2116表示任何處理器,這些處理器能通過兼容地執(zhí)行或以其他方式處理 以下內(nèi)容來執(zhí)行與具有至少一個x86指令集核的英特爾處理器基本相同的功能:1)英特爾 x86指令集核的指令集的本質(zhì)部分,或2)目標(biāo)為在具有至少一個x86指令集核的英特爾處 理器上運行的應(yīng)用或其它程序的目標(biāo)代碼版本,以便取得與具有至少一個x86指令集核的 英特爾處理器基本相同的結(jié)果。x86編譯器2104表示用于生成x86二進制代碼2106 (例 如,目標(biāo)代碼)的編譯器,該二進制代碼可通過或不通過附加的鏈接處理在具有至少一個 x86指令集核的處理器2116上執(zhí)行。類似地,圖21示出可以使用替代的指令集編譯器2108 來編譯利用高級語言2102的程序,以生成可以由不具有至少一個x86指令集核的處理器 2114 (例如具有執(zhí)行加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集、和/或執(zhí)行 加利福尼亞州桑尼維爾市的ARM控股公司的ARM指令集的核的處理器)原生執(zhí)行的替代指 令集二進制代碼2110。指令轉(zhuǎn)換器2112被用來將x86二進制代碼2106轉(zhuǎn)換成可以由不具 有x86指令集核的處理器2114原生執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替代性指令 集二進制代碼2110相同,因為能夠這樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將 完成一般操作并由來自替代指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器2112通過仿真、模擬或 任何其它過程來表示允許不具有x86指令集處理器或核的處理器或其它電子設(shè)備執(zhí)行x86 二進制代碼2106的軟件、固件、硬件或其組合。
[0170] 在本申請中可能使用術(shù)語"耦合的"和"連接的"以及其衍生詞。應(yīng)當(dāng)理解,這些 術(shù)語并不旨在作為彼此的同義詞。相反,在具體實施例中,"連接的"用于指示兩個或更多 個要素彼此直接物理或電接觸。"耦合的"可表示兩個或多個元件直接物理或電氣接觸。然 而,"耦合的"也可表示兩個或更多個要素可能并未彼此直接接觸,但是仍然彼此協(xié)作、彼此 作用。例如,執(zhí)行單元可通過一個或多個中間組件與寄存器耦合。
[0171] 在以上描述中,為解釋起見,闡明了眾多具體細節(jié)以提供對本發(fā)明的實施例的透 徹理解。然而,將對本領(lǐng)域技術(shù)人員明顯的是,沒有這些具體細節(jié)中的一些也可實踐一個或 多個其他實施例。所描述的具體實施例不是為了限制本發(fā)明而是為了說明本發(fā)明。本發(fā)明 的范圍不是由所提供的具體示例確定,而是僅由所附權(quán)利要求確定。在其它實例中,以方框 圖形式而非以細節(jié)地示出了公知的電路、結(jié)構(gòu)、設(shè)備和操作以避免使說明書的理解變得晦 澀。
[0172] 本領(lǐng)域的技術(shù)人員還將意識到可對本文公開的實施例做出修改,諸如對實施例的 各組件的配置、形式、功能和操作方式和使用進行修改。在附圖中顯示且在說明書中描述的 關(guān)系的所有等效關(guān)系都被涵蓋在本發(fā)明的實施例內(nèi)。為說明的簡單和清楚起見,在附圖中 示出的元素不一定按比例繪制。例如,為清楚起見,一些元件的尺寸相對其它元件被夸大。 在附圖中,箭頭用于示出耦合。
[0173] 已描述了各種操作和方法。已經(jīng)以流程圖方式以基本形式對一些方法進行了描 述,但操作可任選地被添加至這些方法和/或從這些方法中移去。另外,根據(jù)示例性實施 例,可能已描述操作的特定順序,但要理解該特定順序是示例性的。替換實施例可任選地以 不同方式執(zhí)行這些操作、組合某些操作、交錯某些操作等??蓪τ谒枋龅姆椒ㄗ龀龊芏嘈?改和適應(yīng),且應(yīng)構(gòu)想到這些修改和適應(yīng)。
[0174] 某些操作可由硬件組件執(zhí)行,或者可體現(xiàn)為機器可執(zhí)行或電路可執(zhí)行的指令中, 它們可被用于致使,或至少導(dǎo)致,用執(zhí)行這些操作的指令編程的電路或硬件。電路可包括通 用或?qū)S锰幚砥鳌⒒蜻壿嬰娐罚颂巸H是列舉數(shù)例。這些操作還可任選地由硬件和軟件的組 合執(zhí)行。執(zhí)行單元和/或處理器可包括專門或特定電路,或者其它邏輯,它們對指令或微指 令或者衍生自機器指令的一個或多個控制信號作出響應(yīng),以執(zhí)行某些操作。
[0175] 還應(yīng)當(dāng)理解,貫穿說明書全文的對"一個實施例"、"一實施例"或"一個或多個實施 例"的引用例如表示特定特征可包含在本發(fā)明實施例的實踐中。類似地,應(yīng)當(dāng)理解,在本說 明書中,為了使本公開變得流暢并幫助理解各個創(chuàng)新性方面,各個特征有時被一起編組在 單個實施例、附圖或其描述中。然而,該公開方法不應(yīng)被解釋成反映出如下意圖,即本發(fā)明 需要比每項權(quán)利要求中所明確記載的特征更多的特征。相反,如隨附的權(quán)利要求反映的,各 創(chuàng)新性方面可體現(xiàn)于比單個所公開的實施例的全部特征更少的特征。因此,在詳細說明書 之后所附的權(quán)利要求據(jù)此被明確納入該詳細說明書中,每一項權(quán)利要求獨自作為本發(fā)明的 單獨的實施例。
【權(quán)利要求】
1. 一種方法,包括: 接收打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令,所述打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合 指令指示第一打包數(shù)據(jù)操作掩碼寄存器、指示第二打包數(shù)據(jù)操作掩碼寄存器、并指示目的 地存儲位置;以及 響應(yīng)于所述打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令,將所述第一打包數(shù)據(jù)操作掩碼寄 存器的至少部分位和所述第二打包數(shù)據(jù)操作掩碼寄存器的至少對應(yīng)部分位的算術(shù)組合存 儲在所述目的地存儲位置中。
2. 如權(quán)利要求1所述的方法,其特征在于,接收所述指令包括接收打包數(shù)據(jù)操作掩碼 寄存器加法指令,并且存儲所述算術(shù)組合包括存儲所述第一和第二打包數(shù)據(jù)操作掩碼寄存 器的至少對應(yīng)部分位的和。
3. 如權(quán)利要求1所述的方法,其特征在于,接收所述指令包括接收打包數(shù)據(jù)操作掩碼 寄存器減法指令,并且存儲所述算術(shù)組合包括存儲所述第一和第二打包數(shù)據(jù)操作掩碼寄存 器的至少對應(yīng)部分位的差。
4. 如權(quán)利要求1所述的方法,其特征在于,存儲所述算術(shù)組合包括將所述第一和第二 打包數(shù)據(jù)操作掩碼寄存器的對應(yīng)最低位的部分位的和存儲在所述目的地存儲位置的對應(yīng) 最低位的部分位,并對所述目的地存儲位置的最高位的部分位歸零,所述目的地存儲位置 是打包數(shù)據(jù)操作掩碼寄存器。
5. 如權(quán)利要求1所述的方法,其特征在于,存儲所述算術(shù)組合包括存儲所述第一和第 二打包數(shù)據(jù)操作掩碼寄存器的對應(yīng)相同尺寸部分位的算術(shù)組合,并且所述相同尺寸部分選 自于8位、16位、32位和64位。
6. 如權(quán)利要求1所述的方法,其特征在于,所述第一打包數(shù)據(jù)操作掩碼寄存器的所述 部分位中每個位對應(yīng)于第一打包數(shù)據(jù)的至少不同數(shù)據(jù)元素。
7. 如權(quán)利要求1所述的方法,其特征在于,所述第一打包數(shù)據(jù)操作掩碼寄存器的所述 部分位中每個位包括進位輸出信息以用于指示:作為第一打包數(shù)據(jù)和第二打包數(shù)據(jù)的不同 的對應(yīng)數(shù)據(jù)元素對相加的結(jié)果,是否已產(chǎn)生進位輸出。
8. 如權(quán)利要求1所述的方法,其特征在于,還包括接收第二指令,所述第二指令指示打 包數(shù)據(jù)寄存器,且指示所述第一打包數(shù)據(jù)操作掩碼寄存器作為掩碼以斷言所述第二指令的 操作。
9. 如權(quán)利要求1所述的方法,其特征在于,所述算術(shù)組合包括和,并且所述方法還包括 使用所述和來相加各自為128位或更寬的大整數(shù)。
10. -種裝置,包括: 第一打包數(shù)據(jù)操作掩碼寄存器; 第二打包數(shù)據(jù)操作掩碼寄存器;以及 與所述第一和第二打包數(shù)據(jù)操作掩碼寄存器相耦合的執(zhí)行單元,所述執(zhí)行單元可操作 用于,響應(yīng)于指示第一打包數(shù)據(jù)操作掩碼寄存器、指示第二打包數(shù)據(jù)操作掩碼寄存器、且指 示目的地存儲位置的打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令,將所述第一打包數(shù)據(jù)操作掩 碼寄存器的至少部分位和所述第二打包數(shù)據(jù)操作掩碼寄存器的至少對應(yīng)部分位的算術(shù)組 合存儲在所述目的地存儲位置中。
11. 如權(quán)利要求10所述的裝置,其特征在于,所述指令包括打包數(shù)據(jù)操作掩碼寄存器 加法指令,并且所述執(zhí)行單元可操作用于,作為所述指令的結(jié)果,將所述第一和第二打包數(shù) 據(jù)操作掩碼寄存器的至少對應(yīng)部分位的和存儲在所述目的地存儲位置中。
12. 如權(quán)利要求10所述的裝置,其特征在于,所述指令包括打包數(shù)據(jù)操作掩碼寄存器 減法指令,并且所述執(zhí)行單元可操作用于,作為所述指令的結(jié)果,將所述第一和第二打包數(shù) 據(jù)操作掩碼寄存器的至少對應(yīng)部分位的差存儲在所述目的地存儲位置中。
13. 如權(quán)利要求10所述的裝置,其特征在于,所述執(zhí)行單元可操作用于,作為所述指令 的結(jié)果,將所述第一和第二打包數(shù)據(jù)操作掩碼寄存器的對應(yīng)最低位的部分位的和存儲在所 述目的地存儲位置的對應(yīng)最低位的部分位中,并對所述目的地存儲位置的最高位的部分位 歸零,所述目的地存儲位置是打包數(shù)據(jù)操作掩碼寄存器。
14. 如權(quán)利要求10所述的裝置,其特征在于,所述執(zhí)行單元可操作用于,作為所述指 令的結(jié)果,存儲所述第一和第二打包數(shù)據(jù)操作掩碼寄存器的對應(yīng)相同尺寸部分位的算術(shù)組 合,并且所述相同尺寸部分選自于8位、16位、32位和64位。
15. 如權(quán)利要求10所述的裝置,其特征在于,所述第一打包數(shù)據(jù)操作掩碼寄存器的所 述部分位中每個位對應(yīng)于第一打包數(shù)據(jù)的至少不同數(shù)據(jù)元素。
16. 如權(quán)利要求10所述的裝置,其特征在于,所述第一打包數(shù)據(jù)操作掩碼寄存器的所 述部分位中每個位包括進位輸出信息以用于指示:作為第一打包數(shù)據(jù)和第二打包數(shù)據(jù)的不 同的對應(yīng)數(shù)據(jù)元素對相加的結(jié)果,是否已產(chǎn)生進位輸出。
17. 如權(quán)利要求10所述的裝置,其特征在于,所述打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合 指令可操作用于明確地指定所述第一打包數(shù)據(jù)操作掩碼寄存器,可操作用于明確地指定所 述第二打包數(shù)據(jù)操作掩碼寄存器,且可操作用于明確地指定同樣為打包數(shù)據(jù)操作掩碼寄存 器的所述目的地存儲位置。
18. 如權(quán)利要求10所述的裝置,其特征在于,所述第一和第二打包數(shù)據(jù)操作掩碼寄存 器各自是64位寄存器,并且其中所述第一和第二打包數(shù)據(jù)操作掩碼寄存器的對應(yīng)部分位 是選自8位、16位、32位和64位的相同尺寸部分。
19. 如權(quán)利要求10所述的裝置,其特征在于,還包括具有所述第一和第二打包數(shù)據(jù)操 作掩碼寄存器的打包數(shù)據(jù)操作掩碼寄存器組。
20. -種系統(tǒng),包括: 互連; 與所述互連耦合的處理器,所述處理器包括第一打包數(shù)據(jù)操作掩碼寄存器和第二打包 數(shù)據(jù)操作掩碼寄存器,并且所述處理器可操作用于,響應(yīng)于指示所述第一打包數(shù)據(jù)操作掩 碼寄存器、指示所述第二打包數(shù)據(jù)操作掩碼寄存器、且指示目的地存儲位置的打包數(shù)據(jù)操 作掩碼寄存器算術(shù)組合指令,將所述第一打包數(shù)據(jù)操作掩碼寄存器的至少部分位和所述第 二打包數(shù)據(jù)操作掩碼寄存器的至少對應(yīng)部分位的算數(shù)組合存儲在所述目的地存儲位置中; 以及 與所述互連耦合的動態(tài)隨機存取存儲器(DRAM)。
21. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述第一打包數(shù)據(jù)操作掩碼寄存器的所 述部分位中每個位對應(yīng)于第一打包數(shù)據(jù)的至少不同數(shù)據(jù)元素。
22. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述指令包括打包數(shù)據(jù)操作掩碼寄存器 加法指令,其中所述處理器可操作用于,響應(yīng)于所述指令,將所述第一和第二打包數(shù)據(jù)操作 掩碼寄存器的對應(yīng)相同尺寸的、最低位的部分位的和存儲在所述目的地存儲位置的對應(yīng)相 同尺寸、最低位的部分位中,并且所述相同尺寸的部分選自8位、16位、32位、和64位。
23. 一種制品,包括: 包括一種或多種固體材料的機器可讀存儲介質(zhì),所述機器可讀存儲介質(zhì)存儲打包數(shù)據(jù) 操作掩碼寄存器算術(shù)組合指令, 所述打包數(shù)據(jù)操作掩碼寄存器算術(shù)組合指令指示第一打包數(shù)據(jù)操作掩碼寄存器,指示 第二打包數(shù)據(jù)操作掩碼寄存器,且指示目的地存儲位置,且所述打包數(shù)據(jù)操作掩碼算術(shù)組 合指令如果被機器執(zhí)行則可操作用于致使所述機器執(zhí)行操作,包括: 將所述第一打包數(shù)據(jù)操作掩碼寄存器的至少部分位和所述第二打包數(shù)據(jù)操作掩碼寄 存器的至少對應(yīng)部分位的算術(shù)組合存儲在所述目的地存儲位置中。
24. 如權(quán)利要求23所述的制品,其特征在于,所述第一打包數(shù)據(jù)操作掩碼寄存器的所 述部分位中每個位對應(yīng)于第一打包數(shù)據(jù)的至少不同數(shù)據(jù)元素。
25. 如權(quán)利要求23所述的制品,其特征在于,所述指令包括打包數(shù)據(jù)操作掩碼寄存器 加法指令,其中所述執(zhí)行單元可操作用于,作為所述指令的結(jié)果,將所述第一和第二打包數(shù) 據(jù)操作掩碼寄存器的對應(yīng)相同尺寸的、最低位的部分位的和存儲在所述目的地存儲位置的 對應(yīng)相同尺寸、最低位的部分位中,并且所述相同尺寸的部分選自8位、16位、32位、和64 位。
【文檔編號】G06F9/06GK104126170SQ201180076445
【公開日】2014年10月29日 申請日期:2011年12月22日 優(yōu)先權(quán)日:2011年12月22日
【發(fā)明者】B·L·托爾, R·凡倫天, J·C·圣阿德里安, E·烏爾德-阿邁德-瓦爾, M·J·查尼 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
高州市| 凤阳县| 潞城市| 全南县| 扎囊县| 洛浦县| 博湖县| 宁都县| 来宾市| 乌鲁木齐市| 什邡市| 苏尼特左旗| 乌恰县| 河西区| 社旗县| 湖北省| 东乡县| 鄂伦春自治旗| 桃园市| 易门县| 泸西县| 钟山县| 聂荣县| 益阳市| 新竹县| 泊头市| 开阳县| 新源县| 道孚县| 怀来县| 克什克腾旗| 丹巴县| 丽江市| 陆丰市| 四川省| 呈贡县| 杂多县| 博兴县| 印江| 汉阴县| 双城市|