(57)【要約】  装置が、オペコードおよびオペランドを含む命令を記憶するメモリを含む。オペランドは、即値または即値を記憶するレジスタのレジスタインジケータを指定する。即値は、関数コールアドレスを識別するのに使用可能である。関数コールアドレスは、複数の関数コールアドレスから選択可能である。
2014523594.tif 000002
【特許請求の範囲】
【請求項１】
命令を記憶するメモリであって、前記命令がオペコードおよびオペランドを含む前記メモリを備える装置において、
前記オペランドが、
即値、または
前記即値を記憶するレジスタのレジスタインジケータを指定し、
前記即値が、複数の関数コールアドレスから選択可能な関数コールアドレスを識別するのに使用可能である装置。
【請求項２】
前記即値が整数である、請求項1に記載の装置。
【請求項３】
前記命令が分岐命令およびジャンプ命令とは別個のものである、請求項1に記載の装置。
【請求項４】
前記複数の関数コールアドレスの各々が、対応する実行可能関数に関連付けられる、請求項1に記載の装置。
【請求項５】
前記複数の関数コールアドレスがテーブルに記憶される、請求項1に記載の装置。
【請求項６】
前記テーブルを動的にロードし、更新するプロセッサをさらに備え、前記テーブルに記憶された前記複数の関数コールアドレスが、前記プロセッサによって頻繁にコールされる関数に対応する、請求項5に記載の装置。
【請求項７】
前記テーブルが固定である、請求項5に記載の装置。
【請求項８】
前記テーブルが前記メモリに、またはキャッシュに記憶される、請求項5に記載の装置。
【請求項９】
前記テーブルの場所が、グローバルポインタに相対して判断される、請求項5に記載の装置。
【請求項１０】
前記グローバルポインタが、前記メモリ内のグローバルデータセクションをさらに識別する、請求項9に記載の装置。
【請求項１１】
前記命令のサイズが、前記命令のアドレスと、前記識別された関数についての前記関数コールアドレスとの間の差を識別するのに必要とされるビット数未満である、請求項1に記載の装置。
【請求項１２】
前記命令の前記サイズが、24ビット、16ビット、または8ビット以下である、請求項11に記載の装置。
【請求項１３】
前記メモリが、関数コールテーブルをグローバルオフセットテーブル内にさらに記憶し、前記即値が、前記関数コールテーブルのテーブル索引に関連付けられる、請求項1に記載の装置。
【請求項１４】
前記グローバルオフセットテーブルが、位置非依存コード実行をサポートする、請求項13に記載の装置。
【請求項１５】
セットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末(PDA)、固定位置データユニット、およびコンピュータからなる群から選択されるデバイスをさらに含み、前記メモリが前記デバイスに組み込まれる、請求項1に記載の装置。
【請求項１６】
オペコードおよびオペランドを生じるために処理要素において命令を処理するステップであって、
前記オペコードがテーブル関数コール命令を識別し、
前記オペランドが、
即値、または
前記即値を記憶するレジスタのレジスタインジケータを指定し、
前記即値が、複数の関数コールアドレスから選択可能な関数コールアドレスを識別するのに使用可能である、前記処理するステップと、
前記即値を、前記関数コールアドレスを識別するためのテーブルへの索引として使うステップと
を含む方法。
【請求項１７】
前記テーブル中の各関数コールアドレスが、別個の関数に対応する、請求項16に記載の方法。
【請求項１８】
前記識別された関数コールアドレスにジャンプするステップをさらに含む、請求項16に記載の方法。
【請求項１９】
前記ジャンプするステップが、前記命令の処理中に起こる、請求項18に記載の方法。
【請求項２０】
プロセッサによって実行されると、前記プロセッサに、
命令コードからオペコードおよびオペランドを生じさせるプログラムコードであって、前記オペコードがテーブル関数コール命令を識別し、
前記オペランドが、
即値、または
前記即値を記憶するレジスタのレジスタインジケータを指定し、
前記即値が、複数の関数コールアドレスから選択可能な関数コールアドレスを識別するのに使用可能である、前記生じさせるプログラムコードと、
前記即値を、前記関数コールアドレスを識別するためのテーブルへの索引として使わせるプログラムコードと、
前記識別された関数コールアドレスにジャンプさせるプログラムコードと
を含むコンピュータ可読記憶媒体。
【請求項２１】
前記ジャンプが、前記命令コードの処理中に起こる、請求項20に記載のコンピュータ可読記憶媒体。
【請求項２２】
命令を記憶するための手段と、
オペコードおよびオペランドを生じるために、前記命令を処理する手段とを備える装置であって、
前記オペランドが、
即値、または
前記即値を記憶するレジスタのレジスタインジケータを指定し、
前記即値が、複数の関数コールアドレスから選択可能な関数コールアドレスを識別するのに使用可能であり、
前記処理するための手段が、前記識別された関数コールアドレスにジャンプする装置。
【請求項２３】
前記複数の関数コールアドレスをテーブルに記憶するための手段と、
前記テーブルを動的に更新するための手段とをさらに備える、請求項22に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は概して、頻繁にコールされる関数に対するテーブルコール命令に関する。
【背景技術】
【０００２】
技術の進歩によって、コンピューティングデバイスはより小型にかつより高性能になっている。たとえば、現在、小型で、軽量で、ユーザが簡単に持ち運べる、携帯式のワイヤレス電話、携帯情報端末(PDA)、およびページングデバイスなどの、ワイヤレスコンピューティングデバイスを含む、様々な携帯式の個人向けコンピューティングデバイスが存在する。より具体的には、セルラー電話やインターネットプロトコル(IP)電話などの携帯式のワイヤレス電話は、ボイスおよびデータパケットを、ワイヤレスネットワークを介して通信することができる。さらに、多くのそのようなワイヤレス電話には、内部に他の種類のデバイスが組み込まれている。たとえば、ワイヤレス電話は、デジタルスチルカメラ、デジタルビデオカメラ、デジタルレコーダ、およびオーディオファイルプレーヤも含み得る。また、そのようなワイヤレス電話は、ウェブブラウザアプリケーションなど、インターネットにアクセスするために使用され得るソフトウェアアプリケーションを含む実行可能な命令を処理することができる。したがって、これらのワイヤレス電話は、高いコンピューティング能力を含み得る。
【０００３】
ワイヤレス電話などの電子デバイスのコンピューティング能力が増大すると、様々なアプリケーションを実装するのに使われる機能の数が大幅に増大し得る。アプリケーションがコンパイルされ、リンクされるとき、出力コードの大部分が関数コールになる場合があり、結果として全体的なコードサイズが大きくなり得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
オペコードおよびオペランドを含む、テーブルに基づく関数コール命令について開示する。オペランドは即値を指定することができ、即値は、特定の関数の関数コールアドレスの場所を識別する。代替として、オペランドは、レジスタのレジスタインジケータを指定することができ、関数コールアドレスの場所は、命令中に直接符号化されるのではなく、レジスタに記憶すればよい。関数コールアドレスは、テーブルに記憶された複数の関数コールアドレスから選択可能である。関数コールアドレスのテーブルを生成することができ、テーブルは、テーブルに含まれる関数コールアドレスに対応する関数がどの程度頻繁に呼び出されるかに基づいてソートすることができる。テーブルは、リンク時中またはコンパイル時に生成されソートされ得る。テーブルコール命令の長さが、一般的な関数コール命令の長さ未満であるとき、コードサイズの削減が達成され得る。
【０００５】
一例として、32ビットの一般的な関数コール命令は、8ビットのオペコードと、24ビットのアドレスまたはアドレスオフセットとを含み得る。アプリケーションのコンパイル(またはリンク)中、コンパイラ(またはリンカ)は、アプリケーションの、16個の最も頻繁にコールされる関数を識別することができる。それらの16個の関数の関数コールアドレスを含むテーブルを生成することができ、テーブルは、4ビットのテーブル索引を使って索引付けられ得る。関数の関数コールアドレスは、関数の最初の命令のアドレス(すなわち、関数がコールされたときに「ジャンプされる」先のアドレス)であり得る。16個の最も頻繁にコールされる関数を呼び出すのに使われる一般的な関数コール命令は、本明細書で開示するテーブルコール命令で置き換えることができ、テーブルコール命令の処理により、テーブルから取り出された適切な関数コールアドレスをロードし、ジャンプすることができる。たとえば、テーブルコール命令は、4ビットのオペコードおよび4ビットのオペランドを含む8ビットの命令であってよい。4ビットのオペランドが即値であるとき、4ビットのオペランドは、関数コールアドレスの16エントリのテーブルへの索引を表すことができる。4ビットのオペランドがレジスタインジケータであるとき、4ビットのオペランドは、テーブルにオフセットを記憶する、16個のレジスタのうちの1つを指定することができる。したがって、一般的な32ビットの関数コール命令が8ビットのテーブルコール命令で置き換えられる度に、24ビットの節約を達成することができる。テーブルに記憶される関数コールアドレスの数は、16未満であっても、それよりも大きくてもよいことに留意されたい。いくつかの実装形態では、テーブルは、キャッシュベースのメモリに記憶することができ、特殊レジスタ(たとえば、グローバルポインタを記憶するレジスタ)は、テーブルにアクセスするのに使うことができる。
【０００６】
特定の実施形態では、装置が、命令を記憶するメモリを含む。命令は、オペコードおよびオペランドを含む。オペランドは、即値または即値を記憶するレジスタのレジスタインジケータを指定する。即値は、複数の関数コールアドレスから選択可能な関数コールアドレスを識別するのに使用可能である。
【０００７】
別の特定の実施形態では、方法が、処理要素において命令を処理して、オペコードおよびオペランドを生じるステップを含む。オペコードは、テーブル関数コール命令を識別し、オペランドは、即値または即値を記憶するレジスタのレジスタインジケータを識別する。即値は、複数の関数コールアドレスから選択可能な関数コールアドレスを識別するのに使用可能である。この方法は、即値を、関数コールアドレスを識別するためのテーブルへの索引として使うステップを含む。
【０００８】
別の特定の実施形態では、非一時的コンピュータ可読媒体が、プロセッサによって実行されると、プロセッサに、命令コードからオペコードおよびオペランドを生じさせるプログラムコードを含む。オペコードは、テーブル関数コール命令を識別する。オペランドは、即値または即値を記憶するレジスタのレジスタインジケータを指定する。即値は、複数の関数コールアドレスから選択可能な関数コールアドレスを識別するのに使用可能である。非一時的コンピュータ可読媒体は、プロセッサによって実行されると、プロセッサに、即値を、関数コールアドレスを識別するため、および識別された関数コールアドレスにジャンプするためのテーブルへの索引として使わせるプログラムコードをさらに含む。
【０００９】
別の特定の実施形態では、装置が、命令を記憶するための手段と、命令を処理して、オペコードおよびオペランドを生じるための手段とを含む。オペランドは、即値または即値を記憶するレジスタのレジスタインジケータを指定する。即値は、複数の関数コールアドレスから選択可能な関数コールアドレスを識別するのに使用可能であり、処理するための手段は、識別された関数コールアドレスにジャンプする。
【００１０】
開示する実施形態のうちの少なくとも1つによって提供される1つの具体的な利点は、全体的なコードサイズの削減である。組込み型の低コストアプリケーションは、より小さいコードサイズの恩恵を受けることができる。たとえば、モデムソフトウェア、ワイヤレスデバイスに組み込まれたソフトウェア、および他のソフトウェア処理環境が、コードサイズ削減の恩恵を受けることができる。したがって、多くの関数コールが行われるソフトウェアのコードサイズを削減することが有利であり得る。別の特定の利点は、より小さいコードサイズに起因する、デバイスにおけるメモリ使用の低下、および電力消費の削減である。
【００１１】
本開示の他の態様、利点、および特徴は、以下のセクション、すなわち、図面の簡単な説明、発明を実施するための形態、および特許請求の範囲を含む、本出願全体の検討後に明らかになろう。
【図面の簡単な説明】
【００１２】
【図１】テーブルコール命令を記憶し処理するように動作可能なシステムの特定の例示的な実施形態のブロック図である。
【図２】図1のシステムの動作を示す第1の図である。
【図３】図1のシステムの動作を示す第2の図である。
【図４】図1のシステムの動作を示す第3の図である。
【図５】テーブルコール命令を処理する方法の特定の例示的な実施形態のフローチャートである。
【図６】テーブルコール命令を実行するように動作可能なプロセッサを含むワイヤレスデバイスのブロック図である。
【発明を実施するための形態】
【００１３】
テーブルコール命令は、テーブルへの索引として使うことができるオペコードおよびオペランドを含み得る。オペランドは、即値または即値を記憶するレジスタのレジスタインジケータを指定することができ、即値は、テーブルから関数コールアドレスを識別するのに使用可能である。テーブルは、頻繁にコールされる命令の関数コールアドレスを記憶することができ、テーブルコール命令の処理は、即値で識別される関数コールアドレスのロードおよびアドレスへのジャンプを含み得る。オペコードとオペランドの組合せが、一般的な関数コール命令よりも少ないビットを占めるとき、コードサイズの節約を達成することができる。
【００１４】
図1を参照すると、テーブルコール命令180を記憶し処理するように動作可能なシステムの特定の例示的な実施形態が開示され、全体が100で表される。システム100は、バスインターフェース108を介して命令キャッシュ110に結合されたメモリ102を含み得る。特定の実施形態では、システム100の全部または一部分が、プロセッサに統合され得る。
【００１５】
テーブルコール命令180は、オペコードおよびオペランドを含み得る。特定の実施形態では、オペランドは、図2〜図4においてさらに示すように、即値(たとえば、数値定数)を指定する。即値は、テーブル(たとえば、例示的テーブル190)に記憶されている複数の関数コールアドレスから選択可能な関数コールアドレスをもつ特定の関数を識別するのに使うことができる。テーブルに記憶された関数コールアドレスは、アプリケーションの、頻繁にコールされる関数に対応し得る。即値は、テーブル中の関数コールアドレスの索引位置を表す整定数でよい。たとえば、テーブルの第3行についてのテーブルコール命令は「TC #3」であってよく、ここで「TC」はオペコードであり、「#3」はオペランド(すなわち、即値)である。代替として、テーブルの第1行が索引1ではなく索引0であるとき、第3行についてのテーブルコール命令は「TC #2」であり得る。
【００１６】
代替として、オペランドは、即値を記憶するレジスタのレジスタインジケータを指定することができる。たとえば、テーブルコール命令は「TC r1」であってよく、レジスタr1は3という即値を記憶する。
【００１７】
メモリ102は、バスインターフェース108を介して、命令キャッシュ110にテーブルコール命令180を送信することができる。データキャッシュ112も、バスインターフェース108を介してメモリ102に結合されてよい。データキャッシュ112は、頻繁にコールされる関数のテーブル190を含み得る。テーブル190は、リンク時中またはコンパイル時に生成されソートされ得る。特定の例示的な実施形態では、テーブル190は、テーブルの最上位にある、最も頻繁にコールされる関数(たとえば、デバッグ関数および復元関数)のアドレスを含み、テーブル190は、(たとえば、コンパイラまたはリンカによって決定される)使用頻度の降順でソートされる。テーブルコール命令180は、コールされるべき関数のアドレスを含むテーブル190を指し得るので、テーブルコール命令180は、一般的な関数コール命令、一般的なジャンプ命令、または一般的な分岐命令よりも少ないビットで作成することができる。テーブルコール命令180は、命令セットの一般的な分岐命令および一般的なジャンプ命令とは別個のものである。より低い頻度でコールされる関数は、一般的な分岐命令またはジャンプ命令を使って呼び出すことができ、より頻繁にコールされる関数は、テーブルコール命令180を使って呼び出すことができる。さらに、テーブル190は、固定されてもよく、システム100におけるアプリケーションの実行中に動的に更新されてもよい。
【００１８】
命令キャッシュ110は、バス111を介してシーケンサ114に結合され得る。シーケンサ114は、汎用割込み116を受信することができ、この割込みは、割込みレジスタ(図示せず)から取り出すことができる。特定の実施形態では、命令キャッシュ110は、複数の現在の命令レジスタ(図示せず)を介してシーケンサ114に結合することができ、シーケンサ114は、バス111に結合され、プロセッサ100の特定のスレッド(たとえば、ハードウェアスレッド)に関連付けられ得る。特定の一実施形態では、プロセッサ100は、6つのスレッドを含むインタリーブ型マルチスレッドプロセッサであり得る。
【００１９】
特定の実施形態では、バス111は128ビットバスでよく、シーケンサ114は、各々が32ビット長の命令パケット(たとえば、1つまたは複数のテーブルコール命令180を含むVLIW命令パケット)により、メモリ102から命令を取り出すように構成され得る。バス111は、第1の命令実行ユニット118、第2の命令実行ユニット120、第3の命令実行ユニット122、および第4の命令実行ユニット124に結合され得る。各命令実行ユニット118、120、122および124は、第1のバス128を介して汎用レジスタファイル126に結合することができる。汎用レジスタファイル126はまた、第2のバス130を介してシーケンサ114、データキャッシュ112、およびメモリ102に結合可能である。
【００２０】
システム100は、割込み(たとえば、汎用割込み116)を受け入れるか否かを決定し、命令の実行を制御するためにシーケンサ114内の制御論理によってアクセスされ得るビットを記憶するためのスーパバイザ制御レジスタ132およびグローバル制御レジスタ134も含み得る。
【００２１】
特定の実施形態では、実行ユニット118、120、122、および124のうちのいずれも、テーブルコール命令180を実行して、オペコードおよびオペランドを生じることができる。オペコードは、処理されている命令がテーブルコール命令であることを示すことができ、オペランドは、即値または即値を記憶するレジスタインジケータを指定することができる。即値は、(たとえば、コールされるべき特定の関数についてのアドレスを識別するための)テーブル190への索引として使うことができる。特定の実施形態では、テーブルコール命令180のサイズは、24ビット、16ビット、または8ビット以下であり得る。複数のテーブルコール命令180が、VLIWパケット中に含まれてよく、同じクロック周期中に、実行ユニット118、120、122、および124によって並行して実行することができる。
【００２２】
図1のシステム100はしたがって、一般的な関数コール、分岐命令、またはジャンプ命令よりも少ないビットで作成することができ、コードサイズの全体的な削減およびコードサイズの削減による電力消費の削減につながるテーブルコール命令180を示す。
【００２３】
図2〜図4は、図1のシステム100における動作の3つの例を示す。図2を参照すると、図1のシステム100における動作の第1の説明のための例が開示され、全体が200で表される。
【００２４】
動作中、図1の実行ユニット118、120、122、または124のうちの特定の1つが、テーブルコール命令180を実行して、オペコード282と、即値244(たとえば、「4」)を記憶するレジスタ240(たとえば、R1)のレジスタインジケータを指定するオペランド284とを生じ得る。図2に示す実施形態において、テーブルコール命令180は、1バイト命令(すなわち、8ビット)であり、そのうち4ビットは、オペコード282を表し、4ビットは、オペランド284(すなわち、4ビットのレジスタインジケータ)を表す。たとえば、4ビットのオペランドは、即値を記憶することができる、16(すなわち、24)個のレジスタのうちの1つを指定することができ、ここで即値は、関数コールアドレスの、16エントリのテーブル190への索引を表す。代替として、4ビットのオペランドは、図3〜図4にあるように、即値を直接指定することができる。したがって、16(すなわち、24)個の頻繁にコールされる関数を含む関数コールアドレステーブル190は、4ビットのオペランド284を使って索引付けられ得る。特定の実施形態では、関数コールアドレスは降順で記憶することができ、索引0は、最も頻繁にコールされる関数(たとえば、0x1111という関数コールアドレスをもつ、図2の「memcpy」)に対応する。
【００２５】
テーブル190は、リンク時中またはコンパイル時に作成され得る。特定の実施形態では、テーブル190は、アプリケーションの実行中に動的に更新され得る。たとえば、実行ユニット118〜124のうちのどの1つも、テーブル190を動的に更新することができる。別の特定の実施形態では、テーブル190は固定であってよい。オペランド284から即値244(たとえば、「4」)を生じた後(たとえば、レジスタアクセスの後)、関数コールアドレス(たとえば、0x5555)は、「4」という即値に基づいて識別され得る。図1の特定の実行ユニット118〜124は、識別された関数コールアドレスにジャンプすることができる。たとえば、関数コールアドレス0x5555へのジャンプは、図1の命令キャッシュ110への、「_restore_regs_return」関数(たとえば、アドレス0x5555で始まる)の1つまたは複数の命令をフェッチまたはプリフェッチすることを含み得る。特定の実施形態では、関数コールアドレスへのジャンプは、テーブルコール命令180の処理中に起こる。
【００２６】
したがって、関数がより共通して使われると、テーブルコール命令180を使って関数がコールされるときのコード節約がより大きくなることが諒解されよう。たとえば、「_restore_regs_return」関数の一般的なコールは、8オペコードビットと、16進アドレス0x5555(すなわち、_restore_regs_return関数のアドレス)を表すための24ビットとを含めて、少なくとも32ビットを含み得る。一般的なコールをテーブルコール命令180で置き換えることによって、コールごとに24ビットの節約が達成され得る。
【００２７】
図3を参照すると、図1のシステム100における動作の第2の説明のための例が開示され、全体が300で表される。動作中、図1の実行ユニット118、120、122、または124のうちの特定の1つが、テーブルコール命令180を実行して、オペコード282と、即値(たとえば、「5」)を指定するオペランド384とを生じ得る。図3に示す実施形態において、テーブルコール命令180は、2バイト命令(すなわち、16ビット)であり、そのうち4ビットはオペコード282を表し、12ビットは、即値を指定するオペランド384(すなわち、12ビットのテーブル索引)を表す。したがって、テーブル190は、4096(すなわち、212)個の頻繁にコールされる関数を含むことができ、12ビットの即値384を使って索引付けることができる。たとえば、図3に示すように、4096個の頻繁にコールされる関数は、降順で記憶することができ、索引0は、最も頻繁にコールされる関数(たとえば、0x1111という関数コールアドレスをもつ、図3の「memcpy」)に対応する。
【００２８】
図3は、グローバルポインタ392を使ってテーブル190がアクセスされる実施形態を示す。たとえば、テーブル190は、メモリのグローバルデータセクション内に記憶されるグローバルオフセットテーブルに記憶することができる。グローバルオフセットテーブルは、位置非依存コード実行をサポートすることができる。グローバルポインタ392は、図3に示すように、テーブル190の第1の要素を指し得る。オペランド384によって指定される即値は、グローバルポインタ392からのオフセットとして使うことができる。たとえば、即値は「5」である場合があり、テーブル索引386は、グローバルポインタ392に「5」を加算することによって識別することができ、結果として、テーブル190から関数コールアドレス0x6666(たとえば、「debug_msg」関数に対応する)が取り出される。グローバルポインタ392は、テーブル190の最上位に対応する、メモリ102のグローバルデータセクション中の場所を識別することができる。さらに、テーブル190は、メモリ102に記憶されたグローバルオフセットテーブル内の選択可能な関数コールテーブルであってよく、即値は、選択可能な関数コールテーブルのテーブル索引に関連付けられ得る。グローバルオフセットテーブルは、位置非依存コード実行(すなわち、たとえば共有ライブラリについて、リンク時にシンボルのアドレスが分からない場合に構築されたコード)をサポートすることができる。
【００２９】
図3に示すように、グローバルポインタ392によって表される索引(たとえば、0)に対するオフセット(たとえば、グローバルポインタ392からのポジティブオフセット)として即値(たとえば、5)を使うことによって、特定のテーブル索引386が算出され得る。説明のために、テーブル索引386は、図3に示すように、即値とグローバルポインタ392を足したものでよい。図1の特定の実行ユニット118〜124は、識別された関数コールアドレスにジャンプすることができる。たとえば、関数コールアドレス0x6666へのジャンプは、図1の命令キャッシュ110への、「_debug_msg」関数(たとえば、アドレス0x6666で始まる)の1つまたは複数の命令をフェッチまたはプリフェッチすることを含み得る。特定の実施形態では、関数コールアドレスへのジャンプは、テーブルコール命令180の処理中に起こる。
【００３０】
図4を参照すると、図1のシステム100における動作の第3の例が開示され、全体が400で表される。図3に示す実施形態とは対照的に、図4に示す実施形態は、テーブル190に隣接するがテーブル190を含まない、メモリ中の場所を指すグローバルポインタ392を示す。
【００３１】
グローバルポインタ392は、テーブル190に関連しない、メモリ102のグローバルデータセクションを識別する(すなわち、指す)ことができる。たとえば、グローバルポインタは、テーブル190に関連せず、グローバルデータ(たとえば、「グローバルデータ1」)のアドレス(たとえば、アドレス0xAAAA)を記憶する索引位置0を指し得る。図4に示すように、グローバルポインタ392からのオフセット(たとえば、負のオフセット)として即値(たとえば、4)を使うことによって、特定のテーブル索引486が算出され得る。そのような実施形態では、即値がグローバルポインタ392値から減算されて、特定の関数コールアドレスについての場所を見つけることができる。
【００３２】
説明のために、即値は「4」であってよく、関数コールアドレス0x4444(たとえば、「_save_callee_regs」関数に対応する)は、グローバルポインタ392の値から即値(すなわち、「4」)を減算することによって識別することができる。テーブルコール命令180を処理する図1の特定の実行ユニット118〜124は次いで、識別された関数コールアドレスにジャンプしてよい。たとえば、関数コールアドレス0x4444へのジャンプは、図1の命令キャッシュ110への、「_save_callee_regs」関数(たとえば、アドレス0x4444で始まる)の命令をフェッチまたはプリフェッチすることを含み得る。
【００３３】
図2〜図4はしたがって、テーブルコール命令を処理する様々な例を示す。テーブルコール命令のサイズが、テーブルコール命令のアドレス(たとえば、現在の命令ポインタに記憶することができるテーブル190をコールする命令のアドレス)と、識別された関数についての関数コールアドレスとの間の差を識別するためのビット数未満であるとき、より密な、またはより小さいコードサイズが達成され得る。説明のために、テーブルコール命令と、識別された関数のアドレスが、2メガバイトを超えて離されている(すなわち、24ビット以下では距離を表すことができない)場合、テーブルコール命令は、テーブルコール命令が24ビット以下のサイズである場合の、より密なコードにつながり得る。多語命令に関して、テーブルコール命令のサイズは、関数コールを実施する、多語命令の部分のアドレスと、コールされる関数のアドレスとの間の差よりも小さくてよい。したがって、オペコードと即値を組み合わせた長さは、一般的な関数コール命令よりも短くてよく、命令キャッシュの性能向上、関数をコールするために使われる帯域幅の節約、およびデバイスにおける電力消費の削減につながる。
【００３４】
図5を参照すると、オペコードおよびオペランドを生じるための命令を処理する方法の特定の例示的な実施形態のフローチャートが示され、全体が500で表される。例示的な実施形態では、方法500は、図1のシステム100において実施することができ、図2〜図4を参照して説明され得る。
【００３５】
方法500は、510で、処理要素において命令を受信するステップを含み得る。たとえば、図1において、テーブルコール命令180は、実行ユニット118〜124のうちの1つにおいて受信され得る。方法500は、520で、命令を処理して、オペコードと、即値または即値を記憶するレジスタインジケータを指定するオペランドとを生じるステップも含み得る。たとえば、図1において、テーブルコール命令180は、実行ユニット118〜124のうちの1つによって処理されて、オペコードおよびオペランドを生じ得る(たとえば、命令デコード段階中に)。例示的な実施形態では、オペコードは、図2〜図4の4ビットのオペコード282であってよく、オペランドは、図2の4ビットのオペランド284または図3〜図4の12ビットのオペランド384であってよい。
【００３６】
方法500は、530で、即値を、関数についてのアドレスを識別するためのテーブルへの索引として使うステップをさらに含み得る。テーブルは、頻繁にコールされる関数についてのアドレスを記憶することができる。たとえば、図1において、テーブルコール命令180の即値をテーブル索引として使うことによって、頻繁にコールされる関数のテーブル190から、アドレスを取り出すことができる。特定の実施形態では、即値は、図2に示すように、テーブル190への直接索引であってよい。代替として、索引は、図3〜図4に示すように、即値を、グローバルポインタに対するオフセットとして使うことによって算出することができる。方法500は、540で、関数についてのアドレスにジャンプするステップも含み得る。関数は次いで、一般的な関数コール命令を使って関数がコールされたかのように実行され得る。
【００３７】
図6を参照すると、オペコードおよびオペランドを含む命令を記憶するメモリを含むワイヤレスデバイスの特定の例示的な実施形態のブロック図が示され、全体が600で表される。デバイス600は、メモリ632に結合されたデジタル信号プロセッサ(DSP)664などのプロセッサを含む。命令キャッシュ(たとえば、例示的命令キャッシュ110)およびデータキャッシュ(たとえば、例示的データキャッシュ112)は、メモリ632およびDSP664にも結合され得る。特定の実施形態では、メモリ632は、テーブルコール命令180など、DSP664によって実行可能な命令を記憶し、命令キャッシュ110に送信する。処理されるとき、テーブルコール命令180は、データキャッシュ112に記憶された、頻繁にコールされる関数のテーブル190から特定の関数コールアドレスを取り出すための索引として使われるオペランド(たとえば、即値)を生じ得る。特定の関数コールアドレスを取り出すと、DSP664またはその構成要素は、(たとえば、対応する関数を実行し始めるために)特定の関数コールアドレスにジャンプすることができる。
【００３８】
図6はまた、DSP664およびディスプレイ628に結合されたディスプレイコントローラ626も示す。コーダ/デコーダ(コーデック)634もDSP664に結合され得る。スピーカー636およびマイクロフォン638がコーデック634に結合され得る。図6はまた、ワイヤレスコントローラ640がDSP664とワイヤレスアンテナ642とに結合され得ることを示す。ある特定の実施形態では、DSP 664、ディスプレイコントローラ626、メモリ632、コーデック634、およびワイヤレスコントローラ640は、システムインパッケージデバイスまたはシステムオンチップデバイス622に含まれる。
【００３９】
特定の一実施形態では、入力デバイス630および電源644がシステムオンチップデバイス622に結合される。その上、特定の一実施形態では、図6に示すように、ディスプレイ628、入力デバイス630、スピーカー636、マイクロフォン638、ワイヤレスアンテナ642、および電源644は、システムオンチップデバイス622の外部にある。ただし、ディスプレイ628、入力デバイス630、スピーカー636、マイクロフォン638、ワイヤレスアンテナ642、および電源644の各々は、インターフェースまたはコントローラなど、システムオンチップデバイス622の構成要素に結合され得る。
【００４０】
図6はワイヤレス通信デバイスを示しているが、DSP664およびメモリ632がセットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、携帯情報端末(PDA)、固定ロケーションデータユニット、またはコンピュータに統合されてもよいことに留意されたい。プロセッサ(たとえば、図1の実行ユニット118、120、122、および124を含む)は、そのようなデバイスにも統合され得る。
【００４１】
記載した実施形態とともに、オペコードおよびオペランドを含む命令を記憶するための手段を含む装置が開示される。たとえば、記憶するための手段は、図1のメモリ102、図6のメモリ632、図1および図6の命令キャッシュ110、命令を記憶するように構成された1つもしくは複数の他のデバイス、またはそれらのどの組合せでもよい。
【００４２】
装置は、命令を処理して、オペコードおよびオペランドを生じるための手段も含み得る。オペランドは、即値または即値を記憶するレジスタのレジスタインジケータを指定することができる。たとえば、処理するための手段は、図1の実行ユニット118、120、122、および124、図6のDSP664、命令を処理するように構成された1つもしくは複数のデバイスのうちの1つもしくは複数、またはそれらのどの組合せも含み得る。
【００４３】
装置は、複数の関数コールアドレスをテーブルに記憶するための手段をさらに含み得る。たとえば、記憶するための手段は、図1のメモリ102、図6のメモリ632、図1および図6のデータキャッシュ112、複数の関数コールアドレスをテーブルに記憶するように構成された1つもしくは複数の他のデバイス、またはそれらのどの組合せでもよい。
【００４４】
装置は、テーブルを動的に更新するための手段をさらに含み得る。たとえば、動的に更新するための手段は、図1の実行ユニット118〜124、関数アドレステーブルを動的に更新するように構成された1つもしくは複数の他のデバイス、またはそれらのどの組合せでもよい。
【００４５】
さらに、本明細書で開示された実施形態に関して説明された様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムのステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得ることを、当業者は諒解されよう。上記に、様々な例示的な構成要素、ブロック、構成、モジュール、回路、およびステップについて、それらの機能に関して概略的に説明した。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本開示の範囲からの逸脱を生じるものと解釈すべきではない。
【００４６】
本明細書で開示した実施形態に関連して説明した方法またはアルゴリズムのステップは、直接ハードウェアで具体化されるか、プロセッサによって実行されるソフトウェアモジュールで具体化されるか、またはその2つの組合せで具体化され得る。ソフトウェアモジュールは、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、コンパクトディスク読取り専用メモリ(CD-ROM)、または当技術分野で知られている任意の他の形態の記憶媒体中に存在し得る。例示的な非一時的(たとえば、有形)記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替として、記憶媒体はプロセッサと一体であり得る。プロセッサおよび記憶媒体は、特定用途向け集積回路(ASIC)に存在し得る。ASICは、コンピューティングデバイスまたはユーザ端末内に存在し得る。代替として、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末の中に、個別の構成要素として存在し得る。
【００４７】
開示された実施形態の上記の説明は、当業者が、開示された実施形態を作成または使用することができるように与えられる。これらの実施形態に対する様々な修正が、当業者には容易に明らかとなり、本明細書で定義される原理は、本開示の範囲から逸脱することなく、他の実施形態に適用され得る。したがって、本開示は、本明細書に示す実施形態に限定されることは意図されず、以下の特許請求の範囲によって定義されるような、原理および新規の特徴と矛盾しない、可能な最大の範囲を認められるべきである。
【符号の説明】
【００４８】
100  システム、プロセッサ
102  メモリ
108  バスインターフェース
110  命令キャッシュ
111  バス
112  データキャッシュ
114  シーケンサ
116  汎用割込み
118  第1の命令実行ユニット、実行ユニット
120  第2の命令実行ユニット、実行ユニット
122  第3の命令実行ユニット、実行ユニット
124  第4の命令実行ユニット、実行ユニット
126  汎用レジスタファイル
128  第1のバス
130  第2のバス
132  スーパバイザ制御レジスタ
134  グローバル制御レジスタ
180  テーブルコール命令
190  テーブル、関数コールアドレステーブル
240  レジスタ
244  即値
282  オペコード
284  オペランド
384  オペランド、即値
386  テーブル索引
392  グローバルポインタ
486  テーブル索引
600  デバイス
622  システムオンチップデバイス
626  ディスプレイコントローラ
628  ディスプレイ
630  入力デバイス
632  メモリ
634  コーダ/デコーダ(コーデック)
636  スピーカー
638  マイクロフォン
640  ワイヤレスコントローラ
642  ワイヤレスアンテナ
644  電源
664  デジタル信号プロセッサ(DSP)
【図１】
2014523594.tif 000003
【図２】
2014523594.tif 000004
【図３】
2014523594.tif 000005
【図４】
2014523594.tif 000006
【図５】
2014523594.tif 000007
【図６】
2014523594.tif 000008
【手続補正書】
【提出日】平成26年2月7日(2014.2.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサと、
命令を記憶するメモリであって、前記命令がオペコードおよびオペランドを含む前記メモリと、を備える装置において、
前記オペランドが、
即値、または
前記即値を記憶するレジスタのレジスタインジケータを指定し、
前記即値が、前記プロセッサの関数セットに対応する複数の関数コールアドレスを含むテーブルから選択可能な関数コールアドレスを識別するのに使用可能であり、前記関数セットが、コンパイラによって、またはリンカによって決定される特定のアプリケーションの頻繁に使われる関数を含み、
前記プロセッサが、前記テーブルを動的に更新するように構成される装置。
【請求項２】
前記頻繁に使われる関数が前記コンパイラによって選択され、前記プロセッサが、前記特定のアプリケーションの実行中に前記テーブルを動的に更新するように構成される、請求項1に記載の装置。
【請求項３】
前記メモリが分岐命令およびジャンプ命令をさらに記憶し、前記分岐命令および前記ジャンプ命令が、前記テーブルによって示されない関数に対応する、請求項1に記載の装置。
【請求項４】
前記複数の関数コールアドレスの各々が、前記関数セットの対応する実行可能関数に関連付けられる、請求項1に記載の装置。
【請求項５】
前記テーブルが、前記関数コールアドレスを、前記特定のアプリケーションにおける使用頻度に基づいて降順で記憶する、請求項1に記載の装置。
【請求項６】
前記プロセッサが前記テーブルを動的にロードする、請求項1に記載の装置。
【請求項７】
前記テーブルが前記メモリに、またはキャッシュに記憶される、請求項1に記載の装置。
【請求項８】
前記テーブルの場所が、グローバルポインタに相対して判断される、請求項1に記載の装置。
【請求項９】
前記グローバルポインタが、前記複数の関数コールアドレスの第1の関数コールアドレスを識別し、前記第1の関数コールアドレスが、前記グローバルポインタに前記即値を加算することによって識別される、請求項8に記載の装置。
【請求項１０】
前記グローバルポインタが、前記メモリ内のグローバルデータセクションを識別し、第1の関数コールアドレスが、前記グローバルポインタから前記即値を減算することによって識別される、請求項8に記載の装置。
【請求項１１】
前記命令のサイズが、前記命令のアドレスと、前記関数コールアドレスとの間の差を識別するのに必要とされるビット数未満である、請求項1に記載の装置。
【請求項１２】
前記命令の前記サイズが、24ビット、16ビット、または8ビット以下である、請求項11に記載の装置。
【請求項１３】
前記メモリが、前記テーブルをグローバルオフセットテーブル内に記憶し、前記即値が、前記テーブルのテーブル索引に関連付けられる、請求項1に記載の装置。
【請求項１４】
前記グローバルオフセットテーブルが、位置非依存コード実行をサポートする、請求項13に記載の装置。
【請求項１５】
セットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末(PDA)、固定位置データユニット、およびコンピュータからなる群から選択されるデバイスをさらに含み、前記メモリが前記デバイスに組み込まれる、請求項1に記載の装置。
【請求項１６】
オペコードおよびオペランドを生じるために、処理要素において命令を処理するステップであって、
前記オペコードがテーブル関数コール命令を識別し、
前記オペランドが、
即値、または
前記即値を記憶するレジスタのレジスタインジケータを指定し、
前記即値が、プロセッサの関数セットに対応する複数の関数コールアドレスを含むテーブルから選択可能な関数コールアドレスを識別するのに使用可能であり、前記関数セットが、コンパイラによって、またはリンカによって決定される特定のアプリケーションの頻繁に使われる関数を含む、前記処理するステップと、
前記即値を、前記関数コールアドレスを識別するための前記テーブルへの索引として使うステップと、
前記テーブルを動的に更新するステップと
を含む方法。
【請求項１７】
前記テーブル中の各関数コールアドレスが、別個の関数に対応し、前記テーブルが、前記特定のアプリケーションの実行中に動的に更新される、請求項16に記載の方法。
【請求項１８】
前記関数コールアドレスにジャンプするステップをさらに含む、請求項16に記載の方法。
【請求項１９】
前記ジャンプするステップが、前記命令の処理中に起こる、請求項18に記載の方法。
【請求項２０】
プロセッサによって実行されると、前記プロセッサに、
命令コードからオペコードおよびオペランドを生じさせるプログラムコードであって、前記オペコードがテーブル関数コール命令を識別し、
前記オペランドが、
即値、または
前記即値を記憶するレジスタのレジスタインジケータを指定し、
前記即値が、前記プロセッサの関数セットに対応する複数の関数コールアドレスを含むテーブルから選択可能な関数コールアドレスを識別するのに使用可能であり、前記関数セットが、コンパイラによって、またはリンカによって決定される特定のアプリケーションの頻繁に使われる関数を含む、前記生じさせるプログラムコードと、
前記即値を、前記関数コールアドレスを識別するための前記テーブルへの索引として使わせるプログラムコードと、
前記識別された関数コールアドレスにジャンプさせるプログラムコードと、
前記テーブルを動的に更新させるプログラムコードと
を含むコンピュータ可読記憶媒体。
【請求項２１】
前記ジャンプが、前記命令コードの処理中に起こり、前記テーブルが、前記特定のアプリケーションの実行中に動的に更新される、請求項20に記載のコンピュータ可読記憶媒体。
【請求項２２】
命令を記憶するための手段と、
オペコードおよびオペランドを生じるために、前記命令を処理する手段と、
テーブルを動的に更新するための手段と、を備える装置であって、
前記オペランドが、
即値、または
前記即値を記憶するレジスタのレジスタインジケータを指定し、
前記即値が、プロセッサの関数セットに対応する複数の関数コールアドレスを含む前記テーブルから選択可能な関数コールアドレスを識別するのに使用可能であり、前記関数セットが、コンパイラによって、またはリンカによって決定される特定のアプリケーションの頻繁に使われる関数を含み、
前記処理するための手段が、前記識別された関数コールアドレスにジャンプするように構成される装置。
【請求項２３】
前記複数の関数コールアドレスを前記テーブルに記憶するための手段をさらに備え、前記テーブルを動的に更新するための前記手段が、前記特定のアプリケーションの実行中に前記テーブルを動的に更新するように構成される、請求項22に記載の装置。
【国際調査報告】
2014523594.tif 000009
2014523594.tif 000010
2014523594.tif 000011