專利名稱:Risc處理器及其浮點(diǎn)寄存器的非對(duì)齊訪存方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)處理器技術(shù)領(lǐng)域,特別是涉及一種精簡(jiǎn)指令集計(jì)算機(jī) (RISC)處理器,以及其浮點(diǎn)寄存器的非對(duì)齊訪存方法。
背景技術(shù):
復(fù)雜指令集計(jì)算機(jī)(Complex Instruction Set Computing, CISC)和精簡(jiǎn)指 令計(jì)算機(jī)(Reduced Instruction Set Computing, RISC)是當(dāng)前CPU的兩種架構(gòu)。 不同架構(gòu)的處理器只能執(zhí)行自己的指令集,如Intel的機(jī)器只能執(zhí)行80X86的 指令集(一種CISC指令集),不能執(zhí)行RISC的指令集;而RISC處理器的 計(jì)算不能執(zhí)行80X86的指令集。而由于這種硬件體系結(jié)構(gòu)的不同,操作系統(tǒng) 和各種應(yīng)用軟件通常只能在特定架構(gòu)的計(jì)算機(jī)上執(zhí)行,如RISC處理器不能充 分利用X86系列機(jī)器已有的廣泛的應(yīng)用軟件。在RISC處理器,如MIPS指令集的RISC處理器中使用訪存指令存儲(chǔ)和 讀取數(shù)據(jù)單元時(shí),目標(biāo)地址必須是所訪問(wèn)的數(shù)據(jù)單元字節(jié)數(shù)的整數(shù)倍,稱之為 地址對(duì)齊。例如在MIPS指令集的RISC處理器上,讀取一半字時(shí),訪存地址 必須是2個(gè)字節(jié)的整數(shù)倍;讀取一個(gè)字時(shí),訪存指令中地址必須是4個(gè)字節(jié)的 整數(shù)倍;寫(xiě)入一個(gè)雙字時(shí),訪存地址必須是8個(gè)字節(jié)的整數(shù)倍。如果在進(jìn)行內(nèi)存訪問(wèn)的時(shí)候,目標(biāo)地址沒(méi)有對(duì)齊,則會(huì)引起異常。而CISC處理器,如Intel 80X86處理器是可以處理這種訪存地址非對(duì)齊的 讀取和寫(xiě)入的。因此,當(dāng)移植CISC處理器處理的軟件到RISC處理器處理,或者移植CISC 處理器處理的軟件到RISC處理器支持CISC虛擬機(jī),如X86虛擬機(jī)時(shí),會(huì)碰 到兼容性處理問(wèn)題。現(xiàn)有技術(shù)中,可以用生成一個(gè)例外處理器程序來(lái)模擬期望的讀寫(xiě)操作的方 式來(lái)處理,并且對(duì)上層處理隱藏這種特性。但是,除非非對(duì)齊的訪存很少,否 則這種處理方法對(duì)計(jì)算機(jī)性能將是非常嚴(yán)重的打擊。MIPS指令集的RISC處理器對(duì)非對(duì)齊訪存的解決方法是,提供特殊的訪存地址非對(duì)齊的訪存指令,其中,MIPS指令集中與地址非對(duì)齊訪存有關(guān)的指 令包括對(duì)32位數(shù)據(jù)的操作和對(duì)64位數(shù)據(jù)的操作,就讀取32位數(shù)據(jù)來(lái)說(shuō),其 提供兩條指令來(lái)實(shí)現(xiàn),這兩條指令被稱為"從左讀取字"指令和"從右讀取字" 指令lwl,lwr,swl,swr,ldl,ldr,sdl,sdr。但是,MIPS指令集中只包括了到通用寄存器的非對(duì)齊讀寫(xiě),而對(duì)浮點(diǎn)寄 存器并沒(méi)有支持,如果需要讀取到浮點(diǎn)寄存器中使用,則要讀取到通用定點(diǎn)寄 存器中,然后再?gòu)耐ㄓ枚c(diǎn)寄存器中拷貝過(guò)來(lái)。這樣,處理器的性能有很大的 下降。發(fā)明內(nèi)容本發(fā)明的目的在于提供一種精簡(jiǎn)指令集計(jì)算機(jī)(RISC)處理器,以及其 浮點(diǎn)寄存器的非對(duì)齊訪存方法。其提高了處理器的性能。為實(shí)現(xiàn)本發(fā)明目的而提供的一種RISC處理器,包括指令譯碼部件和執(zhí)行 單元,還包括擴(kuò)展指令模塊;所述擴(kuò)展指令模塊包括多個(gè)擴(kuò)展指令,用于實(shí)現(xiàn)對(duì)浮點(diǎn)寄存器的非對(duì)齊訪 存操作;所述指令譯碼部件,包括擴(kuò)展指令譯碼模塊,用于識(shí)別擴(kuò)展指令模塊的擴(kuò) 展指令,并進(jìn)行譯碼,譯碼后輸出到執(zhí)行單元執(zhí)行。所述擴(kuò)展指令譯碼模塊,包括識(shí)別子模塊,用于在讀取指令后,識(shí)別出對(duì) 浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令。所述擴(kuò)展指令包括對(duì)32位單精度浮點(diǎn)寄存器的操作指令和/或?qū)?4位雙 精度浮點(diǎn)寄存器的操作指令。所述擴(kuò)展指令包括從左讀取字?jǐn)U展指令;從右讀取字?jǐn)U展指令;從左讀取 雙字?jǐn)U展指令;從右讀取雙字?jǐn)U展指令;從左寫(xiě)入字?jǐn)U展指令;從右寫(xiě)入字?jǐn)U 展指令;從左寫(xiě)入雙字?jǐn)U展指令;從右寫(xiě)入雙字?jǐn)U展指令。所述執(zhí)行單元,包括從左讀取字模塊;從右讀取字模塊,從左讀取雙字模 塊,從右讀取雙字模塊,從左寫(xiě)入字模塊,從右寫(xiě)入字模塊,從左寫(xiě)入雙字模 塊,從右寫(xiě)入雙字模塊,其中所述從左讀取字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,從相應(yīng)的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,將所述有效部分 存放到浮點(diǎn)寄存器字的左邊部分,所述浮點(diǎn)寄存器中字的右邊則維持不變;所述從右讀取字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,從相 應(yīng)的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,將所述有效部分 存放到浮點(diǎn)寄存器字的右邊部分,所述浮點(diǎn)寄存器中字的左邊部分則維持不變;所述從左讀取雙字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,從相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將所述有效部分存放到浮點(diǎn)寄存器雙字的左邊部分,浮點(diǎn)寄存器中雙字的右邊部分則維持不變;所述從右讀取雙字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,從 相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將所述有 效部分存放到浮點(diǎn)寄存器雙字的右邊部分,浮點(diǎn)寄存器中雙字的左邊部分則維 持不變;所述從左寫(xiě)入字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,査找 到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,并將浮點(diǎn)寄存器的左邊部分存 放到內(nèi)存中所述字的相應(yīng)字節(jié);所述從右寫(xiě)入字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,查找 到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,并將浮點(diǎn)寄存器的右邊部分存 放到內(nèi)存中所述字的相應(yīng)字節(jié);所述從左寫(xiě)入雙字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,査 找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將浮點(diǎn)寄存器的左邊部 分存放到內(nèi)存中所述雙字的相應(yīng)字節(jié);所述從右寫(xiě)入雙字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,查 找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將浮點(diǎn)寄存器的右邊部 分被存放到內(nèi)存中所述雙字的相應(yīng)字節(jié)。所述擴(kuò)展指令的編碼格式是利用MIPS指令集中LWC2和SWC2空槽的 值實(shí)現(xiàn)的。為實(shí)現(xiàn)本發(fā)明目的還提供一種RISC處理器的浮點(diǎn)寄存器的非對(duì)齊訪存方 法,包括下列步驟步驟A,從處理器中讀取指令,識(shí)別出對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指步驟B,對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令進(jìn)行譯碼,然后送入到執(zhí)行 單元,執(zhí)行對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存操作。 所述步驟A包括下列步驟步驟Al,從處理器中讀取指令到指令譯碼部件后,首先根據(jù)指令中的func 域的值,判斷該指令是現(xiàn)有的MIPS指令集指令,還是對(duì)浮點(diǎn)寄存器的非對(duì)齊 訪存擴(kuò)展指令;步驟A2,如果是現(xiàn)有的MIPS指令集指令,則按照現(xiàn)有技術(shù)的指令操作 后結(jié)束;歩驟A3,如果是對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令,則轉(zhuǎn)入步驟B。 所述擴(kuò)展指令包括從左讀取字?jǐn)U展指令;從右讀取字?jǐn)U展指令;從左讀取 雙字?jǐn)U展指令;從右讀取雙字?jǐn)U展指令;從左寫(xiě)入字?jǐn)U展指令;從右寫(xiě)入字?jǐn)U 展指令;從左寫(xiě)入雙字?jǐn)U展指令;從右寫(xiě)入雙字?jǐn)U展指令。 所述步驟B包括下列步驟步驟B1,如果是從左讀取字指令,則譯碼后得到有效地址,根據(jù)所述有 效地址,從相應(yīng)的內(nèi)存中取出包含有4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分, 將所述有效部分存放到浮點(diǎn)寄存器字的左邊部分,所述浮點(diǎn)寄存器中字的右邊 則維持不變;步驟B2,如果是從右讀取字指令,則譯碼后得到有效地址,根據(jù)所述有 效地址,從相應(yīng)的內(nèi)存中取出包含有4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分, 將所述有效部分存放到浮點(diǎn)寄存器字的右邊部分,浮點(diǎn)寄存器中字的左邊部分 則維持不變;步驟B3,如果是從左讀取雙字指令,則譯碼后得到有效地址,根據(jù)所述 有效地址,從相應(yīng)的內(nèi)存中取出包含有8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部 分,并將所述有效部分存放到浮點(diǎn)寄存器雙字的左邊部分,浮點(diǎn)寄存器中雙字 的右邊部分則維持不變;步驟B4,如果是從右讀取雙字指令,則譯碼后得到有效地址,根據(jù)所述 有效地址,從相應(yīng)的內(nèi)存中取出包含有8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部 分,并將所述有效部分存放到浮點(diǎn)寄存器雙字的右邊部分,浮點(diǎn)寄存器中雙字的左邊部分則維持不變;步驟B5,如果是從左寫(xiě)入字指令,則譯碼后得到有效地址,根據(jù)所述有效地址,査找到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,并將浮點(diǎn)寄存器的左邊部分存放到內(nèi)存中所述字的相應(yīng)字節(jié);步驟B6,如果是從右寫(xiě)入字指令,則譯碼后得到有效地址,根據(jù)所述有 效地址,査找到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,并將浮點(diǎn)寄存器 的右邊部分存放到內(nèi)存中所述字的相應(yīng)字節(jié);步驟B7,如果是從左寫(xiě)入雙字指令,則譯碼后得到有效地址,根據(jù)所述 有效地址,査找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將浮點(diǎn)寄 存器的左邊部分存放到內(nèi)存中所述雙字的相應(yīng)字節(jié);步驟B8,如果是從右寫(xiě)入雙字指令,則譯碼后得到有效地址,根據(jù)所述 有效地址,查找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將浮點(diǎn)寄 存器的右邊部分存放到內(nèi)存中所述雙字的相應(yīng)字節(jié)。本發(fā)明的有益效果是本發(fā)明的RISC處理器及其浮點(diǎn)寄存器的非對(duì)齊訪存方法,其在基本不改變?cè)械奶幚砥骷軜?gòu)的情況下,在RISC處理器中實(shí)現(xiàn) 對(duì)其浮點(diǎn)寄存器的非對(duì)齊訪存,改動(dòng)小,提高處理器的性能。
圖1為本發(fā)明精簡(jiǎn)指令集計(jì)算機(jī)(RISC)處理器結(jié)構(gòu)示意圖; 圖2為本發(fā)明實(shí)施例精簡(jiǎn)指令集計(jì)算機(jī)(RISC)擴(kuò)展指令格式示意圖; 圖3為本發(fā)明精簡(jiǎn)指令集計(jì)算機(jī)(RISC)處理器非對(duì)齊訪存方法流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí) 施例,對(duì)本發(fā)明的一種RISC處理器及其浮點(diǎn)寄存器的非對(duì)齊訪存方法進(jìn)行進(jìn) 一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。在本發(fā)明實(shí)施例中,以MIPS指令集,該處理器的數(shù)據(jù)在內(nèi)存中使用小尾 端表示為例,而對(duì)本發(fā)明的RISC處理器及其浮點(diǎn)寄存器的非對(duì)齊訪存方法進(jìn) 行說(shuō)明,但是,應(yīng)當(dāng)說(shuō)明的是,本發(fā)明同樣適用于其他指令集和數(shù)據(jù)表示(如大尾端表示)的RISC處理器。為實(shí)現(xiàn)本發(fā)明目的,提供了一種RISC處理器,包括指令譯碼部件2和執(zhí) 行單元3。所述RISC處理器還包括擴(kuò)展指令模塊1,該模塊包括多個(gè)擴(kuò)展指令,用 于實(shí)現(xiàn)對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存操作。所述擴(kuò)展指令包括了對(duì)32位單精度浮點(diǎn)寄存器的操作指令和對(duì)64位雙精 度浮點(diǎn)寄存器的操作指令。所述擴(kuò)展指令,包括從左讀取字?jǐn)U展指令;從右讀取字?jǐn)U展指令;從左讀 取雙字?jǐn)U展指令;從右讀取雙字?jǐn)U展指令;從左寫(xiě)入字?jǐn)U展指令;從右寫(xiě)入字 擴(kuò)展指令;從左寫(xiě)入雙字?jǐn)U展指令;從右寫(xiě)入雙字?jǐn)U展指令。所述指令譯碼部件2,包括擴(kuò)展指令譯碼模塊,用于識(shí)別擴(kuò)展指令模塊l 的擴(kuò)展指令,并進(jìn)行譯碼,譯碼后輸出到執(zhí)行單元3執(zhí)行。所述擴(kuò)展指令譯碼模塊,包括識(shí)別子模塊21,用于在處理器的指令譯碼 部件2讀取指令后,識(shí)別出對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令;所述執(zhí)行單元3,包括從左讀取字模塊31,從右讀取字模塊32,從左讀 取雙字模塊33,從右讀取雙字模塊34,從左寫(xiě)入字模塊35,從右寫(xiě)入字模塊 36,從左寫(xiě)入雙字模塊37,從右寫(xiě)入雙字模塊38。所述從左讀取字模塊31,用于根據(jù)指令譯碼部件2譯碼得到的有效地址, 從相應(yīng)的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字W中的一高有效部分,將所 述高有效部分,即與有效地址所指向的字節(jié)處于同一個(gè)對(duì)齊字的字節(jié)存放到浮 點(diǎn)寄存器中字的左邊部分(最高有效部分),浮點(diǎn)寄存器中字的右邊部分(最低有效部分)則維持不變;所述從右讀取字模塊32,用于根據(jù)指令譯碼部件2譯碼得到的有效地址, 從相應(yīng)的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字W中的一低有效部分,將所 述低有效部分,即與有效地址所指向的字節(jié)處于同一個(gè)對(duì)齊字的字節(jié)存放到浮 點(diǎn)寄存器中字的右邊部分(最低有效部分),浮點(diǎn)寄存器中字的左邊部分(最 高有效部分)則維持不變;所述從左讀取雙字模塊33,用于根據(jù)指令譯碼部件2譯碼得到的有效地 址,從相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字DW中的一高有效部 分,將所述高有效部分,即與有效地址所指向的字節(jié)處于同一個(gè)對(duì)齊雙字的字節(jié)存放到浮點(diǎn)寄存器中雙字的左邊部分(最高有效部分),浮點(diǎn)寄存器中雙字 的右邊部分(最低有效部分)則維持不變;所述從右讀取雙字模塊34,用于根據(jù)指令譯碼部件2譯碼得到的有效地 址,從相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字DW中的一低有效部 分,將所述低有效部分,即與有效地址所指向的字節(jié)處于同-個(gè)對(duì)齊雙字的字 節(jié)存放到浮點(diǎn)寄存器中雙字的右邊部分(最低有效部分),浮點(diǎn)寄存器中雙字 的左邊部分(最高有效部分)則維持不變;所述從左寫(xiě)入字模塊35,用于根據(jù)指令譯碼部件2譯碼得到的有效地址, 查找到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一高有效部分,并將浮點(diǎn)寄存器中字的 左邊部分(最高有效部分)存放到該高有效部分,即與有效地址所指向的字節(jié) 處于同一個(gè)對(duì)齊字的字節(jié),-所述從右寫(xiě)入字模塊36,用于根據(jù)指令譯碼部件2譯碼得到的有效地址, 査找到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一低有效部分,并將浮點(diǎn)寄存器中字的 右邊部分(最低有效部分)存放到該低有效部分,即與有效地址所指向的字節(jié) 處于同一個(gè)對(duì)齊字的字節(jié);所述從左寫(xiě)入雙字模塊37,用于根據(jù)指令譯碼部件2譯碼得到的有效地 址,查找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一高有效部分,并將浮點(diǎn)寄存器 中雙字的左邊部分(最高有效部分)存放到該高有效部分,即與有效地址所指 向的字節(jié)處于同一個(gè)對(duì)齊字的字節(jié);所述從右寫(xiě)入雙字模塊38,用于根據(jù)指令譯碼部件2譯碼得到的有效地 址,查找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一低有效部分,并將浮點(diǎn)寄存器 中雙字的右邊部分(最低有效部分)存放到該低有效部分,即與有效地址所指 向的字節(jié)處于同一個(gè)對(duì)齊字的字節(jié)。應(yīng)當(dāng)說(shuō)明的是,如果該處理器的數(shù)據(jù)在內(nèi)存中使用大尾端表示,則從左讀 取或者寫(xiě)入時(shí),取出低有效部分;從右讀取或者寫(xiě)入時(shí),取出高有效部分。本發(fā)明的擴(kuò)展指令,作為一種可實(shí)施方式,所述擴(kuò)展指令的編碼格式利用 了現(xiàn)有MIPS指令集中保留的LWC2和SWC2空槽的值而實(shí)現(xiàn)。 以LWC2為例,其實(shí)現(xiàn)格式如圖2所示;其中,擴(kuò)展指令的訪存的尋址方式是base+8 bit offset的尋址方式,其中,5位的base域表示基址,5位的ft域表示源/目標(biāo)寄存器,offset域表示偏移地址;最后6位的fimc域用于區(qū)分各條擴(kuò)展指令。以從左讀取字?jǐn)U展指令為例,則其格式為gsLWLCl ft,offset(base) 指令描述FPR[ft] —FPR[ft] MERGE memory[GPR[base] + offset]所述擴(kuò)展指令包括了對(duì)32位單精度浮點(diǎn)寄存器的操作指令和/或?qū)?4位 雙精度浮點(diǎn)寄存器的操作指令。對(duì)每種浮點(diǎn)寄存器,包括從左讀取、從左寫(xiě)入、從右讀取和從右寫(xiě)入操作 共八條對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令,即從左讀取字?jǐn)U展指令;從右讀 取字?jǐn)U展指令.,從左讀取雙字?jǐn)U展指令;從右讀取雙字?jǐn)U展指令;從左寫(xiě)入字 擴(kuò)展指令;從右寫(xiě)入字?jǐn)U展指令;從左寫(xiě)入雙字?jǐn)U展指令;從右寫(xiě)入雙字?jǐn)U展 指令。其中從左讀取字?jǐn)U展指令為gsLWLCl /取字左部到浮點(diǎn)寄存器 指令譯碼部件2先將帶符號(hào)的8位偏移地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,執(zhí)行單元3中的從左讀取字模塊31根據(jù)該有效地址,從相應(yīng)的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字W中的一高有效部分,該高有效部分在內(nèi)存中是以任意字節(jié)為邊界開(kāi)始的。該高有效部分被存放到浮點(diǎn)寄存器中字的最高有效部分(左邊),浮點(diǎn)寄存器中字的最低有效部分(右)則維持不變。從右讀取字?jǐn)U展指令為gsLWRCl /取字右部到浮點(diǎn)寄存器 指令譯碼部件2先將帶符號(hào)的8位偏移地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,執(zhí)行單元3中的從右讀取字模塊32根據(jù)該有效地址,從相應(yīng)的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字W中的一低有效部分,該低有效部分在內(nèi)存中是以任意字節(jié)為邊界開(kāi)始的。該低有效部分存放到浮點(diǎn)寄存器中字的最低有效部分(右邊),浮點(diǎn)寄存器中字的最高有效部分(左)則維持不變。從左讀取雙字?jǐn)U展指令為gsLDLCl /取雙字左部到浮點(diǎn)寄存器 指令譯碼部件2先將帶符號(hào)的8位偏移地址(offset)和GPR[base]的內(nèi)容 相加得到有效地址,執(zhí)行單元3中的從左讀取雙字模塊33根據(jù)該有效地址,從相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字DW中的一高有效部分, 該高有效部分在內(nèi)存中是以任意字節(jié)為邊界開(kāi)始的。該高有效部分存放到浮點(diǎn)寄存器中雙字的最高有效部分(左邊),浮點(diǎn)寄 存器中雙字的最低有效部分(右)則維持不變。從右讀取雙字?jǐn)U展指令為gsLDRCl /取雙字右部到浮點(diǎn)寄存器指令譯碼部件2先將帶符號(hào)的8位偏移地址(offset)和GPR[base]的內(nèi)容 相加得到有效地址,執(zhí)行單元3中的從右讀取雙字模塊34根據(jù)該有效地址, 從相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字DW中的一低有效部分, 該低有效部分在內(nèi)存中是以任意字節(jié)為邊界開(kāi)始的。該低有效部分存放到浮點(diǎn)寄存器中雙字的最低有效部分(右邊),浮點(diǎn)寄 存器中雙字的最高有效部分(左)則維持不變。從左寫(xiě)入字?jǐn)U展指令gsSWLCl /從浮點(diǎn)寄存器存字左部 指令譯碼部件2先將帶符號(hào)的8位偏移地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,執(zhí)行單元3中的從左寫(xiě)入字模塊35根據(jù)該有效地址,查找到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一高有效部分,該高有效部分在內(nèi)存中是以任意字節(jié)為邊界開(kāi)始的。將浮點(diǎn)寄存器中字的最高有效部分(左邊)存放到該高有效部分,即與有效地址所指向的字節(jié)處于同一個(gè)對(duì)齊字的字節(jié)。從右寫(xiě)入字?jǐn)U展指令gsSWRCl /從浮點(diǎn)寄存器存字右部 指令譯碼部件2先將帶符號(hào)的8位偏移地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,執(zhí)行單元3中的從右寫(xiě)入字模塊36根據(jù)所述有效地址,查找到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一低有效部分,該低有效部分在內(nèi)存中是以任意字節(jié)為邊界開(kāi)始的。將浮點(diǎn)寄存器中字的最低有效部分(右邊)存放到該低有效部分,即與有效地址所指向的字節(jié)處于同一個(gè)對(duì)齊字的字節(jié)。從左寫(xiě)入雙字?jǐn)U展指令gsSDLCl /從浮點(diǎn)寄存器存雙字左部指令譯碼部件2先將帶符號(hào)的8位偏移地址(offset)和GPR[base]的內(nèi)容 相加得到有效地址,執(zhí)行單元3中的從左寫(xiě)入雙字模塊37根據(jù)該有效地址, 查找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一高有效部分,該高有效部分在內(nèi)存 中是以任意字節(jié)為邊界開(kāi)始的。將浮點(diǎn)寄存器中雙字的最高有效部分(左邊)被存放到該高有效部分,即 與有效地址所指向的字節(jié)處于同一個(gè)對(duì)齊字的字節(jié)。從右寫(xiě)入雙字?jǐn)U展指令gsSDRCl /從浮點(diǎn)寄存器存雙字右部 指令譯碼部件2先將帶符號(hào)的8位偏移地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,執(zhí)行單元3中的從右寫(xiě)入雙字模塊38根據(jù)該有效地址,査找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一低有效部分,該低有效部分在內(nèi)存中是以任意字節(jié)為邊界開(kāi)始的。將浮點(diǎn)寄存器中雙字的最低有效部分(右邊)被存放到該低有效部分,即與有效地址所指向的字節(jié)處于同一個(gè)對(duì)齊字的字節(jié)。本發(fā)明還提供一種RISC處理器的浮點(diǎn)寄存器的非對(duì)齊訪存方法,其包括 下列步驟.-步驟S100,從處理器中讀取指令,識(shí)別出對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò) 展指令;所述的對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令,包括從左讀取字?jǐn)U展指令; 從右讀取字?jǐn)U展指令;從左讀取雙字?jǐn)U展指令;從右讀取雙字?jǐn)U展指令;從左 寫(xiě)入字?jǐn)U展指令;從右寫(xiě)入字?jǐn)U展指令;從左寫(xiě)入雙字?jǐn)U展指令;從右寫(xiě)入雙 字?jǐn)U展指令。所述步驟S100包括下列步驟步驟SU0,從處理器中讀取指令到指令譯碼部件2后,首先根據(jù)指令中 的fimc域的值,判斷該指令是現(xiàn)有的MIPS指令集指令,還是對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令;步驟S120,如果是現(xiàn)有的MIPS指令集指令,則按照現(xiàn)有技術(shù)的指令后結(jié)束;步驟S130,如果是對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令,則轉(zhuǎn)入步驟S200。步驟S200,對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令進(jìn)行譯碼,然后送入到 執(zhí)行單元3,執(zhí)行對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存操作。對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令,其中操作部分(OP)譯碼與現(xiàn)有 的MIPS指令的操作部分相同,即從左讀取、從左寫(xiě)入、從右讀取和從右寫(xiě)入 操作,與現(xiàn)有技術(shù)的MIPS指令的從左讀取、從左寫(xiě)入、從右讀取和從右寫(xiě)入 操作譯碼相同,其為現(xiàn)有的標(biāo)準(zhǔn)技術(shù),因此,在本發(fā)明中不再一一詳細(xì)描述。對(duì)源寄存器和目標(biāo)寄存器的譯碼,與現(xiàn)有技術(shù)的MIPS指令集不同。具體包括如下步驟步驟S210,如果是從左讀取字指令,則譯碼為先將帶符號(hào)的8位偏移地 址(offset)和GPR[base]的內(nèi)容相加得到有效地址,根據(jù)該有效地址,從相應(yīng) 的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字W中的一高有效部分,該高有效部 分被存放到浮點(diǎn)寄存器中字的最高有效部分(左邊),浮點(diǎn)寄存器中字的最低 有效部分(右)則維持不變;步驟S220,如果是從右讀取字指令,則譯碼為先將帶符號(hào)的8位偏移地 址(offset)和GPR[base]的內(nèi)容相加得到有效地址,根據(jù)該有效地址,從相應(yīng) 的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字W中的一低有效部分,該低有效部 分存放到浮點(diǎn)寄存器中字的最低有效部分(右邊),浮點(diǎn)寄存器中字的最高有 效部分(左)則維持不變-,步驟S230,如果是從左讀取雙字指令,則譯碼為先將帶符號(hào)的8位偏移 地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,根據(jù)該有效地址,從相 應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字DW中的一高有效部分,該高 有效部分存放到浮點(diǎn)寄存器中雙字的最高有效部分(左邊),浮點(diǎn)寄存器中雙 字的最低有效部分(右)則維持不變;步驟S240,如果是從右讀取雙字指令,則譯碼為先將帶符號(hào)的8位偏移 地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,根據(jù)該有效地址,從相 應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字DW中的一低有效部分,該低 有效部分存放到浮點(diǎn)寄存器中雙字的最低有效部分(右邊),浮點(diǎn)寄存器中雙 字的最高有效部分(左)則維持不變;步驟S250,如果是從左寫(xiě)入字指令,則譯碼為先將帶符號(hào)的8位偏移地16址(offset)和GPR[base]的內(nèi)容相加得到有效地址,根據(jù)該有效地址,査找到 包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一高有效部分,將浮點(diǎn)寄存器中字的最高有效 部分(左邊)存放到該高有效部分;步驟S260,如果是從右寫(xiě)入字指令,則譯碼為先將帶符號(hào)的8位偏移地 址(offset)和GPR[base]的內(nèi)容相加得到有效地址,根據(jù)所述有效地址,查找 到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一低有效部分,將浮點(diǎn)寄存器中字的最低有 效部分(右邊)存放到該低有效部分;步驟S270,如果是從左寫(xiě)入雙字指令,則譯碼為先將帶符號(hào)的8位偏移 地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,根據(jù)所述有效地址,查 找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一高有效部分,將浮點(diǎn)寄存器中雙字的 最高有效部分(左邊)被存放到該高有效部分;步驟S280,如果是從右寫(xiě)入雙字指令,則譯碼為先將帶符號(hào)的8位偏移 地址(offset)和GPR[base]的內(nèi)容相加得到有效地址,根據(jù)該有效地址,査找 到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一低有效部分,將浮點(diǎn)寄存器中雙字的最 低有效部分(右邊)被存放到該低有效部分。指令譯碼部件2譯碼后得到的操作部分(OP)和源/目標(biāo)浮點(diǎn)寄存器送入 到執(zhí)行單元3,執(zhí)行單元3和原來(lái)一樣執(zhí)行,但是需要讀寫(xiě)浮點(diǎn)寄存器,然后 完成把浮點(diǎn)寄存器的內(nèi)容寫(xiě)入內(nèi)存,或者完成從內(nèi)存讀取內(nèi)容到浮點(diǎn)寄存器。本發(fā)明的RISC處理器及其浮點(diǎn)寄存器的非對(duì)齊訪存方法,可以在不改變 原有處理器的其他部件的情況下,實(shí)現(xiàn)對(duì)地址非對(duì)齊訪存擴(kuò)展指令的支持。其 針對(duì)原有的MIPS指令集的RISC處理器,對(duì)指令集及指令譯碼部件2進(jìn)行改 造,使之能夠識(shí)別該擴(kuò)展指令,然后對(duì)其譯碼并輸出到訪存執(zhí)行單元3執(zhí)行, 其改動(dòng)小,并能提高處理器的性能。以上對(duì)本發(fā)明的具體實(shí)施例進(jìn)行了描述和說(shuō)明,這些實(shí)施例應(yīng)被認(rèn)為其只 是示例性的,并不用于對(duì)本發(fā)明進(jìn)行限制,本發(fā)明應(yīng)根據(jù)所附的權(quán)利要求進(jìn)行 解釋。
權(quán)利要求
1、一種RISC處理器,包括指令譯碼部件和執(zhí)行單元,其特征在于,還包括擴(kuò)展指令模塊;所述擴(kuò)展指令模塊包括多個(gè)擴(kuò)展指令,用于實(shí)現(xiàn)對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存操作;所述指令譯碼部件,包括擴(kuò)展指令譯碼模塊,用于識(shí)別擴(kuò)展指令模塊的擴(kuò)展指令,并進(jìn)行譯碼,譯碼后輸出到執(zhí)行單元執(zhí)行。
2、 根據(jù)權(quán)利要求1所述的RISC處理器,其特征在于,所述擴(kuò)展指令譯 碼模塊,包括識(shí)別子模塊,用于在讀取指令后,識(shí)別出對(duì)浮點(diǎn)寄存器的非對(duì)齊 訪存擴(kuò)展指令。
3、 根據(jù)權(quán)利要求1或2所述的RISC處理器,其特征在于,所述擴(kuò)展指 令包括對(duì)32位單精度浮點(diǎn)寄存器的操作指令和/或?qū)?4位雙精度浮點(diǎn)寄存器 的操作指令。
4、 根據(jù)權(quán)利要求3所述的RISC處理器,其特征在于,所述擴(kuò)展指令包 括從左讀取字?jǐn)U展指令;從右讀取字?jǐn)U展指令;從左讀取雙字?jǐn)U展指令;從右 讀取雙字?jǐn)U展指令;從左寫(xiě)入字?jǐn)U展指令;從右寫(xiě)入字?jǐn)U展指令;從左寫(xiě)入雙 字?jǐn)U展指令;從右寫(xiě)入雙字?jǐn)U展指令。
5、 根據(jù)權(quán)利要求4所述的RISC處理器,其特征在于,所述執(zhí)行單元, 包括從左讀取字模塊;從右讀取字模塊,從左讀取雙字模塊,從右讀取雙字模 塊,從左寫(xiě)入字模塊,從右寫(xiě)入字模塊,從左寫(xiě)入雙字模塊,從右寫(xiě)入雙字模 塊,其中.*所述從左讀取字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,從相 應(yīng)的內(nèi)存中取出包含有4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,將所述有效部 分存放到浮點(diǎn)寄存器字的左邊部分,所述浮點(diǎn)寄存器中字的右邊則維持不變;所述從右讀取字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,從相 應(yīng)的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,將所述有效部分 存放到浮點(diǎn)寄存器字的右邊部分,浮點(diǎn)寄存器中字的左邊部分則維持不變;所述從左讀取雙字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,從 相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將所述有效部分存放到浮點(diǎn)寄存器雙字的左邊部分,浮點(diǎn)寄存器中雙字的右邊部分則維 持不變;所述從右讀取雙字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,從相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將所述有效部分存放到浮點(diǎn)寄存器雙字的右邊部分,浮點(diǎn)寄存器中雙字的左邊部分則維持不變;所述從左寫(xiě)入字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,査找 到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,并將浮點(diǎn)寄存器的左邊部分存 放到內(nèi)存中所述字的相應(yīng)字節(jié);所述從右寫(xiě)入字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,查找 到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,并將浮點(diǎn)寄存器的右邊部分存 放到內(nèi)存中所述字的相應(yīng)字節(jié);所述從左寫(xiě)入雙字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,査 找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將浮點(diǎn)寄存器的左邊部 分存放到內(nèi)存中所述雙字的相應(yīng)字節(jié);所述從右寫(xiě)入雙字模塊,用于根據(jù)指令譯碼部件譯碼得到的有效地址,査 找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將浮點(diǎn)寄存器的右邊部 分被存放到內(nèi)存中所述雙字的相應(yīng)字節(jié)。
6、 根據(jù)權(quán)利要求1或2所述的RISC處理器,其特征在于,所述擴(kuò)展指 令的編碼格式是利用MIPS指令集中LWC2和SWC2空槽的值實(shí)現(xiàn)的。
7、 一種RISC處理器的浮點(diǎn)寄存器的非對(duì)齊訪存方法,其特征在于,包 括下列步驟步驟A,從處理器中讀取指令,識(shí)別出對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指步驟B,對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令進(jìn)行譯碼,然后送入到執(zhí)行 單元,執(zhí)行對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存操作。
8、 根據(jù)權(quán)利要求7所述的非對(duì)齊訪存方法,其特征在于,所述步驟A包 括下列步驟步驟Al,從處理器中讀取指令到指令譯碼部件后,首先根據(jù)指令中的ftmc 域的值,判斷該指令是現(xiàn)有的MIPS指令集指令,還是對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令;步驟A2,如果是現(xiàn)有的MIPS指令集指令,則按照現(xiàn)有技術(shù)的指令操作 后結(jié)束;步驟A3,如果是對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存擴(kuò)展指令,則轉(zhuǎn)入步驟B。
9、 根據(jù)權(quán)利要求7所述的非對(duì)齊訪存方法,其特征在于,所述擴(kuò)展指令 包括從左讀取字?jǐn)U展指令;從右讀取字?jǐn)U展指令;從左讀取雙字?jǐn)U展指令;從 右讀取雙字?jǐn)U展指令;從左寫(xiě)入字?jǐn)U展指令;從右寫(xiě)入字?jǐn)U展指令;從左寫(xiě)入 雙字?jǐn)U展指令;從右寫(xiě)入雙字?jǐn)U展指令。
10、 根據(jù)權(quán)利要求9所述的非對(duì)齊訪存方法,其特征在于,所述步驟B 包括下列步驟步驟B1,如果是從左讀取字指令,則譯碼為得到有效地址,根據(jù)所述有 效地址,從相應(yīng)的內(nèi)存中取出包含有4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分, 將所述有效部分存放到浮點(diǎn)寄存器字的左邊部分,所述浮點(diǎn)寄存器中字的右邊 則維持不變;步驟B2,如果是從右讀取字指令,則譯碼為得到有效地址,根據(jù)所述有 效地址,從相應(yīng)的內(nèi)存中取出包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,將 所述有效部分存放到浮點(diǎn)寄存器字的右邊部分,浮點(diǎn)寄存器中字的左邊部分則 維持不變;.步驟B3,如果是從左讀取雙字指令,則譯碼為得到有效地址,根據(jù)所述 有效地址,從相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部 分,并將所述有效部分存放到浮點(diǎn)寄存器字的左邊部分,浮點(diǎn)寄存器中雙字的 右邊部分則維持不變;步驟B4,如果是從右讀取雙字指令,則譯碼為得到有效地址,根據(jù)所述 有效地址,從相應(yīng)的內(nèi)存中取出包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部 分,并將所述有效部分存放到浮點(diǎn)寄存器字的右邊部分,浮點(diǎn)寄存器中雙字的 左邊部分則維持不變;步驟B5,如果是從左寫(xiě)入字指令,則譯碼為得到有效地址,根據(jù)所述有 效地址,查找到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,并將浮點(diǎn)寄存器 的左邊部分存放到內(nèi)存中所述字的相應(yīng)字節(jié);步驟B6,如果是從右寫(xiě)入字指令,則譯碼為得到有效地址,根據(jù)所述有4效地址,查找到包含4個(gè)連續(xù)字節(jié)的一個(gè)字中的一有效部分,并將浮點(diǎn)寄存器 韻右邊部分存放到內(nèi)存中所述字的相應(yīng)字節(jié);步驟B7,如果是從左寫(xiě)入雙字指令,則譯碼為得到有效地址,根據(jù)所述 有效地址,查找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將浮點(diǎn)寄 存器的左邊部分存放到內(nèi)存中所述雙字的相應(yīng)字節(jié);步驟B8,如果是從右寫(xiě)入雙字指令,則譯碼為得到有效地址,根據(jù)所述 有效地址,查找到包含8個(gè)連續(xù)字節(jié)的一個(gè)雙字中的一有效部分,并將浮點(diǎn)寄 存器的右邊部分被存放到內(nèi)存中所述雙字的相應(yīng)字節(jié)。
全文摘要
本發(fā)明公開(kāi)了一種RISC處理器及其浮點(diǎn)寄存器的非對(duì)齊訪存方法。該處理器包括指令譯碼部件和執(zhí)行單元,還包括擴(kuò)展指令模塊;所述擴(kuò)展指令模塊包括多個(gè)擴(kuò)展指令,用于實(shí)現(xiàn)對(duì)浮點(diǎn)寄存器的非對(duì)齊訪存操作;所述指令譯碼部件,包括擴(kuò)展指令譯碼模塊,用于識(shí)別擴(kuò)展指令模塊的擴(kuò)展指令,并進(jìn)行譯碼,譯碼后輸出到執(zhí)行單元執(zhí)行。其提高了處理器的性能。
文檔編號(hào)G06F9/318GK101216755SQ200810055928
公開(kāi)日2008年7月9日 申請(qǐng)日期2008年1月2日 優(yōu)先權(quán)日2008年1月2日
發(fā)明者蘇孟豪, 蔡嵩松 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所