特許第6189866号(P6189866)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ クアルコム,インコーポレイテッドの特許一覧

特許6189866プロセッサモードを切り替えるための、呼び出される関数のアドレスの最下位ビットの使用
<>
  • 特許6189866-プロセッサモードを切り替えるための、呼び出される関数のアドレスの最下位ビットの使用 図000002
  • 特許6189866-プロセッサモードを切り替えるための、呼び出される関数のアドレスの最下位ビットの使用 図000003
  • 特許6189866-プロセッサモードを切り替えるための、呼び出される関数のアドレスの最下位ビットの使用 図000004
  • 特許6189866-プロセッサモードを切り替えるための、呼び出される関数のアドレスの最下位ビットの使用 図000005
  • 特許6189866-プロセッサモードを切り替えるための、呼び出される関数のアドレスの最下位ビットの使用 図000006
  • 特許6189866-プロセッサモードを切り替えるための、呼び出される関数のアドレスの最下位ビットの使用 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6189866
(24)【登録日】2017年8月10日
(45)【発行日】2017年8月30日
(54)【発明の名称】プロセッサモードを切り替えるための、呼び出される関数のアドレスの最下位ビットの使用
(51)【国際特許分類】
   G06F 9/42 20060101AFI20170821BHJP
   G06F 12/04 20060101ALI20170821BHJP
【FI】
   G06F9/42 310A
   G06F9/42 320A
   G06F12/04 540A
