新四季網

編譯程序、編譯程序裝置和編譯方法

2023-06-10 09:51:41 2


專利名稱::編譯程序、編譯程序裝置和編譯方法
技術領域:
:本發明涉及一種將以諸如0++語言的高級程序語言描述的源程序編譯成機器語言的編譯程序,尤其涉及編譯程序的優化。
背景技術:
:隨著處理器的功能在近些年來被極大地提高,強烈地尋求可以高效地開發處理器所具有的高度功能的高性能編譯程序。換句話說,需要高效地產生由目標處理器執行的高級和專用指令的編譯程序。例如,幵發了執行媒體處理、例如數位訊號處理所需的各種定點格式的運算指令的處理器和執行SIMD(單指令多數據)類型指令的高性能處理器。需要以這樣一個處理器為目標的編譯程序通過高效地產生各種定點格式的運算指令和SIMD類型指令來優化代碼大小和執行速度。然而,無須說明的是,一個常規編譯程序高效地產生處理器執行的關於以諸如0++語言的高級程序語言搖述的源程序的高級和專用指令。因此,在用於媒體處理的應用和在代碼大小和執行速度方面需要嚴格條件的其他應用的開發中,用戶在當前條件下別無選擇地只能描述彙編程序指令中的臨界點。但存在一個問題,彙編程序指令的程序設計不僅需要更多的工時,在可維護性和可移植性上與採用諸如c十+語言的高級程序語言的開發相比還非常低級。另外,常規編譯程序在其自身中具有用於產生處理器執行的高級和專用指令等的優化處理。換句話說,高效利用目標處理器的特徵來用於優化的處理模塊包括在編譯程序自身內併集成。因此,當編譯程序的功能被擴展或目標編譯程序的說明書改變時,需要重新配置整個編譯程序。這存在一個問題,必須每次重複編譯程序的版本的升級等。
發明內容考慮到上述問題,本發明的第一個目的是提供一個可以高效地產生處理器執行的高級和專用指令的編譯程序。此外,本發明的第二個目的是提供一個可以在不頻繁地重複編譯程序自身的版本的升級的情況下通過擴充功能等作出改進的編譯程序。依據本發明的編譯程序將一個源程序翻譯成一個機器語言程序,該程序包括運算定義信息,其中定義了對應於一個專用於一個目標處理器的機器語言指令的運算,編譯程序包括分析程序步驟,分析源程序;中間編碼變換步驟,將分析的源程序變換成中間編碼;優化步驟,優化變換的中間編碼;以及,代碼產生步驟,將優化的中間編碼變換成機器語言指令,其中,中間編碼變換步驟包括檢測子步驟,檢測中間編碼中的一個是否引用(referto)在運算定義信息中定義的運算;以及,替代子步驟,當檢測到中間編碼時,用一個對應的機器語言指令替代中間編碼,以及,在優化步驟中,優化中間編碼,中間編碼包括在替代子步驟中替代中間編碼的機器語言指令。例如,依據本發明的程序由源程序中包括的主文件(headerfile)和將源程序翻譯成機器語言程序的編譯程序組成;在主文件中,定義了一個由數據和方法組成的類;編譯程序包括分析程序步驟,分析源程序;中間編碼變換步驟,將分析的源程序變換成中間編碼;優化步驟,優化變換的中間編碼;以及,代碼產生步驟,將優化的中間編碼變換成機器語言指令,其中,中間編碼變換步驟包括檢測子步驟,檢測中間編碼中的一個是否引用在主文件中定義的類;以及,替代子步驟,當檢測到中間編碼時,用一個對應的機器語言指令替代中間編碼,以及,在優化步驟中,優化中間編碼,中間編碼包括在替代子步驟中替代中間編碼的機器語言指令。從而,當有一個語句引用在源程序中的主文件中定義的類時,在中間編碼被變換成機器語言指令之後對應於該語句的中間編碼變成優化處理的目標,因此,中間編碼可以與附近的機器語言指令一起被優化。另外,由於編譯程序不僅由編譯程序自身的功能性能執行優化(優化處理)而且與主文件中的定義相結合來執行優化,所以編譯程序可以增加作為優化目標的語句並提高優化水平。這裡,可接受的是該類定義一個定點類型,並且,在檢測子步驟中,撿測使用定點類型數據的中間編碼,並且,仍然可接受的是在類中的方法定義了以定點類型數據為目標的運算符,在檢測子步驟中,檢測是基於以一個運算為目標的一個運算符和數據類型集合是否適合方法中的定義來執行的,以及,在替代步驟中,其運算符和數據類型的集合適合定義的中間編碼被用一個對應的機器語言指令來替代。從而,由於由主文件定義的定點類型和運算符通過編譯程序與普通類型類似地通過簡單地在源程序中包括主文件而與普通類型類似地被變換成對應的中間編碼和機器語言指令,所以用戶可以聲明和使用對應於專用於目標處理器的定點模式的類型。此外,依據本發明的編譯程序包括在源程序中包括的主文件和將源程序翻譯成機器語言程序的編譯程序;在主文件中定義一個函數(flmction);編譯程序包括分析程序步驟,分析源程序;中間編碼變換步驟,將分析的源程序變換成中間編碼;優化步驟,優化變換的中間編碼;以及,代碼產生步驟,將優化的中間編碼變換成機器語言指令,其中,中間編碼變換步驟包括檢測子步驟,檢測中間編碼中的一個是否引用在主文件中定義的函數;以及,替代子步驟,當檢測到中間編碼時,用一個對應的機器語言指令替代中間編碼,以及,在優化步驟中,優化中間編碼,中間編碼包括在替代子步驟中替代中間編碼的機器語言指令。從而,當有一個語句引用在源程序中的主文件中定義的函數(內置函數)時,在中間編碼被變換成由主文件定義的機器語言指令之後,對應於該語句的中間編碼變成優化處理的目標,因此,中間編碼可以與附近的機器語言指令一起被優化。另外,當用戶想要使用專用於處理器的高函數指令(high-functional)時,他僅僅需要描述出主文件被包括在源程序中並且在源程序中調用所需要的內置函數。換句話說,將他從利用彙編程序指令編碼中釋放出來。如上所述,釆用依據本發明的編譯程序,高效地產生目標處理器所執行的高函數和專用指令;以高水平執行優化;以及,通過主文件的靈活響應、例如函數擴展變為可能,因此,編譯程序的實用價值非常高,尤其是作為用於需要代碼大小和執行速度上的嚴格說明的媒體處理應用的開發工具。應該注意,本發明不僅可以實現為類似這個的編譯程序,也可以實現為採用在用於編譯程序的程序中包括的步驟作為步驟的編譯程序裝置和其中記錄有特徵化的編譯程序或主文件的計算機可讀記錄介質。然後,無須說明的是,類似這些的程序和數據文件可以通過諸如CD-ROM的記錄介質或諸如網際網路的傳輸媒介被廣泛地分布。作為關於這個申請的技術背景的進一步的信息,在2002年8月2曰申請的日本專利申請No.2002-33668在這裡被包含來作為參考。從下面結合附圖的描述中,本發明的這些和其他目的、優點和特徵將變得明顯,其中附圖顯示了本發明的一個具體實施例。在附圖中圖1是顯示依據本發明的編譯程序的目標處理器的示意方框圖。圖2是顯示處理器的算術和邏輯/比較運算單元的示意圖。圖3是顯示處理器的桶形移位器的配置的方框圖。圖4是顯示處理器的變換器的配置的方框圖。圖5是顯示處理器的除法器的配置的方框圖。圖6是顯示處理器的乘積運算單元的乘法/求和的配置的方框圖。圖7是顯示處理器的指令控制單元的配置的方框圖。圖8是顯示處理器的通用寄存器(R0R31)的配置的方框圖。圖9是顯示處理器的連接寄存器(LR)的配置的示意圖。圖IO是顯示處理器的分支寄存器(TAR)的配置的示意圖。圖11是顯示處理器的程序狀態寄存器(PSR)的配置的示意圖。圖12是顯示處理器的條件標誌寄存器(CFR)的配置的示意圖。圖13A和13B是顯示處理器的累加器(M0,Ml)的配置的示意圖。圖14是顯示處理器的程序計數器(PC)的配置的示意圖。圖15是顯示處理器的PC保存寄存器(IPC)的配置的示意圖。圖16是顯示處理器的PSR保存寄存器(IPSR)的配置的示意圖。圖17是顯示處理器的流水線行為的時序圖。圖18是顯示在執行一個指令時的處理器的流水線行為的每個階段的時序圖。圖19是顯示處理器的並行行為的示意圖。圖20是顯示由處理器執行的指令的格式的示意圖。圖21是解釋一個屬於類別"ALUadd(加法)系統"的指令的示意圖。圖22是解釋一個屬於類別"ALUsub(減法)系統"的指令的示意圖。圖23是解釋一個屬於類別"ALUlogic(邏輯運算)系統等"的指令的示意圖。圖24是解釋一個屬於類別"CMP(比較運算)系統"的指令的示意圖。圖25是解釋一個屬於類別"mul(乘法)系統"的指令的示意圖。圖26是解釋一個屬於類別"mac(乘積和運算)系統"的指令的示意圖。圖27是解釋一個屬於類別"msu(乘積差)系統"的指令的示意圖。圖28是解釋一個屬於類別"MEMld(從存儲器裝入)系統"的指令的示意圖。圖29是解釋一個屬於類別"MEMstore(存儲在存儲器中)系統"的指令的示意圖。圖30是解釋一個屬於類別"BRA(分支)系統"的指令的示意圖。圖31是解釋一個屬於類別"BSasl(算術桶形移位)系統等"的指令的示意圖。圖32是解釋一個屬於類別"BSlsr(邏輯桶形移位)系統等"的指令的示意圖。圖33是解釋一個屬於類別"CNVvaln(算術變換)系統"的指令的示意圖。圖34是解釋一個屬於類別"CNV(普通變換)系統"的指令的示意圖。圖35是解釋一個屬於類別"SATvlpk(飽和處理)系統"的指令的示意圖。圖36是解釋一個屬於類別"ETC(等等)系統"的指令的示意圖。圖37是顯示依據本發明的編譯程序的配置的功能方框圖。圖38是顯示在運算符定義文件中的清單的一部分的示意圖。圖39是顯示在運算符定義文件中的清單的一部分的示意圖。圖40是顯示在運算符定義文件中的清單的一部分的示意圖。圖41是顯示在運算符定義文件中的清單的一部分的示意圖。圖42是顯示在運算符定義文件中的清單的一部分的示意圖。圖43是顯示在運算符定義文件中的清單的一部分的示意圖。圖44是顯示在運算符定義文件中的清單的一部分的示意圖。圖45是顯示在運算符定義文件中的清單的一部分的示意圖。圖46是顯示在運算符定義文件中的清單的一部分的示意圖。圖47是顯示在運算符定義文件中的清單的一部分的示意圖。圖48是顯示在運算符定義文件中的清單的一部分的示意圖。圖49是顯示在運算符定義文件中的清單的一部分的示意圖。圖50是顯示在運算符定義文件中的清單的一部分的示意圖。圖51是顯示在運算符定義文件中的清單的一部分的示意圖。圖52是顯示在運算符定義文件中的清單的一部分的示意圖。53是顯示在運算符定義文件中的清單的一部分的示意圖。圖54是顯示在運算符定義文件中的清單的一部分的示意圖。圖55是顯示在運算符定義文件中的清單的一部分的示意圖。圖56是顯示在運算符定義文件中的清單的一部分的示意圖。圖57是顯示在運算符定義文件中的清單的一部分的示意圖。圖58是顯示在運算符定義文件中的清單的一部分的示意圖。圖59是顯示在運算符定義文件中的清單的一部分的示意圖。圖60是顯示在運算符定義文件中的清單的一部分的示意圖。圖61是顯示在運算符定義文件中的清單的一部分的示意圖。圖62是顯示在運算符定義文件中的清單的一部分的示意圖。圖63是顯示在運算符定義文件中的清單的一部分的示意圖。圖64是顯示在運算符定義文件中的清單的一部分的示意圖。圖65是顯示在運算符定義文件中的清單的一部分的示意圖。圖66是顯示在運算符定義文件中的清單的一部分的示意圖。圖67是顯示在運算符定義文件中的清單的一部分的示意圖。圖68是顯示在運算符定義文件中的清單的一部分的示意圖。圖69是顯示在內置函數定義文件中的清單的一部分的示意圖。圖70是顯示在內置函數定義文件中的清單的一部分的示意圖。圖71是顯示在內置函數定義文件中的清單的一部分的示意圖。圖72是顯示在內置函數定義文件中的清單的一部分的示意圖。圖73是顯示機器語言指令替代單元的行為的流程圖。圖74是顯示優化單元的變元優化單元的行為的流程圖。圖75是顯示一個算術樹以解釋優化單元的類型變換優化單元的行為的示意圖。圖76是顯示一個樣本程序的例子以解釋等待時間(latency)優化單元的行為的示意圖。圖77是解釋分析程序單元的定點模式切換單元的行為的示意圖。圖78是解釋採用一個類庫(classlibrary)的行為驗證技術的示意圖。具體實施例方式下面釆用附圖詳細解釋依據本發明的本實施例的編譯程序。依據本實施例的編譯程序是一個將以諸如(:(++語言的高級程序語言描述的源程序翻譯成特定處理器(目標)可以執行的機器語言程序的交叉編譯程序,其特徵是它可以指定要產生的機器語言程序的代碼大小和執行時間精密相關的優化的命令。(處理器)首先,採用圖1到圖36解釋依據本實施例的編譯程序的目標處理器的一個例子。作為依據本實施例的編譯程序的目標的處理器例如是一個已經開發的用在AV媒體信號處理
技術領域:
的通用處理器,並且可執行指令與普通微計算機相比具有更高的並行性。圖1是顯示本處理器的示意方框圖。處理器1是一個運算(opentional)裝置,其字長度是32位(一個字),由指令控制單元10、解碼單元20、寄存器文件30、運算單元40、1/F單元50、指令存儲器單元60、數據存儲器單元70、擴充寄存器單元80和I/O接口單元90組成。運算單元40包括算術和邏輯/比較運算單元4143、乘法/乘積和運算單元44、桶形移位器45、除法器46和變換器47來用於執行SIMD指令。乘法/乘積和運算單元44能夠處理最大65位的累加以使得不降低位精度。乘法/乘積和運算單元44還能夠與在算術和邏輯/比較運算單元41~43的情況中一樣執行SIMD指令。此外,處理器1能夠在最大三個數據單元上並行執行算術和邏輯/比較運算指令。圖2是顯示算術和邏輯/比較運算單元4143的示意圖。算術和邏輯/比較運算單元4143中的每一個由ALU單元41a、飽和處理單元41b和標誌單元41c組成。ALU單元41a包括算術運算單元、邏輯運算單元、比較器和TST組成。要支持的運算數據的位寬度是8位(一個字節。此時,並行使用四個運算單元)、16位(半個字。此時,並行使用兩個運算單元)和32位(一個字。此時,使用所有運算單元處理32位數據)。對於算術運算的結果,標誌單元41c等檢測一個溢出並產生一個條件標誌。對於運算單元、比較器和TST中的每一個的結果,執行算術右移、由飽和處理單元41b進行的飽和、最大/最小值的檢測、絕對值產生處理。圖3是顯示桶形移位器45的配置的方框圖。桶形移位器45由選擇器45a和45b、高位移位器45c、低位移位器45d和飽和處理單元45e組成執行數據的算術移位(在2的補數系統中的移位)或數據的邏輯移位(無符號移位)。通常,32位或64位數據被輸入到桶形移位器45或從桶形移位器45輸出。存儲在寄存器30a和30b中的目標數據的移位量由另一個寄存器指定或根據其立即值指定。對於數據執行左63位和右63位的範圍中的算術或邏輯移位,然後以輸入位長度輸出。桶形移位器45能夠響應於一個SIMD指令移動8-、16-、32-和64-位數據。例如,桶形移位器45可以並行移位四條8位數據。執行在2的補數系統中移位的算術移位來用於在加法和減法時對準小數點,以及用於乘以2的冪(2,2的2"欠冪,2的-l"欠冪)和其他目的。圖4是顯示變換器47的配置的方框圖。變換器47由飽和塊(SAT)47a、BSEQ塊47b、MSKGEN塊47c、VSUMB塊47d、BCNT塊47e和IL塊47f組成。飽和塊(SAT)47a對輸入數據執行飽和處理。具有用於32位數據的飽和處理的兩個塊使得能夠支持一個對兩個數據元素並行執行的SIMD指令。BSEQ塊47b從MSB開始對連續的0或1計數。MSKGEN塊47c將一個指定的位段輸出為1,將其他位輸出為0。VSUMB塊47d將輸入數據分成指定位寬度,並輸出其總和。BCNT塊47e對輸入數據中指定為1的位數計數。IL塊47f將輸入數據分成指定位寬度,並輸出從交換每個數據塊的的位置產生的值。圖5是顯示除法器46的配置的方框圖。使一個被除數是64位,一個除數是32位,除法器46輸出32位分別作為商和模數。涉及34個周期來用於獲得商和模數。除法器46可以處理有符號的和無符號的數據。然而,應該注意,對於用作被除數和除數的數據的符號的存在/不存在作出相同的設置。並且,除法器46具有輸出一個溢出標誌和一個0除法標誌的能力。圖6是顯示乘法/乘積和運算單元44的配置的方框圖。乘法/乘積和運算單元44由兩個32位乘法器(MUL)44a和44b、三個64位加法器(加法器)44c44e、選擇器44f和飽和處理單元(飽和)44g組成,執行下面的乘法和乘積和32X32位有符號乘法、乘積和與乘積差;32X32位無符號乘法;在兩個數據元素上並行執行的16X16位有符號乘法、乘積和與乘積差;以及在兩個數據元素上並行執行的32X16位有符號乘法、乘積和與乘積差;在以整數和定點格式的數據(hl、h2、wl和w2)上執行上面的運算。並且,對這些運算的結果進行四捨五入和飽和。圖7是顯示指令控制單元10的配置的方框圖。指令控制單元10由指令髙速緩存10a、地址管理單元10b、指令緩衝器10c10e、跳轉緩衝器10f和旋轉單元(旋轉)10g組成,在平常時間和在分支點發出指令。具有三個128位指令緩衝器(指令緩衝器10c10e)使得能夠支持最大數目的並行指令執行。關於分支處理,指令控制單元10通過跳轉緩衝器10f和其他在執行一個分支(settar指令)之前事先在下面描述的TAR寄存器中存儲一個分支目的地址。分支釆用存儲在TAR寄存器中的分支目的地址來執行。應該注意,處理器1是一個採用VLIW體系結構的處理器。VLIW體系結構是一種允許多個指令(例如,裝入,存儲,運算和分支)被存儲在一單個指令字中並且這樣的指令將在一次全部執行的體系結構。通過由程式設計師將可以並行執行的一組指令描述為一單個發行組(issuegroup),這種發行組可以被並行執行。在這個說明書中,發行組的分隔符由";;"指示。下面描述了符號例子。(例子l)movrl,0x23;;這個指令描述指示只有一個指令"mov"應該被執行。(例子2)movrl,0x38addr0,rl,r2subr3,rl,r2;;這些指令描述指示三個指令"mov"、"add"和"sub"應該被並行執行。指令控制單元10識別一個發行組並將其發送到解碼單元20。解碼單元20對發行組中的指令解碼,並控制用於執行這樣的指令所需的資源。接著,對於在處理器l中包括的寄存器給出解釋。下面的表1列出了處理器1的一組寄存器。complextableseeoriginaldocumentpage17complextableseeoriginaldocumentpage18圖8是顯示通用寄存器(R0R31)30a的配置的示意圖。通用寄存器(R0R31)30a是構成一個要執行的任務的上下文的主要部分並存儲數據或地址的一組32位寄存器。應該注意,通用寄存器R30和R31分別通過硬體用作全局指針和堆棧指針。圖9是顯示連接寄存器(LR)30c的配置的示意圖。與這個連接寄存器(LR)30c相連,處理器1還具有一個在圖中未顯示的保存寄存器(SVR)。連接寄存器(LR)30c是一個用於在函數調用時存儲返回地址的32位寄存器。應該注意,保存寄存器(SVR)是一個用於在函數調用時保存條件標誌寄存器的條件標誌(CFR.CF)的16位寄存器。與在後面將解釋的分支寄存器(TAR)的情況中一樣,連接寄存器(LR)30c還被用於提高循環速度的目的。作為較低的l位總是讀出0,但在寫操作時必須寫入O。例如,在執行"調用"(brl,jmpl)指令時,處理器1將一個返回地址保存在連接寄存器(LR)30c中,並將一個條件標誌(CFR.CF)保存在保存寄存器(SVR)中。在執行"jmp"指令時,處理器1從連接寄存器(LR)30c取出返回地址(分支目的地址),並返回一個程序計數器(PC)。此外,在執行"ret(jmpr)"指令時,處理器1從連接寄存器(LR)30c取出分支目的地址(返回地址),並將其存儲到程序計數器(PC)。此外,處理器l從保存寄存器(SVR)取出條件標誌,以便將其存儲(再存入)到條件標誌寄存器(CFR)32中的條件標誌區域CFR.CF。圖IO是顯示分支寄存器(TAR)30d的配置的示意圖。分支寄存器(TAR)30d是一個用於存儲分支目標地址的32位寄存器,主要用於提高循環速度的目的。作為較低的l位總是讀出0,但在寫操作時必須寫入0。例如,當執行"jmp"和"jloop"指令時,處理器1從分支寄存器(TAR)30d取出一個分支目的地址,並將其存儲在程序計數器(PC)中。當由存儲在分支寄存器(TAR)30d中的地址所指示的指令被存儲在分支指令緩衝器中時,分支損失(penalty)將為0。通過將一個循環的頂端地址存儲在分支寄存器(TAR)30d中,可以實現循環速度的提高。圖11是顯示程序狀態寄存器(PSR)31的配置的示意圖。程序狀態寄存器(PSR)31構成一個要執行的任務的上下文的主要部分,是一個用於存儲下面的處理器狀態信息的的32位寄存器位SWE:指示VMP(虛擬多處理器)到LP(邏輯處理器)的切換是被允許還是禁止。"O"指示到LP的切換被禁止,"1"指示到LP的切換被允許。位FXP:指示一個定點模式。"0"指示模式0(在其中在假設在MSB和從MSB開始的第一位之間有小數點的情況下執行一個算術運算的模式。此後,也稱為"—1系統"),"1"指示模式1(在其中在假設在從MSB開始的第一位和從MSB開始的第二位之間有小數點的情況下執行一個算術運算的模式。此後,也稱為"一2系統")。位IH:是一個中斷處理標誌,指示可屏蔽的中斷處理是否是正在進行的。"l"指示有一個正在進行的中斷處理,"0"指示沒有正在進行的中斷處理。在一個中斷出現時這個標誌被自動設置。這個標誌用於對在程序中的處理器響應於"rti"指令而返回的一點處正在進行中斷處理還是程序處理作出區分。位EH:是一個指示錯誤或NMI是否正在被處理的標誌。"0"指示錯誤/NMI中斷處理不是正在進行的,"1"指示錯誤/NMI中斷處理是正在進行的。如果在EH-1時出現不同步錯誤或NMI,這個標誌被屏蔽。同時,當VMP被允許時,VMP的板切換被屏蔽。位PL[1:0]:指示一個特權級。"00"指示特權級0,即處理器抽象級,"01"指示特權級1(不可設置),"10"指示特權級2,即系統程序級,"11"指示特權級3,即用戶程序級。位LPIE3:指示LP專用中斷3是被允許還是禁止。"1"指示一個中斷被允許,"0"指示一個中斷被禁止。位LPIE2:指示LP專用中斷2是被允許還是禁止。"1"指示一個中斷被允許,"0"指示一個中斷被禁止。位LP正1:指示LP專用中斷1是被允許還是禁止。"1"指示一個中斷被允許,"0"指示一個中斷被禁止。位LPIE0:指示LP專用中斷0是被允許還是禁止。"1"指示一個中斷被允許,"0"指示一個中斷被禁止。位AEE:指示一個未對準異常是被允許還是禁止。"l"指示一個未對準異常被允許,"0"指示一個未對準異常被禁止。位IE:指示一個級別中斷是被允許還是禁止。"l"指示一個級別中斷被允許,"0"指示一個電平中斷被禁止。位IM[7:0]:指示一個中斷屏蔽,並且範圍是從級0~7,每個都能夠在其自己的級別被屏蔽。級O是最高級。在未由任何IM屏蔽的中斷請求中,只有具有最高級別的中斷請求被處理器l接受。當一個中斷請求被接受時,在所接受的級別之下的級別被硬體自動屏蔽。IM[O]代表級0的屏蔽,IM[1]代表級1的屏蔽,IM[2]代表級2的屏蔽,IM[3]代表級3的屏蔽,IM[4]代表級4的屏蔽,IM[5]代表級5的屏蔽,IM[6]代表級6的屏蔽,IM[7]代表級7的屏蔽。保留指示一個保留位。總是讀出O。在寫入時必須寫O。圖12是顯示條件標誌寄存器(CFR)32的配置的示意圖。條件標誌寄存器(CFR)32構成一個要執行的任務的上下文的主要部分,是一個由條件標誌、運算標誌、向量條件標誌、運算指令位位置說明欄位和SIMD數據對準信息欄位組成的32位寄存器。位ALN[1:0]:指示一個對準模式。設置"valnvc"指令的對準模式。位BPO[4:0]:指示一個位位置。它用在需要位位置說明的指令中。位VC0VC3:是向量條件標誌。從LSB側上的一個字節或半個字開始到MSB側,每個對應於從VCO到VC3的範圍內的一個標誌。位OVS:是一個溢出標誌(總計)。它是在飽和和溢出的檢測基礎上設置的。如果未檢測到,保持在執行指令之前的一個值。這個標誌的清除需要由軟體實現。位CAS:是一個進位標誌(總計)。它當在"addc"指令下出現一個進位時或當在"subc"指令下出現一個借位時被設置。如果在"addc"指令下未出現進位時或在"subc"指令下未出現借位,保持在執行指令之前的一個值。這個標誌的清除需要由軟體實現。位C0C7:是條件標誌,指示一個帶有條件的執行指令中的條件(TRUE/FALSE)。帶有條件的執行指令的條件和位C0C7之間的對應關係由指令中包括的判定位來決定。應該注意,標誌C7的值總是1。對標誌C7作出的FALSE條件的反映(寫入O)被忽略。保留指示一個保留位。總是讀出O。在寫入時必須寫入O。圖13A和13B是顯示累加器(MO,Ml)30b的配置的示意圖。這種累加器(MO,Ml)30b構成一個要執行的任務的上下文的主要部分,由圖13A所示的32位寄存器MH0-MH1(用於乘法和除法/乘積和(高32位)的寄存器)和圖13B所示的32位寄存器ML0-ML1(用於乘法和除法/乘積和(低32位)的寄存器)組成。寄存器MH0-MH1在一個乘法指令時用於存儲運算結果的高32位,而在一個乘積和指令時用作累加器的高32位。此外,在處理一個位流的情況下,寄存器MH0-MH1可以與通用寄存器結合使用。同時,寄存器ML0-ML1在一個乘法指令時用於存儲運算結果的低32位,而在一個乘積和指令時用作累加器的低32位。圖14是顯示程序計數器(PC)33的配置的示意圖。這個程序計數器(PC)33構成一個要執行的任務的上下文的主要部分,是一個保存要執行的指令的地址的32位計數器。圖15是顯示PC保存寄存器(IPC)34的配置的示意圖。這個PC保存寄存器(IPC)34構成一個要執行的任務的上下文的主要部分,是一個32位寄存器。圖16是顯示PSR保存寄存器(IPSR)35的配置的示意圖。這個PSR保存寄存器(IPSR)35構成一個要執行的任務的上下文的主要部分,是一個用於保存程序狀態寄存器(PSR)31的32位寄存器。作為對應於一個保留位的一部分總是讀出0,但在寫入時必須寫入0。接著,對於處理器l的存儲空間給出解釋,這是依據本實施例的編譯程序的目標。例如,在處理器1中,帶有4GB容量的線性存儲空間被分成32段,並將一個指令SRAM(靜態RAM)和一個數據SRAM分配給128MB段。釆用一個128MB段用作一個塊,在SAR(SRAM區域寄存器)中設置要訪問的目標塊。當所訪問的地址是SAR中設置的段時,對指令SRAM/數據SRAM作出直接訪問,但當這樣的地址不是在SAR中設置的段時,訪問請求應該被發到總線控制器(BCU)。片上存儲器(OCM)、外部存儲器、外部設備、1/0埠等連接到BUC。從這些設備的數據讀取和向這些設備的數據寫入是可能的。圖17是顯示處理器1的流水線行為的時序圖,這是依據本實施例的編譯程序的目標。如圖所示,處理器1的流水線基本上包括下面五個階段指令取出;指令分配(調度);解碼;執行和寫入。圖18是顯示在執行一個指令時的處理器1的流水線行為的每個階段的時序圖。在指令取出階段,對由程序計數器(PC)33所指定的地址所指示的指令存儲器作出訪問,並將指令傳送到指令緩衝器10c10e等。在指令分配階段,實現響應於分支指令的分支目的地址信息的輸出、輸入寄存器控制信號的輸出、可變長度指令的分配,隨後將指令傳送到指令寄存器(IR)。在解碼階段,將IR輸入到解碼單元20,並輸出一個運算單元控制信號和一個存儲器訪問信號。在執行階段,執行一個運算,運算的結果被輸出到數據存儲器或通用寄存器(R0R31)30a。在寫入階段,將作為數據傳送的結果而獲得的值以及運算結果存儲在通用寄存器中。作為依據本實施例的編譯程序的目標的處理器1的VLIW結構允許在最多三個數據元素上並行執行上面的處理。因此,處理器1以圖19所示的定時並行執行圖18所示的行為。接著,對於由具有上述配置的處理器1執行的一組指令給出解釋。表35列出了要由作為依據本實施例的編譯程序的目標的處理器1執行的分類的指令。[表3]類別運算單元指令運算代碼存儲器傳送指令(裝入)MId,ldh,ldhu,ldb,ldbu,ldp,ldhp,ldbp,ldbh,ldbuh,ldbhp,ldbuhp存儲器傳送指令(存儲)Mst,sth,stb,stp,sthp,stbp,stbh,stbhp存儲器傳送指令(其它)Mdpref,ldstb外部寄存器傳送指令Mrd,rde,wt,wte分支指令Bbr,brl,call,jmp,jmpl,jmpr,ret,jmpf,jloop,setbb,setlr,settar軟體中斷指令Brti,pi0,piOl,pil,pill,pi2,pi21,pi3,pi31,pi4,pi41,pi5,pi51,pi6,pi61,pi7,pi71,scO,scl,sc2,sc3,sc4,sc5,sc6,sc7VMP/中斷控制指令Bintd,inte,vmpsleep,vmpsus,vmpswd,vmpswe,vmpwait算術運算指令Aabs,absvh,absvw,add,addarvw,addc,addmsk,adds,addsr,addu,addvh,addvw,neg,negvh,negvw,rsub,siadd,s2add,sub,subc,submsk,subs,subvh,subvw,max,min邏輯運算指令Aand,andn,or,sethi,xor,not比較指令AcmpCC,cmpCCa,cmpCCn,cmpCCo,tstn,tstna,tstnn,tstno,tstz,tstza,tstzn,tstzocomplextableseeoriginaldocumentpage26complextableseeoriginaldocumentpage27complextableseeoriginaldocumentpage27complextableseeoriginaldocumentpage28complextableseeoriginaldocumentpage29應該注意,上面的表中的"運算單元"指的是用在各個指令中的運算單元。更具體地,"A"代表ALU指令,"B"代表分支指令,"C"代表變換指令,"DIV"代表除法指令,"DBGM"代表調試指令,"M"代表存儲器訪問指令,"S1"和"S2"代表移位指令,"XI"和"X2"代表乘法指令。圖20是顯示由處理器1執行的指令的格式的示意圖。下面描述圖中的首字母縮寫詞代表什麼含義"P"是判定(執行條件指定八個條件標誌C0C7中的一個);"OP"是運算代碼欄位;"R"是寄存器欄位;"I"是立即欄位;"D"是位移欄位。圖21~36是解釋由處理器1執行的指令的概略功能的示意圖。更具體地,圖21解釋一個屬於類別"ALUadd(加法)系統"的指令;圖22解釋一個屬於類別"ALUsub(減法)系統"的指令;圖23解釋一個屬於類別"ALUlogic(邏輯運算)系統等"的指令;圖24解釋一個屬於類別"CMP(比較運算)系統"的指令;圖25解釋一個屬於類別"mul(乘法)系統"的指令;圖26解釋一個屬於類別"mac(乘積和運算)系統"的指令;圖27解釋一個屬於類別"msu(乘積差)系統"的指令;圖28解釋一個屬於類別"MEMld(從存儲器裝入)系統"的指令;圖29解釋一個屬於類別"MEMstore(存儲在存儲器中)系統"的指令;圖30解釋一個屬於類別"BRA(分支)系統"的指令;圖31解釋一個屬於類別"BSasl(算術桶形移位)系統等"的指令;圖32解釋一個屬於類別"BSasl(邏輯桶形移位)系統等"的指令;圖33解釋一個屬於類別"CNVvaln(算術變換)系統"的指令;圖34解釋一個屬於類別"CNV(普通變換)系統"的指令;圖35解釋一個屬於類別"SATvlpk(飽和處理)系統"的指令;圖36解釋一個屬於類別"ETC(等等)系統"的指令。圖20是顯示由處理器1執行的指令的格式的示意圖。下面描述圖中的首字母縮寫詞代表什麼含義"P"是判定(執行條件指定八個條件標誌C0C7中的一個);"OP"是運算代碼欄位;"R"是寄存器欄位;"I"是立即欄位;"D"是位移欄位。圖21-36是解釋由處理器1執行的指令的概略功能的示意圖。更具體地,圖21解釋一個屬於類別"ALUadd(加法)系統"的指令;圖22解釋一個屬於類別"ALUsub(減法)系統"的指令;圖23解釋一個屬於類別"ALUlogic(邏輯運算)系統等"的指令;圖24解釋一個屬於類別"CMP(比較運算)系統"的指令;圖25解釋一個屬於類別"mul(乘法)系統"的指令;圖26解釋一個屬於類別"mac(乘積和運算)系統"的指令;圖27解釋一個屬於類別"msu(乘積差)系統"的指令;圖28解釋一個屬於類別"MEMld(從存儲器裝入)系統"的指令;圖29解釋一個屬於類別"MEMstore(存儲在存儲器中)系統"的指令;圖30解釋一個屬於類別"BRA(分支)系統"的指令;圖31解釋一個屬於類別"BSasl(算術桶形移位)系統等"的指令;圖32解釋一個屬於類別"BSasl(邏輯桶形移位)系統等"的指令;圖33解釋一個屬於類別"CNVvaln(算術變換)系統"的指令;圖34解釋一個屬於類別"CNV(普通變換)系統"的指令;圖35解釋一個屬於類別"SATvl沐(飽和處理)系統"的指令;圖36解釋一個屬於類別"ETC(等等)系統"的指令。下面描述這些圖中的每列的含義"SIMD"指示一個指令的類型(在SISD(SINGLE)和SMD之間區分);"大小"指示要作為運算目標的單個運算數的大小;"指令"指示一個運算的運算代碼;"運算數"指示一個指令的運算數;"CFR"指示條件標誌寄存器中的改變;"PSR"指示處理器狀態寄存器中的改變;"典型行為"指示一個行為的概述;"運算單元"指示一個要使用的運算單元;以及,"3116"指示一個指令的大小。下面解釋涉及用在後面將描述的具體例子中的主要指令的處理器1的行為。andnRc,Ra,Rb實現Ra和Rb之間的反轉邏輯AND並將其存儲在Rc中。aslRb,Ra,15執行向Ra左移立即值(15)中的位數的算術移位。andRb,Ra,18實現Ra和值(18)之間的邏輯AND並將其存儲在Rb中。bseq0Rb,Ra對從Ra的MSB開始的連續的0計數並將其存儲在Rb中。bseqlRb,Ra對從Ra的MSB開始的連續的1計數並將其存儲在Rb中。bseqRb,Ra對從Ra的MSB之下1位開始的連續的符號位計數並將其存儲在Rb中。當Ra是O時,輸出0。bcntlRb,Ra對Ra的1的個數計數並將其存儲在Rb中。extrRc,Ra,Rb由Rb指定一個位的位置,提取Ra的內容一部分,符號擴展並將其存儲在Rc中。extruRc,Ra,Rb由Rb指定一個位的位置,提取Ra的內容一部分,不帶符號擴展地將其存儲在Rc中。fmulhhMm,Rc,Ra,Rb將Ra、Rb和Rc作為16位值來處理,將Mm(用於乘法的累加數)作為32位值來處理。將Ra和Rb與一定點相乘。將結果存儲在Mm和Rc中。當結果不能由有符號的32位表示時,使其飽和。fmulhwMm,Rc,Ra,Rb將Ra和Rb作為16位值來處理,將Mm和Rc作為32位值來處理。通過一定點將Ra和Rb相乘。將結果存儲在Mm和Rc中。當結果不能由有符號的32位表示時,使其飽和。mulMm,Rc,Ra,Rb將Ra和Rb與一整數相乘。將結果存儲在Mm和Rc中。macMm,Rc,Ra,Rb,Mn將Ra和Rb與一整數相乘並將其加到Mn。將結果存儲在Mm和Rc中。movRb,Ra將Ra傳送到Rb。orRc,Ra,Rb實現Ra和Rb之間的邏輯OR並將其存儲在Rc中。rdeCO:Cl,Rb,(Ra)讓Ra是一個外部寄存器數,將外部寄存器的值讀入Rb。將讀取的成功和失敗分別輸出到C0和C1(條件標誌)。在失敗的情況下,出現一個擴展寄存器錯誤的異常。wteCO:Cl,(Ra),Rb讓Ra是一個外部寄存器數,將Rb的值寫入外部寄存器。將寫入的成功和失敗分別輸出到C0和C1。在失敗的情況下,出現一個擴展寄存器錯誤的異常。vaddhRc,Ra,Rb以半個字向量格式對待每個寄存器。將Ra禾PRb相力B(SIMD直接)。(一個編譯程序)接著,解釋依據本實施例的、其目標是上述處理器1的一個編譯程序。圖37是顯示依據本實施例的編譯程序100的配置的功能方框圖。這個編譯程序100是一個將以諸如>){<>指令指定單元>>}(<>);。這裡,"裝入表達式的清單"是一個描述裝入表達式的部分;"裝入表達式"是一個存儲C語言中的變量和諸如四個運算的表達式的結果的表達式;它被描述為類似"寄存器指定標識符=賦值表達式";以及,它意味著在右邊指示的值被傳送到在左邊指示的標識符。"存儲表達式的清單"是一個描述存儲表達式的部分;"存儲表達式"被描述為類似"單項式=寄存器指定標識符";以及,它意味著將左邊的由單項式表示的值賦給由寄存器指定標識符表示的寄存器的值。分析程序單元110是一個提取保留字(關鍵字)等的前處理單元;實現作為編譯的目標的(包含要包括的主文件的)源程序101的詞彙分析;以及,除了普通編譯程序具有的分析函數之外,還具有一個支持在定點上的模式的切換的定點模式切換單元111。當定點模式切換單元111在源程序101中檢測到一個保存和恢復定點模式的編譯指示說明(例如,"pragma—save—fxpmodefunc")時,它產生一個保存和恢復處理器1的PSR31的位FXP的機器語言指令。這實現了定點的模式0和模式1中的運算混合的程序設計。應該注意,"編譯指示(或編譯指示說明)"是用戶可以在源程序101中任意指定(放置)的對編譯程序100的指示,是以"#pmgma"開始的字符序列。中間編碼變換單元120是一個將從分析程序單元110傳送的源程序101中的每個語句變換到中間編碼的處理單元,由中間編碼產生單元121和機器語言指令替代單元122組成。中間編碼產生單元121根據一個預定規則變換源程序101中的每個語句。這裡,中間編碼典型地是以函數調用的格式表示的代碼(例如,指示"+(inta,intb)";指示"將一個整數a加到整數b"的代碼)。但中間編碼不僅包含具有函數調用格式的代碼,還包含處理器1的機器語言指令。機器語言指令替代單元122將由中間編碼產生單元121產生的中間編碼中的具有函數調用格式的中間編碼變換成引用運算符定義文件102和內置函數定義文件103的對應的機器語言指令(或機器語言指令序列),將匹配由這些定義文件或內置函數定義的運算符(包括運算的目標數據的類型)的中間編碼變換成遵循(follow)機器語言指令替代單元122在其自身內部具有的一個替代表122a或由這些定義文件定義的彙編程序指令變換成對應的機器語言指令(或機器語言指令序列),並將變換的機器語言指令輸出到優化單元130。這允許優化單元130對這些中間編碼執行各種優化,因為它們不是以內置函數的格式而是以機器語言指令的格式傳到優化單元130。附帶地,替代表122a是一個存儲對應於事先保留的運算符的運算和函數的機器語言指令(機器語言指令序列)的表。另外,機器語言指令替代單元22輸出來自從中間編碼產生單元121傳送的中間編碼的機器語言指令而不經過優化單元130。優化單元130是一個處理單元,通過執行諸如合併指令、去除冗餘、分類指令和分配寄存器的處理,對來自從中間編碼變換單元120輸出的中間編碼的機器語言指令執行由用戶選擇的下面提到的三種類型的優化中的一種(1)提高執行速度具有更高優先級的優化;(2)減小代碼大小具有更高優先級的優化;以及(3)提高執行速度和減小代碼大小的優化。優化單元130具有一個除了普通優化之外還執行對本編譯程序100的特有優化(例如"循環展開"、"如果變換"和"成對存儲器訪問指令的產生")的處理單元(變元優化單元131、類型變換優化單元132和等待時間優化單元133)。變元優化單元131是一個根據內置函數(例如,extr,extm)的變元產生適當的指令或序列(算法)的處理單元。例如,當所有變元是常數時,變元優化單元131產生其運算數是通過保持在常數而獲得的常數值的機器語言指令;當變元的一部分是常數時,產生其運算數是立即值的機器語言指令;當所有變元是變量時,產生其運算數是寄存器的一個指令序列。類型變換優化單元132是一個基於在源程序101中的一個特定記號使得在不同類型之間的運算更有效的處理單元。例如,當希望一個16位數據和另一個16位數據的乘法結果被保持為一個32位數據吋,如果在源程序101中有特定記號,類型變換優化單元132產生一個以這樣一種類型的變換執行乘法的機器語言指令("fmulhw"等)。等待時間優化單元133基於在源程序101中結合的一個彙編程序指令中的關於等待時間的指示(周期數的指定),對準機器語言指令,以便一特定部分或一特定行動只花費指定周期數的執行時間。這使得一個程式設計師不必要完成他插入所需數目的"nop(空操作)"指令的常規工作,並使得能夠通過插入其他機器語言指令而不是"nop"指令來執行優化。附帶地,"循環展開"是通過擴展循環的迭代(重複)並產生一對存儲器訪問指令(ldp/stp/ldhp/sthp等)以便同時執行多個迭代來提高並行執行循環的可能性的優化。另外,"如果轉換"是通過為一個帶有條件的執行機制產生一個指令(只有在指令中包括的條件(判定)匹配處理器1的狀態(條件標誌)時才執行的指令)來去除分支結構的優化。此外,"一對存儲器訪問指令的產生"是以一對寄存器(兩個連續的寄存器)作為目標產生所述一對存儲器訪問指令(ldp/stp/ldhp/sthp等)的優化。此外,優化單元130輸出來自函數調用格式的中間編碼的、不能被擴展的中間編碼,而不經過代碼產生單元140,因為不可能在上述機器語言指令級執行優化處理。代碼產生單元140參考內部保存的翻譯表等產生機器語言程序105,代替從優化單元130輸出的所有中間編碼(包括函數調用格式的代碼和優化的機器語言指令)。接著,解釋指示具體例子的如上所述配置的編譯程序100的特徵行為。圖73是顯示機器語言指令替代單元122的行為的流程圖。機器語言指令替代單元122重複下面的過程(l)判斷來自由中間編碼產生單元121產生的中間編碼的函數調用格式的代碼是否匹配由運算符定義文件102定義的運算符(包括運算目標的數據類型)和由內置函數定義文件103定義的函數(步驟S102),以及,當它們匹配時(在步驟S102為是),(2)遵循由機器語言指令替代單元122a在其自身內部具有的替代表122a定義的彙編程序指令和這些定義文件102和103(步驟S100S103),用機器語言指令替代運算符和函數(步驟S102)。更具體地,不同類型之間的類型變換的隱含規則等由運算符定義文件102的定義(由構造符的定義)來規定;定義了下面四種類型的定點"FIX16一1":有符號的16位,小數點在第14位和第15位(MSB)之間,"FIX16—2":有符號的16位,小數點在第13位和第14位之間,"FIX32—1":有符號的32位,小數點在第30位和第31位(MSB)之間,"FIX32—2":有符號的32位,小數點在第29位和第30位之間。因此,機器語言指令替代單元122例如將一個源程序FIX16一1a,b,c;c=a*b;用一個機器語言指令fmulhhmO,Rc,Ra,Rb(定點乘法運算指令)來替代。因此,用戶可以聲明四種類型FIX16—1、FIX16—2、FIX32—1和FIX32一2與一個普通編譯程序的標準類型類似並使用它們。然後,產生的包括相鄰代碼的機器語言指令變為優化單元130中的諸如合併指令、去除冗餘、分類指令和分配寄存器的優化的目標,並且可以被優化。類似地,不同類型之間的類型轉換的隱含規則等由運算符定義文件102的定義(由構造符的定義)來規定;定義了下面四種類型的SIMD指令"VINT8X4";4個並行的8位整數數據,"VINT16X2";2個並行的16位整數數據,"VFIX161X2";2個並行的模式0(—1系統)的16位定點數據,以及"VFIX162X2";2個並行的模式1(一2系統)的16位定點數據。因此,機器語言指令替代單元122例如將一個源程序VINT16X2a,b,c;c=a+b;用一個機器語言指令vaddhRc,Ra,Rb(SIMD加法指令)替代。從而,用戶可以聲明四種類型"VINT8X4"、"VINT16X2"、"VFIX161X2"和"VFIX162X2"與一個普通編譯程序的標準類型類似並使用它們。然後,產生的包括相鄰代碼的機器語言指令變為優化單元130中的諸如合併指令、去除冗餘、分類指令和分配寄存器的優化的目標,並且可以被優化。另外,在內置函數定義文件103中,定義一個可以使用處理器l執行的高級指令的函數(例如,"_abs(a)"等)及其對應的高級指令(例如,一個機器語言指令"absRb,Ra"等)。因此,機器語言指令替代單元122例如將一個源程序b=—abs(a);用一個機器語言指令absRb,Ra來替代。從而,用戶可以通過不以0++語言和彙編程序指令生成而是僅僅調用一個實現準備好的內置函數來實現一個複雜處理。然後,產生的包括相鄰代碼的機器語言指令變為優化單元130中的諸如合併指令、去除冗餘、分類指令和分配寄存器的優化的目標,並且可以被優化。類似地,在內置函數定義文件103中,定義一個可以使用處理器1執行的髙級指令的函數(例如,"—div(a,b)"等)及其對應的高級指令(例如,一個機器語言指令序列"extw,aslp,div"等)。因此,機器語言指令替代單元122例如將一個源程序complexformulaseeoriginaldocumentpage42用一個機器語言指令序列extwMn,Rc,RaaslpMn,Rc,Mn,Rc,15divMHm,Rc,MHn,Rc,Rb.來替代。從而,用戶可以通過不以€++語言和彙編程序指令生成而是僅僅調用一個實現準備好的內置函數來實現一個複雜處理。然後,產生的包括相鄰代碼的機器語言指令變為優化單元130中的諸如合併指令、去除冗餘、分類指令和分配寄存器的優化的目標,並且可以被優化。應該注意,在內置函數定義文件103中列出的內置函數中,(1)被變換成一個機器語言指令的函數,(2)被變換成兩個或更多機器語言指令(一個機器語言指令序列)的函數,以及(3)可以指定不是寄存器分配的目標的資源(例如累加器)的函數的代表性例子如下(1)被變換成一個機器語言指令的內置函數"一bseql(x)":這是檢測從輸入的MSB開始有多少個連續的位0的函數。其格式如下int—bseql(FIX16Jval)〃count1int_bseql(FIX16—2val)〃count1int一bseql(FIX32—1val)〃count1int—bseql(FIX32—2val)〃count1這些函數返回在要計數的"val"中的連續的0的個數(位數)的值。對應於這些函數的機器語言指令被定義在內置函數定義文件103中。"—bs叫0(X)":這是檢測從輸入的MSB開始有多少個連續的位0的函數。其格式如下int_bseqO(FIX16—1val)〃count0int_bseqO(FIX16—2val)〃count0int—bseq0(FIX32—1val)〃count0int_bseqO(FIX32—2val)〃count0這些函數返回在要計數的"val"中的連續的0的個數(位數)的值。對應於這些函數的機器語言指令被定義在內置函數定義文件103中。"—bseql(x)":這是檢測從輸入的MSB開始有多少個連續的位1的函數。其格式如下int一bseql(FIX16—1val)〃count1int—bs叫l(FIX16一2val)〃count1int一bseql(FIX32Jval)〃count1int一bseql(FIX32—2val)〃count1這些函數返回在要計數的"val"中的連續的1的個數(位數)的值。對應於這些函數的機器語言指令被定義在內置函數定義文件103中。"—bseq(x)":這是檢測從輸入的MSB的下一位開始有多少個連續的與MSB具有相同值的位的函數。其格式如下int—bseq(FIX16—1val)int—bs叫(FIX16一2val)int—bseq(FIX32一lval)int—bseq(FIX32—2val)這些函數返回"val"中的標準化的位的個數。對應於這些函數的機器語言指令被定義在內置函數定義文件103中。"—bcntl(x)":這是檢測在輸入的所有位中包括多少位1的函數。其格式如下int—bcntl(FIX16_lval)int—bcntl(FIX16_2val)int一bcntl(FIX32—1val)int一bcntl(FIX32—2val)這些函數返回在要計數的"val"中的1的個數的值。對應於這些函數的機器語言指令被定義在內置函數定義文件103中。"—extr(a,il,i2)":這是提取輸入的預定位位置並進行符號擴展的函數。其格式如下int一extr(FIX16一lvail,intval2,intval3)int一extr(FIX16—2vall,intval2,intval3)int一extr(FIX32—1vall,intval2,intval3)int一extr(FIX32一2vall,intval2,intval3)這些函數返回從位位置val2到位位置val3所指示的vall的位欄位被提取和符號擴展的結果。對應於這些函數的機器語言指令被定義在內置函數定義文件103中。"一extru(a,il,i2)":這是提取輸入的預定位位置並進行零擴展的函數。其格式如下unsignedint一extru(FIX16—1val,intval2,intval3)unsignedint一extru(FIX16—2val,intval2,intval3)unsignedint一extru(FIX32—1val,intval2,intval3)unsignedint_extru(FIX32_2val,intval2,intval3)這些函數返回從位位置val2到位位置val3所指示的vall的位欄位被提取和零擴展的結果。對應於這些函數的機器語言指令被定義在內置函數定義文件103中。(2)被變換成兩個或更多機器語言指令(一個機器語言指令序列)的內置函數"—modulo—add":這是執行模數尋址的地址更新的函數。其格式如下-—modulo一add(void*addr,intimm,intmask,size_tsize,void*base)這裡,每個變元的含義如下addr:更新之前的地址或低位地址(模數部分)imm:相加值(數據的個數)mask:屏蔽的寬度(模數的寬度)size:數據的大小(2的冪)base:基地址(陣列的首部地址)這個函數返回由模數尋址只從地址addr加上相加值imm的結果。對應於這個函數的機器語言指令被定義在內置函數定義文件103中。換句話說,這個函數使用用第二輸入的預定位欄位替代第一輸入的預定位欄位的指令(addmsk)來計算模數尋址。一個用法例子如下:inta呵[MODULO];p=array;for(i=0;i<100;i++){*q++=*pjp=(int*)_modulo_add(p,1,N,sizeof(int),array);這裡,變量MODULO是2的冪(2AN)。在這個用法例子中,陣列的100個單元由MODULO*SIZE字節的對準來定位。"—brev一add":這是執行位反轉尋址的地址更新的函數。其格式如下—brev一add(void*addr,intcnt,intimm,intmask,size_tsize,void*base)這裡,每個變元的含義如下addr:更新之前的地址cnt:位反轉計數器mm:相加值(數據的個數)mask:屏蔽的寬度(反轉的寬度)size:數據的大小(2的冪)base:基地址(陣列的首部地址)這個函數返回由位反轉尋址只從對應於位反轉計數器cnt的地址addr加上相加值mm的結果。對應於這個函數的機器語言指令被定義在內置函數定義文件103中。換句話說,這個函數使用執行到第一輸入的預定位欄位的逐位的位置反轉的指令(mskbrvh)來計算位反轉尋址。一個用法例子如下:intarray[BREV];p=array;for(i=0;i<100;i++){*q++=*p;p=(int*)_brev—add(p,i,1,N,sizeof(int),array);這裡,變量BREV是2的冪(2AN)。在這個用法例子中,陣列的100個單元用BREV*SIZE字節的對準來定位。(3)可以指定不是寄存器分配的目標的資源(例如累加器)的函數在內置函數定義文件103中,除了作為優化中的寄存器分配的目標資源的通用寄存器之外,還準備了(i)是更新不是寄存器分配的目標(是隱含資源)的累加器的運算(乘法和乘積和運算)的以及(ii)可以用一個累加器作為基準類型指定一個臨時變量的內置函數(乘法"一mul"和乘積和運算"一mac")。具體格式分別如下—mul(long&mh,long&ml,FIX161&c,FIX16—1a,FIX16—1b);這個函數將變量a和變量b—起相乘,將作為結果的64位數據的高32位設置到用於乘法的高位累加器MH,將64位數據的低32位設置到用於乘法ML的低位累加器ML,並且,進一步,將組合累加器MH的低16位和累加器ML的高16位的32位數據設置到變量c。_mac(long&mh,long&ml,FIX16J&c,FIX16—1a,FIX16—1b);這個函數將用於乘法的高位累加器MH和用於乘法的低位累加器ML的64位數據與通過將變量a和變量b相乘而獲得的結果相加,並將作為結果的64位數據的高32位設置到用於乘法的高位累加器MH,將64位數據的低32位設置到用於乘法ML的低位累加器ML,並且,進一步,將組合累加器MH的低16位和累加器ML的高16位的32位數據設置到變量c。一個用法例子如下機器語言指令替代單元122遵循在內置函數定義文件103中的定義將下面的源程序longmh,ml;—mul(mh,ml,dummy,a,b);—mac(mh,ml,e,c,d);用下面的機器語言指令mulm0,Rx,Ra,Rbmovr0,mh0movrl,mhlmovmh0,r0movtnhl,rlmacm0,Re,Rc,Rd,mO來替代。應該注意,在上面提到的機器語言指令序列中,第一到第三行對應於函數—mul,第四到第六行對應於函數—mac。通過在優化單元130中去除冗餘來刪除象這樣的第二到第五行機器語言指令序列,機器語言指令被優化到下面的機器語言指令序列mulmO,Rx,Ra,Rbmacm0,Re,Rc,Rd,mO。如上所述,當使用可以指定不是寄存器分配的目標的資源(例如累加器)的函數時,通過編譯程序(優化單元no)內的優化刪除一組定義(值的存儲)和使用(對該值的引用)是非常可能的,因此,象這樣的內置函數在優化方面也是有效的。接著,解釋本編譯程序100的特徵行為中的優化單元130的行為。圖74是顯示優化單元130的變元優化單元131的行為的流程圖。為了依賴變元產生一個合適的指令或一個合適的序列(算法),變元優化單元131產生(1)當所有函數變元是常數時(步驟S110的左邊),使用通過在下面設置的常數中摺疊(fold)而獲得的常數值作為運算數的機器語言指令(步驟S111);(2)當變元的一部分是常數時(步驟S110的中間),立即值運算數的機器語言指令(步驟112);以及(3)當所有變元是變量時(步驟S110的右邊),寄存器運算數的機器語言指令序列(步驟113)。例如,當所有變元是常數時,象d=_extru(0xfff,7,4);產生一個具有通過在常數中摺疊而獲得的常數值的機器語言指令,象movRd,oxf。另一方面,當變元的一部分是常數時,象d=—extru(a,7,4);產生一個立即運算數的機器語言指令,象extruRd,Ra,7,4。進一步,當所有變元是變量時,象d=—extru(a,b,c》產生一個機器語言指令序列,象aslRe,Rb,8andRf,Rc,0xlforRg,Re,RfextruRd,Ra,Rg。如剛才所描述的,從一個內置函數,不總是固定地產生相同的機器語言指令,而是由變元優化單元131產生依賴於變元性質而優化的機器語言指令(或機器語言指令序列)。圖75是顯示一個算術樹以解釋優化單元130的類型變換優化單元132的行為的示意圖。類型變換優化單元132對源程序中的特定記號的運算產生一個帶有類型變換的機器語言指令(諸如fmulhw),以執行不同類型之間的有效運算。在普通C語言中,16位X16位的結果的類型是16位。存在16位X16位->32位的指令,但如下所述產生兩個不同的機器語言指令。例如,對於B2=fl6*fl6;的描述,產生兩個指令fmulhh〃16bitx16bit->16bitasl〃16bit-〉32bit的類型變換因此,當在源程序中描述(FIX32)16位^FIX32)16位時,類型變換優化單元132平常產生如圖75A所示的算術樹(產生類型變換的線一cord),但通過將這個算術樹變換成圖75B中所示的算術樹產生一個16位X16位^32位的指令(fmulhw)。圖76是顯示一個採樣程序的例子以解釋等待時間優化單元133的行為的示意圖。等待優化單元133基於一個關於在源程序101中建立的彙編程序指令(優化的asm語句)中的等待時間(周期數的指定)的命令執行對機器語言指令的時間調度(schedule),以便在特定部分中的行為或特定行為中只花費指定周期數的執行時間。用戶可以用兩種類型的指定方法設置等待時間。一種方法是指定附連在特定指令上的標號之間的等待時間,就象圖76A所示的程序中的指定(LATENCYL1,L2,2;)。在圖76A的例子中,等待時間優化單元133執行對機器語言指令序列的分配的時間調度,以使得從處理器1執行指令wte開始直到執行指令rde只經過2個周期。另一種方法是指定在訪問擴展寄存器單元80的指令(rd,wt,rde,wte)上的直到指令下一次訪問擴展寄存器單元80的等待時間,就象圖76B所示的程序中的指定(指令wte內的LATENCY(2))。在圖76B的例子中,等待時間優化單元133執行對機器語言指令序列的分配的時間調度,以便從處理器1執行指令wte和訪問擴展存儲器單元80開始直到再次訪問擴展存儲器單元80隻經過2個周期。採用象這樣的等待時間的配置,可以在已經被成行(in-line)擴展的代碼和還未被成行擴展的代碼之間執行優化(合併指令,去除冗餘,分類指令和分配寄存器),並保證所指定的指令或訪問的等待時間。換句話說,常規上,用戶必須明確地插入一個nop指令,而當用戶使用編譯程序100時,他所必須做的只是為一個必要的指令或一個必要的訪問指定一個必要的等待時間。圖77是解釋分析程序單元110的定點模式切換單元111的行為的示意圖。當定點模式切換單元111在源程序101中檢測到一個編譯指示來保存和返回定點模式(例如,"#pragma—save—fkpmodefunc")時,定點模式切換單元111產生一個機器語言指令來保存和返回處理器1的PSR31的位FXP。應該注意,作為關於作為前提的定點的說明,存在一l系統(FIX16—1,FIX32—1)類型和—2系統(FIX16—2,FIX32—2)類型;模式通過硬體(處理器1)中的PSR31的一位(FXP)切換;以及,進一步,存在在一個函數中只能使用一單個系統的條件。因此,作為用於切換和使用程序上的這兩個系統的方法,給出一個規則來指定一個編譯指示("#pragma—save—ficpmode"函數名)作為可以由其他系統調用的函數。從而,定點模式切換開關單元lll將對應於FIX類型的模式的保存和返回的代碼插入到函數的頭部和尾部。另外,搜索每個函數的FIX類型聲明;決定通過哪一FIX類型聲明來編譯函數;以及,插入設置模式的代碼。圖77A顯示了一個帶有編譯指示的函數的例子。在圖77A的右邊寫的注釋是定點模式切換單元111的插入處理,其具體處理如圖77B所示。象這樣的編譯指示的一個應用例子如圖77C所示。例如,關於四個函數fll、f21、f22和f23,當函數fll:—1系統調用函數f21:—2系統;函數f21:一2系統調用函數G2:一2系統;函數f22:—2系統調用函數G3:—2系統時,由於可以由其他模式調用的唯一的函數是f21,所以可以通過只對這個函數執行編譯指示指定來切換到一個正常模式。如上所述,釆用依據本實施例的編譯程序100,通過在運算符定義文件102、內置函數定義文件103和機器語言指令替代單元122之間的協作處理,用戶可以聲明和使用定點類型的模式O和模式l作為普通類型並有效產生處理器1通過在高級語言級調用內置函數執行的高功能機器語言指令。另外,利用變元優化單元131對內置函數的變元的優化,產生帶有有效運算數的機器語言指令。此外,利用類型變換優化單元132對類型變換的優化,將一個帶有類型變換的運算變換成處理器1執行的一個高功能機器語言指令。此外,利用等待時間優化單元133對機器語言指令的時間調度,用戶可以在不插入nop指令的情況下保證在特定指令之間的或到擴展寄存器的訪問中的等待時間。至此,己經根據實施例解釋了依據本發明的編譯程序,但本發明並不限於這個實施例。例如,在本實施例中,定點的類型是16位或32位,小數點被放在MSB或其低數位,但本發明並不限於這樣的格式,其定點是8位或64位並且其小數點被放在另一個數位的類型作為目標也是可以接受的。另外,提供一個使用類庫作為用於用戶的開發支持工具的行為驗證技術也是可以接受的。換句話說,如圖78A所示,通常,依據本實施例對於目標機器(處理器1)採用交叉編譯程序(編譯程序100)來編譯測試源和定義文件102和103;通過為帶有專用模擬器的處理器1執行所獲得的機器語言程序執行行為驗證。作為替換,如圖78B所示,準備一個其目標是用於開發的主機(例如,由英特爾公司製造的處理器)的類庫(將運算符定義文件102和內置函數定義文件103分別與主機而非處理器1的機器語言指令聯繫起來的定義文件)並與測試源、定義文件102和103—起由本機編譯程序(諸如VisualC++(R))編譯並且主機執行所獲得的機器語言程序as-is是可接受的。從而,可以在類似環境中高速執行一個模擬並執行行為驗證。此外,在本實施例中,與專用於目標處理器的機器語言指令相聯繫的運算符和內置函數被作為主文件(定義文件102和103)提供,但依據本發明的編譯程序可以被配置為在編譯程序本身中結合象這樣的定義文件的信息。換句話說,依據本發明的編譯程序是一個將上述定義文件102和103結合在其中的整體類型(integral-type)的程序,將編譯程序配置為使得編譯程序將源程序翻譯成機器語言程序,該程序包括其中定義了對應於專用於一個目標處理器的機器語言指令的運算的運算定義信息,編譯程序包括分析程序步驟,分析源程序;中間編碼變換步驟,將分析的源程序變換成中間編碼;優化步驟,優化變換的中間編碼;以及,代碼產生步驟,將優化的中間編碼變換成機器語言指令,其中,中間編碼變換步驟包括檢測子步驟,檢測中間編碼中的一個是否引用在運算定義信息中定義的運算;以及,替代子步驟,當檢測到中間編碼時,用一個對應的機器語言指令替代中間編碼,以及,在優化步驟中,優化中間編碼,中間編碼包括在替代子步驟中替代中間編碼的機器語言指令。從而,用戶不需要在源程序中包括定義文件。權利要求1.一種將一個源程序翻譯成一個機器語言程序的編譯程序,所述機器語言程序包括其中定義了對應於一個專用於一個目標處理器的機器語言指令的運算的運算定義信息,編譯程序包括分析程序步驟,分析源程序;中間編碼變換步驟,將分析的源程序變換成中間編碼;優化步驟,優化變換的中間編碼;以及,代碼產生步驟,將優化的中間編碼變換成機器語言指令,其中,中間編碼變換步驟包括檢測子步驟,檢測任何中間編碼是否引用在運算定義信息中定義的運算;以及,替代子步驟,當檢測到中間編碼時,用一個對應的機器語言指令替代中間編碼,以及,在優化步驟中,優化中間編碼,中間編碼包括在替代子步驟中替代中間編碼的機器語言指令。全文摘要提供了在源程序101中包括的運算符定義文件102等和將源程序101翻譯成機器語言程序105的編譯程序100。運算符定義文件102包括由類定義對各種定點類型運算符的定義。編譯程序100可以有效地產生處理器執行的高級和專用指令,並通過擴展函數等來作出改進,而不頻繁地重複編譯程序本身的版本的更新。編譯程序100由產生中間編碼的中間編碼產生單元121、用機器語言指令替代引用由運算符定義文件102定義的類的中間編碼的機器語言指令替代單元122和執行以包括替代的機器語言指令的中間編碼為目標的優化的優化單元130組成。文檔編號G06F9/45GK101196825SQ20071008852公開日2008年6月11日申請日期2003年8月1日優先權日2002年8月2日發明者坂田俊幸,宮地涼子,宮阪修二,小川一,瓶子嶽人,石川智一申請人:松下電器產業株式會社

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