套鎖實(shí)現(xiàn)方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù),尤其涉及一種套鎖實(shí)現(xiàn)方法及裝置。
【背景技術(shù)】
[0002]在計(jì)算機(jī)硬件和軟件的發(fā)展過(guò)程中,通常通過(guò)在瀏覽器的客戶端腳本語(yǔ)言(JavaScript,簡(jiǎn)稱為JS)引擎中加入編譯器,實(shí)現(xiàn)對(duì)瀏覽器的跳轉(zhuǎn)功能的加速目的。
[0003]目前通常通過(guò)在JS引擎的編譯器程序加入套鎖(toggle),實(shí)現(xiàn)對(duì)該編譯器程序的檢測(cè)和優(yōu)化。例如,在X86構(gòu)架中,通過(guò)調(diào)用call指令和nop指令實(shí)現(xiàn)套鎖功能,由于X86構(gòu)架中的指令長(zhǎng)度可變,以函數(shù)調(diào)用指令為5個(gè)字節(jié)為例予以說(shuō)明,其中I個(gè)字節(jié)表示調(diào)用的指令,例如調(diào)用call指令,其它4個(gè)字節(jié)表示被調(diào)用指令的地址,然而,當(dāng)調(diào)用nop指令時(shí),由于該nop指令只有I個(gè)字節(jié),如果把5個(gè)字節(jié)全部替換為nop指令,則之前被調(diào)用的call指令的地址會(huì)丟失,即,上述套鎖在調(diào)用nop指令后會(huì)使得之前調(diào)用的call指令的地址丟失,導(dǎo)致程序出錯(cuò);因此,在X86構(gòu)架的套鎖處理過(guò)程中,將nop指令替換為cmp_eaX指令,通過(guò)調(diào)用call指令和cmp_eax指令實(shí)現(xiàn)套鎖功能,這樣就可以將通用寄存器ax的內(nèi)容和后面4個(gè)字節(jié)構(gòu)成的32位數(shù)比較,即可與nop指令等效。
[0004]在無(wú)內(nèi)部互鎖流水級(jí)的微處理器(Microprocessorwithout-1nterlocked pipedstages,簡(jiǎn)稱為MIPS)構(gòu)架中,由于指令是固定長(zhǎng)度則不使用cmp_eax指令,因此現(xiàn)有技術(shù)中基于X86構(gòu)架的套鎖處理方式并不適用于該MIPS構(gòu)架。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種套鎖實(shí)現(xiàn)方法及裝置,以解決現(xiàn)有技術(shù)中基于X86構(gòu)架的套鎖實(shí)現(xiàn)方式,對(duì)具有固定長(zhǎng)度指令的MIPS構(gòu)架并不適用的問(wèn)題。
[0006]第一方面,本發(fā)明提供一種套鎖實(shí)現(xiàn)方法,包括:
[0007]在執(zhí)行加入套鎖指令集的編譯器程序時(shí),根據(jù)所述套鎖指令集中的開(kāi)關(guān)參數(shù),對(duì)所述編譯器程序進(jìn)行分析;
[0008]根據(jù)對(duì)所述編譯器程序的分析結(jié)果對(duì)所述編譯器程序進(jìn)行優(yōu)化處理。
[0009]在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述套鎖指令集包括:所述開(kāi)關(guān)參數(shù)對(duì)應(yīng)的執(zhí)行指令,則所述根據(jù)所述套鎖指令集中的開(kāi)關(guān)參數(shù),對(duì)所述編譯器程序進(jìn)行分析,包括:
[0010]根據(jù)所述開(kāi)關(guān)參數(shù),向指令緩沖區(qū)發(fā)送對(duì)應(yīng)的執(zhí)行指令;并在所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí),通過(guò)所述指令緩沖區(qū)中對(duì)應(yīng)的執(zhí)行指令,對(duì)所述編譯器程序進(jìn)行分析。
[0011]根據(jù)第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述執(zhí)行指令中包括目標(biāo)地址,則所述在所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí),通過(guò)所述指令緩沖區(qū)中對(duì)應(yīng)的執(zhí)行指令,對(duì)所述編譯器程序進(jìn)行分析,包括:
[0012]在所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí),對(duì)寄存器的值進(jìn)行壓棧操作,并將所述目標(biāo)地址存儲(chǔ)在所述寄存器中;
[0013]將所述編譯器程序跳轉(zhuǎn)到所述目標(biāo)地址所指示的所述編譯器的待分析程序入口,以對(duì)所述編譯器程序進(jìn)行分析。
[0014]根據(jù)第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述對(duì)寄存器的值進(jìn)行壓棧操作之前,所述方法還包括:
[0015]記錄所述套鎖指令集的返回地址,所述返回地址為執(zhí)行所述套鎖指令集前,所述編譯器程序的當(dāng)前地址;
[0016]則所述將所述編譯器程序跳轉(zhuǎn)到所述目標(biāo)地址所指示的所述編譯器的待分析程序入口,以對(duì)所述編譯器程序進(jìn)行分析之后,所述方法還包括:
[0017]綁定所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí)記錄的所述套鎖指令集的返回地址,使得在所述開(kāi)關(guān)參數(shù)為指示關(guān)閉參數(shù)時(shí),確定將所述編譯器程序跳轉(zhuǎn)到所述套鎖指令集的返回地址。
[0018]根據(jù)第一方面的第一種到第三種可能的實(shí)現(xiàn)方式的任意一種,在第四種可能的實(shí)現(xiàn)方式中,還包括:通過(guò)執(zhí)行所述開(kāi)關(guān)參數(shù)為指示關(guān)閉參數(shù)時(shí)所述指令緩沖區(qū)中對(duì)應(yīng)的執(zhí)行指令,將所述編譯器程序跳轉(zhuǎn)出所述套鎖指令集,保留所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí)所述指令緩沖區(qū)中對(duì)應(yīng)的執(zhí)行指令。
[0019]第二方面,本發(fā)明提供一種套鎖實(shí)現(xiàn)裝置,包括:
[0020]執(zhí)行模塊,用于在執(zhí)行加入套鎖指令集的編譯器程序時(shí),根據(jù)所述套鎖指令集中的開(kāi)關(guān)參數(shù),對(duì)所述編譯器程序進(jìn)行分析;
[0021]優(yōu)化模塊,用于根據(jù)對(duì)所述編譯器程序的分析結(jié)果對(duì)所述編譯器程序進(jìn)行優(yōu)化處理。
[0022]在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述套鎖指令集包括:所述開(kāi)關(guān)參數(shù)對(duì)應(yīng)的執(zhí)行指令,則所述執(zhí)行模塊包括:
[0023]發(fā)送單元,用于根據(jù)所述開(kāi)關(guān)參數(shù),向指令緩沖區(qū)發(fā)送對(duì)應(yīng)的執(zhí)行指令;
[0024]執(zhí)行單元,用于在所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí),通過(guò)所述指令緩沖區(qū)中對(duì)應(yīng)的執(zhí)行指令,對(duì)所述編譯器程序進(jìn)行分析。
[0025]根據(jù)第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述執(zhí)行指令中包括目標(biāo)地址;則所述執(zhí)行單元,具體用于在所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí),對(duì)寄存器的值進(jìn)行壓棧操作,并將所述目標(biāo)地址存儲(chǔ)在所述寄存器中;進(jìn)而將所述編譯器程序跳轉(zhuǎn)到所述目標(biāo)地址所指示的所述編譯器的待分析程序入口,以對(duì)所述編譯器程序進(jìn)行分析。
[0026]根據(jù)第二方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述執(zhí)行模塊還包括:記錄單元,用于在所述執(zhí)行單元對(duì)寄存器的值進(jìn)行壓棧操作之前,記錄所述套鎖指令集的返回地址,所述返回地址為執(zhí)行所述套鎖指令集前,所述編譯器程序的當(dāng)前地址;
[0027]則所述執(zhí)行模塊還包括:綁定單元,用于在所述執(zhí)行單元將所述編譯器程序跳轉(zhuǎn)到所述目標(biāo)地址所指示的所述編譯器的待分析程序入口,以對(duì)所述編譯器程序進(jìn)行分析之后,綁定所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí)記錄的所述套鎖指令集的返回地址,使得在所述開(kāi)關(guān)參數(shù)為指示關(guān)閉參數(shù)時(shí),確定將所述編譯器程序跳轉(zhuǎn)到所述套鎖指令集的返回地址。
[0028]根據(jù)第二方面的第一種到第三種可能的實(shí)現(xiàn)方式的任意一種,在第四種可能的實(shí)現(xiàn)方式中,所述執(zhí)行單元,還用于通過(guò)執(zhí)行所述開(kāi)關(guān)參數(shù)為指示關(guān)閉參數(shù)時(shí)所述指令緩沖區(qū)中對(duì)應(yīng)的執(zhí)行指令,將所述編譯器程序跳轉(zhuǎn)出所述套鎖指令集,保留所述開(kāi)關(guān)參數(shù)為指示開(kāi)啟參數(shù)時(shí)所述指令緩沖區(qū)中對(duì)應(yīng)的執(zhí)行指令。
[0029]本發(fā)明提供一種套鎖實(shí)現(xiàn)方法及裝置,通過(guò)在執(zhí)行加入套鎖指令集的編譯器程序的過(guò)程中,根據(jù)該套鎖指令集中開(kāi)關(guān)參數(shù)的指示選擇性對(duì)該編譯器程序進(jìn)行分析測(cè)試,進(jìn)而根據(jù)該分析結(jié)果實(shí)現(xiàn)對(duì)該編譯器程序的優(yōu)化處理,本實(shí)施例提供一種適用于MIPS構(gòu)架中的套鎖實(shí)現(xiàn)方法,以解決現(xiàn)有技術(shù)中基于X86構(gòu)架的套鎖實(shí)現(xiàn)方式,對(duì)具有固定長(zhǎng)度指令的MIPS構(gòu)架并不適用的問(wèn)題,使得MIPS構(gòu)架中編譯器程序的開(kāi)發(fā)的更加便利和有效。
【附圖說(shuō)明】
[0030]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造