【請求項の数】6
【全頁数】14
(21)【出願番号】特願2014-555869(P2014-555869)
(86)(22)【出願日】2013年2月7日
(65)【公表番号】特表2015-511358(P2015-511358A)
(43)【公表日】2015年4月16日
(86)【国際出願番号】US2013025187
(87)【国際公開番号】WO2013119842
(87)【国際公開日】20130815
【審査請求日】2016年1月8日
(31)【優先権主張番号】61/595,773
(32)【優先日】2012年2月7日
(33)【優先権主張国】US
(31)【優先権主張番号】13/655,499
(32)【優先日】2012年10月19日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】507364838
【氏名又は名称】クアルコム,インコーポレイテッド
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100163522
【弁理士】
【氏名又は名称】黒田 晋平
(72)【発明者】
【氏名】チャールズ・ジョセフ・タボニー
(72)【発明者】
【氏名】エーリヒ・ジェームズ・プロンドケ
(72)【発明者】
【氏名】ルシアン・コドレスク
(72)【発明者】
【氏名】スレッシュ・ケー・ヴェンクマハンティ
(72)【発明者】
【氏名】エバンドロ・カルロス・メネセス
【審査官】 清木 泰
(56)【参考文献】
【文献】 特開平10−097421(JP,A)
【文献】 特開2001−142692(JP,A)
【文献】 国際公開第2009/137108(WO,A1)
【文献】 特表2010−503107(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30− 9/42
G06F12/00−12/06
G06F13/16−13/18
G06F 9/44− 9/455
G06F 9/06
G06F 9/48− 9/54
G06F11/36
G06F11/00
(57)【特許請求の範囲】
【請求項1】
プロセッサにおいて実行モードを切り替える方法であって、
前記プロセッサが第1の実行モードで動作中であるとき、ターゲットアドレスへのフローの変化を起こす第1の呼出しまたは復帰命令を検出するステップと、
前記ターゲットアドレスの整列ビットの両方を分析するステップであって、前記整列ビットが、前記ターゲットアドレスのビット列における、最下位側の2つのビットであり、前記整列ビットが所定の値を示す場合、前記ターゲットアドレスは32ビット境界に対して整列していることになる、ステップと、
前記第1の実行モードに対応する全ての命令が前記境界に対して整列されるように強制されている場合、少なくとも1つの整列ビットが非ゼロ値を有するときに前記プロセッサの動作を、前記第1の実行モードから第2の実行モードに切り替えることを判断するステップと、
前記第1の実行モードに対応するそれぞれの命令が前記境界に対して非整列にされることが許容されている場合、整列ビットの両方がゼロ値を有するときに前記プロセッサの動作を、前記第1の実行モードから前記第2の実行モードに切り替えるステップ
を含む方法。
【請求項2】
前記整列ビットが「00」である場合に、全ての命令が前記境界に対して整列されるように強制されている実行モードに切り替えるものであり、前記整列ビットが「01」、「10」、または「11」のうちの1つである場合に、それぞれの命令が前記境界に対して非整列にされることが許容されている実行モードに切り替えるものである、請求項1に記載の方法。
【請求項3】
前記ターゲットアドレスを備えるレジスタが指定される、請求項1に記載の方法。
【請求項4】
ユーザステータスレジスタにおいて、前記整列ビットに基づいて、前記プロセッサが動作している前記実行モードの指示を与えるステップをさらに含む、請求項1に記載の方法。
【請求項5】
第1の実行モードおよび第2の実行モードを含む少なくとも2つの実行モードで命令を実行するための手段と、
前記第1の実行モードでの実行中に、第1の呼出しまたは復帰命令を検出するための手段であって、第1の呼出しまたは復帰命令は、プロセッサが第1の実行モードで動作しているときに、ターゲットアドレスへのフローの変化を起こす、手段と、
前記第1の呼出しまたは復帰命令の前記ターゲットアドレスの整列ビットの両方を分析するための手段であって、前記整列ビットが、前記ターゲットアドレスのビット列における、最下位側の2つのビットであり、前記整列ビットが所定の値を示す場合、前記ターゲットアドレスは32ビット境界に対して整列していることになる、手段と、
前記第1の実行モードに対応する全ての命令が、前記境界に整列されるように強制されている場合、少なくとも1つの整列ビットが非ゼロ値を有するときに前記プロセッサの動作を、前記第1の実行モードから前記第2の実行モードに切り替えることを判断するための手段と、
前記第1の実行モードに対応するそれぞれの命令が前記境界に対して非整列にされることが許容されている場合、整列ビットの両方がゼロ値を有するときに前記プロセッサの動作を、前記第1の実行モードから前記第2の実行モードに切り替える手段と
を備える処理システム。
【請求項6】
プロセッサによって実行されると、前記プロセッサに、請求項1に記載の方法を実施させるコードを備える非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
米国特許法第119条に基づく優先権の主張
本特許出願は、本出願の譲受人に譲渡され、参照により明白に本明細書に組み込まれる、2012年2月7日に出願された「USING THE LEAST SIGNIFICANT BITS OF A CALLED FUNCTION'S ADDRESS TO SWITCH PROCESSOR MODES」という名称の仮出願第61/595,773号の優先権を主張する。
【0002】
開示する実施形態は、処理システムにおける実行モードの切替えに関する。より詳細には、例示的な実施形態は、少なくとも2つの命令モードを備える処理システムと、呼び出される関数のアドレスの1つまたは複数の最下位ビットを使って少なくとも2つの命令モードを切り替えるための技法とを対象とする。
【背景技術】
【0003】
プロセッサはしばしば、複数の実行モードをサポートするように構成される。たとえば、第1の実行モードは固定幅の命令を備えることができ、第2の実行モードは可変幅命令をサポートすることができる。同じアドレスまたはプログラムカウンタ(PC)値が、プロセッサが第1の実行モードにある場合は第1の命令を、またはプロセッサが第2の実行モードにある場合は第2の命令をポイントし得るように、共通アドレス空間は、各モードにおける命令の間で共有することができる。プロセッサは、2つのモードを切り替えることが可能であり得るので、2つの命令のうちどの1つが現在のPC値によってアドレス指定されるかを確かめ、したがって命令が正しく実行中であることを保証するために、実行モードを追跡することが必要になる。
【0004】
知られているARMプロセッサを参照すると、ARMモードは、固定幅(32ビット)命令をサポートし、THUMBモードは、可変幅(16ビットおよび32ビット)命令をサポートする。バイトアドレス指定可能メモリ中の共通アドレス空間は、ARMモードとTHUMBモードの両方での命令を備え得る。ただし、これらの2つのモードでの命令の整列は異なり得る。たとえば、ARMモード命令は、ARMモード命令についての2つの最下位アドレスビットが常に「00」になるように、32ビット境界において整列され得る。一方、THUMBモード命令は、THUMBモード命令についての2つの最下位アドレスビットが「10」または「00」になり得るように、16ビットまたは32ビット境界のいずれかにおいて整列され得る。したがって、アドレスを知るだけでは、2つのモード、すなわちARMまたはTHUMBのうちどの1つが現在実行されているかを最終的に判断するのには不十分である。
【0005】
どのモードが実行中であるかを追跡するために、ARMプロセッサは、モードビットをPCの最下位ビット(LSB)に記憶することを含む手法を採用している。THUMBモードでのPCのLSBは、上記のように、2つの最下位アドレスビットが「10」または「00」のいずれかであるので、予約ビットであってよく、したがってLSB(両方の場合において「0」である)が、モードビットを記憶するのに使われ得る。実行は、ジャンプ命令などの関数呼出しにおいてARMモードとTHUMBモードとの間で切り替わり得る。したがって、ジャンプ命令が、実行を、THUMBモードでの命令を含む関数に転送した場合、ARMプロセッサは、関数のアドレス+1にジャンプすることによって、THUMBモードへの、このモード変更を実施する。このようにして、THUMBモードにおける2つの最下位ビットの値は「11」または「01」のいずれかになり、そうすることによって、これらのビットを、ARMモードにおける2つの最下位ビットの「00」値とは区別する。
【0006】
ARMプロセッサによって採用されている上記手法は、実行モードを追跡する目的は達成するが、付随する制限を受ける。たとえば、上記のように、THUMBモードへのジャンプごとに、「1」の加算が求められる。これにより、ソフトウェア、特にリンカが複雑になる。リンカは、各関数のモードを判断し、次いで、各関数のすべての呼出しに対して、正常呼出しとモード切替え呼出しとの間の選択をしなければならない。さらに、デバッガは、デバッガ内から呼び出される関数の追跡を続けて、それぞれ、関数のPC値にジャンプするか、それとも関数のPC値+1にジャンプするか判断するために、これらの関数がARM関数であるかそれともTHUMB関数であるか判断する必要があるので、デバッガも影響を受ける。
【0007】
上記手法に関連したさらに別の欠点は、モードビットを記憶するためのPCのLSBの使用から生じる。LSBは、モードを表すのに使われるので、LSBは、もはや実際のアドレスの一部ではない。したがって、ARMプロセッサが、THUMBモードへの8ビットおよび24ビット命令を含むべきである場合、THUMBモードにおけるあらゆる関数の開始点は依然として、モード追跡を容易にするために、16ビット整列されることが求められる。このことは、関数すべてのうち約半分が、関数内の第1の命令を16ビット境界に整列するために、関数の開始の前に8ビットの無動作命令(nop)を採り入れるよう要求することを伴う。
【0008】
MIPSおよびPowerPCなど、他の知られているプロセッサアーキテクチャも、実行モードの切替えに関連した同様の課題に直面し、これらの課題を扱うために、同様に欠点のある方法を採用している。それに応じて、既存のアーキテクチャは、実行モードを追跡し、切り替えるための手法において欠点を呈している。たとえば、いくつかの手法は、メモリ管理ユニット(MMU)中のどのページも、いずれかのモードに属し得るので、関連付けられたMMUに記憶された命令のPC値を使って、命令用の実行モードを判断することを伴う。ページ属性を使ってモードを判断するハードウェアコストの増大に関する欠点は、モードビットが、MMUのページテーブルエントリ中の追加余地を占め、従来のページテーブルエントリが、サイズの制約を受けることである。ページ属性を使ってモードを判断するソフトウェアコストに関する欠点は、ローダを複雑にすることを含み、ローダは、ページがどのモードにあると想定されるか判断し、次いで、そのページ用のページテーブルエントリを適切なビットで満たさなければならなくなる。さらに、デバッガは、特定のページ用のページテーブル中でエントリをルックアップしなければならなくなり、その後、そのページ中で命令を逆アセンブルする場合がある。同様に、予約動作コード(オペコード)ビットを使って、アドレスに関連付けられたモードを判断するための特定のプログラムコードを含む、他の知られている手法も不完全である。
【発明の概要】
【発明が解決しようとする課題】
【0009】
したがって、当該分野において、実行モードを追跡し、切り替えるための上述した手法の欠点を克服する必要が、それに付随してある。
【課題を解決するための手段】
【0010】
本発明の例示的な実施形態は、処理システムにおいて実行モードを切り替えるためのシステムおよび方法を対象とする。より詳細には、例示的な実施形態は、少なくとも2つの命令モード、すなわち古典/整列モードおよび圧縮/非整列モードを備え、呼び出される関数のアドレスの1つまたは複数の最下位ビットを使って、これらの少なくとも2つの命令モードを切り替える処理システムを対象とする。
【0011】
たとえば、例示的な実施形態は、プロセッサ内で実行モードを切り替える方法を対象とし、この方法は、プロセッサが第1の実行モードで動作中であるとき、第1の命令を検出するステップと、第1の命令のターゲットアドレスの1つまたは複数のビットを分析するステップと、1つまたは複数のビットに基づいて、プロセッサの動作を、第1の実行モードから第2の実行モードに切り替えるかどうか判断するステップとを含む。
【0012】
別の例示的な実施形態は、第1の実行モードおよび第2の実行モードを含む少なくとも2つの実行モードで命令を実行するように構成されたプロセッサと、第1の実行モードでの実行中に第1の命令を検出するように構成された論理と、第1の命令のターゲットアドレスの1つまたは複数のビットを分析するように構成された論理と、1つまたは複数のビットに基づいて、プロセッサの動作を第1の実行モードから第2の実行モードに切り替えるかどうか判断するように構成された論理とを備える装置を対象とする。
【0013】
さらに別の例示的な実施形態は、第1の実行モードおよび第2の実行モードを含む少なくとも2つの実行モードで命令を実行するための手段と、第1の実行モードでの実行中に第1の命令を検出するための手段と、第1の命令のターゲットアドレスの1つまたは複数のビットを分析するための手段と、1つまたは複数のビットに基づいて、プロセッサの動作を、第1の実行モードから第2の実行モードに切り替えるかどうか判断するための手段とを備える処理システムを対象とする。
【0014】
別の例示的な実施形態は、コードを備える非一時的コンピュータ可読記憶媒体を対象とし、コードは、プロセッサによって実行されると、プロセッサに、プロセッサの実行モードを切り替えるための動作を実施させ、非一時的コンピュータ可読記憶媒体は、プロセッサが第1の実行モードで動作中であるとき、第1の命令を検出するためのコードと、第1の命令のターゲットアドレスの1つまたは複数のビットを分析するためのコードと、1つまたは複数のビットに基づいて、プロセッサの動作を、第1の実行モードから第2の実行モードに切り替えるかどうか判断するためのコードとを備える。
【0015】
添付の図面は、本発明の実施形態の説明を助けるために提示され、実施形態の限定ではなく、実施形態の例示のためのみに提供される。
【図面の簡単な説明】
【0016】
図1】例示的な実施形態に従って構成された処理システムの簡略図である。
図2】例示的な実施形態による、実行モードを切り替えるように構成されたプロセッサによって実行される例示的なコードシーケンスを示す図である。
図3】例示的な実施形態による、実行モードを切り替えるための方法の動作フローを示す図である。
図4A】例示的な実施形態による、実行モードを追跡し、切り替えるための方式を示す図である。
図4B】例示的な実施形態による、実行モードを追跡し、切り替えるための方式を示す図である。
図5】本開示の一実施形態が有利に使用され得る例示的なワイヤレス通信システム500を示す図である。
【発明を実施するための形態】
【0017】
本発明の特定の実施形態を対象とする以下の説明および関連する図面で、本発明の態様が開示される。本発明の範囲から逸脱することなく、代替の実施形態が考案され得る。さらに、本発明の関連する詳細を不明瞭にしないように、本発明のよく知られている要素は詳細に説明されず、または省略される。
【0018】
「例示的な」という言葉は、「例、実例、または例示として機能すること」を意味するために本明細書で使用される。「例示的な」として本明細書で説明される任意の実施形態は、必ずしも他の実施形態よりも好ましいか、または有利であると解釈されるべきではない。同様に、「本発明の実施形態」という用語は、本発明のすべての実施形態が、論じられた特徴、利点または動作モードを含むことを必要としない。
【0019】
本明細書で使用される用語は、特定の実施形態を記載することのみを目的とし、本発明の実施形態を限定するものではない。本明細書で使用する単数形「a」、「an」、および「the」は、文脈が別段に明確に示すのでなければ、複数形をも含むものとする。さらに、本明細書で使用される「備える(comprises)」、「備えている(comprising)」、「含む(includes)」、および/または「含んでいる(including)」という用語は、述べられた特徴、整数、ステップ、動作、要素、および/または構成要素の存在を明示するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、および/またはそれらのグループの存在または追加を排除しないことを理解されたい。
【0020】
さらに、多くの実施形態が、たとえばコンピューティングデバイスの要素によって実施すべき、一連のアクションに関して説明される。本明細書で説明する様々なアクションは、特定の回路(たとえば、特定用途向け集積回路(ASIC))によって、1つまたは複数のプロセッサによって実行されるプログラム命令によって、または両方の組合せによって実施できることを認識されよう。さらに、本明細書で説明するこれらの一連のアクションは、実行時に、関連するプロセッサに本明細書で説明する機能性を実施させるコンピュータ命令の対応するセットを記憶した、任意の形式のコンピュータ可読記憶媒体内で全体として具現化されるものと見なすことができる。したがって、本発明の様々な態様は、特許請求される主題の範囲内にすべて入ることが企図されているいくつかの異なる形式で具現化され得る。さらに、本明細書で説明する実施形態ごとに、そのような任意の実施形態の対応する形式を、たとえば、記載の動作を実施する「ように構成された論理」として本明細書で説明することがある。
【0021】
例示的な実施形態は、既存の手法に関連した欠点を回避しながら、実行モードを追跡し、切り替えるための技法を含む。一実施形態は、少なくとも2つの実行モードを含むことができ、実行モードは、モードにおける命令のそれぞれの整列に関して定義され得る。命令の整列に対する言及は概して、32ビット(または4バイト)のメモリアドレス空間に関して行われるが、これは限定であると企図されるべきでない。開示する技法は、本開示の範囲から逸脱することなく、他のメモリアドレス境界に容易に拡張することができる。
【0022】
したがって、第1の実行モードにおいて、命令は、非整列/不整列にされ、または制限なく任意に整列されることが認められてよい。この第1の実行モードは、本明細書では「圧縮」モードと呼ばれる。第2の実行モードにおいて、命令の整列は、32ビット境界など、対応するメモリアドレス空間内の指定された境界に制限され得る。この第2の実行モードは、本明細書では「古典」モードと呼ばれる。
【0023】
ここで図1を参照すると、例示的な処理システム100の簡略図が示されている。処理システム100は、メモリ104に結合されたプロセッサ102を備えるように示されている。図示していないが、処理システム100は、たとえば、当該分野においてよく知られている、1つまたは複数の命令および/またはデータキャッシュ、I/Oデバイス、コプロセッサなど、他の様々な構成要素を備え得る。メモリ104は、バイトアドレス指定可能であり、非整列にされ、または32ビット境界で整列されてよい命令(すなわち、それぞれ圧縮モードおよび古典モードにある両方の命令)を備え得る。プロセッサ102は、古典モードならびに圧縮モードで命令を実行するように構成され得る。
【0024】
非限定的な例示的実施形態において、古典モードでの命令は、メモリ104中の32ビット境界に対して整列されてよく、したがって、古典モードでのあらゆる命令のアドレスの2つの最下位ビットが値「00」を有すると規定する。さらに、本実施形態では、圧縮モードでの選択された命令は、選択された命令のアドレスの2つの最下位ビットが非ゼロ値、すなわち、「00」以外の任意の値を有する(たとえば、選択された命令のアドレスの2つの最下位ビットが、値「01」、「10」、または「11」であることを強制され得る)ように、強制的に不整列にされ得る。したがって、アドレスのこれらの最下位ビットは、整列を示すことができ、本明細書では「整列ビット」と呼ばれ得る。
【0025】
強制的に不整列にされる、圧縮モードでの選択された命令は、入口点に対応し得る。たとえば、入口点は、圧縮モードでの命令を備える関数の冒頭をマーキングすることができ、入口点は、圧縮モードからの呼出しに続く命令であってよく、または入口点は、例外/割込みハンドラの冒頭をマーキングすることができる。入口点の精密性にかかわらず、古典モードでの実行から圧縮モードでの実行への切替えをトリガし得る選択された命令は、強制的に不整列にされ得る。圧縮モードへの関数呼出しに続く圧縮モード命令など、すべての残りの命令の整列は、乱されないままであってよい(すなわち、選択された命令を除くすべての命令のアドレスの整列ビットは、「00」を含む任意の値であってよい)。この構成を用いて、例示的な実施形態は、従来の手法での、実行モードを追跡し、切り替える欠点を回避しながら、古典モードでの実行を圧縮モードでの実行に切り替えることができる。
【0026】
ここで図2を参照すると、プロセッサ102によって実行される例示的なコードシーケンスが示されている。コードシーケンス210および214は、古典(整列)モードでの命令を備え、コードシーケンス212は、圧縮(非整列または不整列)モードでの命令を備える。図示のように、コードシーケンス210は、命令a1で始まるとともに命令a1〜a7を含む関数1を備える。関数1および対応する命令a1〜a7、ならびに呼出し、すなわち呼出し1についてのアドレスの整列ビットは、「00」と示されている。いくつかの実施形態は、任意選択のユーザステータスレジスタ(または、明示的には図示しないが「USR」)を含むことができ、USRは、整列ビットのステータスを示すように構成され得る。したがって、コードシーケンス210の実行中に整列ビットが「00」である間、USRは、その実行が古典モードであることを示すように任意選択でアップデートされ得る。命令a4の後、関数2の呼出し、すなわち呼出し1に遭遇したとき、実行は、関数2へのパス202に従えばよい。
【0027】
関数2に関して、この関数は、命令b1で始まり、圧縮モードにある命令b1〜b6を含み得る。プロセッサ102が、誤り実行モードでの誤った実行を避けるために、パス202をとることによって引き起こされる、実行モードの切替えを認識することが必要である。したがって、関数2は、例示的な実施形態において、圧縮モードへの入口点として認識され得る。この切替えの認識は、関数2のアドレスの2つの最下位ビット(または整列ビット)、すなわち「AB」を、「00」以外の任意の値になるよう強制することによって遂行することができる。たとえば、関数2のアドレスは、「AB」が「01」、「10」、または「11」となるように、メモリ104中で強制的に不整列にされ得る。この強制的不整列は、たとえば、処理システム100内のコンパイラ、ソフトウェア、または専用の論理(明示的には図示せず)において遂行することができる。一例では、関数2の強制的な不整列は、パス202に沿って関数2の前にnopを加えるようにアセンブラを構成することによって遂行され得る。nopのサイズは、整列ビット「AB」が「00」以外の値を確実に有するように調整されてよい。たとえば、整列ビット「AB」がすでに「00」以外の値である場合、アセンブラはnopを挿入しなくてよい。一方、「AB」の値が「00」に等しい場合、アセンブラは、単一の1バイトnopを挿入してよく、こうすることにより、「AB」が「01」に等しくなるように関数2の開始アドレスが調整される。
【0028】
プロセッサ102は、命令の実行中に遭遇するあらゆる入口点についての整列ビットを調査するように構成され得る。したがって、入口点関数2が非ゼロ値としての整列ビット「AB」を有することをプロセッサ102が認識すると、USRは随意に、実行が現時点で圧縮モードにあることを示すようにアップデートされ得る。命令b1〜b3の整列は、乱されないままにされてよく、それらの命令の対応するアドレスの整列ビットは、「00」を含む任意の値を有してよい。
【0029】
その後、命令b3の後で、関数3の呼出し、すなわち呼出し2に遭遇すると、実行は、関数3へのパス206に従えばよい。繰り返しになるが、プロセッサ102は、関数3が入口点なので、関数3の整列アドレスビットを調査するように構成され得る。ただし、今回は、関数3は整列古典モードにあるので、入口点、すなわち関数3の整列ビットが「00」であることが認識され得る。したがって、プロセッサ102は、実行が、命令c1で始まるとともに命令c1〜c5を含む関数3用の古典モードへの復帰であることを認識することができる。プロセッサ102は随意に、USRを、復帰から古典モードへの指示をするようにアップデートすることもできる。
【0030】
ここで復帰、すなわち、パス204に沿った、圧縮モードでのコードシーケンス212から、古典モードでのコードシーケンス210への復帰1に移ると、プロセッサ102は、入口点の整列ビットを調査することができる。この場合、入口点は命令a5であり、したがって、命令a5の整列ビットが「00」であることが認識され得る。したがって、実行が古典モードに復帰したと結論づけることができる。それに応じて、USRは、実行が古典モードにあることを示すようにアップデートされ得る。
【0031】
復帰、すなわち、パス208に沿った命令b4への復帰2のために、入口点は命令b4である。正しい動作を確実にするために、プロセッサ102は、命令b4が圧縮モードにあることを認識できなければならない。これを遂行するために、命令b4は、命令b4の整列ビットが「00」にならないように、強制的に不整列にされ得る。一例では、命令b4の強制的な不整列は、呼出し、すなわちパス206に沿った関数3への呼出し2の前にnopを加えるようにアセンブラを構成することによって遂行され得る。nopのサイズは、最下位ビット「CD」が「00」以外の値を確実に有するように調整されてよい。別の例では、呼出し命令、すなわちパス206に沿った関数3への呼出し2のサイズが、命令b4の最下位ビット「CD」が値「01」、「10」、または「11」に強制されるように増大されてよい。命令b5およびb6の整列は無制限であり、乱されない。したがって、命令b5およびb6のアドレスの整列ビットは、「00」を含む任意の値でよい。
【0032】
ここで図4Aを参照すると、呼出し/復帰のために古典モード(整列)および圧縮モード(非整列)を追跡し、それらを切り替えるための一般化された方式が示されている。図示のように、整列アドレスへの呼出し/復帰は、ループ406によって示されているように、古典モード402に留まり得る。古典モード402から非整列アドレスへの呼出し/復帰は、パス408に沿って圧縮モード404に遷移し得る。非整列アドレスへの呼出し/復帰は、ループ412によって示されているように、圧縮モード404に留まり得る。最後に、圧縮モード404から整列アドレスへの呼出し/復帰は、パス410に沿って古典モード402に遷移し得る。
【0033】
上記実施形態は、呼出し/復帰に関して記載したが、例示的な技法は、他のそのような命令にも拡張することができる。たとえば、いくつかの実施形態は、たとえばjump、jumpr、callr、dealloc_returnなどの命令についてモード切替えを監視するように拡張することができるが、これについては、図4Bを参照して手短に記載する。これらの命令は、モード切替えについて監視されてよく、したがって、実行は、呼出し/復帰について上述したように、同様の技法に従うことによって、正しいモードになるよう保証され得る。
【0034】
ジャンプ命令に関して、ジャンプ命令は、例示的な実施形態に関する2つの異なるやり方のうち1つで使用することができる。一例では、ジャンプ命令は、関数内で遭遇すると、その関数内の命令にジャンプするのに使うことができる。別の例では、ジャンプ命令は、末尾呼出し(または「tailcall」)として振る舞うことができ、末尾呼出しは、当業者には認識されるように、呼出しタイプ挙動を実施するのに使うことができる。関数の呼出しは、呼出しスタックに保存され得る、呼出しの場所に復帰するための復帰命令を要求し得るが、tailcallは、呼出しの場所が、スタックに記憶または保存されることを必要としなくてよい。一方、tailcallは、元の呼出し側に直接復帰することができる。ジャンプなどの命令は、後でさらに説明するように、追加考慮事項を必要とする場合がある。
【0035】
古典モードでの関数内でジャンプ命令に遭遇し、ジャンプ命令の挙動が、その関数内の命令にジャンプすることである場合、モード変更があってはならない。ただし、ジャンプ命令が、tailcall命令などのタイプの挙動を有する場合、ジャンプ命令を実行することにより、制御フローが、関数の外でよい入口点に移り得る。入口点は、古典モードまたは圧縮モードのいずれかにあり得る。したがって、入口点の最下位ビットを調査することによって、モード切替えが起こる必要があるかどうかの判断が行われ得る。したがって、古典モードにおいて遭遇するジャンプ命令の挙動は、上述した呼出し命令の挙動と同様であり得る。
【0036】
ただし、圧縮モードにある関数内でジャンプ命令に遭遇した場合、特殊な考慮事項が生じ得る。前述のように、圧縮モードでは、強制的に不整列にされるいくつかの入口点を除いて、残りの命令は、整列されてもされなくてもよい。言い換えると、関数内の残りの命令のアドレスの最下位ビットは、「00」を含む任意の値でよい。したがって、ジャンプ命令が、関数内のターゲット命令へのジャンプを引き起こしたとき、ターゲット命令のアドレスは、強制的に不整列にされない可能性があるので、任意の値でよい。したがって、ターゲット命令のアドレスの最下位ビットが「00」である場合、このことは、古典モードへの切替えが起きたことを示さないので、ターゲット命令のアドレスの最下位ビットを調査することは、モード切替えが起きたかどうか判断するのには不十分な場合がある。そのような状況を扱うために、実施形態は、特殊な命令または特殊な挙動をもつ命令を含み得る。
【0037】
1つのそのような特殊な挙動は、圧縮モードにおいて、ジャンプ命令の挙動を、ジャンプ命令と同じ関数内のターゲット命令など、モード切替えを引き起こさない命令へのジャンプにのみ制限すること、および同じ関数の外にあるとともに可能性としては異なるモードでよいターゲット命令へのジャンプなど、モード変更を引き起こし得る状況のための別個のtailcall命令を定義することを含み得る。したがって、tailcall関数の最下位ビットを調査することにより、モード変更が起きたかどうかを明らかにすることができ、プロセッサは、それに従ってこのモード変更を扱うことができる。
【0038】
したがって、ジャンプ命令などの命令に対して、命令の実行がモード変更を引き起こすかどうかの判断は、命令に遭遇するときのモードに基づき得る。古典モード内でジャンプ命令に遭遇した場合、ターゲットアドレスの最下位ビットは、モード変更が起きたかどうか判断するのに使うことができる。一方、圧縮モード内でジャンプ命令に遭遇した場合、ターゲットアドレスの最下位ビットによって与えられる指示にかかわらず、モード変更は起こらず、またはモード変更は抑止され得る。そうではなく、特殊なtailcall命令が、モード変更を要求し得るジャンプタイプ挙動を実現するために圧縮モードにおいて使われてよく、そのようなモード変更は、tailcall命令の最下位ビットに基づいて判断され得る。同様に、いくつかの実施形態では、復帰命令も、圧縮モードに制限され、古典モードでは使われなくてよい。
【0039】
他の命令は、jumprおよびtailcallrを含み得る。jumpおよびtailcallは、ターゲット命令のアドレスを指定することができ、jumprおよびtailcallr命令は、ターゲット命令のアドレスを保持することができるレジスタを指定することができる。同様に、callr命令は、呼び出されるべき関数のアドレスを保持することができるレジスタを指定することができる。レジスタを割振り解除するのに使うことができるdealloc_return命令は、dealloc_return命令の実行に関連したモード変更が、dealloc_return命令のターゲットアドレスの最下位ビットの調査に基づくように構成されてもよい。
【0040】
ここで図4Bを参照すると、モード切替え挙動および上記特殊命令を含む例示的な命令の追跡が示されている。呼び出される関数のターゲット命令/入口点のアドレスの最下位ビットに基づいて、call、callr、jump、jumpr、およびdealloc_returnなどの命令は、ループ456により、モード切替えを引き起こすことなく、古典モード452に留まってよい。あるいは、モード切替えが起こってもよく、これらの命令、すなわちcall、callr、jump、jumpr、およびdealloc_returnは、パス458に沿って圧縮モード454に遷移し得る。圧縮モード454から、jumpおよびjumprなどの命令は、前述のように、モード切替えについて追跡されない。そうではなく、tailcall、tailcallr、および復帰が追跡され得る。したがって、呼び出される関数のターゲット命令/入口点のアドレスの最下位ビットに基づいて、call、callr、tailcall、tailcallr、return、およびdealloc_returnなどの命令は、ループ462に従って圧縮モード454に留まり得る。あるいは、モード切替えが起こってもよく、これらの命令、すなわちcall、callr、tailcall、tailcallr、return、およびdealloc_returnは、パス460に沿って古典モード452に遷移し得る。
【0041】
いくつかの例示的な実施形態では、圧縮モードでの関数への入口点など、選択された命令のみが強制的に不整列にされてよく、圧縮モードにある残りの命令のアドレスは、乱されないままにされてよい。したがって、THUMBモードでのARMプロセッサなど、既存の手法とは対照的に、モードの指示を保持するのに、または呼び出される関数のPC値+1にジャンプするのにLSBを使う必要はなくなる。上述したように、例示的な実施形態では、USRは、実行モードの指示を効率的に与えるように構成され得る。さらに、これらのタイプの命令、すなわちパス202に沿った関数2の呼出し1およびパス208に沿った命令b4への復帰2のみが、nopが挿入されることを要求すればよく、204に沿った命令a5への復帰1およびパス206に沿った関数3の呼出し2などの命令は、そのようなnopを要求しない。したがって、これらの4つのタイプの呼出し/復帰命令のうち2つだけが、nopの導入による不整列を要求すればよく、このことは、nopの導入によるコード空間の浪費が削減されることを意味する。
【0042】
さらに、例示的な実施形態では、命令のアドレスは、それ自体が、いかなる複合コードもコストがかかる追跡機構も要求することなく、関数呼出しおよび復帰のための実行モードを認識するのに、好都合に使われ得る。すべての他の命令に対しても、USRは、実行モードの指示を効率的に与えるように構成され得る。例示的な実施形態は、予約ビットが実行モードを示す必要性を避け、実施形態は、それに応じて、関数への入口点に続く命令のアドレスの制限に関連した欠点を回避する。さらに、アドレスの値を使って実行モードを判断することは、呼出しまたは復帰についてのみアドレスビットの調査を要求する。したがって、ターゲット命令に関連付けられたモードが何であるかを前もって知る必要はない。さらに、例示的な実施形態では、MMUページテーブルエントリは、命令の実行モードに関する情報を保持する必要はない。したがって、実行が圧縮モードと古典モードとの間で、またはその逆で切り替わるとき、処理システム100内のMMU(図示せず)が、動作を切り替えることも、特殊な関数を実施することも要求されない。
【0043】
実施形態は、本明細書で開示されるプロセス、機能および/またはアルゴリズムを実施するための、様々な方法を含むことが理解されよう。たとえば、図3に示すように、実施形態は、プロセッサが第1の実行モード(たとえば、古典モード)で動作中であるとき、第1の命令(たとえば、それぞれ図2の関数2/命令a5など、ターゲット命令/入口点をもつ呼出し/復帰命令)を検出するステップ、すなわちブロック302と、第1の命令のターゲットアドレスの1つまたは複数のビット(たとえば、それぞれ図2の関数2/命令a5についての2つの最下位ビットまたは整列ビット「AB」/「00」)を分析するステップ、すなわちブロック304と、1つまたは複数のビットに基づいて、プロセッサの動作を第1の実行モードから第2の実行モード(たとえば、圧縮モード)に切り替えるかどうか判断するステップ、すなわちブロック306とを含む、プロセッサ(たとえば、プロセッサ102)内で実行モードを切り替える方法を含み得る。
【0044】
情報および信号は、多種多様な技術および技法のいずれかを使用して表され得ることを当業者は諒解されよう。たとえば、上記の説明全体にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁界または磁性粒子、光場または光学粒子、あるいはそれらの任意の組合せによって表すことができ得る。
【0045】
さらに、本明細書で開示された実施形態に関連して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得ることを、当業者は諒解されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップを、上記では概してそれらの機能性に関して説明した。そのような機能性をハードウェアとして実装するか、ソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明した機能性を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本発明の範囲からの逸脱を生じるものと解釈すべきではない。
【0046】
本明細書で開示された実施形態と関連して説明された方法、シーケンス、および/またはアルゴリズムは、ハードウェアで、プロセッサによって実行されるソフトウェアモジュールで、またはその2つの組合せで直接具現化され得る。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている任意の他の形態の記憶媒体中に常駐し得る。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、かつ記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替として、記憶媒体はプロセッサと一体であり得る。
【0047】
図5を参照すると、例示的な実施形態に従って構成されたマルチコアプロセッサを含むワイヤレスデバイスの特定の例示的な実施形態のブロック図が示され、全体的に500と表される。デバイス500は、図示のようにメモリ532に結合された図1のプロセッサ102を含むことができる、デジタル信号プロセッサ(DSP)564を含む。図5は、DSP564およびディスプレイ528に結合された、ディスプレイコントローラ526も示している。コーダ/デコーダ(コーデック)534(たとえば、オーディオおよび/または音声コーデック)は、DSP564に結合され得る。(モデムを含むことができる)ワイヤレスコントローラ540などの他の構成要素も示されている。スピーカー536およびマイクロフォン538が、コーデック534に結合され得る。図5は、ワイヤレスコントローラ540が、ワイヤレスアンテナ542に結合され得ることも示している。ある特定の実施形態では、DSP564、ディスプレイコントローラ526、メモリ532、コーデック534、およびワイヤレスコントローラ540は、システムインパッケージデバイスまたはシステムオンチップデバイス522に含まれる。
【0048】
ある特定の実施形態では、入力デバイス530および電源544が、システムオンチップデバイス522に結合される。さらに、ある特定の実施形態では、図5に示すように、ディスプレイ528、入力デバイス530、スピーカー536、マイクロフォン538、ワイヤレスアンテナ542、および電源544は、システムオンチップデバイス522の外部にある。ただし、ディスプレイ528、入力デバイス530、スピーカー536、マイクロフォン538、ワイヤレスアンテナ542、および電源544の各々は、インターフェースまたはコントローラのような、システムオンチップデバイス522の構成要素に結合され得る。
【0049】
図5はワイヤレス通信デバイスを示しているが、DSP564およびメモリ532がセットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、携帯情報端末(PDA)、固定ロケーションデータユニット、またはコンピュータに統合されてもよいことに留意されたい。プロセッサ(たとえば、DSP564)がそのようなデバイスに統合されてもよい。
【0050】
したがって、本発明の実施形態は、プロセッサ内で実行モードを切り替えるための方法を実施するコンピュータ可読媒体を含み得る。したがって、本発明は、示された例に限定されず、本明細書に説明された機能性を実施するための任意の手段は、本発明の実施形態に含まれる。
【0051】
上記の開示は本発明の例示的な実施形態を示すが、添付の特許請求の範囲によって規定される本発明の範囲から逸脱することなく、本明細書において様々な変更および修正を行うことができることに留意されたい。本明細書で説明した本発明の実施形態による方法クレームの機能、ステップおよび/またはアクションは、特定の順序で実施されなくてもよい。さらに、本発明の要素は、単数形で説明または請求されていることがあるが、単数形に限定することが明示的に述べられていない限り、複数形が企図される。
【符号の説明】
【0052】
100 処理システム
102 プロセッサ
104 メモリ
210 コードシーケンス
212 コードシーケンス
214 コードシーケンス
500 デバイス
522 システムインパッケージデバイス、システムオンチップデバイス
526 ディスプレイコントローラ
528 ディスプレイ
530 入力デバイス
532 メモリ
534 コーダ/デコーダ(コーデック)
536 スピーカー
538 マイクロフォン
540 ワイヤレスコントローラ
542 ワイヤレスアンテナ
544 電源
564 デジタル信号プロセッサ(DSP)
図1
図2
図3
図4A
図4B
図5