亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

MIPS平臺數(shù)據(jù)訪問方法和裝置與流程

文檔序號:12462872閱讀:540來源:國知局
MIPS平臺數(shù)據(jù)訪問方法和裝置與流程
本發(fā)明涉及計算機數(shù)據(jù)訪問領(lǐng)域,尤其涉及一種無互鎖流水線級的微處理器(MillionInstructionsPerSecond,簡稱MIPS)平臺數(shù)據(jù)訪問方法和裝置。
背景技術(shù)
:在MIPS平臺下,對不同數(shù)據(jù)類型的數(shù)據(jù)進行訪問都有其相應(yīng)的訪問指令,例如:lh指令表示從內(nèi)存中加載一個雙字節(jié)整型對齊數(shù)據(jù)并符號擴展到整個寄存器中,lw指令表示從內(nèi)存中加載一個四字節(jié)整型對齊數(shù)據(jù)并符號擴展到整個寄存器中。其中,對齊數(shù)據(jù)是指數(shù)據(jù)在內(nèi)存中的起始地址能夠被數(shù)據(jù)的數(shù)據(jù)類型對應(yīng)的字節(jié)數(shù)整除,反之,不對齊數(shù)據(jù)是指數(shù)據(jù)在內(nèi)存中的起始地址不能夠被數(shù)據(jù)的數(shù)據(jù)類型對應(yīng)的字節(jié)數(shù)整除。通常情況下,數(shù)據(jù)在內(nèi)存中都是對齊的,但是,當(dāng)數(shù)據(jù)不對齊時,就可能出現(xiàn)使用錯誤的指令對不對齊數(shù)據(jù)進行訪問的情況,例如:錯誤的使用lw指令來加載雙字節(jié)對齊的整型數(shù)據(jù)。一旦使用了錯誤指令訪問了不對齊數(shù)據(jù),則,或者硬件拋出異常導(dǎo)致程序中斷執(zhí)行,或者交給操作系統(tǒng)處理,而操作系統(tǒng)在處理過程中由于涉及上下文切換必然大幅影響程序的執(zhí)行效率。在現(xiàn)有技術(shù)中,為了防止使用錯誤指令訪問不對齊數(shù)據(jù),常用的方法是:在編譯器中為數(shù)據(jù)增加編譯器屬性,編譯器根據(jù)編譯器屬性通過填充內(nèi)存等方式強制讓數(shù)據(jù)進行對齊,然后,使用與對齊數(shù)據(jù)相對應(yīng)的指令訪問已對齊的數(shù)據(jù)。具體實現(xiàn)方式如下,定義結(jié)構(gòu)體:#pragmapack(2)structtest_t{inta;charb;shortc;chard;}其中,a為四字節(jié)整型數(shù)據(jù),b、d為單字節(jié)字符型數(shù)據(jù),c為雙字節(jié)整型數(shù)據(jù)。由于結(jié)構(gòu)體聲明前增加了#pragmapack(2),即,編譯器會保證結(jié)構(gòu)體各成員二字節(jié)對齊,具體地,結(jié)構(gòu)體成員中字節(jié)數(shù)最大的為a,所以,編譯器保證a四字節(jié)對齊,b的起始地址等于a的起始地址加a的大小,所以b為二字節(jié)對齊,但是,c的起始地址等于b的起始地址加b的大小,由于b為單字節(jié),導(dǎo)致c不對齊,此時,編譯器會在c之前插入一個空白字節(jié)以保證c為二字節(jié)對齊,以此類推,從而保證了結(jié)構(gòu)體各成員均為二字節(jié)對齊。但是,在現(xiàn)有技術(shù)中,由于通過在內(nèi)存中插入空白字節(jié)使得數(shù)據(jù)強制對齊,使得內(nèi)存利用率嚴重下降,并且,改變數(shù)據(jù)的偏移地址可能導(dǎo)致整個系統(tǒng)錯誤的數(shù)據(jù)訪問,造成程序編譯效率和執(zhí)行效率嚴重下降。技術(shù)實現(xiàn)要素:本發(fā)明提供了一種MIPS平臺數(shù)據(jù)訪問方法和裝置,當(dāng)數(shù)據(jù)不對齊時,避免了系統(tǒng)內(nèi)存的浪費,提高了程序的編譯效率和執(zhí)行效率。本發(fā)明提供的MIPS平臺數(shù)據(jù)訪問方法,包括:獲取編譯器中訪存宏指令的輸入?yún)?shù),所述訪存宏指令指示將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中,或者將所述待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中;根據(jù)所述輸入?yún)?shù)獲取所述待訪問數(shù)據(jù)的存儲屬性集;其中,所述存儲屬性集包括:數(shù)據(jù)類型和字節(jié)數(shù);若所述待訪問數(shù)據(jù)不對齊,則根據(jù)所述存儲屬性集選擇與所述存儲屬性集相對應(yīng)的MIPS指令,將所述待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將所述待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。本發(fā)明提供的MIPS平臺數(shù)據(jù)訪問裝置,包括:第一獲取模塊,用于獲取編譯器中訪存宏指令的輸入?yún)?shù),所述訪存宏指令指示將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中,或者將所述待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中;第二獲取模塊,用于根據(jù)所述輸入?yún)?shù)獲取所述待訪問數(shù)據(jù)的存儲屬性集;其中,所述存儲屬性集包括:數(shù)據(jù)類型和字節(jié)數(shù);第一訪問模塊,用于若所述待訪問數(shù)據(jù)不對齊,則根據(jù)所述存儲屬性集 選擇與所述存儲屬性集相對應(yīng)的MIPS指令,將所述待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將所述待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。本發(fā)明提供了一種MIPS平臺數(shù)據(jù)訪問方法和裝置,其中,MIPS平臺數(shù)據(jù)訪問方法包括:獲取編譯器中訪存宏指令的輸入?yún)?shù);根據(jù)所述輸入?yún)?shù)獲取所述待訪問數(shù)據(jù)的存儲屬性集;其中,所述存儲屬性集包括:數(shù)據(jù)類型和字節(jié)數(shù);若所述待訪問數(shù)據(jù)不對齊,則根據(jù)所述存儲屬性集選擇與所述存儲屬性集相對應(yīng)的MIPS指令,將所述待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將所述待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。本發(fā)明提供的MIPS平臺數(shù)據(jù)訪問方法,當(dāng)數(shù)據(jù)不對齊時,編譯器在進行代碼翻譯的過程中,直接調(diào)用與存儲屬性集相對應(yīng)的MIPS指令對待訪問數(shù)據(jù)進行訪問,不需要增加內(nèi)存開銷以及改變數(shù)據(jù)的偏移地址就可以完成數(shù)據(jù)不對齊時的數(shù)據(jù)訪問,避免了內(nèi)存浪費,提高了程序的編譯效率和執(zhí)行效率。附圖說明為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例一提供的MIPS平臺數(shù)據(jù)訪問方法的流程圖;圖2為本發(fā)明實施例二提供的MIPS平臺數(shù)據(jù)訪問方法的流程圖;圖3為本發(fā)明實施例三提供的MIPS平臺數(shù)據(jù)訪問方法的流程圖;圖4為本發(fā)明實施例四提供的MIPS平臺數(shù)據(jù)訪問方法的流程圖;圖5為本發(fā)明實施例一提供的MIPS平臺數(shù)據(jù)訪問裝置的結(jié)構(gòu)示意圖;圖6為本發(fā)明實施例二提供的MIPS平臺數(shù)據(jù)訪問裝置的結(jié)構(gòu)示意圖。具體實施方式為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲 得的所有其他實施例,都屬于本發(fā)明保護的范圍。圖1為本發(fā)明實施例一提供的MIPS平臺數(shù)據(jù)訪問方法的流程圖,本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,應(yīng)用于編譯器對程序代碼翻譯過程中的數(shù)據(jù)訪存。如圖1所示,本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,可以包括:步驟101、獲取編譯器中訪存宏指令的輸入?yún)?shù)。其中,訪存宏指令用于指示將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中,或者將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。其中,本實施例對于編譯器中訪存宏指令的具體宏定義形式和包含的參數(shù)不加以限制。可選的,作為訪存宏指令的一種實現(xiàn)方式,訪存宏指令的輸入?yún)?shù)可以包括:第一寄存器、第二寄存器、第一整數(shù)常量和第二整數(shù)常量。其中,第一寄存器用于存儲待訪問數(shù)據(jù),第二寄存器用于存儲待訪問數(shù)據(jù)在內(nèi)存中的起始地址,第一整數(shù)常量用于指示待訪問數(shù)據(jù)的字節(jié)數(shù),第二整數(shù)常量用于指示待訪問數(shù)據(jù)在內(nèi)存中的偏移地址。相應(yīng)的,訪存宏指令用于指示將待訪問數(shù)據(jù)從第二寄存器和第二整數(shù)常量指示的內(nèi)存地址中加載到第一寄存器中,或者將待訪問數(shù)據(jù)從第一寄存器中存儲至第二寄存器和第二整數(shù)常量指示的內(nèi)存地址中。例如:訪存宏指令的宏定義形式為:loaddest,offset(src),size,(scratch)則在上述宏指令中,第一寄存器為dest、第二寄存器為src、第一整數(shù)常量為size、第二整數(shù)常量為offset,而scratch為訪存操作過程中可能用到的臨時寄存器。上述宏指令表示將src+offset指示的內(nèi)存中的數(shù)據(jù)加載到dest中。又例如:訪存宏指令的宏定義形式為:storesrc,offset(dest),size,(scratch)則在上述宏指令中,第一寄存器為src、第二寄存器為dest、第一整數(shù)常量為size、第二整數(shù)常量為offset,而scratch為訪存操作過程中可能用到的臨時寄存器。上述宏指令表示將src中的數(shù)據(jù)存儲到dest+offset指示的內(nèi)存中。訪存宏指令的輸入?yún)?shù)還可以包括:MIPS平臺的大小端信息、浮點寄存器的運行模式、數(shù)據(jù)從內(nèi)存中加載到寄存器中的擴展方式等等。步驟103、根據(jù)輸入?yún)?shù)獲取待訪問數(shù)據(jù)的存儲屬性集。其中,存儲屬性集包括:數(shù)據(jù)類型和字節(jié)數(shù)。具體地,數(shù)據(jù)類型包括整型和浮點型,對于浮點型數(shù)據(jù),包括單精度和雙精度兩種類型,字節(jié)數(shù)分別為四字節(jié)和八字節(jié),對于整型數(shù)據(jù),字節(jié)數(shù)可以為單字節(jié)、雙字節(jié)、四字節(jié)或者八字節(jié)??蛇x的,以上述輸入?yún)?shù)的實現(xiàn)方式為例,若輸入?yún)?shù)包括第一寄存器和第一整數(shù)常量,第一寄存器存儲待訪問數(shù)據(jù),第一整數(shù)常量指示待訪問數(shù)據(jù)的字節(jié)數(shù),則,本步驟的具體實現(xiàn)方式為:根據(jù)第一寄存器的名稱獲得待訪問數(shù)據(jù)的數(shù)據(jù)類型,根據(jù)第一整數(shù)常量的取值獲得待訪問數(shù)據(jù)的字節(jié)數(shù)。由于寄存器都有相應(yīng)的名稱,存儲浮點型數(shù)據(jù)的寄存器和存儲整型數(shù)據(jù)的寄存器是不同的,所以,可以根據(jù)寄存器的名稱獲得待訪問數(shù)據(jù)的數(shù)據(jù)類型。步驟105、若待訪問數(shù)據(jù)不對齊,則根據(jù)存儲屬性集選擇與存儲屬性集相對應(yīng)的MIPS指令,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。在MIPS指令集中,每一種存儲屬性集都對應(yīng)有相應(yīng)的MIPS指令,例如:采用ush指令將整型雙字節(jié)不對齊數(shù)據(jù)從寄存器中存儲至內(nèi)存中,但是,由于現(xiàn)有技術(shù)中程序員采用了為數(shù)據(jù)增加編譯器屬性的方式強制數(shù)據(jù)進行對齊,導(dǎo)致編譯器在進行代碼翻譯時僅使用了數(shù)據(jù)對齊時對應(yīng)的MIPS指令進行數(shù)據(jù)訪問,而數(shù)據(jù)不對齊時對應(yīng)的MIPS指令將不會被用到,這種方式不僅增加了內(nèi)存開銷,而且編譯過程繁瑣,嚴重降低了程序的編譯速率。在本實施例中,通過獲取待訪問數(shù)據(jù)的存儲屬性集,獲知了待訪問數(shù)據(jù)的數(shù)據(jù)類型和字節(jié)數(shù),這樣,在已知數(shù)據(jù)不對齊的情況下,編譯器在進行代碼翻譯時可以直接調(diào)用與存儲屬性集相對應(yīng)的MIPS指令,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中,不需要增加內(nèi)存開銷以及改變數(shù)據(jù)的偏移地址就可以完成數(shù)據(jù)不對齊時的數(shù)據(jù)訪問,編譯過程簡單,不僅避免了內(nèi)存的浪費,而且提高了程序的編譯效率和執(zhí)行效率。進一步地,編譯器中設(shè)置有訪存宏指令控制開關(guān),在步驟101之前,還可以包括:設(shè)置訪存宏指令控制開關(guān)為打開。其中,訪存宏指令控制開關(guān)用于控制是否執(zhí)行訪存宏指令對待訪問數(shù)據(jù)進行訪存。當(dāng)訪存宏指令控制開關(guān)打開時,編譯器才會選擇訪存宏指令傳遞相關(guān)參數(shù)進行數(shù)據(jù)訪存,這樣,編譯器就會在不確定數(shù)據(jù)是否對齊,或者確定數(shù)據(jù)不對齊的情況下執(zhí)行訪存宏指令進行數(shù)據(jù)訪問,通過增加開關(guān)控制功能,進一步提升了程序的編譯效率。本實施例提供了一種MIPS平臺數(shù)據(jù)訪問方法,包括:獲取編譯器中訪存宏指令的輸入?yún)?shù),獲取待訪問數(shù)據(jù)的存儲屬性集,若待訪問數(shù)據(jù)不對齊,則根據(jù)存儲屬性集選擇與存儲屬性集相對應(yīng)的MIPS指令,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,通過獲取到的待訪問數(shù)據(jù)的存儲屬性集,當(dāng)數(shù)據(jù)不對齊時,編譯器在進行代碼翻譯的過程中,直接調(diào)用與存儲屬性集相對應(yīng)的MIPS指令對待訪問數(shù)據(jù)進行訪問,避免了內(nèi)存浪費,提高了程序的編譯效率和執(zhí)行效率。圖2為本發(fā)明實施例二提供的MIPS平臺數(shù)據(jù)訪問方法的流程圖,本實施例在實施例一的基礎(chǔ)上,提供了MIPS平臺數(shù)據(jù)訪問方法的一種具體實現(xiàn)方式。如圖2所示,本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,可以包括:步驟201、獲取編譯器中訪存宏指令的輸入?yún)?shù)。步驟203、根據(jù)輸入?yún)?shù)獲取待訪問數(shù)據(jù)的存儲屬性集。其中,存儲屬性集包括:數(shù)據(jù)類型和字節(jié)數(shù)。在本步驟中,獲得了待訪問數(shù)據(jù)的存儲屬性集,根據(jù)存儲屬性集的具體取值執(zhí)行步驟205或者步驟207。步驟205、若存儲屬性集為整型和八字節(jié),則選擇uld指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。具體地,以小端系統(tǒng)為例,執(zhí)行代碼為:ulddest,offset(src)步驟207、若存儲屬性集為浮點型和八字節(jié),則根據(jù)預(yù)先獲取到的浮點寄存器運行模式將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。具體地,浮點寄存器運行模式可以用FIR寄存器的FR位表示。當(dāng)FR位 等于0時,表示相鄰的奇偶浮點寄存器的低32位共同表示一個64位的浮點數(shù)據(jù),當(dāng)FR位等于1時,表示一個浮點寄存器可以直接表示一個64位的浮點數(shù)據(jù)。若FR位等于0,則選擇兩條lwc1指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中,即,使用兩條lwc1指令加載兩個32位數(shù)據(jù)到相鄰的浮點寄存器中,以小端系統(tǒng)為例,執(zhí)行代碼為:lwc1dest,offset(src)lwc1dest+1,offset+4(src)若FR位等于1,則選擇lwc1指令、lw指令和mfhc1指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中,即,先使用lwc1指令加載浮點寄存器的低32位數(shù)據(jù),再使用lw指令和mfhc1指令加載浮點寄存器的高32位數(shù)據(jù),以小端系統(tǒng)為例,執(zhí)行代碼為:lwc1dest,offset(src)lwscratch,offset+4(src)mthc1scratch,dest在本實施例中,uld指令、lwc1指令、lw指令和mfhc1指令均為MIPS指令,各個指令的具體含義如表1所示。表1本實施例提供了一種MIPS平臺數(shù)據(jù)訪問方法,具體提供了當(dāng)待訪問數(shù)據(jù)的存儲屬性集為整型八字節(jié)或者浮點型八字節(jié)時,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中的數(shù)據(jù)訪問方法。本實施例提供的MIPS平臺數(shù)據(jù)訪問方法, 在數(shù)據(jù)不對齊的情況下,編譯器編譯過程中直接調(diào)用相應(yīng)的MIPS指令對待訪問數(shù)據(jù)進行訪問,避免了內(nèi)存浪費,提高了程序的編譯效率和執(zhí)行效率。圖3為本發(fā)明實施例三提供的MIPS平臺數(shù)據(jù)訪問方法的流程圖,本實施例在實施例一的基礎(chǔ)上,提供了MIPS平臺數(shù)據(jù)訪問方法的另一種具體實現(xiàn)方式。如圖3所示,本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,可以包括:步驟301、獲取編譯器中訪存宏指令的輸入?yún)?shù)。步驟303、根據(jù)輸入?yún)?shù)獲取待訪問數(shù)據(jù)的存儲屬性集。其中,存儲屬性集包括:數(shù)據(jù)類型、字節(jié)數(shù)和擴展方式。其中,擴展方式用于指示整型數(shù)據(jù)從內(nèi)存中加載到寄存器中時的擴展方式,具體包括零擴展和符號擴展。在本步驟中,獲得了待訪問數(shù)據(jù)的存儲屬性集,根據(jù)存儲屬性集的具體取值執(zhí)行步驟305~步驟311。步驟305、若存儲屬性集為整型、雙字節(jié)和零擴展,則選擇ulhu指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。具體地,以小端系統(tǒng)為例,執(zhí)行代碼為:ulhudest,offset(src)步驟307、若存儲屬性集為整型、雙字節(jié)和符號擴展,則選擇ulh指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。具體地,以小端系統(tǒng)為例,執(zhí)行代碼為:ulhdest,offset(src)步驟309、若存儲屬性集為整型、四字節(jié)和零擴展,則選擇ulwu指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。具體地,以小端系統(tǒng)為例,執(zhí)行代碼為:ulwudest,offset(src)步驟311、若存儲屬性集為整型、四字節(jié)和符號擴展,則選擇ulw指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。具體地,以小端系統(tǒng)為例,執(zhí)行代碼為:ulwdest,offset(src)在本實施例中,ulhu指令、ulh指令、ulwu指令和ulw指令均為MIPS指令,各個指令的具體含義如表2所示。表2本實施例提供了一種MIPS平臺數(shù)據(jù)訪問方法,具體提供了當(dāng)待訪問數(shù)據(jù)的存儲屬性集為整型雙字節(jié)零擴展、整型雙字節(jié)符號擴展、整型四字節(jié)零擴展、整型四字節(jié)符號擴展時,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中的數(shù)據(jù)訪問方法。本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,在數(shù)據(jù)不對齊的情況下,編譯器編譯過程中直接調(diào)用相應(yīng)的MIPS指令對待訪問數(shù)據(jù)進行訪問,避免了內(nèi)存浪費,提高了程序的編譯效率和執(zhí)行效率。圖4為本發(fā)明實施例四提供的MIPS平臺數(shù)據(jù)訪問方法的流程圖,本實施例在實施例一的基礎(chǔ)上,提供了MIPS平臺數(shù)據(jù)訪問方法的又一種具體實現(xiàn)方式。如圖4所示,本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,可以包括:步驟401、獲取編譯器中訪存宏指令的輸入?yún)?shù)。步驟403、根據(jù)輸入?yún)?shù)獲取待訪問數(shù)據(jù)的存儲屬性集。其中,存儲屬性集包括:數(shù)據(jù)類型和字節(jié)數(shù)。在本步驟中,獲得了待訪問數(shù)據(jù)的存儲屬性集,根據(jù)存儲屬性集的具體取值執(zhí)行步驟405~步驟411。步驟405、若存儲屬性集為整型和雙字節(jié),則選擇ush指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。具體地,以小端系統(tǒng)為例,執(zhí)行代碼為:ushsrc,offset(dest)步驟407、若存儲屬性集為整型和四字節(jié),則選擇usw指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。具體地,以小端系統(tǒng)為例,執(zhí)行代碼為:uswsrc,offset(dest)步驟409、若存儲屬性集為整型和八字節(jié),則選擇usd指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。具體地,以小端系統(tǒng)為例,執(zhí)行代碼為:usdsrc,offset(dest)步驟411、若存儲屬性集為浮點型和八字節(jié),則根據(jù)預(yù)先獲取到的浮點寄存器運行模式將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。具體地,浮點寄存器運行模式可以用FIR寄存器的FR位表示。當(dāng)FR位等于0時,表示相鄰的奇偶浮點寄存器的低32位共同表示一個64位的浮點數(shù)據(jù),當(dāng)FR位等于1時,表示一個浮點寄存器可以直接表示一個64位的浮點數(shù)據(jù)。若FR位等于0,則選擇兩條swc1指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中,即,使用兩條swc1指令將兩個浮點寄存器中的低32位數(shù)據(jù)存儲到內(nèi)存中,以小端系統(tǒng)為例,執(zhí)行代碼為:swc1src,offset(dest)swc1src+1,offset+4(dest)若FR位等于1,則選擇swc1指令、mfhc1指令和sw指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中,即,先使用swc1指令將浮點寄存器的低32位數(shù)據(jù)存儲到內(nèi)存中,再使用mfhc1指令和sw指令將浮點寄存器的高32位數(shù)據(jù) 存儲到內(nèi)存中,以小端系統(tǒng)為例,執(zhí)行代碼為:swc1src,offset(dest)mfhc1scratch,srcswscratch,offset+4(dest)在本實施例中,ush指令、usw指令、usd指令、swc1指令和sw指令均為MIPS指令,各個指令的具體含義如表3所示。表3本實施例提供了一種MIPS平臺數(shù)據(jù)訪問方法,具體提供了當(dāng)待訪問數(shù)據(jù)的存儲屬性集為整型雙字節(jié)、整型四字節(jié)、整型八字節(jié)和浮點型八字節(jié)時,將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中的數(shù)據(jù)訪問方法。本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,在數(shù)據(jù)不對齊的情況下,編譯器編譯過程中直接調(diào)用相應(yīng)的MIPS指令對待訪問數(shù)據(jù)進行訪問,避免了內(nèi)存浪費,提高了程序的編譯效率和執(zhí)行效率。實施例五為在實施例一的基礎(chǔ)上提供的本發(fā)明的又一種MIPS平臺數(shù)據(jù)訪問方法,本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,還可以包括:若待訪問數(shù)據(jù)對齊,則根據(jù)存儲屬性集選擇與存儲屬性集相對應(yīng)的MIPS指令,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將待訪問數(shù)據(jù)從寄存器中 存儲至內(nèi)存中。其中,MIPS指令包括:lbu指令、lb指令、lhu指令、lh指令、lwu指令、lw指令、ld指令、lwc1指令、ldc1指令、sb指令、sh指令、sw指令、sd指令、swc1指令或者sdc1指令。在本實施例中,各個指令的具體含義如表4所示。表4指令含義lbu單字節(jié)加載并零擴展lb單字節(jié)加載并符號擴展lhu雙字節(jié)加載并零擴展lh雙字節(jié)加載并符號擴展lwu單字加載并零擴展lw單字加載并符號擴展ld雙字加載lwc1加載單精度浮點到浮點寄存器ldc1加載雙精度浮點到浮點寄存器sb單字節(jié)存儲sh雙字節(jié)存儲sw單字存儲sd雙字存儲swc1單精度浮點存儲sdc1雙精度浮點存儲本實施例提供了一種MIPS平臺數(shù)據(jù)訪問方法,具體還提供了數(shù)據(jù)對齊情況下的數(shù)據(jù)訪問方法。本實施例提供的MIPS平臺數(shù)據(jù)訪問方法,無論數(shù)據(jù)是否對齊,編譯器在編譯過程中均可以根據(jù)待訪問數(shù)據(jù)的存儲屬性集直接調(diào)用相應(yīng)的MIPS指令對待訪問數(shù)據(jù)進行訪問,避免了內(nèi)存浪費,提高了程序的編譯效率和執(zhí)行效率。圖5為本發(fā)明實施例一提供的MIPS平臺數(shù)據(jù)訪問裝置的結(jié)構(gòu)示意圖,本實施例提供的MIPS平臺數(shù)據(jù)訪問裝置,用于執(zhí)行圖1所示實施例提供的MIPS平臺數(shù)據(jù)訪問方法。如圖5所示,本實施例提供的MIPS平臺數(shù)據(jù)訪問 裝置,可以包括:第一獲取模塊11,用于獲取編譯器中訪存宏指令的輸入?yún)?shù)。其中,訪存宏指令指示將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中,或者將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。第二獲取模塊13,用于根據(jù)輸入?yún)?shù)獲取待訪問數(shù)據(jù)的存儲屬性集。其中,存儲屬性集包括數(shù)據(jù)類型和字節(jié)數(shù)。第一訪問模塊15,用于若待訪問數(shù)據(jù)不對齊,則根據(jù)存儲屬性集選擇與存儲屬性集相對應(yīng)的MIPS指令,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。可選的,輸入?yún)?shù)可以包括:第一寄存器、第二寄存器、第一整數(shù)常量和第二整數(shù)常量。其中,第一寄存器用于存儲待訪問數(shù)據(jù),第二寄存器用于存儲待訪問數(shù)據(jù)在內(nèi)存中的起始地址,第一整數(shù)常量用于指示待訪問數(shù)據(jù)的字節(jié)數(shù),第二整數(shù)常量用于指示待訪問數(shù)據(jù)在內(nèi)存中的偏移地址。其中,訪存宏指令用于指示將待訪問數(shù)據(jù)從第二寄存器和第二整數(shù)常量指示的內(nèi)存地址中加載到第一寄存器中,或者將待訪問數(shù)據(jù)從第一寄存器中存儲至第二寄存器和第二整數(shù)常量指示的內(nèi)存地址中。相應(yīng)的,第二獲取模塊13具體用于:根據(jù)第一寄存器的名稱獲得待訪問數(shù)據(jù)的數(shù)據(jù)類型,根據(jù)第一整數(shù)常量的取值獲得待訪問數(shù)據(jù)的字節(jié)數(shù)??蛇x的,MIPS平臺數(shù)據(jù)訪問裝置還可以包括:設(shè)置模塊(未示出)。設(shè)置模塊用于將編譯器中的訪存宏指令控制開關(guān)打開。其中,訪存宏指令控制開關(guān)用于控制是否執(zhí)行訪存宏指令對待訪問數(shù)據(jù)進行訪存。可選的,存儲屬性集還可以包括擴展方式。本實施例提供了一種MIPS平臺數(shù)據(jù)訪問裝置,包括:第一獲取模塊、第二獲取模塊和第一訪問模塊,第一獲取模塊用于獲取編譯器中訪存宏指令的輸入?yún)?shù),第二獲取模塊用于獲取待訪問數(shù)據(jù)的存儲屬性集,第一訪問模塊用于若待訪問數(shù)據(jù)不對齊,則根據(jù)存儲屬性集選擇與存儲屬性集相對應(yīng)的MIPS指令,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。本實施例提供的MIPS平臺數(shù)據(jù)訪問裝置,通過獲取到 的待訪問數(shù)據(jù)的存儲屬性集,當(dāng)數(shù)據(jù)不對齊時,編譯器在進行代碼翻譯的過程中,直接調(diào)用與存儲屬性集相對應(yīng)的MIPS指令對待訪問數(shù)據(jù)進行訪問,避免了內(nèi)存浪費,提高了程序的編譯效率和執(zhí)行效率。圖6為本發(fā)明實施例二提供的MIPS平臺數(shù)據(jù)訪問裝置的結(jié)構(gòu)示意圖,本實施例在實施例一的基礎(chǔ)上,提供了的MIPS平臺數(shù)據(jù)訪問裝置的具體實現(xiàn)方式,用于執(zhí)行上述各方法實施例提供的MIPS平臺數(shù)據(jù)訪問方法。如圖6所示,本實施例提供的MIPS平臺數(shù)據(jù)訪問裝置,可以包括:第一獲取模塊11、第二獲取模塊13和第一訪問模塊15。第一訪問模塊15可以包括第一訪問單元151、第二訪問單元153和第三訪問單元155中的至少一個。MIPS平臺數(shù)據(jù)訪問裝置還可以包括第二訪問模塊17。其中,第一訪問單元151用于:若存儲屬性集為整型和八字節(jié),則選擇uld指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中;或者,若存儲屬性集為浮點型和八字節(jié),則根據(jù)預(yù)先獲取到的浮點寄存器運行模式將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。其中,浮點寄存器運行模式可以用FIR寄存器的FR位表示。第一訪問單元151具體用于:若FR位等于0,則選擇兩條lwc1指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中;或者,若FR位等于1,則選擇lwc1指令、lw指令和mfhc1指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。其中,第二訪問單元153用于:若存儲屬性集為整型、雙字節(jié)和零擴展,則選擇ulhu指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中;或者,若存儲屬性集為整型、雙字節(jié)和符號擴展,則選擇ulh指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中;或者,若存儲屬性集為整型、四字節(jié)和零擴展,則選擇ulwu指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中;或者,若存儲屬性集為整型、四字節(jié)和符號擴展,則選擇ulw指令將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中。其中,第三訪問單元155用于:若存儲屬性集為整型和雙字節(jié),則選擇ush指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中;或者,若存儲屬性集為整型和四字節(jié),則選擇usw指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中;或者,若存儲屬性集為整型和八字節(jié),則選擇usd指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中;或者,若存儲屬性集為浮點型和八字節(jié),則根據(jù)預(yù)先獲取到的浮點寄存器運行模式將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。其中,浮點寄存器運行模式可以用FIR寄存器的FR位表示。第三訪問單元155具體用于:若FR位等于0,則選擇兩條swc1指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中;或者,若FR位等于1,則選擇swc1指令、mfhc1指令和sw指令將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。其中,第二訪問模塊17用于:若待訪問數(shù)據(jù)對齊,則根據(jù)存儲屬性集選擇與存儲屬性集相對應(yīng)的MIPS指令,將待訪問數(shù)據(jù)從內(nèi)存中加載到寄存器中或者將待訪問數(shù)據(jù)從寄存器中存儲至內(nèi)存中。其中,MIPS指令包括:lbu指令、lb指令、lhu指令、lh指令、lwu指令、lw指令、ld指令、lwc1指令、ldc1指令、sb指令、sh指令、sw指令、sd指令、swc1指令或者sdc1指令。最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1