(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-11-21
(54)【発明の名称】ベクトルシフト方法、プロセッサ及び電子機器
(51)【国際特許分類】
G06F 9/34 20180101AFI20241114BHJP
G06F 9/38 20180101ALI20241114BHJP
【FI】
G06F9/34 330
G06F9/38 310G
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024534617
(86)(22)【出願日】2022-12-08
(85)【翻訳文提出日】2024-06-14
(86)【国際出願番号】 CN2022137506
(87)【国際公開番号】W WO2023104145
(87)【国際公開日】2023-06-15
(31)【優先権主張番号】202111509173.2
(32)【優先日】2021-12-10
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】512110547
【氏名又は名称】▲龍▼芯中科技▲術▼股▲フン▼有限公司
【氏名又は名称原語表記】LOONGSON TECHNOLOGY CORPORATION LIMITED
【住所又は居所原語表記】Loongson Industrial Park, Building 2, Zhongguancun Environmental Protection Park, Haidian District, Beijing, China
(74)【代理人】
【識別番号】110002952
【氏名又は名称】弁理士法人鷲田国際特許事務所
(72)【発明者】
【氏名】ワン ウェンシアン
【テーマコード(参考)】
5B013
5B033
【Fターム(参考)】
5B013AA14
5B013DD01
5B033AA03
5B033AA04
5B033DD09
(57)【要約】
ベクトルシフト方法、プロセッサ及び電子機器を提供する。前記方法は、レジスタ識別子及びシフトパラメータ(101)を含む命令を受信するステップであって、レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、ソースレジスタ識別子は、ソースレジスタを示すためのものであり、ソースレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタであり、デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、デスティネーションレジスタは、ベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタであり、シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものである、ステップと、命令を実行して、シフトパラメータに従いソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、ベクトルシフト操作後のターゲット要素(102)を取得するステップと、ターゲット要素をデスティネーションレジスタ(103)に書き込むステップと、を含む。該方法は、特定の機能に対するベクトルシフト操作を命令1つで実装し、特定の機能の実行効率を向上させることができる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
レジスタ識別子及びシフトパラメータを含む命令を受信するステップであって、ここで、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタであり、前記シフトパラメータは、前記ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものである、ステップと、
前記命令を実行して、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む、ことを特徴とするベクトルシフト方法。
【請求項2】
前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得するステップは、
前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定するステップであって、ベクトルシフト操作が実行される前記ソース要素は少なくとも1つある、ステップと、
前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成するステップと、
前記シフト演算結果における要素をターゲット要素として決定するステップと、を含む、ことを特徴とする請求項1に記載のベクトルシフト方法。
【請求項3】
前記シフトパラメータはシフト量及びオペコードを含み、前記シフト量は、前記ベクトルシフト演算が実行される際に操作されるソース要素のシフトビット数を指示するためのものであり、前記オペコードは、前記ソースレジスタ内のソース要素及びデスティネーションレジスタ内のターゲット要素に対して実行するシフト演算ルールを示すためのものであり、
前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップと、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップと、を含み、
前記シフト演算結果における要素をターゲット要素として決定した後、前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定するステップと、
前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶するステップと、を含む、ことを特徴とする請求項2に記載のベクトルシフト方法。
【請求項4】
前記シフト量は即値数であり、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含む、ことを特徴とする請求項3に記載のベクトルシフト方法。
【請求項5】
前記オペコードは第1のタイプのベクトルオペコードであり、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素をオペランドとして決定するステップを含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタ内のオペランドと前記第2のソースレジスタ内のオペランドをスプライスした後、第1のスプライスベクトルを生成するステップと、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップと、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップと、を含み、ここで、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットの要素のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ことを特徴とする請求項4に記載のベクトルシフト方法。
【請求項6】
前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項5に記載のベクトルシフト方法。
【請求項7】
前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項5に記載のベクトルシフト方法。
【請求項8】
前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項5に記載のベクトルシフト方法。
【請求項9】
前記第1のタイプのベクトルオペコードは第4の第1のタイプのベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項5に記載のベクトルシフト方法。
【請求項10】
前記オペコードは第2のタイプのベクトルオペコードであり、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得るステップであって、ここで、前記選択操作は、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ステップと、
前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定するステップと、を含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第1のオペランドと前記第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成するステップであって、ここで、前記第2のスプライスベクトルと前記第3のスプライスベクトルに含まれている要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかである、ステップと、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成するステップと、を含み、ここで、前記実行ビット選択操作は、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、及び前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記記憶形態に従い、前記ターゲット要素を決定された記憶位置に記憶するステップは、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップと、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップと、を含む、ことを特徴とする請求項4に記載のベクトルシフト方法。
【請求項11】
前記第2のタイプのベクトルオペコードは第5のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第3のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項10に記載のベクトルシフト方法。
【請求項12】
前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなる要素であり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第3のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項10に記載のベクトルシフト方法。
【請求項13】
前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第3のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項10に記載のベクトルシフト方法。
【請求項14】
前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第3のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に含まれている各第1のターゲット要素に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置にそれぞれ書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項10に記載のベクトルシフト方法。
【請求項15】
前記命令は、シフト量を記憶するレジスタであるシフト量レジスタを示すためのシフト量レジスタ識別子をさらに含む、ことを特徴とする請求項3に記載のベクトルシフト方法。
【請求項16】
前記オペコードは第3のタイプのベクトルオペコードであり、前記ソースレジスタは第1のソースレジスタを含み、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップを含み、前記選択操作は、前記第1のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のいずれか1つを含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップと、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップと、を含み、ここで、前記ビット選択操作は、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する下位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する上位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその中間の連続する指定ビットのデータをそれぞれ選択する操作、及び前記第4の初期シフト演算結果に含まれている各要素に対してその連続していない指定ビットのデータをそれぞれ選択する操作、のうちのいずれか1つを含み、
前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶するステップは、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むステップと、
前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップと、を含む、ことを特徴とする請求項15に記載のベクトルシフト方法。
【請求項17】
前記第3のタイプのベクトルオペコードは第9のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項16に記載のベクトルシフト方法。
【請求項18】
前記第3のタイプのベクトルオペコードは第10のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項16に記載のベクトルシフト方法。
【請求項19】
前記第3のタイプのベクトルオペコードは第11のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素を選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項16に記載のベクトルシフト方法。
【請求項20】
前記第3のタイプのベクトルオペコードは第12のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項16に記載のベクトルシフト方法。
【請求項21】
前記ソースレジスタ数は1つ又は複数あり、前記デスティネーションレジスタ数は1つあり、前記ソースレジスタ識別子は、前記デスティネーションレジスタ識別子と同じ又は異なるものである、ことを特徴とする請求項1~3、16~20のいずれか1項に記載のベクトルシフト方法。
【請求項22】
前記ソースレジスタ数が複数あり、前記デスティネーションレジスタ数は1つあり、
すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なるか、または、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している、ことを特徴とする請求項1~15のいずれか1項に記載のベクトルシフト方法。
【請求項23】
複数のベクトルレジスタ、命令復号化ユニット、及び実行ユニットを含むプロセッサであって、
前記複数のベクトルレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するためのソースレジスタ、及びデスティネーションレジスタを含み、
前記命令復号化ユニットは、レジスタ識別子及びシフトパラメータを含むベクトルシフト命令を復号化するためのものであり、前記レジスタ識別子は、ソースレジスタを示すためのソースレジスタ識別子、及びデスティネーションレジスタを示すためのデスティネーションレジスタ識別子を含み、
前記実行ユニットは、前記ベクトルシフト命令に応答し、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む、ことを特徴とするプロセッサ。
【請求項24】
前記実行ユニットは、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定し、ここで、ベクトルシフト操作が実行されるソース要素は少なくとも1つあり、前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成し、前記シフト演算結果をターゲット要素として決定する、ことを特徴とする請求項23に記載のプロセッサ。
【請求項25】
前記シフトパラメータはシフト量及びオペコードを含み、前記シフト量は、前記ベクトルシフト演算が実行される際に操作されるソース要素のシフトビット数を指示するためのものであり、前記オペコードは、前記ソースレジスタ内のソース要素とデスティネーションレジスタ内のターゲット要素に対して実行するシフト演算ルールを示すためのものであり、
前記実行ユニットは、前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定し、前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成し、前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定し、前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶する、ことを特徴とする請求項24に記載のプロセッサ。
【請求項26】
前記シフト量は即値数であり、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含む、ことを特徴とする請求項25に記載のプロセッサ。
【請求項27】
前記オペコードは第1のタイプのベクトルオペコードであり、
前記実行ユニットは、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素をオペランドとして決定し、
前記第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタ内のオペランドと前記第2のソースレジスタ内のオペランドをスプライスした後、第1のスプライスベクトルを生成し、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットの要素のデータを選択する操作、及び前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ことを特徴とする請求項26に記載のプロセッサ。
【請求項28】
前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項27に記載のプロセッサ。
【請求項29】
前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項27に記載のプロセッサ。
【請求項30】
前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項27に記載のプロセッサ。
【請求項31】
前記第1のタイプのベクトルオペコードは第4のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項27に記載のプロセッサ。
【請求項32】
前記オペコードは第2のタイプのベクトルオペコードであり、
前記実行ユニットは、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得、ここで、前記選択操作は、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタレジスタと前記第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記実行ユニットはまた、
前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定し、
前記第1のオペランドと前記第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成し、ここで、前記第2のスプライスベクトルと前記第3のスプライスベクトルに含まれている要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、ここで、前記実行ビット選択操作は、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、及び前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む、ことを特徴とする請求項26に記載のプロセッサ。
【請求項33】
前記第2のタイプのベクトルオペコードは第5のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項32に記載のプロセッサ。
【請求項34】
前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなる要素であり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項32に記載のプロセッサ。
【請求項35】
前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項32に記載のプロセッサ。
【請求項36】
前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項32に記載のプロセッサ。
【請求項37】
前記命令は、シフト量を記憶するレジスタであるシフト量レジスタを示すためのシフト量レジスタ識別子をさらに含む、ことを特徴とする請求項25に記載のプロセッサ。
【請求項38】
前記オペコードは第3のタイプのベクトルオペコードであり、前記ソースレジスタは第1のソースレジスタを含み、
前記実行ユニットは、前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得、ここで、前記選択操作は、前記第1のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のいずれか1つを含み、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する下位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する上位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその中間の連続する指定ビットのデータをそれぞれ選択する操作、及び前記第4の初期シフト演算結果に含まれている各要素に対してその連続していない指定ビットのデータをそれぞれ選択する操作、のうちのいずれか1つを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込み、
前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定する、ことを特徴とする請求項37に記載のプロセッサ。
【請求項39】
前記第3のタイプのベクトルオペコードは第9のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項38に記載のプロセッサ。
【請求項40】
前記第3のタイプのベクトルオペコードは第10のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項38に記載のプロセッサ。
【請求項41】
前記第3のタイプのベクトルオペコードは第11のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素を選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項38に記載のプロセッサ。
【請求項42】
前記第3のタイプのベクトルオペコードは第12のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項38に記載のプロセッサ。
【請求項43】
前記ソースレジスタ数は1つ又は複数あり、前記デスティネーションレジスタ数は1つあり、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と同じ又は異なるものである、ことを特徴とする請求項23~25、38~42のいずれか1項に記載のプロセッサ。
【請求項44】
前記ソースレジスタ数が複数あり、前記デスティネーションレジスタ数は1つあり、
すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なるか、または、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している、ことを特徴とする請求項23~37のいずれか1項に記載のプロセッサ。
【請求項45】
メモリ、及び1つ以上のプログラムを含む電子機器であって、前記1つ以上のプログラムは、メモリに記憶されており、且つ請求項1~22に係る1つ又は複数の前記したベクトルシフト方法を1つ以上のプロセッサにより実行するように構成されている、ことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ技術の分野に関し、特にベクトルシフト方法、プロセッサ及び電子機器に関する。
【背景技術】
【0002】
マルチメディアアプリケーションの発展につれて、プロセッサのコンピューティングタスクはデジタル画像処理の分野に由来するものが多くなってきており、画像ベースのアプリケーションは、サーバ、デスクトップコンピュータ、パーソナルモバイルデバイスすなわち組み込み機器において無視できないワークロードになりつつある。デジタル画像処理ソフトウェアの実情に合わせて、命令システムアーキテクチャを更新し、アプリケーションでよく使われる操作に対する命令サポートをプロセッサに追加することは、プロセッサ発展の主要な方向であり、特定のアプリケーションに対してプロセッサの性能を向上させる簡単で効果的な方法でもあるため、単一命令複数データ(Single Instruction Multiple Data、SIMD)構造は、規則的なデータの集合に対する同様な操作がサポートされるように、ますます多くのプロセッサに追加されるようになっている。
【0003】
現在、SIMDプロセッサではシフト命令が一般的に導入されており、異なるシフト命令で異なるニーズを満たすことができるが、従来の技術的手段においては、特定の機能に対してベクトルシフト操作を実装する場合に、一連の操作を実装するために複数の命令が必要となり、操作方法が複雑であり、且つ特定の機能の実行効率が低下している。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本願は、ベクトルシフト操作を実装するために複数の命令が必要となり、操作方法が複雑であり、特定の機能の実行効率が低下しているという従来の技術における問題を解決するために、ベクトルシフト方法、プロセッサ及び電子機器を提供する。
【課題を解決するための手段】
【0005】
本願は、上記の問題を解決するために、ベクトルシフト方法を提供し、前記方法は、
レジスタ識別子及びシフトパラメータを含む命令を受信するステップであって、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタであり、前記シフトパラメータは、前記ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものである、ステップと、
前記命令を実行して、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む。
【0006】
本願は、上記の問題を解決するために、プロセッサを提供し、前記プロセッサは、複数のベクトルレジスタ、命令復号化ユニット、及び実行ユニットを含み、
前記複数のベクトルレジスタは、データ要素を記憶するためのソースレジスタ、及びデスティネーションレジスタを含み、
前記命令復号化ユニットは、レジスタ識別子及びシフトパラメータを含むベクトルシフト命令を復号化するためのものであり、前記レジスタ識別子は、ソースレジスタを示すためのソースレジスタ識別子、及びデスティネーションレジスタを示すためのデスティネーションレジスタ識別子を含み、
前記実行ユニットは、前記ベクトルシフト命令に応答し、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む。
【0007】
本願は、上記の問題を解決するために、メモリ及び1つ以上のプログラムを含む電子機器を提供し、1つ以上のプログラムは、メモリに記憶されており、且つ1つ以上のプロセッサにより上記の1つ又は複数の前記したベクトルシフト方法を実行するように構成されている。
【発明の効果】
【0008】
本願は、従来の技術に比べて、次の利点がある。
【0009】
本願の実施例により提供されるベクトルシフト方法、プロセッサ及び電子機器は、レジスタ識別子及びシフトパラメータをベクトルシフト命令に追加し、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタ、及びベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタを、レジスタ識別子によって指示して、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールをシフトパラメータによって指示することにより、特定の機能に対してベクトルシフト操作を複数の命令で実装することなく、特定の機能に対してベクトルシフト操作を命令1つで実装することができ、操作方法が簡単で、且つ特定の機能に対する実行効率が向上する。
【図面の簡単な説明】
【0010】
【
図1】本願の実施例1によるベクトルシフト方法のステップのフローチャートである。
【
図2】本願の実施例によるターゲット要素取得方法のステップのフローチャートである。
【
図3】本願の実施例によるシフト演算結果取得方法のステップのフローチャートである。
【
図4】本願の実施例によるターゲット要素記憶方法のステップのフローチャートである。
【
図5】本願の実施例2によるベクトルシフト方法のステップのフローチャートである。
【
図6】本願の実施例3によるベクトルシフト方法のステップのフローチャートである。
【
図7】本願の実施例4によるベクトルシフト方法のステップのフローチャートである。
【
図8】本願の実施例5によるプロセッサの構造ブロック図である。
【
図9】本願の実施例6による電子機器の構造ブロック図である。
【発明を実施するための形態】
【0011】
本願の上記目的、特徴及び利点をさらに明瞭し、理解しやすくするために、以下は図面と特定の実施形態を参照して本願についてさらに詳細に説明する。
【0012】
本願の明細書と特許請求の範囲、及び、上記の図面に係る用語「第1」、「第2」、「第3」などは、類似の対象を区別するためのものであり、特定の順序又は順番を説明するためのものである必要はない。このように使用されるデータは、本願の実施例の図示又は説明で与えられる順序以外の順序で実施可能であるなど、適切な場合に交換可能であり得ることを理解されたい。
【0013】
以下の実施例は、1つのプロセッサを参照して説明されているが、他の実施例は、他のタイプの集積回路及びロジックデバイスに適用される。本願の前述の技術及び教示は、より高いパイプラインスループットレート及び性能向上の恩恵を受ける他のタイプの回路又は半導体装置に、より容易に適用されることができる。本願の実施例は、データ操作を実行する任意のプロセッサ又は機械に適用されるものである。しかしながら、本願は、256ビット、128ビット、64ビット、32ビット、または16ビットのデータ操作を実行するプロセッサ又は機械に限定されるものではなく、組合せデータの操作が望まれる任意のプロセッサ及び機械に適用される。
【0014】
以下の説明では、本願を十分に理解するための説明目的で、多数の具体的な詳細を示す。しかしながら、当業者であれば、これらの具体的な詳細は、本願を実施するために必要ではないことを認識すべきである。他の場合では、いくつかの周知の電気構造及び回路は、本願を不必要に混乱させることを避けるために、詳細に示されていない。さらに、以下の説明は複数の例を提供し、添付の図面は説明のために様々な例を示している。しかしながら、これらの例は、本願発明のいくつかの例を提供することを意図しており、本願発明のすべての可能な実施形態の網羅的なリストを提供することを意図していないため、限定的に解釈されるべきではない。
【0015】
以下の例では、実行ユニットのコンテキストにおける命令処理及び分配について説明するが、本願発明の他の実施例は、ソフトウェアの形態で実装され得る。一実施例では、本願の方法は、機械実行可能命令として表現されている。前記命令は、これらの命令でプログラムされた汎用プロセッサ又は専用プロセッサに本願のステップを実行させるためのものとして使用されることができる。本願は、コンピュータプログラム製品又はソフトウェアとして提供されてもよく、前記製品又はソフトウェアは、機械又はコンピュータ可読媒体、及び本願に係るプロセッサにより実行されるようにコンピュータ(または他の電子機器)をプログラミングするために使用され得るその中に記憶されている命令を含むことができる。あるいは、本願発明のステップは、前記ステップを実行するためのハードワイヤードロジックを含む専用のハードウェアアセンブリによって、またはプログラミングされたコンピュータアセンブリとカスタムハードウェアアセンブリとの任意の組み合わせによって実行されされ得る。これらのソフトウェアは、システム内のメモリに格納されることができる。
【0016】
本願の実施例により提供されるベクトルシフト方法は、実行主体がCPU(Central Processing Unit、中央処理装置)であってもよい。
【0017】
実施例1
【0018】
図1を参照されたい。
図1は、本願の実施例1に係るベクトルシフト方法のステップのフローチャートを示しており、ベクトルシフトプロセスは、次のステップを含む。
【0019】
ステップ101では、レジスタ識別子及びシフトパラメータを含む命令を受信する。
【0020】
本願の実施例では、命令とは、ベクトルシフト操作を実行するための命令を指し、且つ当該命令はプロセッサにより実行される命令であり、命令は、レジスタ識別子及びシフトパラメータを含む。前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタであり、前記シフトパラメータは、前記ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものである。
【0021】
選択的には、ソースレジスタの数は、1つあってもよいし、2つあってもよく、すなわち、ソース要素は1つ又は2つのレジスタに由来するものであり、具体的には、ソースレジスタの数は、業務上の必要に応じて設定されることができ、本願の実施例は、それを限定しない。
【0022】
選択的には、受信された命令を復号化し、当該命令に含まれているシフトパラメータを取得し、当該シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものであり、本例では、シフトパラメータは、シフト量やオペコードなどのパラメータを含むことができる。選択的には、オペコードはバイナリ形態で表現されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。
【0023】
命令を復号化した後、ステップ102を実行する。
【0024】
ステップ102では、前記命令を実行して、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得する。
【0025】
本願の実施例では、CPUがベクトルシフト操作を実行するための命令を受信した後、CPUにより当該命令を実行して、シフトパラメータに従いソースレジスタの中から取得されたソース要素に対してベクトルシフト操作を実行し、ベクトルシフト操作後のターゲット要素を取得するようにすることができる。
【0026】
ベクトルシフト操作実行後のターゲット要素が取得された後、ステップ103を実行する。
【0027】
ステップ103では、前記ターゲット要素を前記デスティネーションレジスタに書き込む。
【0028】
本願の実施例では、ベクトルシフト操作後のターゲット要素が取得された後、ターゲット要素をデスティネーションレジスタに書き込むことができる。
【0029】
選択的には、シフトパラメータに従ってシフト量及びシフト演算ルールを決定して、シフト量及びシフト演算ルールに従ってベクトルシフト操作を実行することができ、具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0030】
図2を参照されたい。
図2は、本願の実施例により提供されるターゲット要素取得方法のステップのフローチャートを示しており、当該ターゲット要素取得プロセスは、次のステップを含む。
【0031】
ステップ201では、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定し、ベクトルシフト操作が実行される前記ソース要素は少なくとも1つある。
【0032】
本願の実施例では、ソースレジスタの数は、1つであってもよいし、複数であってもよく、デスティネーションレジスタの数は1つあり、ソースレジスタ識別子及びデスティネーションレジスタ識別子は、同じもの又は異なるものであり、ソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかである。シフト量は、ベクトルシフト演算が実行されるときに操作されるソース要素のシフトビット数を指示するために使用されることができ、シフト量は、即値数又はシフト量レジスタのいずれかに由来し、即値数は、シフトパラメータのうちオペコードによって定義されるパラメータであり、即値数は、上記のオペコードによって定義されるソース要素のデータタイプを参照してその値を決定することができ、シフト量レジスタは、シフト量を記憶するためのレジスタであり、シフト量は、シフト量レジスタに由来するものである場合に、シフト量は1つのグループのデータであり、例えば、シフト量は、異なるビットを含むことによって、異なるソース要素のシフト状況を表現することができる。シフト演算ルールとは、ソース要素に対して実行される1つまたは複数の演算を指す。
【0033】
シフトパラメータに従ってシフト量及びシフト演算ルールを決定した後、ステップ202を実行する。
【0034】
ステップ202では、前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成する。
【0035】
本願の実施例では、シフト演算ルールとは、ソースレジスタ内の要素に対するシフト操作方法及び/又は制約条件を指す。
【0036】
シフト量及びシフト演算ルールに従いソースレジスタ内のソース要素に対して対応するシフト演算を実行しシフト演算結果を生成した後、ステップ203を実行する。
【0037】
ステップ203では、前記シフト演算結果をターゲット要素として決定する。
【0038】
本願の実施例では、シフトパラメータには、オペコードを含むことができ、当該オペコードは、ソースレジスタの中からソース要素を選択すること、及びターゲット要素のデスティネーションレジスタへの記憶形態を指示するために使用されることができ、具体的には、ベクトルシフト演算プロセスは、下記の実現形態を参照して詳細に説明されることができる。
【0039】
図3を参照されたい。
図3は、本願の実施例により提供されるシフト演算結果生成方法のステップのフローチャートを示しており、当該シフト演算結果生成プロセスは、次のステップを含む。
【0040】
ステップ301では、前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定する。
【0041】
本願の実施例では、シフトパラメータは、シフト量及びオペコードを含むことができる。シフト量は、ベクトルシフト演算が実行されるときに操作されるソース要素のシフトビット数を指示するために使用されることができる。オペコードは、ソースレジスタ内のソース要素及びデスティネーションレジスタ内のターゲット要素に対して実行されるシフト演算ルールを示すために使用されることができる。
【0042】
選択的には、前記命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,シフト量」である。例示的には、前記命令は、「[X]VSSR. {B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q} vd/xd,vj/xj,ui]と表すことができ、ここで、[X]VSSRはオペコード内の命令名称を表し、[X]はオプションで、レジスタのタイプに応じて決定されるものであり、{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q}の「.」の前の部分はオペコード内のターゲット要素のデータタイプを表し、「.」の後の部分はオペコード内のソース要素のデータタイプを表し、Bはバイト、Hはハーフワード、Wはワード、Dはダブルワード、Qはクワッドワード、Uは符号なしを表し、vd/xdはデスティネーションレジスタ、vj/xjはソースレジスタを表し、また、vd/xdはソースレジスタを表すこともでき、vj及びvdは同じビット数のレジスタ、xj及びxdは同じビット数のレジスタを表し、uiは即値数を表し、すなわち、即値数はシフト量である。例示的には、前記命令は、「[X]VSSR.{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q} vd/xd,vj/xj,vk/xk」と表すこともでき、[X]VSSR、{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q}、vd/xd、及びvj/xjは先の例と同じ意味を表し、vk/xkはシフト量レジスタを表す。
【0043】
オペコードに従いソースレジスタの中からベクトルシフト要素を実行するソース要素を選択して、選択されたソース要素をオペランドとして決定した後、ステップ302を実行する。
【0044】
ステップ302では、前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成する。
【0045】
本願の実施例では、オペランドが決定された後、オペコードに従いオペランドに対して対応するシフト演算を実行し、シフト演算結果を生成することができ、当該シフト演算結果に含まれている要素はターゲット要素となる。
【0046】
シフト演算結果が生成された後、ステップ401を実行する。
【0047】
図4を参照されたい。
図4は、本願の実施例により提供されるターゲット要素記憶方法のステップのフローチャートを示しており、当該ターゲット要素記憶プロセスは、次のステップを含む。
【0048】
ステップ401では、前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定する。
【0049】
本願の実施例では、記憶形態とは、ターゲット要素をデスティネーションレジスタに記憶するルールを指す。選択的には、記憶形態は主に、ターゲット要素をデスティネーションレジスタに記憶する位置ルールを表し、例示的には、記憶形態は、ターゲット要素における上位半分のデータを、デスティネーションレジスタにおける当該ターゲット要素が配置されている位置の上位半分に記憶する形態、または、ターゲット要素における下位半分のデータをデスティネーションレジスタにおける当該ターゲット要素が配置されている位置の下位半分に記憶する形態、または、ターゲット要素の指定範囲内のデータを、デスティネーションレジスタにおける当該ターゲット要素が配置されている位置の指定アドレス範囲内に記憶する形態を含むことができる。
【0050】
オペコードに従いターゲット要素のデスティネーションレジスタへの記憶形態を決定した後、ステップ402を実行する。
【0051】
ステップ402では、前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶する。
【0052】
本願の実施例では、シフト演算結果が取得された後、シフト演算結果をターゲット要素として決定することができ、オペコードに従いターゲット要素のデスティネーションレジスタへの記憶形態を決定した後、ターゲット要素をデスティネーションレジスタに記憶することができる。
【0053】
従来の技術においては、ベクトルシフト操作を実装する際、ベクトルシフトニーズに応じて、複数の命令でベクトルシフトを実装する必要があり、ベクトルシフトニーズは実際のアプリケーションに応じて決定される。例えば、ベクトルシフトニーズは、2つのベクトルレジスタのオペランドを右シフトして半値幅に切り捨てるニーズであると、当該ベクトルシフトニーズを達成するために、少なくとも2つの右シフト命令、2つの切り捨て命令、及び1つの半値幅に飽和命令が必要とされる。本願の実施例では、シフトパラメータを含む命令が実装され、異なるシフトパラメータでもって異なるシフトニーズを達成することができ、これによって、複数のベクトルシフトニーズを1つのシフト命令で達成することができ、システムオーバーヘッドを効果的に低減し、特定の機能に対するベクトルシフトの実行効率を向上させる。
【0054】
以下、異なるオペコード及び異なるシフト量の場合におけるベクトルシフト命令の実装プロセスについて、実施例2ないし実施例4を参照して詳細に説明する。
【0055】
実施例2
【0056】
本願の実施例では、オペコードは第1のタイプのベクトルオペコードとすることができ、ソースレジスタは、第1のソースレジスタ及び第2のソースレジスタを含み、第1のタイプのベクトルオペコードによって、ソースレジスタからソース要素を取得して、ソース要素に対してベクトルシフト操作を実行することができ、
図5に示すように、ベクトルシフト命令の処理方法は、次のステップを含むことができる。
【0057】
ステップ501では、レジスタ識別子及びシフトパラメータを含む命令を受信する。
【0058】
本願の実施例では、命令の意味及び命令に含まれるパラメータは、実施例1に説明されており、ここでは繰り返して説明しない。
【0059】
選択的には、ソースレジスタの数は2つあり、すなわち、ソース要素は2つの異なるレジスタに由来するものであり、前記ソースレジスタ数が複数ある場合に、すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子はいずれも、前記デスティネーションレジスタ識別子と異なるようにするか、または、前記ソースレジスタ数が複数ある場合に、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している。
【0060】
選択的には、受信された命令を復号化し、当該命令に含まれているシフトパラメータを取得し、当該シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものであり、本例では、シフトパラメータは、シフト量やオペコードなどのパラメータを含むことができる。
【0061】
ステップ502では、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定する。
【0062】
本願の実施例では、ベクトルシフト操作が実行される前記ソース要素は少なくとも1つあり、前記シフト量は即値数、前記シフト演算ルールはオペコード、前記オペコードは第1のタイプのベクトルオペコードであり、前記即値数は0以上の正の整数である。
【0063】
選択的には、前記第1のタイプのベクトルオペコードはバイナリ形態で表現されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,シフト量」である。前記オペコードが第1のタイプのベクトルオペコードである場合に、実際に実装する際、命令は、「VSSR第1のタイプ.{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q} vd,vj,ui第1のタイプ」と表すことができ、VSSR第1のタイプは第1のタイプのベクトルオペコード内の命令名称であり、{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q}は、第1のタイプのオペコードの中に、ソース要素及びターゲット要素のデータタイプを指示するためのパラメータであり、Bはバイト、Hはハーフワード、Wはワード、Dはダブルワード、Qはクワッドワード、Uは符号なしを表し、vdはデスティネーションレジスタ及びソースレジスタの両方を表し、vjはソースレジスタを表し、ui第1のタイプは、オペコードが第1のタイプのベクトルオペコードである場合に、命令に含まれている即値数を表す。例示的には、VSSR第1のタイプ1.B.Hは、バイナリ形態に変換可能な第1のタイプのベクトルオペコードであり、例えば、VSSR第1のタイプ1.B.Hが011100110101000001というバイナリ形態に変換される第1のタイプのベクトルオペコードは挙げられる。
【0064】
さらに、ui第1のタイプはオペコードによって定義され、ui第1のタイプは、ソース要素及びターゲット要素のデータタイプを参照してその値を決定することができ、当該ui第1のタイプは、所定の範囲内(すなわち、ui第1のタイプ∈[最小値、最大値]とする)にあるパラメータであり、すなわち、ui第1のタイプは、その最小値がソース要素及びターゲット要素のデータタイプに応じて決定され、ui第1のタイプは、最大値が無限大である。例示的には、第1のタイプのベクトルオペコードがVSSR第1のタイプ1.B.Hである場合には、ui第1のタイプは最小値がui4であり、第1のタイプのベクトルオペコードがVSSR第1のタイプ1.H.Wである場合には、ui第1のタイプは最小値がui5であり、第1のタイプのベクトルオペコードがVSSR第1のタイプ1.W.Dである場合には、ui第1のタイプは最小値がui6であり、第1のタイプのベクトルオペコードがVSSR第1のタイプ1.D.Qである場合には、ui第1のタイプは最小値がui7であり、第1のタイプのベクトルオペコードがVSSR第1のタイプ1.BU.Hである場合には、ui第1のタイプは最小値がui4であり、第1のタイプのベクトルオペコードがVSSR第1のタイプ1.HU.Wである場合には、ui第1のタイプは最小値がui5であり、第1のタイプのベクトルオペコードがVSSR第1のタイプ1.WU.Dである場合には、ui第1のタイプは最小値がui6であり、第1のタイプのベクトルオペコードがVSSR第1のタイプ1.DU.Qである場合には、ui第1のタイプは最小値がui7である。これによって、ソース要素のデータタイプがハーフワードで、且つターゲット要素のデータタイプがバイトである場合には、ui第1のタイプ∈[ui4、無限大]であり、ソース要素のデータタイプがワードで、且つターゲット要素のデータタイプがハーフワードである場合には、ui第1のタイプ∈[ui5、無限大]であり、ソース要素のデータタイプがダブルワードで、且つターゲット要素のデータタイプがワードである場合には、ui第1のタイプ∈[ui6、無限大]であり、ソース要素のデータタイプがクワッドワードで、且つターゲット要素のデータタイプがダブルワードである場合には、ui第1のタイプ∈[ui7、無限大]であり、当該ターゲット要素は符号なし数値であってもよいし、符号付き数値であってもよいことがわかる。
【0065】
シフトパラメータに従ってシフト量及びシフト演算ルールを決定した後、ステップ503を実行する。
【0066】
ステップ503では、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定し、第2のソースレジスタ内のすべてのソース要素を別のオペランドとして決定する。
【0067】
本願の実施例では、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべての要素をソース要素とするか、または第1のソースレジスタ内の一部の要素をソース要素とするようにしてもよいし、第2のソースレジスタ内のすべての要素をソース要素とするか、または第2のソースレジスタ内の一部の要素をソース要素とするようにしてもよい。例示的には、第1のソースレジスタはレジスタvd、第2のソースレジスタはレジスタvjであり、第1のレジスタvd内のすべての要素をソース要素として決定するとともに、第2のレジスタvj内の要素をソース要素として決定して、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素を別のオペランドとして決定するようにすることができる。
【0068】
選択的には、第1のソースレジスタ及び第2のソースレジスタの中からそれぞれ選択されたソース要素はデータタイプが同じで、且つソース要素のデータタイプがハーフワード、ワード、ダブルワード、クワッドワードのいずれかである。
【0069】
第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタから得られたソース要素を前記第2のソースレジスタのオペランドとして決定した後、ステップ504を実行する。
【0070】
ステップ504では、前記第1のタイプのベクトルオペコードに従い、前記第1のソース要素と前記第2のソース要素とをスプライスした後、第1のスプライスベクトルを生成する。
【0071】
本願の実施例では、第1のソースレジスタ内のオペランドと第2のソースレジスタ内のオペランドとを左右にスプライスした後、第1のスプライスベクトルを生成し、第1のソースレジスタ内のオペランドと第2のソースレジスタ内のオペランドとを左右にスプライスする位置設定は、命令内のソースレジスタ識別子の位置に応じて決定され、すなわち、第1のソースレジスタ識別子が命令内に第1のタイプのベクトルオペコードの直後のソースレジスタ識別子で、第2のソースレジスタ識別子が命令内に第1のソースレジスタ識別子の後に配置されているソースレジスタ識別子である場合には、第1のソースレジスタ内のオペランドは左側に配置され、第2のソースレジスタ内のオペランドは右側に配置され、第1のスプライスベクトルを生成するが、第2のソースレジスタ識別子が命令内に第1のタイプのベクトルオペコードの直後のソースレジスタ識別子で、第1のソースレジスタ識別子が命令内に第1のソースレジスタ識別子の後に配置されているソースレジスタ識別子である場合には、第2のソースレジスタ内のオペランドは左側に配置され、第1のソースレジスタ内のオペランドは右側に配置され、第1のスプライスベクトルを生成する。例示的には、命令のフォーマットが「第1のタイプのベクトルオペコード vd,vj,即値数」である場合には、第1のソースレジスタはvd、第2のソースレジスタはvj、デスティネーションレジスタはvdであると表し、第1のソースレジスタ内のすべてのソース要素全体は1つのオペランドと見なされ、オペランドvdと表記され、第2のソースレジスタ内のすべてのソースオペランド全体は別のオペランドと見なされ、オペランドvjと表記され、第1のスプライスベクトルは、「オペランドvdオペランドvj」となる。
【0072】
選択的には、第1のソースレジスタ内のオペランドと第2のソースレジスタ内のオペランドはまた、要素を単位としてクロススプライスして、第1のスプライスベクトルを生成してもよく、クロススプライスの際、ソースレジスタ内に同じ位置情報を有するソース要素は1つのグループとしてクロスされ、第1のスプライスベクトルにおける異なるグループの位置はソース要素のアドレスに従って降順に配置され、異なるレジスタ内の2つの要素ごとに1つのグループとしてスプライスする際の左右位置の設定は、命令内のソースレジスタ識別子の位置に応じて決定され、これは上記の例と同じであるため、ここでは繰り返して説明しない。
【0073】
例示的には、第1のソースレジスタ内のオペランドは、「ソース要素1(位置情報がaである)、ソース要素2(位置情報がbである)、及びソース要素3(位置情報がcである)」を含み、第2のソースレジスタ内のオペランドは、「ソース要素4(位置情報がaである)、ソース要素5(位置情報がbである)、及びソース要素6(位置情報がcである)」であり、第1のソース要素に対応するソースレジスタ識別子は、命令の左側の位置に配置され、第2のソース要素に対応するソースレジスタ識別子は、命令の右側の位置に配置されると想定すると、左側と右側は2つのソースレジスタ位置識別子の対向位置であり、2つのオペランドを左右にスプライスして得られた結果は、「ソース要素1ソース要素2ソース要素3ソース要素4ソース要素5ソース要素6」であってもよく、または、位置情報が同じくaのソース要素1とソース要素4とを1つのグループとして見なしてクロススプライスし、位置情報が同じくbのソース要素2とソース要素5とを1つのグループとして見なしてクロススプライスし、位置情報が同じくcのソース要素3とソース要素6とを1つのグループとして見なしてクロススプライスすることによって、最終的に得られた第1のスプライスベクトルは、「ソース要素1ソース要素4ソース要素2ソース要素5ソース要素3ソース要素6」となる。
【0074】
選択的には、第1のがNビット、第2のソースレジスタ内のオペランドがNビットの場合には、第1のスプライスベクトルは2Nビットであり、Nは0よりも大きい正の整数である。第1のソースレジスタ内のオペランドのビット数は、第1のソースレジスタに含まれている要素及び当該要素のデータタイプに対応するビットに応じて決定されてもよく、第2のソースレジスタ内のオペランドのビット数は、第2のソースレジスタに含まれている要素及び当該要素のデータタイプに対応するビットに応じて決定されてもよい。
【0075】
第1のスプライスベクトルが生成された後、ステップ505を実行する。
【0076】
ステップ505では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0077】
本願の実施例では、第1のスプライスベクトルには、複数の要素(ソース要素)が含まれており、即値数に従い、第1のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、シフト量は即値数となり、第1の初期シフト演算結果が生成され、シフト操作は右シフト操作であり、前記シフト操作は、論理シフト及び算術シフトを含み、半値幅に飽和する処理は、処理対象のデータについて、そのデータビットの幅を半値にした後のバイナリデータで表現できる値の範囲に応じて数値飽和処理を行う処理を意味し、処理されたデータは、処理前の幅と相関をとり、選択的には、処理されたデータは依然として、処理前の幅の倍数(例えば1/2)である。
【0078】
選択的には、前記第1のスプライスベクトル内のそれぞれのソース要素はシフトされ、それぞれの要素のシフト量は同じで、いずれも即値数である。例示的には、第1のスプライスベクトルは、要素1、要素2、及び要素3を含み、シフト量がui4であると、第1のスプライスベクトルをシフトすることは、すなわち、要素1をui4ビットだけシフトし、要素2をui4ビットだけシフトし、要素3をui4ビットだけシフトすることであり、要素は複数のビットを含み、要素を右シフトすることは、すなわち、要素のそれぞれのビットを予め設定されたビット数だけ右シフトし、要素内の右シフトされたビット数を破棄して、要素の左側の空き位置に指定値を設定することを意味し、当該予め設定されたビット数及び指定値はいずれも、特定の状況に応じて設定された値である。
【0079】
選択的には、第1のスプライスベクトル内のそれぞれのソース要素に対して行われるシフト丸め操作は、偶数に丸め、ゼロに丸め、切り上げ、及び切り下げという4つの丸め操作を含む。第1のスプライスベクトルに対して行われるシフト丸め操作は、第1のスプライスベクトルに対してシフト切り上げ操作を行うことであることが好ましい。
【0080】
選択的には、ビット数が2Nで、シフト量がsaである任意の要素xについて、当該要素xに対して、右論理シフトして丸めて半値幅に飽和する操作を実行するプロセスは、次の第1のステップ~第2のステップを含む。
【0081】
第1のステップでは、シフト量に応じて、演算結果Aを得る。具体的には、シフト量が0である場合には、得られた演算結果Aは要素xとなり、シフト量が0よりも大きい整数である場合には、中間演算結果を設定し、当該中間演算結果は、下位ビットが要素xのsaビットから2N-1ビット目までのデータであり、残りのsaビットの上位ビットが0であり、当該中間演算結果のビット数が2Nであり、中間演算結果は要素xのsa-1ビットに加算され、演算結果Aを得る。ここで、Nは0よりも大きい正の整数で、saは即値数である。
【0082】
第2のステップでは、演算結果の値を取得し、当該値を指定データと比較し、比較結果に応じて最終的な演算結果を得る。具体的には、演算結果Aの値を2N-1と比較し、演算結果Aが2N-1よりも大きい場合、最終的な演算結果はNビットがいずれも1のデータとなり、そうでない場合、最終的な演算結果は演算結果Aの0ビット目からN-1ビット目までのデータとなる。要素xは、符号付きベクトル又は符号なしベクトルである。
【0083】
選択的には、ビット数が2Nで、シフト量がsaである任意の要素xについて、当該要素xに対して、右算術シフトして丸めて半値幅に飽和する操作を実行するプロセスは、次の第1のステップ~第2のステップを含む。
【0084】
第1のステップでは、シフト量に応じて、演算結果Aを得る。具体的には、シフト量が0である場合には、得られた演算結果Aは要素xとなり、シフト量が0よりも大きい整数である場合には、中間演算結果を設定し、当該中間演算結果は、下位ビットが要素xのsaビットから2N-1ビット目までのデータであり、残りのsaビットの上位ビットがいずれも要素xの2N-1ビットのデータであり、当該中間演算結果のビット数が2Nであり、中間演算結果Aは要素xのsa-1ビットに加算され、演算結果Aを得る。ここで、Nは0よりも大きい正の整数で、saは即値数である。
【0085】
第2のステップでは、演算結果の値を取得し、当該値を指定データと比較し、比較結果に応じて最終的な演算結果を得る。具体的には、演算結果Aの値と2N-1の比較、及び演算結果Aの値と-2N-1の比較をそれぞれ行い、演算結果Aが2N-1よりも大きい場合、最終的な演算結果は最上位ビットが0、残りの下位ビットが1、最終的な演算結果のビット数がNとなり、演算結果Aが-2N-1よりも小さい場合、最終的な演算結果は最上位ビットが1、残りの下位ビットが0、最終的な演算結果のビット数がNとなり、演算結果Aが2N-1よりも小さく-2N-1よりも大きい場合、最終的な演算結果は演算結果Aの0ビット目からN-1ビット目までのデータであり、最終的な演算結果のビット数がNとなる。
【0086】
丸めがなされたデータについて半値幅に飽和する処理は、丸めがなされた符号付きデータについて半値幅に飽和する処理、及び丸めがなされた符号なしデータについて半値幅に飽和する処理を含む。
【0087】
本願の実施例を参照して、上記の例に係る最終的な演算結果は本願の実施例に係る第1の初期シフト演算結果における要素となり、演算結果Aは本願の実施例に係る第1のスプライスベクトルにおける要素となる。
【0088】
即値数に従い、第1のスプライスベクトルに対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成した後、ステップ506を実行する。
【0089】
ステップ506では、前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成する。
【0090】
本願の実施例では、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットの要素のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0091】
第1の初期シフト演算結果に対してビット選択操作を実行しシフト演算結果を生成した後、ステップ507を実行する。
【0092】
ステップ507では、前記シフト演算結果における要素をターゲット要素として、前記デスティネーションレジスタに順次書き込む。
【0093】
本願の実施例では、ターゲット要素のデータタイプはソース要素のデータタイプに応じて決定され、選択的には、ターゲット要素のデータタイプに対応するビット数はソース要素のデータタイプに対応するビット数の半分である。例示的には、ソース要素のデータタイプがハーフワードである場合には、ターゲット要素のデータタイプはバイトであり、ソース要素のデータタイプがワードである場合には、ターゲット要素のデータタイプはハーフワードであり、ソース要素のデータタイプがダブルワードである場合には、ターゲット要素のデータタイプはワードであり、ソース要素のデータタイプがクワッドワードである場合には、ターゲット要素のデータタイプはダブルワードである。ソース要素は、符号付きデータであってもよいし、符号なしデータであってもよい。
【0094】
選択的には、ターゲット要素が決定された後、ターゲット要素をデスティネーションレジスタに順次書き込む方法は、第1の初期シフト演算結果における各ターゲット要素の位置情報を決定するステップと、デスティネーションレジスタの内に、当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むステップと、を含む。ここで、当該位置情報は第1の初期シフト演算結果における要素の順序を示し、デスティネーションレジスタの内に当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むことは、ターゲット要素を上位ビットから下位ビットへ、デスティネーションレジスタのN/2-1ビット目から0ビット目までの位置に順次書き込むことを意味するか、またはターゲット要素を下位ビットから上位ビットへ、デスティネーションレジスタの0ビット目からN/2-1ビット目までの位置に順次書き込むことを意味している。
【0095】
本願の実施例における、第1のタイプのベクトルオペコードに従いターゲット要素を取得するプロセスを参照して、第1のタイプのベクトルオペコードは、異なるベクトルシフト操作を指示するために、4つのタイプのベクトルオペコード(すなわち、第1のベクトルオペコード、第2のベクトルオペコード、第3のベクトルオペコード、及び第4の第1のタイプのベクトルオペコード)をさらに含んでおり、具体的には、下記の4つの特定の実現形態を参照して詳細に説明することができる。
【0096】
本願の第1種の特定の実現形態では、前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、具体的な処理方法は、次のサブステップA1~A2を含むことができる。
【0097】
サブステップA1では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0098】
本願の実施例では、第1のタイプのベクトルオペコードは第1のベクトルオペコードであってもよく、当該第1のベクトルオペコードは、第1のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行うことを指示するために使用可能であり、前記第1のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数で、Nは128ビットであることが好ましい。
【0099】
選択的には、右論理シフトとは、符号ビットを考慮せずに要素をシフトする方法を指し、すなわち、要素を1ビットだけ右シフトするごとに、最上位ビットとして0を1ビット補足すればよい。符号付き飽和とは、16ビット数値について、8ビット数値の符号付き値の範囲(-128から+127まで)に従って飽和を行うことを意味する。半値幅とは、ビット幅セグメントの半分を意味する。任意のベクトルに対して、右論理シフトして半値幅に符号付き飽和する操作を実行するプロセスは前述したため、ここでは繰り返して説明しない。
【0100】
第1のタイプのベクトルオペコードが第1のベクトルオペコードである場合には、第1の初期シフト演算結果を生成するために、即値数に従い第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行うことができる。
【0101】
サブステップA2では、前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0102】
本願の実施例では、第1の初期シフト演算結果を生成した後、第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択して、選択操作後の連続する下位半分の要素をシフト演算結果として決定してもよい。
【0103】
選択的には、第1のソースレジスタに含まれている第1のソース要素と第2のソース要素の両方がN/2ビットで、第2のソースレジスタに含まれている第3のソース要素と第4のソース要素がN/2ビットである場合には、第1の初期シフト演算結果はNビットで、シフト演算結果は、第1の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。
【0104】
さらに、シフト演算結果における各ターゲット要素に対してその下位半分をそれぞれ選択し、デスティネーションレジスタの各ターゲット要素にそれぞれ対応する記憶位置に順次書き込む。例示的には、第1のソースレジスタはベクトルレジスタvd、第2のソースレジスタはベクトルレジスタvjであり、ベクトルレジスタvdは第1のソース要素と第2のソース要素を含み、ベクトルレジスタvjは第3のソース要素と第4のソース要素を含み、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素のビット数はN/2で、第1のソース要素と第2のソース要素をベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第2のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第3のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第4のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、ベクトルレジスタvdに順次書き込む。
【0105】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0106】
本願の第2種の特定の実現形態では、前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、具体的な処理方法は、次のサブステップB1~B2を含むことができる。
【0107】
サブステップB1では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0108】
本願の実施例では、第1のタイプのベクトルオペコードは第2のベクトルオペコードであってもよく、第2のベクトルオペコードは、第1のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行うことを指示するために使用可能であり、前記第1のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。
【0109】
選択的には、右算術シフトとは、符号ビットを考慮する必要がある要素のシフト方法を指し、すなわち、要素を1ビットだけ右シフトするごとに、符号ビットが1である場合、左側の最上位ビットに1が補足され、そうでない場合、左側の最上位ビットに0が補足される。符号付き飽和及び半値幅の意味は、前述したものと同じであるため、ここでは繰り返して説明しない。任意のベクトルに対して、右算術シフトして半値幅に符号付き飽和する操作を実行するプロセスは前述したため、ここでは繰り返して説明しない。
【0110】
第1のタイプのベクトルオペコードが第3のベクトルオペコードである場合には、第1の初期シフト演算結果を生成するために、即値数に従い、第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行うことができる。
【0111】
即値数に従い、第1のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成した後、サブステップB2を実行する。
サブステップB2では、前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0112】
本願の実施例では、第1の初期シフト演算結果を生成した後、第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択して、選択操作後の連続する下位半分の要素をシフト演算結果として決定することができる。
【0113】
選択的には、第1のソースレジスタに含まれている第1のソース要素と第2のソース要素の両方がN/2ビットで、第2のソースレジスタに含まれている第3のソース要素と第4のソース要素の両方がN/2ビットである場合には、第1の初期シフト演算結果はNビットで、シフト演算結果は、第1の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。
【0114】
さらに、シフト演算結果における各ターゲット要素に対してその下位半分をそれぞれ選択し、デスティネーションレジスタの各ターゲット要素にそれぞれ対応する記憶位置に順次書き込む。例示的には、第1のソースレジスタはベクトルレジスタvdで、第2のソースレジスタはベクトルレジスタvjで、ベクトルレジスタvdは第1のソース要素と第2のソース要素を含み、ベクトルレジスタvjは第3のソース要素と第4のソース要素を含み、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素のビット数はN/2で、第1のソース要素と第2のソース要素をベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第2のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第3のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第4のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、ベクトルレジスタvdに順次書き込む。
【0115】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0116】
本願の第3種の特定の実現形態では、前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、具体的な処理方法は、次のサブステップC1~C2を含むことができる。
【0117】
サブステップC1では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0118】
本願の実施例では、第1のタイプのベクトルオペコードは第3のベクトルオペコードであってもよく、第3のベクトルオペコードは、第1のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行うことを指示するために使用可能であり、前記第1のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。
【0119】
選択的には、丸めて符号なし飽和とは、16ビット数値について、8ビット数値の符号付き値の範囲(0~255)に従って飽和を行うことを意味する。右論理シフト及び半値幅に飽和する処理の意味は、前述したものと同じであるため、ここでは繰り返して説明しない。任意のベクトルに対して、右論理シフトして半値幅に符号なし飽和する操作を実行するプロセスは前述したため、ここでは繰り返して説明しない。
【0120】
第1のタイプのベクトルオペコードが第3のベクトルオペコードである場合には、第1の初期シフト演算結果を生成するために、即値数に従い、第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行うことができる。
【0121】
即値数に従い、第1のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成した後、サブステップC2を実行する。
【0122】
サブステップC2では、前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0123】
本願の実施例では、第1の初期シフト演算結果を生成した後、第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択して、選択操作後の連続する下位半分の要素をシフト演算結果として決定することができる。
【0124】
選択的には、第1のソースレジスタに含まれている第1のソース要素と第2のソース要素の両方がN/2ビットで、第2のソースレジスタに含まれている第3のソース要素と第4のソース要素の両方がN/2ビットである場合には、第1の初期シフト演算結果はNビットで、シフト演算結果は、第1の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。
【0125】
さらに、シフト演算結果における各ターゲット要素に対してその下位半分をそれぞれ選択し、デスティネーションレジスタの各ターゲット要素にそれぞれ対応する記憶位置に順次書き込む。例示的には、第1のソースレジスタはベクトルレジスタvdで、第2のソースレジスタはベクトルレジスタvjであり、ベクトルレジスタvdは第1のソース要素と第2のソース要素を含み、ベクトルレジスタvjは第3のソース要素と第4のソース要素を含み、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素のビット数はN/2であり、第1のソース要素と第2のソース要素をベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、シフト量は即値数に由来し、第1のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第2のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第3のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第4のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、ベクトルレジスタvdに順次書き込む。
【0126】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0127】
本願の第4種の特定の実現形態では、前記第1のタイプのベクトルオペコードは第4の第1のタイプのベクトルオペコードであり、具体的な処理方法は、次のサブステップD1~D2を含むことができる。
【0128】
サブステップD1では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0129】
本願の実施例では、第1のタイプのベクトルオペコードは第4の第1のタイプのベクトルオペコードであってもよく、第4の第1のタイプのベクトルオペコードは、第1のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行うことを指示するために使用可能であり、前記第1のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。
【0130】
選択的には、右算術シフト、丸め、半値幅の意味は、前述したものと同じであるため、ここでは繰り返して説明しない。右論理シフト及び半値幅に飽和する処理の意味は、前述したものと同じであるため、ここでは繰り返して説明しない。任意のベクトルに対して、右算術シフトして半値幅に符号なし飽和する操作を実行するプロセスは前述したため、ここでは繰り返して説明しない。
【0131】
第1のタイプのベクトルオペコードが第4の第1のタイプのベクトルオペコードである場合には、第1の初期シフト演算結果を生成するために、即値数に従い、第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行うことができる。
【0132】
即値数に従い、第1のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成した後、サブステップD2を実行する。
【0133】
サブステップD2では、前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0134】
本願の実施例では、第1の初期シフト演算結果を生成した後、第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータを選択して、選択操作後の連続する下位半分の要素をシフト演算結果として決定することができる。
【0135】
選択的には、第1のソースレジスタに含まれている第1のソース要素と第2のソース要素の両方がN/2ビットで、第2のソースレジスタに含まれている第3のソース要素と第4のソース要素の両方がN/2ビットである場合には、第1の初期シフト演算結果はNビットで、シフト演算結果は、第1の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。
【0136】
さらに、シフト演算結果における各ターゲット要素に対してその下位半分をそれぞれ選択し、デスティネーションレジスタの各ターゲット要素にそれぞれ対応する記憶位置に順次書き込む。例示的には、第1のソースレジスタはベクトルレジスタvdで、第2のソースレジスタはベクトルレジスタvjであり、ベクトルレジスタvdは第1のソース要素と第2のソース要素を含み、ベクトルレジスタvjは第3のソース要素と第4のソース要素を含み、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素のビット数はN/2であり、第1のソース要素と第2のソース要素をベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第2のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第3のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第4のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、ベクトルレジスタvdに順次書き込む。
【0137】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0138】
本願に係る技術的解決手段を採用し、第1のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第2のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する算術シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第3のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装し、第4の第1のタイプのベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する算術シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装する。したがって、本発明に係る技術的解決手段を採用すると、異なるシフトパラメータを用いて異なるシフトニーズを達成することができ、これによって、複数のベクトルシフトニーズを1つのシフト命令で達成することができ、システムオーバーヘッドを効果的に低減し、特定の機能に対するベクトルシフトの実行効率を向上させる。
【0139】
実施例3
【0140】
本願の実施例では、オペコードは第2のタイプのベクトルオペコードであってもよく、ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、当該第2のタイプのベクトルオペコードは、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、対応するベクトルシフト操作を実行することを指示するために使用可能であり、
図6に示すように、ベクトルシフト命令の処理方法は、次のステップ601~609を含むことができる。
【0141】
ステップ601では、レジスタ識別子及びシフトパラメータを含む命令を受信する。
【0142】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1と実施例2に説明されたため、ここでは繰り返して説明しない。
【0143】
選択的には、ソースレジスタの数は2つあり、すなわち、ソース要素は2つの異なるレジスタに由来し、前記ソースレジスタ数が複数ある場合には、すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は、前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタ数が複数ある場合には、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している。実施例2と比較して、本願の実施例におけるソースレジスタとデスティネーションレジスタのビット数は、実施例2における前記ソースレジスタとデスティネーションレジスタビットのビット数の2倍であり、例示的には、本願の実施例におけるソースレジスタのビット数が256ビットである場合、実施例2におけるソースレジスタのビット数は128ビットである。
【0144】
選択的には、受信された命令を復号化し、当該命令に含まれているシフトパラメータを取得し、当該シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものであり、本例では、シフトパラメータは、シフト量やオペコードなどのパラメータを含むことができる。
【0145】
ステップ602では、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定する。
【0146】
本願の実施例では、ベクトルシフト操作が実行されるソース要素は少なくとも1つあり、前記シフト量は即値数、前記シフト演算ルールはオペコード、前記オペコードは第2のタイプのベクトルオペコードであり、前記即値数は0以上の正の整数である。
【0147】
選択的には、前記第2のタイプのベクトルオペコードはバイナリ形態で表現されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,シフト量」である。前記オペコードが第2のタイプのベクトルオペコードである場合には、実際に実装する際、命令は、「XVSSR第2のタイプ.{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q} xd,xj,ui第2のタイプ」と表すことができ、XVSSR第2のタイプは、第2のタイプのベクトルオペコード内の命令名称で、{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q}は、第2のオペコードのうち、ソース要素とターゲット要素のデータタイプを指示するためのパラメータであり、Bはバイトを表し、Hはハーフワードを表し、Wはワードを表し、Dはダブルワードを表し、Qはクワッドワードを表し、Uは符号なしを表し、xdはデスティネーションレジスタとソースレジスタの両方を表し、xjはソースレジスタを表し、ui第2のタイプは、オペコードが第2のタイプのベクトルオペコードである場合に、命令に含まれている即値数を表す。例示的には、XVSSR第2のタイプ1.B.Hはバイナリ形態に変換可能な第2のタイプのベクトルオペコードであり、例えば、XVSSR第2のタイプ1.B.Hが011101110101000001というバイナリ形態に変換される第2のタイプのベクトルオペコードは挙げられる。
【0148】
さらに、ui第2のタイプは、ソース要素とターゲット要素のデータタイプに応じて定義されたパラメータであり、当該ui第2のタイプの値は範囲及び値の取り方は、実施例2におけるui第1のタイプの場合と同じであるため、ここでは繰り返して説明しない。
【0149】
シフトパラメータに従ってシフト量及びシフト演算ルールを決定した後、ステップ603を実行する。
【0150】
ステップ603では、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得る。
【0151】
本願の実施例では、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタにおいて選択操作を実行し、第1のオペランドを得て、第2のソースレジスタにおいて選択操作を実行し、第2のオペランドを得る。ここで、第1のオペランドと第2のオペランドとは、データタイプが同じで、且つ第1のオペランド内のソース要素と第2のオペランド内の要素とは、データタイプがハーフワード、ワード、ダブルワード、クワッドワードのいずれかである。
【0152】
選択的には、前記選択操作は、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、前記第1のソースレジスタレジスタと第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0153】
選択的には、第1のソースレジスタについて実行する選択操作と第2のソースレジスタについて実行する選択操作は同じである。例示的には、例えば、第1のソースレジスタについて選択操作を実行することは、第1のソースレジスタに含まれている各要素の中から連続する下位半分のデータをそれぞれ選択することであり、第2のソースレジスタについて選択操作を実行することは、第2のソースレジスタに含まれている各要素の中から連続する下位半分の要素をそれぞれ選択することである。また、例えば、第1のソースレジスタについて選択操作を実行することは、第1のソースレジスタに含まれている各要素の中から連続する上位半分の要素をそれぞれ選択することであり、第2のソースレジスタについてそれぞれ選択操作を実行することは、第2のソースレジスタに含まれている各要素の中から連続する上位半分の要素を選択することである。さらに、例えば、第1のソースレジスタについてそれぞれ選択操作を実行することは、第1のソースレジスタに含まれている各要素の中から中間の連続する指定ビットの要素を選択することであり、第2のソースレジスタに含まれている各要素に対してそれぞれ選択操作を実行することは、第2のソースレジスタについて中間の連続する指定ビットの要素を選択することである。さらに、例えば、第1のソースレジスタについてそれぞれ選択操作を実行することは、第1のソースレジスタに含まれている各要素の中から連続していない指定ビットの要素を選択することであり、第2のソースレジスタについてそれぞれ選択操作を実行することは、第2のソースレジスタに含まれている各要素の中から連続していない指定ビットの要素を選択することである。
【0154】
第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行し、第1のオペランドと第2のオペランドを得た後、ステップ604を実行する。
【0155】
ステップ604では、前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定する。
【0156】
本願の実施例では、第3のオペランドと第4のオペランドは、第1のオペランドと第2のオペランドとはデータタイプが同じで、且つ第3のオペランド内のソース要素と第4のオペランド内の要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかである。
【0157】
選択的には、第1のソースレジスタのうち第1のオペランド以外のデータを第3のオペランドとして決定して、第2のソースレジスタのうち第2のオペランド以外のデータを第4のオペランドとして決定する。例示的には、第1のオペランドが第1のソースレジスタに含まれている各要素の中の連続する下位半分のデータである場合には、第3のオペランドは、第1のソースレジスタに含まれている各要素の中の連続する上位半分のデータとなり、同様に、第2のオペランドは、第1のソースレジスタの各要素の中の連続する下位半分の要素となり、第4のオペランドは、第1のソースレジスタに含まれている各要素の中の連続する上位半分の要素となる。
【0158】
第1のオペランド、第2のオペランド、第3のオペランド、及び第4のオペランドが得られた後、ステップ605を実行する。
【0159】
ステップ605では、前記第1のオペランドと第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成する。
【0160】
本願の実施例では、第1のオペランドと第2のオペランドを左右にスプライスした後、第2のスプライスベクトルを生成し、ここで、第1のオペランドと第2のオペランドを左右にスプライスする位置の設定は、命令内のソースレジスタ識別子の位置に応じて決定され、すなわち、第1のソースレジスタ識別子が命令内に第2のタイプのベクトルオペコードの直後のソースレジスタ識別子で、第2のソースレジスタ識別子が命令内に第1のソースレジスタ識別子の後に配置されているソースレジスタ識別子である場合には、第1のオペランドが第1のソースレジスタに由来するもので、第2のオペランドが第2のソースレジスタに由来するものであるため、第1のオペランドは左側に配置され、第2のオペランドは右側に配置され、第2のスプライスベクトルは生成されるが、第2のソースレジスタ識別子が命令内に第2のタイプのベクトルオペコードの直後のソースレジスタ識別子で、第1のソースレジスタ識別子が命令内に第1のソースレジスタ識別子の後に配置されているソースレジスタ識別子である場合には、第1のオペランドが第1のソースレジスタに由来するもので、第2のオペランドが第2のソースレジスタに由来するものであるため、第2のオペランドは左側に配置され、第1のオペランドは右側に配置され、第2のスプライスベクトルは生成される。例示的には、命令のフォーマットが「第2のタイプのベクトルオペコード vd,vj,即値数」である場合には、第1のソースレジスタがvd、第2のソースレジスタがvj、デスティネーションレジスタがvdであると表し、この場合、第1のオペランドはvd(第1のオペランドvdと表記される)に由来するものとなり、第2のソース要素はvj(第2のオペランドvjと表記される)に由来するものとなり、第2のスプライスベクトルは「第1のオペランドvd第2のオペランドvj」となり、同様に、命令のフォーマットが「第2のタイプのベクトルオペコード vd,vj,即値数」である場合には、第2のソースレジスタがvd、第1のソースレジスタがvj、デスティネーションレジスタがvdであると表し、この場合、第2のオペランドはvd(第2のソース要素vdと表記される)に由来するものとなり、第1のオペランドはvj(第1のソース要素vjと表記される)に由来するものとなり、第2のスプライスベクトルは「第1のオペランドvj第2のオペランドvd」となる。第3のオペランドと第4のオペランドによって第3のスプライスベクトルを生成する方法は、第1のオペランドと第2のオペランドによって第2のスプライスベクトルを生成する上記の方法と同じであるため、ここでは繰り返して説明しない。
【0161】
選択的には、第1のオペランドと第2のオペランドをさらに、要素を単位としてクロススプライスして、第2のスプライスベクトルを生成してもよく、クロススプライスの際、ソースレジスタ内に同じアドレスを有するソース要素は1つのグループとしてクロスされ、第2のスプライスベクトルにおける異なるグループの位置は、ソース要素のアドレスに従って降順に配置され、2つの異なるレジスタにそれぞれ由来する2つの要素を1つのグループとしてスプライスする際の左右位置の設定は、命令内のソースレジスタ識別子の位置に応じて決定され、ここでは上記の例と同じであるため、ここでは繰り返して説明しない。例示的には、第1のオペランドは、「ソース要素1(アドレスa)、ソース要素2(アドレスb)、及びソース要素3(アドレスc)」を含み、第2のオペランドは、「ソース要素4(アドレスa)、ソース要素5(アドレスb)、及びソース要素6(アドレスc)」であり、アドレスが同じくaのソース要素1とソース要素4を、1つのグループと見なしてクロススプライスし、アドレスが同じくbのソース要素2とソース要素5を、1つのグループと見なしてクロススプライスし、アドレスが同じくcのソース要素3とソース要素6を、1つのグループと見なしてクロススプライスし、第1のソース要素に対応するソースレジスタ識別子が命令の左側の位置に配置され、第2のソース要素に対応するソースレジスタ識別子が命令の右側の位置に配置されると想定すると、最終的に得られる第2のスプライスベクトルは、「ソース要素1ソース要素4ソース要素2ソース要素5ソース要素3ソース要素6」となる。第3のオペランドと第4のオペランドによって第3のスプライスベクトルを生成する方法は、当該第1のオペランドと第2のオペランドによって第2のスプライスベクトルを生成する方法と同じであるため、ここでは繰り返して説明しない。
【0162】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合、第2のスプライスベクトルは2Nビットとなり、同様に、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合、第3のスプライスベクトルは2Nビットとなり、Nは0よりも大きい正の整数である。第1のオペランドの合計ビット数は、当該第1のオペランドに含まれている各要素と当該要素のデータタイプに対応するビットに応じて決定可能であり、第2のオペランドの合計ビット数は、当該第2のオペランドに含まれている各要素と当該要素のデータタイプに対応するビットに応じて決定可能である。
【0163】
第2のスプライスベクトルと第3のスプライスベクトルが得られた後、ステップ606を実行する。
【0164】
ステップ606では、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0165】
本願の実施例では、第2のスプライスベクトルには複数の要素が含まれており、即値数に従い、第2のスプライスベクトルに対して、シフトして丸めて半値幅に飽和する操作を行うことは、すなわち、第2のスプライスベクトルにおける各要素に対して、シフトして丸めて半値幅に飽和する操作を実行し、シフト量を即値数とし、第2の初期シフト演算結果を生成することであり、同様に、第3のスプライスベクトルには複数の要素が含まれており、即値数に従い、第3のスプライスベクトルに対して、シフトして丸めて半値幅に飽和する操作を行うことは、すなわち、第3のスプライスベクトルにおける各要素に対して、シフトして丸めて半値幅に飽和する操作を実行し、シフト量を即値数とし、第3の初期シフト演算結果を生成することである。ここで、シフト操作は右シフト操作であり、前記シフト操作は、論理シフト及び算術シフトを含む。
【0166】
選択的には、前記第2のスプライスベクトルをシフトすることは、第2のスプライスベクトル内のそれぞれの要素に対してシフト操作を行い、シフト量を即値数とすることを含み、すなわち、各要素のシフト量が同じであり、即値数となる。例示的には、第2のスプライスベクトルには、要素1、要素2、及び要素3が含まれており、シフト量がui4であると、第1のスプライスベクトルをシフトすることは、すなわち、要素1をui4ビットだけシフトし、要素2をui4ビットだけシフトし、要素3をui4ビットだけシフトするようにそれぞれ行うことである。
【0167】
選択的には、前記第3のスプライスベクトルをシフトすることは、第3のスプライスベクトル内のそれぞれの要素に対してシフト操作を行い、シフト量を即値数とすることを含み、すなわち、各要素のシフト量が同じであり、即値数となる。例示的には、第3のスプライスベクトルには、要素4、要素5、及び要素6が含まれており、シフト量がui4であると、第3のスプライスベクトルをシフトすることは、すなわち、要素4をui4ビットだけシフトし、要素5をui4ビットだけシフトし、要素6をui4ビットだけシフトするようにそれぞれ行うことである。
【0168】
選択的には、第2のスプライスベクトル/第3のスプライスベクトルに対して行われるシフト丸め操作は、偶数に丸め、ゼロに丸め、切り上げ、及び切り下げという4つの丸め操作を含む。第2のスプライスベクトル/第3のスプライスベクトルに対して行われるシフト丸め操作は、第2のスプライスベクトル/第3のスプライスベクトルに対してシフト切り上げ操作を行うことが好ましい。
【0169】
第2のスプライスベクトル/第3のスプライスベクトルに対して、右論理シフトして丸めて半値幅に飽和する操作を行う方法は、実施例2で説明されている方法と同じであるため、ここでは繰り返して説明しない。同様に、第2のスプライスベクトル/第3のスプライスベクトルに対して、右算術シフトして丸めて半値幅に飽和する操作を行う方法は、実施例2で説明されている方法と同じであるため、ここでは繰り返して説明しない。
【0170】
第2の初期シフト演算結果及び第3の初期シフト演算結果が生成された後、ステップ607を実行する。
【0171】
ステップ607では、前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成する。
【0172】
本願の実施例では、ビット選択操作を実行することは、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0173】
第1のシフト演算結果と第2のシフト演算結果が生成された後、ステップ608とステップ609を実行する。
【0174】
ステップ608では、前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む。
【0175】
ステップ609では、前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む。
【0176】
本願の実施例では、第1のシフト演算結果と第2のシフト演算結果における要素をターゲット要素として、デスティネーションレジスタ内の対応する記憶位置に書き込む。
【0177】
選択的には、ターゲット要素のデータタイプはソース要素のデータタイプに応じて決定され、選択的には、ターゲット要素のデータタイプに対応するビット数はソース要素のデータタイプに対応するビット数の半分である。例示的には、ソース要素のデータタイプがハーフワードである場合には、ターゲット要素のデータタイプはバイトであり、ソース要素のデータタイプがワードである場合には、ターゲット要素のデータタイプはハーフワードであり、ソース要素のデータタイプがダブルワードである場合には、ターゲット要素のデータタイプはワードであり、ソース要素のデータタイプがクワッドワードである場合には、ターゲット要素のデータタイプはダブルワードである。ソース要素は、符号付きデータであってもよいし、符号なしデータであってもよい。
【0178】
選択的には、ターゲット要素を決定した後、ターゲット要素をデスティネーションレジスタに順次書き込む方法は、第2のシフト演算結果と第3のシフト演算結果における各ターゲット要素の位置情報を決定するステップと、デスティネーションレジスタ内における
当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むステップと、を含む。ここで、当該位置情報は、第2のシフト演算結果と第3のシフト演算結果における要素の順序を示すものであり、デスティネーションレジスタ内における当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むことは、すなわち、デスティネーションレジスタにおける各ターゲット要素の記憶位置を決定することであり、各ターゲット要素について、第2のシフト演算結果に由来するターゲット要素を、当該ターゲット要素が配置されている記憶位置の上位半分に記憶し、第3のシフト演算結果に由来するターゲット要素を、当該ターゲット要素が配置されている記憶位置の下位半分に記憶するか、または、各ターゲット要素について、第2のシフト演算結果に由来するターゲット要素を、当該ターゲット要素が配置されている記憶位置の下位半分に記憶し、第3のシフト演算結果に由来するターゲット要素を、当該ターゲット要素が配置されている記憶位置の上位半分に記憶する。
【0179】
本願の実施例における、第2のタイプのベクトルオペコードに従いターゲット要素を取得するプロセスを参照して、第2のタイプのベクトルオペコードは、異なるベクトルシフト操作をそれぞれ指示するために、第5のベクトルオペコード、第6のベクトルオペコード、第7のベクトルオペコード、及び第8のベクトルオペコードを含み、具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0180】
本願の実施例の第1種の特定の実現形態では、前記第2のタイプのベクトルオペコードは第5のベクトルオペコードで、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分のデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分のデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分のデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分のデータであり、具体的な処理方法は、次のサブステップE1~E4を含むことができる。
【0181】
サブステップE1では、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0182】
本願の実施例では、第2のタイプのベクトルオペコードは第5のベクトルオペコードであってもよく、当該第5のベクトルオペコードは、第2のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作及び各要素のデータの選択操作を実行すること、及び、第3のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作及び各要素のデータの選択操作を実行することを指示するためのものであり、前記第2のスプライスベクトルと第3のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。右論理シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右論理シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは、実施例2と同じであるため、ここでは繰り返して説明しない。
【0183】
第2の初期シフト演算結果と第3の初期シフト演算結果が生成された後、サブステップE2を実行する。
【0184】
サブステップE2では、前記第2の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定する。
【0185】
本願の実施例では、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定する。
【0186】
第1のシフト演算結果と第2のシフト演算結果が得られた後、サブステップE3とサブステップE4を実行する。
【0187】
サブステップE3では、前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。
【0188】
サブステップE4では、前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0189】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合には、第2の初期シフト演算結果はNビットで、第2のシフト演算結果は、第2の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の下位半分のデータを第1のオペランドとし、xjにおける各要素の下位半分のデータを第2のオペランドとし、第1のオペランドと第2のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1の初期シフト演算結果に含まれている各要素に対してその下位半分を選択した後、下位半分選択操作が行われた各要素を第1のターゲット要素として、ベクトルレジスタxdの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。ここで、第1のオペランド内のソース要素と第2のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第1のオペランド内のソース要素と第2のオペランド内のソース要素とはデータタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0190】
選択的には、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合には、第3の初期シフト演算結果はNビットで、第3のシフト演算結果は、第3の初期シフト演算結果がN/2ビット目からN-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の上位半分のデータを第3のオペランドとし、xjにおける各要素の上位半分のデータを第4のオペランドとし、第3のオペランドと第4のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第2の初期シフト演算結果に含まれている各要素に対してその上位半分を選択した後、上位半分選択操作が行われた各要素を第2のターゲット要素として、ベクトルレジスタxdの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。ここで、第3のオペランド内のソース要素と第4のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第3のオペランド内のソース要素と第4のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0191】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0192】
本願の実施例の第2種の特定の実現形態では、前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分のデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する上位半分のデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分のデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分のデータであり、具体的な処理方法は、次のサブステップF1~F4を含むことができる。
【0193】
サブステップF1では、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0194】
本願の実施例では、第2のタイプのベクトルオペコードは第6のベクトルオペコードであってもよく、当該第6のベクトルオペコードは、第2のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作と各要素のデータの選択操作を実行すること、及び、第3のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作と要素選択操作を実行することを指示するためのものであり、前記第2のスプライスベクトルと第3のスプライスベクトルはいずれも2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。右算術シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右算術シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0195】
第2の初期シフト演算結果と第3の初期シフト演算結果が生成された後、サブステップF2を実行する。
【0196】
サブステップF2では、前記第2の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータを選択し、選択された前記データを第2のシフト演算結果として決定する。
【0197】
本願の実施例では、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定する。
【0198】
第1のシフト演算結果と第2のシフト演算結果が得られた後、サブステップF3とサブステップF4を実行する。
【0199】
サブステップF3では、前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。
【0200】
サブステップF4では、前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0201】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合には、第2の初期シフト演算結果はNビットで、第2のシフト演算結果は、第2の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の下位半分のデータを第1のオペランドとし、xjにおける各要素の下位半分のデータを第2のオペランドとし、第1のオペランドと第2のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1の初期シフト演算結果に含まれている各要素に対してその下位半分を選択した後、下位半分選択操作が行われた各要素を第1のターゲット要素として、ベクトルレジスタxdの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。ここで、第1のオペランド内のソース要素と第2のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第1のオペランド内のソース要素と第2のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0202】
選択的には、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合には、第3の初期シフト演算結果はNビットで、第3のシフト演算結果は、第3の初期シフト演算結果がN/2ビット目からN-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の上位半分のデータを第3のオペランドとし、xjにおける各要素の上位半分のデータを第4のオペランドとし、第3のオペランドと第4のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第2の初期シフト演算結果に含まれている各要素に対してその上位半分を選択した後、上位半分選択操作が行われた各要素を第2のターゲット要素として、ベクトルレジスタxdの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。ここで、第3のオペランド内のソース要素と第4のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第3のオペランド内のソース要素と第4のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0203】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0204】
本願の実施例の第3種の特定の実現形態では、前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分のデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分のデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分のデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分のデータであり、具体的な処理方法は、次のサブステップG1~G4を含むことができる。
【0205】
サブステップG1では、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0206】
本願の実施例では、第2のタイプのベクトルオペコードは第7のベクトルオペコードであってもよく、当該第7のベクトルオペコードは、第2のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作と各要素のデータの選択操作を実行すること、及び、第3のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作と各要素のデータの選択操作を実行することを指示するためのものであり、前記第2のスプライスベクトルと第3のスプライスベクトルはいずれも2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。右論理シフト、丸め、半値幅の意味は、実施例2と同じであり、右論理シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0207】
第2の初期シフト演算結果と第3の初期シフト演算結果が生成された後、サブステップG2を実行する。
【0208】
サブステップG2では、前記第2の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータを選択し、選択された前記データを第2のシフト演算結果として決定する。
【0209】
本願の実施例では、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定する。
【0210】
第1のシフト演算結果と第2のシフト演算結果が決定された後、サブステップG3とサブステップG4を実行する。
【0211】
サブステップG3では、前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。
【0212】
サブステップG4では、前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0213】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合には、第2の初期シフト演算結果はNビットで、第2のシフト演算結果は、第2の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の下位半分のデータを第1のオペランドとし、xjにおける各要素の下位半分のデータを第2のオペランドとし、第1のオペランドと第2のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1の初期シフト演算結果に含まれている各要素に対してその下位半分を選択した後、下位半分選択操作が行われた各要素を第1のターゲット要素として、ベクトルレジスタxdの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ順次書き込む。ここで、第1のオペランド内のソース要素と第2のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第1のオペランド内のソース要素と第2のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0214】
選択的には、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合には、第3の初期シフト演算結果はNビットで、第3のシフト演算結果は、第3の初期シフト演算結果がN/2ビット目からN-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の上位半分のデータを第3のオペランドとし、xjにおける各要素の上位半分のデータを第4のオペランドとし、第3のオペランドと第4のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第2の初期シフト演算結果に含まれている各要素に対してその上位半分を選択した後、上位半分選択操作が行われた各要素を第2のターゲット要素として、ベクトルレジスタxdの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。ここで、第3のオペランド内のソース要素と第4のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第3のオペランド内のソース要素と第4のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0215】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0216】
本願の実施例の第4種の特定の実現形態では、前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分のデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分のデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分のデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分のデータであり、具体的な処理方法は、次のサブステップH1~H4を含むことができる。
【0217】
サブステップH1では、前記即値数に従い、前記第2のスプライスベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0218】
本願の実施例では、第2のタイプのベクトルオペコードは第8のベクトルオペコードであってもよい。当該第8のベクトルオペコードは、第2のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作と各要素のデータ選択選択操作を実行すること、及び、第3のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作と各要素のデータ選択選択操作を実行することを指示するために使用可能であり、前記第2のスプライスベクトルと第3のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。右算術シフト、丸め、半値幅の意味は、実施例2と同じであり、右算術シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0219】
第2の初期シフト演算結果と第3の初期シフト演算結果が生成された後、サブステップH2を実行する。
【0220】
サブステップH2では、前記第2の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定する。
【0221】
本願の実施例では、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定する。
【0222】
第1のシフト演算結果と第2のシフト演算結果が得られた後、サブステップH3とサブステップH4を実行する。
【0223】
サブステップH3では、前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。
【0224】
サブステップH4では、前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0225】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合には、第2の初期シフト演算結果はNビットで、第2のシフト演算結果は、第2の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の下位半分のデータを第1のオペランドとし、xjにおける各要素の下位半分のデータを第2のオペランドとし、第1のオペランドと第2のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1の初期シフト演算結果に含まれている各要素に対してその下位半分を選択した後、下位半分選択操作が行われた各要素を第1のターゲット要素として、ベクトルレジスタxdの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。ここで、第1のオペランド内のソース要素と第2のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第1のオペランド内のソース要素と第2のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0226】
選択的には、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合には、第3の初期シフト演算結果はNビットで、第3のシフト演算結果は、第3の初期シフト演算結果がN/2ビット目からN-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の上位半分のデータを第3のオペランドとし、xjにおける各要素の上位半分のデータを第4のオペランドとし、第3のオペランドと第4のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第2の初期シフト演算結果に含まれている各要素に対してその上位半分を選択した後、上位半分選択操作が行われた各要素を第2のターゲット要素として、ベクトルレジスタxdの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。ここで、第3のオペランド内のソース要素と第4のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第3のオペランド内のソース要素と第4のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0227】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0228】
本願に係る技術的解決手段を採用し、第5のベクトルオペコードと即値数を含む命令を実行することによって、2つのワイドビットのソース要素に対する論理シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第6のベクトルオペコードと即値数を含む命令を実行することによって、2つのワイドビットのソース要素に対する算術シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第7のベクトルオペコードと即値数を含む命令を実行することによって、2つのワイドビットのソース要素に対する論理シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装し、第8のベクトルオペコードと即値数を含む命令を実行することによって、2つのワイドビットのソース要素に対する算術シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装する。したがって、本発明に係る技術的解決手段を採用すると、異なるシフトパラメータを用いて異なるシフトニーズを達成することができ、これによって、複数のベクトルシフトニーズを1つのシフト命令で達成することができ、システムオーバーヘッドを効果的に低減し、特定の機能に対するベクトルシフトの実行効率を向上させる。
【0229】
実施例4
【0230】
本願の実施例では、前記オペコードは第3のタイプのベクトルオペコードで、前記ソースレジスタは第1のソースレジスタであり、当該第2のタイプのベクトルオペコードは、第1のソースレジスタにおいて選択操作をそれぞれ実行するとともに、対応するベクトルシフト操作を実行することを指示するために使用可能であり、
図7に示すように、ベクトルシフト命令の処理方法は、次のステップ701~707を含むことができる。
【0231】
ステップ701では、レジスタ識別子及びシフトパラメータを含む命令を受信する。
【0232】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1~実施例3に説明されているため、ここでは繰り返して説明しない。
【0233】
選択的には、ソースレジスタの数は1つあり、すなわち、すべてのソース要素は同一のソースレジスタに由来するものであり、デスティネーションレジスタの数は1つあり、ソースレジスタとデスティネーションレジスタとは、同じ又は異なるものである。第1のソースレジスタのビット数は128ビット又は256ビットであることが好ましい。
【0234】
選択的には、受信された命令を復号化し、当該命令に含まれているシフトパラメータを取得し、当該シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものであり、本例では、シフトパラメータは、シフト量やオペコードなどのパラメータを含むことができる。
【0235】
ステップ702では、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定する。
【0236】
本願の実施例では、ベクトルシフト操作が実行されるソース要素は少なくとも1つあり、前記シフト量はシフト量レジスタに由来するものであり、前記シフト演算ルールはオペコードで、前記オペコードは第3のタイプのベクトルオペコードであり、前記シフト量レジスタに含まれている各要素シフト量は0以上の正の整数である。
【0237】
選択的には、前記第3のタイプのベクトルオペコードはバイナリ形態で表現されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,シフト量」である。前記オペコードが第3のタイプのベクトルオペコードである場合には、実際に実装する際、命令は、「[X]VSSR第3のタイプ.{B.H/H.W/W.D/BU.H/HU.W/WU.D} vd/xd,vj/xj,vk第3のタイプ/ xk第3のタイプ」と表され、[X]VSSR第3のタイプは、第3のタイプのベクトルオペコード内の命令名称であり、{B.H/H.W/W.D /BU.H/HU.W/WU.D}は、第2のオペコードの中にソース要素とターゲット要素のデータタイプを指示するためのパラメータであり、Bはバイトを表し、Hはハーフワードを表し、Wはワードを表し、Dはダブルワードを表し、vd/xdはデスティネーションレジスタとソースレジスタの両方を表し、vj/xjはソースレジスタを表し、vk第3のタイプ/vk第3のタイプは、オペコードが第3のタイプのベクトルオペコードである場合に命令に含まれているシフト量レジスタ識別子を表し、当該シフト量レジスタに含まれているバイナリを1つの配列とし、配列に含まれているパラメータの数とターゲット要素の数が同じであり、且つデータに含まれているパラメータは、同じ又は異なるものである。例示的には、VSSR第3のタイプ1.B.Hは、バイナリ形態に変換可能な第3のタイプのベクトルオペコードであり、例えば、VSSR第3のタイプ1.B.Hが01110001000000001というバイナリ形態に変換される第3のタイプのベクトルオペコードは挙げられる。
【0238】
シフトパラメータに従ってシフト量及びシフト演算ルールを決定した後、ステップ703を実行する。
【0239】
ステップ703では、前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得る。
【0240】
本願の実施例では、前記選択操作は、前記第1のソースレジスタの各要素に対してその連続する下位半分の要素を選択する操作、前記第1のソースレジスタの各要素に対してその連続する上位半分の要素を選択する操作、前記第1のソースレジスタの各要素に対してその中間の連続する指定ビットの要素を選択する操作、前記第1のレジスタの各要素に対してその連続していない指定ビットの要素を選択する操作のいずれか1つを含む。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれかである。
【0241】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとし、各データグループには少なくとも1つのソース要素が含まれており、すべてのデータグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含み、ここで、MとNは、0よりも大きい正の整数であり、M≦Nとし、ソース要素とデータとの対応関係は、ソース要素のデータタイプとデータビットとの間の変換関係に応じて決定される。
【0242】
選択的には、異なるデータグループ間には同じアドレスのデータが存在しないか、または、異なるデータグループ間には同じアドレスのデータの一部が存在している。ここで、前記アドレスは、第1のソースレジスタにおいて、当該第1のソースレジスタにおけるデータの位置情報であり、当該第1のソースレジスタにおいて、各データのアドレスが一意に識別される。
【0243】
NはMの倍数であることが好ましい。例示的には、N=128、M=128、第1のソースレジスタが256ビットのデータを含むと、第1のソースレジスタのデータは、128ビットごとに1つのグループとして、合計2つのグループ(第1のデータグループと第2のデータグループ)に分けられ、第1のデータグループは、第1のソースレジスタの0~127ビット目のデータで、第2のデータグループは、第1のソースレジスタの128~255ビット目のデータであり、第1のデータグループと第2のデータグループとは、同じアドレスのデータが存在していない。ソース要素のデータタイプがハーフワードである場合、第1のデータグループは8つのハーフワードソース要素を含むが、ソース要素のデータタイプがワードである場合、第1のデータグループは4つのワードソース要素を含むが、ソース要素のデータタイプがダブルワードである場合、第1のデータグループは2つのダブルワードソース要素を含む。
【0244】
第3のタイプのベクトルオペコードに従って第1のソースレジスタについて選択操作を実行し第5のオペランドを得た後、ステップ704を実行する。
【0245】
ステップ704では、前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0246】
本願の実施例では、シフト量はシフト量レジスタに由来するものであり、当該シフト量レジスタに記憶されているコンテンツは、1つのグループのデータとすることができ、当該グループのデータには複数のシフト値が含まれており、各シフト値は第5のオペランド内の各ソース要素にそれぞれ関わっており、異なるソース要素のシフト値は同じものであってもよいし、異なるものであってもよく、シフト値の数は第5のオペランドのソース要素の数と同じであるか、または、シフト値の数は第4の初期シフト演算結果と同じであるようにする。
【0247】
選択的には、シフト値の数が第5のオペランドのソース要素の数と同じである場合には、それぞれのシフト値が、第5のオペランド内の1つのソース要素に対応し、第5のオペランド内のそれぞれのソース要素に対しては、シフト量に応じて、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成する。例示的には、第5のオペランドには、ソース要素1、ソース要素2、ソース要素3、及びソース要素4を含み、シフト量レジスタには、4つのシフト値(シフト値1、シフト値2、シフト値3、及びシフト値4)を含み、ソース要素1に対応するシフト量がシフト値1、ソース要素2に対応するシフト量がシフト値2、ソース要素3に対応するシフト量がシフト値3、ソース要素4に対応するシフト量がシフト値4であると、ソース要素1はシフト値1に応じてシフトし、ソース要素2はシフト値2に応じてシフトし、ソース要素3はシフト値3に応じてシフトし、ソース要素4はシフト値4に応じてシフトする。
【0248】
選択的には、シフト値の数が第4の初期シフト演算結果と同じである場合には、第5のオペランドは、要素グループの数がシフト値の数と同じであるように、シフト値の数に応じて複数の要素グループに分けられ、すなわち、それぞれのシフト値が1つの要素グループに対応し、第5のオペランド内の各ソース要素に対しては、配置されている要素グループに対応するシフト量に応じて、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成する。例示的には、第5のオペランドには、ソース要素1、ソース要素2、ソース要素3、及びソース要素4を含み、シフト量レジスタには、4つのシフト値(シフト値1とシフト値2)を含み、ソース要素1とソース要素2が第1の要素グループを構成し、第1の要素グループに対応するシフト量がシフト値1であり、ソース要素3とソース要素4が第2の要素グループを構成し、第2の要素グループに対応するシフト量がシフト値2であると、ソース要素1とソース要素2は、シフト値1に応じてシフトし、ソース要素3とソース要素4はシフト値2に応じてシフトする。
【0249】
第4の初期シフト演算結果が生成された後、ステップ705を実行する。
【0250】
ステップ705では、前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成する。
【0251】
本願の実施例では、前記ビット選択操作は、前記第4の初期シフト演算結果について連続する下位半分の要素を選択する操作、前記第4の初期シフト演算結果について連続する上位半分の要素を選択する操作、前記第4の初期シフト演算結果について中間の連続する指定ビットの要素を選択する操作、前記第4の初期シフト演算結果について連続していない指定ビットの要素を選択する操作のうちのいずれか1つを含む。
【0252】
シフト演算結果が生成された後、ステップ706を実行する。
【0253】
ステップ706では、前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込む。
【0254】
本願の実施例では、シフト演算結果が生成された後、シフト演算結果における各データにそれぞれ対応するターゲット要素を決定し、デスティネーションレジスタの各ターゲット要素の記憶位置に各データを順次書き込む。
【0255】
選択的には、ターゲット要素のデータタイプはソース要素のデータタイプに応じて決定され、選択的には、ターゲット要素のデータタイプに対応するビット数はソース要素のデータタイプに対応するビット数の半分である。例示的には、ソース要素のデータタイプがハーフワードである場合には、ターゲット要素のデータタイプはバイトであり、ソース要素のデータタイプがワードである場合には、ターゲット要素のデータタイプはハーフワードであり、ソース要素のデータタイプがダブルワードである場合には、ターゲット要素のデータタイプはワードである。ソース要素は、符号付きデータであってもよいし、符号なしデータであってもよい。
【0256】
選択的には、ターゲット要素が決定された後、ターゲット要素をデスティネーションレジスタに順次書き込む方法は、シフト演算結果における各ターゲット要素の位置情報を決定するステップと、デスティネーションレジスタ内における当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むステップと、を含む。ここで、当該位置情報は、シフト演算結果における要素の順序を示すものであり、デスティネーションレジスタ内における当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むことは、すなわち、デスティネーションレジスタのN/2-1ビット目から0ビット目までの位置にターゲット要素を上位ビットから下位ビットへ順次書き込むか、またはデスティネーションレジスタの0ビット目からN/2-1ビット目までの位置にターゲット要素を下位ビットから上位ビットへ順次書き込むことである。
【0257】
シフト演算結果における要素をターゲット要素としてデスティネーションレジスタに順次書き込んだ後、ステップ707を実行する。
【0258】
ステップ707では、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定する。
【0259】
シフト演算結果におけるデータをデスティネーションレジスタ内の対応する位置に順次書き込んだ後、第3のタイプのベクトルオペコードに従って、デスティネーションレジスタ内のデータが書き込まれていない位置の値を設定することができる。
【0260】
本願の実施例における第3のタイプのベクトルオペコードに従ってターゲット要素を取得するプロセスを参照して、第3のタイプのベクトルオペコードは、異なるベクトルシフト操作をそれぞれ指示するために、第9のベクトルオペコード、第10のベクトルオペコード、第11のベクトルオペコード、及び第12のベクトルオペコードを含むことができる。具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0261】
本願の実施例の第1種の特定の実現形態では、前記第3のタイプのベクトルオペコードは第9のベクトルオペコードで、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、具体的な処理方法は、次のサブステップK1~K5を含むことができる。
【0262】
サブステップK1では、前記シフト量に応じて、前記第5のオペランドに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0263】
本願の実施例では、第9のベクトルオペコードが得られた後、シフト量に応じて、第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成することができ、ここで、シフト量はシフト量レジスタに由来するものである。
【0264】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとして、各データグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含む。前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、第5のオペランド内の各ソース要素に対応するシフト量レジスタ内のシフト値を決定し、各ソース要素に対応するシフト値にそれぞれ応じて、各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を実行し、第4の初期シフト演算結果を得るステップを含む。
【0265】
さらに、右論理シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右論理シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0266】
第4の初期シフト演算結果が生成された後、サブステップK2を実行する。
【0267】
サブステップK2では、前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定する。
【0268】
本願の実施例では、第4の初期シフト演算結果が生成された後、第4の初期シフト演算結果における各要素の連続する下位半分のデータをそれぞれ選択して、選択操作後の各要素の連続する下位半分のデータをシフト演算結果として決定する。
【0269】
シフト演算結果が得られた後、サブステップK3を実行する。
【0270】
サブステップK3では、プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、複数の記憶エリアを生成する。
【0271】
本願の実施例では、プリセット値とは、ベクトルレジスタ内の記憶位置を分割するための値を指し、プリセット値は、すなわち、ターゲット要素によって占められているデータビット幅であり、プリセット値の特定の数値は、業務上の必要に応じて決定することができ、本願の実施例は、それを限定しない。当該プリセット値は、当該プリセット値に応じて分割される各記憶エリアが同じ大きさである(各記憶エリアに記憶されているデータビット幅が同じである)ようにする値であることが好ましい。
【0272】
複数の記憶エリアが生成された後、サブステップK4を実行する。
【0273】
サブステップK4では、前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込む。
【0274】
本願の実施例では、第5のオペランドがMビットであると、第4の初期シフト演算結果はM/2ビットとなり、この場合、シフト演算結果は、第4の初期シフト演算結果における、0ビット目からM/4-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxj、第1のソースレジスタは2Mであり、xjのMビットごとに対応するソース要素を第5のオペランドとし、ベクトルシフト命令を用いて、第5のオペランドに含まれているMビットごとの各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を得ることができ、シフト量は、シフト量レジスタに由来するものであり、第4の初期シフト演算結果における各要素から選択された下位半分の要素を各ターゲット要素の下位半分としてベクトルレジスタxdのMビットごとのターゲット要素の下位半分に順次書き込み、且つ当該Mビットごとの各ターゲット要素の上位半分のデータを0に設定する。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれか1つであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0275】
シフト演算結果におけるデータを各記憶エリアの下位半分に順次書き込んだ後、サブステップK5を実行する。
【0276】
サブステップK5では、各記憶エリア内のデータが書き込まれていない位置の値をそれぞれゼロに設定する。
【0277】
本願の実施例では、シフト演算結果における要素をターゲット要素として、各記憶エリアの下位半分に順次書き込んだ後、各記憶エリア内のターゲット要素が書き込まれていない位置の値をゼロに設定する。
【0278】
例示的には、第1のソースレジスタがvj/xjで、第3のタイプのベクトルオペコードが第9のベクトルオペコードであると、ベクトルシフト命令を実行し、すなわち、第1のソースレジスタvj/xjの128ビットごとの各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、シフト結果における各要素の下位半分を選択してデスティネーションレジスタvd/xdの128ビットごとの各ターゲット要素の下位半分に順次書き込み、デスティネーションレジスタの128ビットごとの各ターゲット要素の上位半分を0に設定し、各要素のシフト量はシフト量レジスタvk/xkに由来するものであり、ソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれかである。
【0279】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0280】
本願の実施例の第2種の特定の実現形態では、前記第3のタイプのベクトルオペコードは第10のベクトルオペコードで、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、具体的な処理方法は、次のサブステップM1~M5を含むことができる。
【0281】
サブステップM1では、前記シフト量に応じて、前記第5のオペランドに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0282】
本願の実施例では、第10のベクトルオペコードが得られた後、シフト量に応じて、第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成することができ、ここで、シフト量はシフト量レジスタに由来するものである。
【0283】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとして、各データグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含む。前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、第5のオペランド内の各ソース要素に対応するシフト量レジスタ内のシフト値を決定し、各ソース要素に対応するシフト値にそれぞれ応じて、各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を実行し、第4の初期シフト演算結果を得るステップを含む。
【0284】
さらに、右算術シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右算術シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0285】
第4の初期シフト演算結果が生成された後、サブステップM2を実行する。
【0286】
サブステップM2では、前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定する。
【0287】
本願の実施例では、第4の初期シフト演算結果が生成された後、第4の初期シフト演算結果から各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の各要素の連続する下位半分のデータをシフト演算結果として決定することができる。
【0288】
シフト演算結果が得られた後、サブステップM3を実行する。
【0289】
サブステップM3では、プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、複数の記憶エリアを生成する。
【0290】
本願の実施例では、プリセット値とは、デスティネーションレジスタ内の記憶位置を領域分割するための数値を指し、プリセット値は、すなわち、ターゲット要素によって占められているデータビット幅であり、プリセット値の特定の数値は、業務上の必要に応じて決定することができ、本願の実施例は、それを限定しない。当該プリセット値は、当該プリセット値に応じて分割される各記憶エリアが同じ大きさである(各記憶エリアに記憶されているデータビット幅が同じである)ようにする値であることが好ましい。
【0291】
プリセット値に従いデスティネーションレジスタ内の記憶位置を分割して複数の記憶エリアを生成した後、サブステップM4を実行する。
【0292】
サブステップM4では、前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込む。
【0293】
本願の実施例では、複数の記憶エリアが生成されシフト演算結果が得られた後、シフト演算結果における要素をターゲット要素として、各記憶エリアの下位半分に順次書き込むことができる。
【0294】
選択的には、第5のオペランドがMビットであると、第4の初期シフト演算結果はM/2ビットとなり、この場合、シフト演算結果は、第4の初期シフト演算結果における、0ビット目からM/4-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxj、第1のソースレジスタは2Mであり、xjのMビットごとに対応するソース要素を第5のオペランドとし、ベクトルシフト命令を用いて、第5のオペランドに含まれているMビットごとの各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を得ることができ、シフト量は、シフト量レジスタに由来するものであり、第4の初期シフト演算結果における各要素から選択された下位半分の要素を各ターゲット要素としてベクトルレジスタxdのMビットごとの各ターゲット要素の下位半分に順次書き込み、且つ当該Mビットごとの各ターゲット要素の上位半分のデータを0に設定する。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれか1つであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0295】
シフト演算結果におけるデータを各記憶エリアの下位半分に順次書き込んだ後、サブステップM5を実行する。
【0296】
サブステップM5では、各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0297】
本願の実施例では、シフト演算結果における要素をターゲット要素として各記憶エリアの下位半分に順次書き込んだ後、各記憶エリア内のターゲット要素が書き込まれていない位置の値をそれぞれ0に設定することができる。
【0298】
例示的には、第1のソースレジスタがvj/xj、第3のタイプのベクトルオペコードが第9のベクトルオペコードであると、ベクトルシフト命令を実行し、すなわち、第1のソースレジスタvj/xjの128ビットごとの各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、シフト結果における各要素の下位半分を選択してデスティネーションレジスタvd/xdの128ビットごとの各ターゲット要素の下位半分に順次書き込み、デスティネーションレジスタの128ビットごとの各ターゲット要素の上位半分を0に設定し、各要素のシフト量はシフト量レジスタvk/xkに由来するものであり、ソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれかである。
【0299】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0300】
本願の実施例の第3種の特定の実現形態では、前記第3のタイプのベクトルオペコードは第11のベクトルオペコード、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、具体的な処理方法は、次のサブステップN1~N5を含むことができる。
【0301】
サブステップN1では、前記シフト量に応じて、前記第5のオペランドに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0302】
本願の実施例では、第11のベクトルオペコードが得られた後、シフト量に応じて、第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成することができ、ここで、シフト量はシフト量レジスタに由来するものである。
【0303】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとして、各データグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含む。前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、第5のオペランド内の各ソース要素に対応するシフト量レジスタ内のシフト値を決定し、各ソース要素に対応するシフト値にそれぞれ応じて、各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を実行し、第4の初期シフト演算結果を得るステップを含む。
【0304】
さらに、右論理シフト、丸め、半値幅の意味は、実施例2と同じであり、右論理シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0305】
シフト量に応じて、第5のオペランドに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成した後、サブステップN2を実行する。
【0306】
サブステップN2では、前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定する。
【0307】
本願の実施例では、第4の初期シフト演算結果が生成された後、第4の初期シフト演算結果から各要素の連続する下位半分のデータをそれぞれ選択し、選択された各要素の連続する下位半分のデータをシフト演算結果として決定する。
【0308】
シフト演算結果が得られた後、サブステップN3を実行する。
【0309】
サブステップN3では、プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、複数の記憶エリアを生成する。
【0310】
本願の実施例では、プリセット値とは、デスティネーションレジスタ内の記憶位置を領域分割するための値を指し、プリセット値は、すなわち、ターゲット要素によって占められているデータビット幅であり、プリセット値の特定の数値は、業務上の必要に応じて決定することができ、本願の実施例は、それを限定しない。当該プリセット値は、当該プリセット値に応じて分割される各記憶エリアが同じ大きさである(各記憶エリアに記憶されているデータビット幅が同じである)ようにする値であることが好ましい。
【0311】
複数の記憶エリアが生成された後、サブステップN4を実行する。
【0312】
サブステップN4では、前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込む。
【0313】
本願の実施例では、複数の記憶エリアが生成され、且つシフト演算結果が得られた後、シフト演算結果における要素をターゲット要素として、各記憶エリアの下位半分に順次書き込むことができる。
【0314】
選択的には、第5のオペランドがMビットであると、第4の初期シフト演算結果はM/2ビットとなり、この場合、シフト演算結果は、第4の初期シフト演算結果における、0ビット目からM/4-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxj、第1のソースレジスタは2Mであり、xjのMビットごとに対応するソース要素を第5のオペランドとし、ベクトルシフト命令を用いて、第5のオペランドに含まれているMビットごとの各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を得ることができ、シフト量は、シフト量レジスタに由来するものであり、第4の初期シフト演算結果における各要素から選択された下位半分の要素を各ターゲット要素としてベクトルレジスタxdのMビットごとの各ターゲット要素の下位半分に順次書き込み、且つ当該Mビットごとの各ターゲット要素の上位半分のデータを0に設定する。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれか1つであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0315】
シフト演算結果におけるデータを各記憶エリアの下位半分に順次書き込んだ後、サブステップN5を実行する。
【0316】
サブステップN5では、各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0317】
シフト演算結果における要素をターゲット要素として各記憶エリアの下位半分に順次書き込んだ後、各記憶エリア内のターゲット要素が書き込まれていない位置の値をそれぞれをゼロに設定することができる。
【0318】
例示的には、第1のソースレジスタがvj/xj、第3のタイプのベクトルオペコードが第9のベクトルオペコードであると、ベクトルシフト命令を実行し、すなわち、第1のソースレジスタvj/xjの128ビットごとの各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、シフト結果における各要素の下位半分を選択してデスティネーションレジスタvd/xdの128ビットごとの各ターゲット要素の下位半分に順次書き込み、デスティネーションレジスタの128ビットごとの各ターゲット要素の上位半分を0に設定し、各要素のシフト量はシフト量レジスタvk/xkに由来するものであり、ソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれかである。
【0319】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0320】
本願の第4種の特定の実現形態では、前記第3のタイプのベクトルオペコードは第12のベクトルオペコード、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、具体的な処理方法は、次のサブステップS1~S5を含むことができる。
【0321】
サブステップS1では、前記シフト量に応じて、前記第5のオペランドに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0322】
本願の実施例では、第12のベクトルオペコードが得られた後、シフト量に応じて、第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成することができ、ここで、シフト量はシフト量レジスタに由来するものである。
【0323】
第4の初期シフト演算結果が生成された後、サブステップS2を実行する。
【0324】
サブステップS2では、前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定する。
【0325】
本願の実施例では、第4の初期シフト演算結果が生成された後、第4の初期シフト演算結果から各要素の連続する下位半分のデータをそれぞれ選択し、選択された各要素の連続する下位半分のデータをシフト演算結果として決定することができる。
【0326】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとして、各データグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含む。前記シフト量に応じて、前記第5のオペランドに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、第5のオペランド内の各ソース要素に対応するシフト量レジスタ内のシフト値を決定し、各ソース要素に対応するシフト値にそれぞれ応じて、各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を実行し、第4の初期シフト演算結果を得るステップを含む。
【0327】
さらに、右算術シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右算術シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0328】
シフト演算結果が得られた後、サブステップS3を実行する。
【0329】
サブステップS3では、プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、複数の記憶エリアを生成する。
【0330】
本願の実施例では、プリセット値とは、デスティネーションレジスタ内の記憶位置を領域分割するための数値を指し、プリセット値は、すなわち、ターゲット要素によって占められているデータビット幅であり、プリセット値の特定の数値は、業務上の必要に応じて決定することができ、本願の実施例は、それを限定しない。当該プリセット値は、当該プリセット値に応じて分割される各記憶エリアが同じ大きさである(各記憶エリアに記憶されているデータビット幅が同じである)ようにする値であることが好ましい。
【0331】
複数の記憶エリアが生成された後、サブステップS4を実行する。
【0332】
サブステップS4では、前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込む。
【0333】
本願の実施例では、複数の記憶エリアが生成され、且つシフト演算結果が得られた後、シフト演算結果における要素をターゲット要素として各記憶エリアの下位半分に順次書き込むことができる。
【0334】
選択的には、第5のオペランドがMビットであると、第4の初期シフト演算結果はM/2ビットとなり、この場合、シフト演算結果は、第4の初期シフト演算結果における、0ビット目からM/4-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxj、第1のソースレジスタは2Mであり、xjのMビットごとに対応するソース要素を第5のオペランドとし、ベクトルシフト命令を用いて、第5のオペランドに含まれているMビットごとの各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を得ることができ、シフト量は、シフト量レジスタに由来するものであり、第4の初期シフト演算結果における各要素から選択された下位半分の要素を各ターゲット要素としてベクトルレジスタxdのMビットごとの各ターゲット要素の下位半分に順次書き込み、且つ当該Mビットごとの各ターゲット要素の上位半分のデータを0に設定する。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれか1つであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0335】
シフト演算結果におけるデータを各記憶エリアの下位半分に順次書き込んだ後、サブステップS5を実行する。
【0336】
サブステップS5では、各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0337】
シフト演算結果における要素をターゲット要素として各記憶エリアの下位半分に順次書き込んだ後、各記憶エリア内のターゲット要素が書き込まれていない位置の値をそれぞれ0に設定することができる。
【0338】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0339】
本願に係る技術的解決手段を採用し、第9のベクトルオペコードとシフト量を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第10のベクトルオペコードとシフト量を含む命令を実行することによって、シフト量はレジスタに由来するものであり、2つのソース要素に対する算術シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第11のベクトルオペコードとシフト量を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装し、第12のベクトルオペコードとシフト量を含む命令を実行することによって、2つのソース要素に対する算術シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装する。したがって、本発明に係る技術的解決手段を採用すると、異なるシフトパラメータを用いて異なるシフトニーズを達成することができ、これによって、複数のベクトルシフトニーズを1つのシフト命令で達成することができ、システムオーバーヘッドを効果的に低減し、特定の機能に対するベクトルシフトの実行効率を向上させる。
【0340】
実施例5
【0341】
図8を参照されたい。
図8は、本願の実施例2に係るプロセッサの構造ブロック図を示している。
【0342】
図8に示すように、プロセッサは、複数のベクトルレジスタ、命令復号化ユニット83、実行ユニット84を含むことができ、
前記複数のベクトルレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するためのソースレジスタ81、及びデスティネーションレジスタ82を含み、
前記命令復号化ユニット83は、レジスタ識別子及びシフトパラメータを含むベクトルシフト命令を復号化するためのものであり、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタ81を示すためのものであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタ82を示すためのものであり、
前記実行ユニット84は、前記ベクトルシフト命令に応答し、前記シフトパラメータに従い、前記ソースレジスタ81から取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタ82に書き込む。
【0343】
好ましくは、前記実行ユニット84は、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定し、ここで、ベクトルシフト操作が実行されるソース要素は少なくとも1つあり、前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成し、前記シフト演算結果をターゲット要素として決定する。
【0344】
好ましくは、前記シフトパラメータは、シフト量及びオペコードを含み、前記シフト量は、前記ベクトルシフト演算が実行される際に操作されるソース要素のシフトビット数を指示するためのものであり、前記オペコードは、前記ソースレジスタ内のソース要素及びデスティネーションレジスタ内のターゲット要素に対して実行するシフト演算ルールを示すためのものであり、
前記実行ユニット84は、前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定し、前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成し、前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定し、前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶する。
【0345】
好ましくは、前記シフト量は即値数であり、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含む。
【0346】
好ましくは、前記オペコードは第1のタイプのベクトルオペコードであり、
前記実行ユニット84は、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素をオペランドとして決定し、
前記第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタ内のオペランドと前記第2のソースレジスタ内のオペランドをスプライスした後、第1のスプライスベクトルを生成し、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットの要素のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0347】
好ましくは、前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、
前記実行ユニット84は、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0348】
好ましくは、前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、
前記実行ユニット84は、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0349】
好ましくは、前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、
前記実行ユニット84は、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0350】
好ましくは、前記第1のタイプのベクトルオペコードは第4のベクトルオペコードであり、
前記実行ユニット84は、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0351】
好ましくは、前記オペコードは第2のタイプのベクトルオペコードであり、
前記実行ユニット84は、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得て、ここで、前記選択操作は、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、前記第1のソースレジスタレジスタと第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含み、
前記実行ユニット84はまた、
前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定し、
前記第1のオペランドと第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成し、ここで、前記第2のスプライスベクトルと前記第3のスプライスベクトルに含まれている要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、ここで、前記実行ビット選択操作は、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含み、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む。
【0352】
好ましくは、前記第2のタイプのベクトルオペコードは第5のベクトルオペコードであり、前記第1のオペランドは、前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは、前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは、第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは、第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニット84は、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定し、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0353】
好ましくは、前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは、前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは、前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは、第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは、第2のソースレジスタの各要素の連続する上位半分からなる要素であり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0354】
好ましくは、前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは、前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは、前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは、第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは、第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニット84は、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0355】
好ましくは、前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは、前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは、前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは、第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは、第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニット84は、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0356】
好ましくは、前記命令は、シフト量を記憶するレジスタであるシフト量レジスタを示すためのシフト量レジスタ識別子をさらに含む。
【0357】
好ましくは、前記オペコードは第3のタイプのベクトルオペコードであり、前記ソースレジスタは第1のソースレジスタを含み、
前記実行ユニットは、前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得て、ここで、前記選択操作は、前記第1のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、前記第1のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作のいずれか1つを含み、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する下位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する上位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその中間の連続する指定ビットのデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続していない指定ビットのデータをそれぞれ選択する操作のうちのいずれか1つを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込み、
前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定する。
【0358】
好ましくは、前記第3のタイプのベクトルオペコードは第9のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニット84は、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0359】
好ましくは、前記第3のタイプのベクトルオペコードは第10のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニット84は、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0360】
好ましくは、請求項16に記載の方法によれば、前記第3のタイプのベクトルオペコードは第11のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニット84は、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素を選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0361】
好ましくは、前記第3のタイプのベクトルオペコードは第12のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニット84は、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0362】
好ましくは、前記ソースレジスタ数は1つ又は複数あり、前記デスティネーションレジスタ数は1つあり、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と同じ又は異なるものである。
【0363】
好ましくは、前記ソースレジスタ数が複数あり、前記デスティネーションレジスタ数は1つあり、
すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は、前記デスティネーションレジスタ識別子と異なるか、または、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している。
【0364】
実施例6
【0365】
図9を参照されたい。
図9は、本願の実施例5に係るベクトルシフト操作を実行するための電子機器の構造概略図を示している。
【0366】
図9に示すように、電子機器は、処理アセンブリ902、メモリ904、電源アセンブリ906、マルチメディアアセンブリ908、オーディオアセンブリ910、入力/出力(I/O)用インタフェース912、センサアセンブリ914、及び通信アセンブリ916のうちの1つ又は複数のアセンブリを含むことができる。
【0367】
処理アセンブリ902は、一般に、表示、データ通信、カメラ動作、及び記録動作に関連する動作など、電子機器の全体的な動作を制御する。処理コンポーネント302は、上述した方法のステップのすべて又は一部を完了させるために、命令を実行する1つ又は複数のプロセッサ920を含むことができる。また、処理アセンブリ902は、処理アセンブリ902と他のアセンブリとの間の相互作用を容易にするための1つ又は複数のモジュールを含むことができる。例えば、処理コンポーネント902は、マルチメディアアセンブリ908と処理アセンブリ902との間の相互作用を容易にするためのマルチメディアモジュールを含むことができる。
【0368】
メモリ904は、電子機器での操作をサポートするための様々なタイプのデータを記憶するように構成されている。このようなデータの例としては、電子機器上で操作される任意のアプリケーション又は方法の命令、連絡先データ、電話帳データ、メッセージ、画像、ビデオなどがある。メモリ904は、スタティックランダムアクセスメモリ(SRAM)、電気的に消去可能なプログラマブル読み取り専用メモリ(EEPROM)、消去可能なプログラマブル読み取り専用メモリ(EPROM)、プログラマブル読み取り専用メモリ(PROM)、読み取り専用メモリ(ROM)、磁気メモリ、フラッシュメモリ、磁気ディスク、または光ディスクのような任意のタイプの揮発性又は不揮発性記憶機器、またはそれらの組み合わせによって実装され得る。
【0369】
電源アセンブリ906は、電子機器の様々なアセンブリに電力を供給する。電源アセンブリ906は、電源管理システム、1つまたは複数の電源、及び端末900に供する電力の生成、管理、及び配電に関連するその他のアセンブリを含むことができる。
【0370】
マルチメディアアセンブリ908は、前記電子機器とユーザとの間の出力インタフェースを提供するスクリーンを含む。いくつかの実施例では、スクリーンは、液晶ディスプレイ(LCD)及びタッチパネル(TP)を含み得る。スクリーンがタッチパネルを含む場合、スクリーンはユーザからの入力信号を受信するためのタッチスクリーンとして実装され得る。タッチパネルは、タッチ、スワイプ、及びタッチパネル上でのジェスチャーを感知するための1つ又は複数のタッチセンサを含む。前記タッチセンサは、タッチ又はスワイプ操作の境界を感知するだけでなく、前記タッチ又はスワイプ操作に関連する持続時間及び圧力を検出することもできる。いくつかの実施例では、マルチメディアアセンブリ508は、1つのフロントカメラ及び/又はリアカメラを含む。フロントカメラ及び/又はリアカメラは、電子機器が撮影モード又はビデオモードなどの動作モードにあるときに、外部マルチメディアデータを受信することができる。各フロントカメラ及びリアカメラは、固定式光学レンズシステムであってもよいし、焦点距離及び光学ズーム機能を有するものであってもよい。
【0371】
オーディオアセンブリ910は、オーディオ信号を出力及び/又は入力するように構成されている。例えば、オーディオアセンブリ910は、端末が通話モード、録音モード、音声認識モードなどの動作モードにあるときに、外部オーディオ信号を受信するように構成されているマイクロフォン(MIC)を含む。受信されたオーディオ信号は、さらに、メモリ904に記憶されるか、通信アセンブリ916によって送信され得る。いくつかの実施例では、オーディオアセンブリ910は、オーディオ信号を出力するためのスピーカをさらに含む。
【0372】
I/Oインターフェース912は、処理アセンブリ902と周辺インタフェースモジュールとの間のインタフェースを提供し、上記の周辺インタフェースモジュールは、キーパッド、クリックホイール、ボタンなどであってもよい。これらのボタンは、ホームボタン、音量ボタン、スタートボタン、ロックボタンを含むことができるが、これらに限定されない。
【0373】
センサアセンブリ914は、電子機器900の状態の様々な側面の評価を提供するための1つ又は複数のセンサを含む。例えば、センサアセンブリ914は、電子機器900の開/閉状態、例えば前記アセンブリが端末のディスプレイ及びキーパッドであるようなアセンブリの相対的位置決めを検出することができ、センサアセンブリ914はまた、端末又は端末の1つのアセンブリの位置の変化、電子機器に対するユーザの接触の有無、電子機器の向き又は加速/減速、及び電子機器の温度の変化を検出することができる。センサアセンブリ914は、物理的な接触が一切なくても近くの物体の存在を検出するように構成されている近接センサを含むことができる。センサアセンブリ914はまた、撮像用途に使用するためのCMOS又はCCDイメージセンサなどの光学センサを含み得る。いくつかの実施例において、センサアセンブリ914はさらに、加速度センサ、ジャイロスコープセンサ、磁気センサ、圧力センサ、または温度センサを含み得る。
【0374】
通信アセンブリ916は、電子機器と他のデバイスとの間の有線又は無線通信を容易にするように構成されている。電子機器は、WiFi、2Gもしくは3G、またはそれらの組み合わせなどの通信規格に基づく無線ネットワークにアクセスすることができる。1つの例示的な実施例では、通信コンポーネント916は、ブロードキャストチャネルを経由して、外部のブロードキャスト管理システムからのブロードキャスト信号又はブロードキャスト関連情報を受信する。1つの例示的な実施例では、前記通信コンポーネント916は、近距離通信を容易にするための近距離通信(NFC)モジュールをさらに備える。例えば、NFCモジュールは、無線周波数識別(RFID)技術、赤外線データ協会(IrDA)技術、ウルトラワイドバンド(UWB)技術、ブルートゥース(登録商標)(BT)技術、及び他の技術に基づいて実装することができる。
【0375】
例示的な実施例では、電子機器は、上述のベクトルシフト方法を実行するために、1つまたは複数のアプリケーション特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)、デジタル信号処理デバイス(DSPD)、プログラマブルロジックデバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、コントローラー、マイクロコントローラー、マイクロプロセッサ、または他の電子素子によって実装され得る。
【0376】
本願の実施例に係る電子機器は、前述した複数の方法の実施例における対応する、命令を用いて実行されるベクトルシフト方法を実装するためのものであり、且つ対応する方法の実施の有益な効果を有しているため、ここでは繰り返して説明しない。
【0377】
本明細書における各実施例は漸進的に説明され、各実施例は他の実施例との相違点に焦点を当て説明を進んでおり、各実施例同士の同じ又は類似する部分は互いに参照すればよい。装置の実施例については、基本的に方法の実施例と類似しているため、説明は比較的に簡単であり、関連している箇所は、方法の実施例を参照して説明すればよい。
【0378】
以上は、本願により提供されるベクトルシフト方法、プロセッサ、電子機器及び可読記憶媒体について詳細に説明した。本明細書において、本願発明の原理及び実施形態は、特定の例を適用して説明されているが、以上の実施例は、単に本願発明の方法及びその主要な構想を理解するのに役立つために説明されており、同時に、当業者であれば、本願発明の構想に基づき、特定の実施形態及びその適用範囲に変化を加えることができる。以上のように、本明細書の記載は本願発明を制限するためのものとして理解すべきではない。
【0379】
本明細書で提供されるアルゴリズムや表示は、特定のコンピュータ、電子システム、その他のデバイスと本質的に関連するものではない。様々な汎用システムも、本明細書に基づく教示と組み合わせて使用することができる。そのようなシステムを構築するために必要な構造は、上記の説明に照らして明らかである。さらに、本願は、特定のプログラミング言語を対象とするものではない。本明細書で説明されている本願の内容を実装するために、様々なプログラミング言語を利用することができ、特定の言語に関する上記の説明は、本願の最良の実施形態を開示するために提供されることを理解されたい。
【0380】
本願により提供される明細書において、大量の具体的な詳細が記載されている。しかしながら、本願の実施例は、これらの具体的な詳細がなくても実施可能であることが理解され得る。いくつかの実例では、本明細書の理解を不明瞭にしないように、公知の方法、構造及び技術は詳細に示されていない。
【0381】
同様に、本開示を簡潔にして、様々な発明の1つ又は複数の態様の理解に役立つようにするために、本願の例示的な実施例の上記の説明において、本願の様々な特徴は、単一の実施例、図面、またはそれらに関する説明にまとめられていることがあることが理解されるべきである。しかしながら、当該開示に係る方法は、特許を請求する本願が、各請求項に明示的に記載されている特徴よりも多くの特徴を必要とする意図を反映するものと解釈されるべきではない。より正確にいうと、以下の特許請求の範囲に反映されているように、本発明の態様は、先に開示された個々の実施例に係るすべての特徴よりも少ない数の特徴がある。したがって、特定の実施形態に従う特許請求の範囲は、それによってその特定の実施形態に明示的に組み込まれ、各請求項自体が本願の別個の実施例として機能する。
【0382】
当業者であれば、実施例におけるデバイス内のモジュールを適応的に変更し、当該実施例とは異なる1つ又は複数のデバイスに配置することが可能であることを理解することができる。実施例におけるモジュール又はユニット又はアセンブリを、単一のモジュール又はユニット又はアセンブリに組み合わせることが可能であり、さらに、複数のサブモジュール又はサブユニット又はサブアセンブリに分割することも可能である。このような特徴及び/又はプロセスもしくはユニットの少なくとも一部が相互に排他的である場合を除き、本明細書(添付の特許請求の範囲、要約及び添付図面を含む)に開示されたすべての特徴及びこのように開示された方法又はデバイスのすべてのプロセス又はユニットを、任意の組み合わせで組み合わせることができる。本明細書(添付の特許請求の範囲、要約、及び添付図面を含む)に開示された各特徴は、特に明記されていない限り、同一、等価、または類似する目的を提供する代替的な特徴によって置き換えられてもよい。
【0383】
加えて、当業者は、本明細書に記載されているいくつかの実施例は、その他の実施例に含まれているその他の特徴ではなくいくつかの特徴を含むが、異なる実施例の特徴の組み合わせは、本願の範囲内のものであり、異なる実施例を形成していることを意味することを理解することができる。例えば、以下の特許請求の範囲では、主張される実施例のいずれか1つは任意の組み合わせで使用され得る。
【0384】
本願の様々な構成要素の実施例は、ハードウェア、または1つまたは複数のプロセッサ上で実行されるソフトウェアモジュール、またはそれらの組み合わせで実装され得る。当業者は、マイクロプロセッサ又はデジタル信号プロセッサ(DSP)が、本願の実施例によるブラウザクライアントデバイスにおける構成要素の一部又はすべての機能の一部又はすべてを実装するために実際に使用され得ることを理解すべきである。また、本願は、本明細書に記載の方法の一部又は全部を実行するためのデバイス又は装置プログラム(例えば、コンピュータプログラム及びコンピュータプログラム製品)として実装され得る。本願を実装するこのようなプログラムは、コンピュータ可読媒体に格納されているものであってもよいし、1つまたは複数の信号の形態を有するものであってもよい。このような信号は、インターネットサイトからダウンロード可能であってもよいし、キャリア信号で提供されてもよいし、任意の他の形態で提供されてもよい。
【0385】
上記の実施例は、本願を説明するためのものであり、本願を限定するものではなく、当業者であれば、添付の特許請求の範囲から逸脱することなく、代替の実施例を設計することができることに留意されたい。特許請求の範囲において、括弧の間に位置する参照符号は、特許請求の範囲を限定するものとして解釈されるべきではない。用語「含む」は、特許請求の範囲に記載されていない素子又はステップの存在を排除しない。素子の前にある用語「一」又は「1つ」は、そのような素子が複数存在することを除外しない。本願は、いくつかの異なる素子を含むハードウェア、及び適切にプログラムされたコンピュータによって実装され得る。いくつかの装置を列挙している個別の請求項では、これらの装置のいくつかが、同一のハードウェアによって具現化され得る。第1、第2、第3といった用語の使用は、いかなる順序を示すものではない。これらの用語は名称として解釈されてもよい。
【0386】
本願は、2021年12月10日に中国国家知的産権局に提出された、出願番号が202111509173.2であり、発明の名称が「ベクトルシフト方法、プロセッサ及び電子機器」である中国特許出願の優先権を主張しており、その内容の全ては、本明細書に参照によって取り込まれる。
【手続補正書】
【提出日】2024-06-14
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ技術の分野に関し、特にベクトルシフト方法、プロセッサ及び電子機器に関する。
【背景技術】
【0002】
マルチメディアアプリケーションの発展につれて、プロセッサのコンピューティングタスクはデジタル画像処理の分野に由来するものが多くなってきており、画像ベースのアプリケーションは、サーバ、デスクトップコンピュータ、パーソナルモバイルデバイスすなわち組み込み機器において無視できないワークロードになりつつある。デジタル画像処理ソフトウェアの実情に合わせて、命令システムアーキテクチャを更新し、アプリケーションでよく使われる操作に対する命令サポートをプロセッサに追加することは、プロセッサ発展の主要な方向であり、特定のアプリケーションに対してプロセッサの性能を向上させる簡単で効果的な方法でもあるため、単一命令複数データ(Single Instruction Multiple Data、SIMD)構造は、規則的なデータの集合に対する同様な操作がサポートされるように、ますます多くのプロセッサに追加されるようになっている。
【0003】
現在、SIMDプロセッサではシフト命令が一般的に導入されており、異なるシフト命令で異なるニーズを満たすことができるが、従来の技術的手段においては、特定の機能に対してベクトルシフト操作を実装する場合に、一連の操作を実装するために複数の命令が必要となり、操作方法が複雑であり、且つ特定の機能の実行効率が低下している。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本願は、ベクトルシフト操作を実装するために複数の命令が必要となり、操作方法が複雑であり、特定の機能の実行効率が低下しているという従来の技術における問題を解決するために、ベクトルシフト方法、プロセッサ及び電子機器を提供する。
【課題を解決するための手段】
【0005】
本願は、上記の問題を解決するために、ベクトルシフト方法を提供し、前記方法は、
レジスタ識別子及びシフトパラメータを含む命令を受信するステップであって、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタであり、前記シフトパラメータは、前記ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものである、ステップと、
前記命令を実行して、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む。
【0006】
本願は、上記の問題を解決するために、プロセッサを提供し、前記プロセッサは、複数のベクトルレジスタ、命令復号化ユニット、及び実行ユニットを含み、
前記複数のベクトルレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するためのソースレジスタ、及びデスティネーションレジスタを含み、
前記命令復号化ユニットは、レジスタ識別子及びシフトパラメータを含むベクトルシフト命令を復号化するためのものであり、前記レジスタ識別子は、ソースレジスタを示すためのソースレジスタ識別子、及びデスティネーションレジスタを示すためのデスティネーションレジスタ識別子を含み、
前記実行ユニットは、前記ベクトルシフト命令に応答し、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む。
【0007】
本願は、上記の問題を解決するために、メモリ及び1つ以上のプログラムを含む電子機器を提供し、1つ以上のプログラムは、メモリに記憶されており、且つ1つ以上のプロセッサにより上記の1つ又は複数の前記したベクトルシフト方法を実行するように構成されている。
【発明の効果】
【0008】
本願は、従来の技術に比べて、次の利点がある。
【0009】
本願の実施例により提供されるベクトルシフト方法、プロセッサ及び電子機器は、レジスタ識別子及びシフトパラメータをベクトルシフト命令に追加し、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタ、及びベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタを、レジスタ識別子によって指示して、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールをシフトパラメータによって指示することにより、特定の機能に対してベクトルシフト操作を複数の命令で実装することなく、特定の機能に対してベクトルシフト操作を命令1つで実装することができ、操作方法が簡単で、且つ特定の機能に対する実行効率が向上する。
【図面の簡単な説明】
【0010】
【
図1】本願の実施例1によるベクトルシフト方法のステップのフローチャートである。
【
図2】本願の実施例によるターゲット要素取得方法のステップのフローチャートである。
【
図3】本願の実施例によるシフト演算結果取得方法のステップのフローチャートである。
【
図4】本願の実施例によるターゲット要素記憶方法のステップのフローチャートである。
【
図5】本願の実施例2によるベクトルシフト方法のステップのフローチャートである。
【
図6】本願の実施例3によるベクトルシフト方法のステップのフローチャートである。
【
図7】本願の実施例4によるベクトルシフト方法のステップのフローチャートである。
【
図8】本願の実施例5によるプロセッサの構造ブロック図である。
【
図9】本願の実施例6による電子機器の構造ブロック図である。
【発明を実施するための形態】
【0011】
本願の上記目的、特徴及び利点をさらに明瞭し、理解しやすくするために、以下は図面と特定の実施形態を参照して本願についてさらに詳細に説明する。
【0012】
本願の明細書と特許請求の範囲、及び、上記の図面に係る用語「第1」、「第2」、「第3」などは、類似の対象を区別するためのものであり、特定の順序又は順番を説明するためのものである必要はない。このように使用されるデータは、本願の実施例の図示又は説明で与えられる順序以外の順序で実施可能であるなど、適切な場合に交換可能であり得ることを理解されたい。
【0013】
以下の実施例は、1つのプロセッサを参照して説明されているが、他の実施例は、他のタイプの集積回路及びロジックデバイスに適用される。本願の前述の技術及び教示は、より高いパイプラインスループットレート及び性能向上の恩恵を受ける他のタイプの回路又は半導体装置に、より容易に適用されることができる。本願の実施例は、データ操作を実行する任意のプロセッサ又は機械に適用されるものである。しかしながら、本願は、256ビット、128ビット、64ビット、32ビット、または16ビットのデータ操作を実行するプロセッサ又は機械に限定されるものではなく、組合せデータの操作が望まれる任意のプロセッサ及び機械に適用される。
【0014】
以下の説明では、本願を十分に理解するための説明目的で、多数の具体的な詳細を示す。しかしながら、当業者であれば、これらの具体的な詳細は、本願を実施するために必要ではないことを認識すべきである。他の場合では、いくつかの周知の電気構造及び回路は、本願を不必要に混乱させることを避けるために、詳細に示されていない。さらに、以下の説明は複数の例を提供し、添付の図面は説明のために様々な例を示している。しかしながら、これらの例は、本願発明のいくつかの例を提供することを意図しており、本願発明のすべての可能な実施形態の網羅的なリストを提供することを意図していないため、限定的に解釈されるべきではない。
【0015】
以下の例では、実行ユニットのコンテキストにおける命令処理及び分配について説明するが、本願発明の他の実施例は、ソフトウェアの形態で実装され得る。一実施例では、本願の方法は、機械実行可能命令として表現されている。前記命令は、これらの命令でプログラムされた汎用プロセッサ又は専用プロセッサに本願のステップを実行させるためのものとして使用されることができる。本願は、コンピュータプログラム製品又はソフトウェアとして提供されてもよく、前記製品又はソフトウェアは、機械又はコンピュータ可読媒体、及び本願に係るプロセッサにより実行されるようにコンピュータ(または他の電子機器)をプログラミングするために使用され得るその中に記憶されている命令を含むことができる。あるいは、本願発明のステップは、前記ステップを実行するためのハードワイヤードロジックを含む専用のハードウェアアセンブリによって、またはプログラミングされたコンピュータアセンブリとカスタムハードウェアアセンブリとの任意の組み合わせによって実行されされ得る。これらのソフトウェアは、システム内のメモリに格納されることができる。
【0016】
本願の実施例により提供されるベクトルシフト方法は、実行主体がCPU(Central Processing Unit、中央処理装置)であってもよい。
【0017】
実施例1
【0018】
図1を参照されたい。
図1は、本願の実施例1に係るベクトルシフト方法のステップのフローチャートを示しており、ベクトルシフトプロセスは、次のステップを含む。
【0019】
ステップ101では、レジスタ識別子及びシフトパラメータを含む命令を受信する。
【0020】
本願の実施例では、命令とは、ベクトルシフト操作を実行するための命令を指し、且つ当該命令はプロセッサにより実行される命令であり、命令は、レジスタ識別子及びシフトパラメータを含む。前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタであり、前記シフトパラメータは、前記ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものである。
【0021】
選択的には、ソースレジスタの数は、1つあってもよいし、2つあってもよく、すなわち、ソース要素は1つ又は2つのレジスタに由来するものであり、具体的には、ソースレジスタの数は、業務上の必要に応じて設定されることができ、本願の実施例は、それを限定しない。
【0022】
選択的には、受信された命令を復号化し、当該命令に含まれているシフトパラメータを取得し、当該シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものであり、本例では、シフトパラメータは、シフト量やオペコードなどのパラメータを含むことができる。選択的には、オペコードはバイナリ形態で表現されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。
【0023】
命令を復号化した後、ステップ102を実行する。
【0024】
ステップ102では、前記命令を実行して、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得する。
【0025】
本願の実施例では、CPUがベクトルシフト操作を実行するための命令を受信した後、CPUにより当該命令を実行して、シフトパラメータに従いソースレジスタの中から取得されたソース要素に対してベクトルシフト操作を実行し、ベクトルシフト操作後のターゲット要素を取得するようにすることができる。
【0026】
ベクトルシフト操作実行後のターゲット要素が取得された後、ステップ103を実行する。
【0027】
ステップ103では、前記ターゲット要素を前記デスティネーションレジスタに書き込む。
【0028】
本願の実施例では、ベクトルシフト操作後のターゲット要素が取得された後、ターゲット要素をデスティネーションレジスタに書き込むことができる。
【0029】
選択的には、シフトパラメータに従ってシフト量及びシフト演算ルールを決定して、シフト量及びシフト演算ルールに従ってベクトルシフト操作を実行することができ、具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0030】
図2を参照されたい。
図2は、本願の実施例により提供されるターゲット要素取得方法のステップのフローチャートを示しており、当該ターゲット要素取得プロセスは、次のステップを含む。
【0031】
ステップ201では、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定し、ベクトルシフト操作が実行される前記ソース要素は少なくとも1つある。
【0032】
本願の実施例では、ソースレジスタの数は、1つであってもよいし、複数であってもよく、デスティネーションレジスタの数は1つあり、ソースレジスタ識別子及びデスティネーションレジスタ識別子は、同じもの又は異なるものであり、ソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかである。シフト量は、ベクトルシフト操作が実行されるときに操作されるソース要素のシフトビット数を指示するために使用されることができ、シフト量は、即値数又はシフト量レジスタのいずれかに由来し、即値数は、シフトパラメータのうちオペコードによって定義されるパラメータであり、即値数は、上記のオペコードによって定義されるソース要素のデータタイプを参照してその値を決定することができ、シフト量レジスタは、シフト量を記憶するためのレジスタであり、シフト量は、シフト量レジスタに由来するものである場合に、シフト量は1つのグループのデータであり、例えば、シフト量は、異なるビットを含むことによって、異なるソース要素のシフト状況を表現することができる。シフト演算ルールとは、ソース要素に対して実行される1つまたは複数の演算を指す。
【0033】
シフトパラメータに従ってシフト量及びシフト演算ルールを決定した後、ステップ202を実行する。
【0034】
ステップ202では、前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成する。
【0035】
本願の実施例では、シフト演算ルールとは、ソースレジスタ内の要素に対するシフト操作方法及び/又は制約条件を指す。
【0036】
シフト量及びシフト演算ルールに従いソースレジスタ内のソース要素に対して対応するシフト演算を実行しシフト演算結果を生成した後、ステップ203を実行する。
【0037】
ステップ203では、前記シフト演算結果をターゲット要素として決定する。
【0038】
本願の実施例では、シフトパラメータには、オペコードを含むことができ、当該オペコードは、ソースレジスタの中からソース要素を選択すること、及びターゲット要素のデスティネーションレジスタへの記憶形態を指示するために使用されることができ、具体的には、ベクトルシフト操作プロセスは、下記の実現形態を参照して詳細に説明されることができる。
【0039】
図3を参照されたい。
図3は、本願の実施例により提供されるシフト演算結果生成方法のステップのフローチャートを示しており、当該シフト演算結果生成プロセスは、次のステップを含む。
【0040】
ステップ301では、前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト操作を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定する。
【0041】
本願の実施例では、シフトパラメータは、シフト量及びオペコードを含むことができる。シフト量は、ベクトルシフト操作が実行されるときに操作されるソース要素のシフトビット数を指示するために使用されることができる。オペコードは、ソースレジスタ内のソース要素及びデスティネーションレジスタ内のターゲット要素に対して実行されるシフト演算ルールを示すために使用されることができる。
【0042】
選択的には、前記命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,シフト量」である。例示的には、前記命令は、「[X]VSSR. {B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q} vd/xd,vj/xj,ui]と表すことができ、ここで、[X]VSSRはオペコード内の命令名称を表し、[X]はオプションで、レジスタのタイプに応じて決定されるものであり、{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q}の「.」の前の部分はオペコード内のターゲット要素のデータタイプを表し、「.」の後の部分はオペコード内のソース要素のデータタイプを表し、Bはバイト、Hはハーフワード、Wはワード、Dはダブルワード、Qはクワッドワード、Uは符号なしを表し、vd/xdはデスティネーションレジスタ、vj/xjはソースレジスタを表し、また、vd/xdはソースレジスタを表すこともでき、vj及びvdは同じビット数のレジスタ、xj及びxdは同じビット数のレジスタを表し、uiは即値数を表し、すなわち、即値数はシフト量である。例示的には、前記命令は、「[X]VSSR.{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q} vd/xd,vj/xj,vk/xk」と表すこともでき、[X]VSSR、{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q}、vd/xd、及びvj/xjは先の例と同じ意味を表し、vk/xkはシフト量レジスタを表す。
【0043】
オペコードに従いソースレジスタの中からベクトルシフト操作を実行するソース要素を選択して、選択されたソース要素をオペランドとして決定した後、ステップ302を実行する。
【0044】
ステップ302では、前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成する。
【0045】
本願の実施例では、オペランドが決定された後、オペコードに従いオペランドに対して対応するシフト演算を実行し、シフト演算結果を生成することができ、当該シフト演算結果に含まれている要素はターゲット要素となる。
【0046】
シフト演算結果が生成された後、ステップ401を実行する。
【0047】
図4を参照されたい。
図4は、本願の実施例により提供されるターゲット要素記憶方法のステップのフローチャートを示しており、当該ターゲット要素記憶プロセスは、次のステップを含む。
【0048】
ステップ401では、前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定する。
【0049】
本願の実施例では、記憶形態とは、ターゲット要素をデスティネーションレジスタに記憶するルールを指す。選択的には、記憶形態は主に、ターゲット要素をデスティネーションレジスタに記憶する位置ルールを表し、例示的には、記憶形態は、ターゲット要素における上位半分のデータを、デスティネーションレジスタにおける当該ターゲット要素が配置されている位置の上位半分に記憶する形態、または、ターゲット要素における下位半分のデータをデスティネーションレジスタにおける当該ターゲット要素が配置されている位置の下位半分に記憶する形態、または、ターゲット要素の指定範囲内のデータを、デスティネーションレジスタにおける当該ターゲット要素が配置されている位置の指定アドレス範囲内に記憶する形態を含むことができる。
【0050】
オペコードに従いターゲット要素のデスティネーションレジスタへの記憶形態を決定した後、ステップ402を実行する。
【0051】
ステップ402では、前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶する。
【0052】
本願の実施例では、シフト演算結果が取得された後、シフト演算結果をターゲット要素として決定することができ、オペコードに従いターゲット要素のデスティネーションレジスタへの記憶形態を決定した後、ターゲット要素をデスティネーションレジスタに記憶することができる。
【0053】
従来の技術においては、ベクトルシフト操作を実装する際、ベクトルシフトニーズに応じて、複数の命令でベクトルシフトを実装する必要があり、ベクトルシフトニーズは実際のアプリケーションに応じて決定される。例えば、ベクトルシフトニーズは、2つのベクトルレジスタのオペランドを右シフトして半値幅に切り捨てるニーズであると、当該ベクトルシフトニーズを達成するために、少なくとも2つの右シフト命令、2つの切り捨て命令、及び1つの半値幅に飽和命令が必要とされる。本願の実施例では、シフトパラメータを含む命令が実装され、異なるシフトパラメータでもって異なるシフトニーズを達成することができ、これによって、複数のベクトルシフトニーズを1つのシフト命令で達成することができ、システムオーバーヘッドを効果的に低減し、特定の機能に対するベクトルシフトの実行効率を向上させる。
【0054】
以下、異なるオペコード及び異なるシフト量の場合におけるベクトルシフト命令の実装プロセスについて、実施例2ないし実施例4を参照して詳細に説明する。
【0055】
実施例2
【0056】
本願の実施例では、オペコードは第1のタイプのベクトルオペコードとすることができ、ソースレジスタは、第1のソースレジスタ及び第2のソースレジスタを含み、第1のタイプのベクトルオペコードによって、ソースレジスタからソース要素を取得して、ソース要素に対してベクトルシフト操作を実行することができ、
図5に示すように、ベクトルシフト命令の処理方法は、次のステップを含むことができる。
【0057】
ステップ501では、レジスタ識別子及びシフトパラメータを含む命令を受信する。
【0058】
本願の実施例では、命令の意味及び命令に含まれるパラメータは、実施例1に説明されており、ここでは繰り返して説明しない。
【0059】
選択的には、ソースレジスタの数は2つあり、すなわち、ソース要素は2つの異なるレジスタに由来するものであり、前記ソースレジスタ数が複数ある場合に、すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子はいずれも、前記デスティネーションレジスタ識別子と異なるようにするか、または、前記ソースレジスタ数が複数ある場合に、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している。
【0060】
選択的には、受信された命令を復号化し、当該命令に含まれているシフトパラメータを取得し、当該シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものであり、本例では、シフトパラメータは、シフト量やオペコードなどのパラメータを含むことができる。
【0061】
ステップ502では、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定する。
【0062】
本願の実施例では、ベクトルシフト操作が実行される前記ソース要素は少なくとも1つあり、前記シフト量は即値数、前記シフト演算ルールはオペコード、前記オペコードは第1のタイプのベクトルオペコードであり、前記即値数は0以上の正の整数である。
【0063】
選択的には、前記第1のタイプのベクトルオペコードはバイナリ形態で表現されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,シフト量」である。前記オペコードが第1のタイプのベクトルオペコードである場合に、実際に実装する際、命令は、「VSSR
第1のタイプ
.{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q} vd,vj,ui
第1のタイプ
」と表すことができ、VSSR
第1のタイプ
は第1のタイプのベクトルオペコード内の命令名称であり、{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q}は、第1のタイプのオペコードの中に、ソース要素及びターゲット要素のデータタイプを指示するためのパラメータであり、Bはバイト、Hはハーフワード、Wはワード、Dはダブルワード、Qはクワッドワード、Uは符号なしを表し、vdはデスティネーションレジスタ及びソースレジスタの両方を表し、vjはソースレジスタを表し、ui
第1のタイプ
は、オペコードが第1のタイプのベクトルオペコードである場合に、命令に含まれている即値数を表す。例示的には、VSSR
第1のタイプ1
.B.Hは、バイナリ形態に変換可能な第1のタイプのベクトルオペコードであり、例えば、VSSR
第1のタイプ1
.B.Hが011100110101000001というバイナリ形態に変換される第1のタイプのベクトルオペコードは挙げられる。
【0064】
さらに、ui
第1のタイプ
はオペコードによって定義され、ui
第1のタイプ
は、ソース要素及びターゲット要素のデータタイプを参照してその値を決定することができ、当該ui
第1のタイプ
は、所定の範囲内(すなわち、ui
第1のタイプ
∈[最小値、最大値]とする)にあるパラメータであり、すなわち、ui
第1のタイプ
は、その最小値がソース要素及びターゲット要素のデータタイプに応じて決定され、ui
第1のタイプ
は、最大値が無限大である。例示的には、第1のタイプのベクトルオペコードがVSSR
第1のタイプ1
.B.Hである場合には、ui
第1のタイプ
は最小値がui4であり、第1のタイプのベクトルオペコードがVSSR
第1のタイプ1
.H.Wである場合には、ui
第1のタイプ
は最小値がui5であり、第1のタイプのベクトルオペコードがVSSR
第1のタイプ1
.W.Dである場合には、ui
第1のタイプ
は最小値がui6であり、第1のタイプのベクトルオペコードがVSSR
第1のタイプ1
.D.Qである場合には、ui
第1のタイプ
は最小値がui7であり、第1のタイプのベクトルオペコードがVSSR
第1のタイプ1
.BU.Hである場合には、ui
第1のタイプ
は最小値がui4であり、第1のタイプのベクトルオペコードがVSSR
第1のタイプ1
.HU.Wである場合には、ui
第1のタイプ
は最小値がui5であり、第1のタイプのベクトルオペコードがVSSR
第1のタイプ1
.WU.Dである場合には、ui
第1のタイプ
は最小値がui6であり、第1のタイプのベクトルオペコードがVSSR
第1のタイプ1
.DU.Qである場合には、ui
第1のタイプ
は最小値がui7である。これによって、ソース要素のデータタイプがハーフワードで、且つターゲット要素のデータタイプがバイトである場合には、ui
第1のタイプ
∈[ui4、無限大]であり、ソース要素のデータタイプがワードで、且つターゲット要素のデータタイプがハーフワードである場合には、ui
第1のタイプ
∈[ui5、無限大]であり、ソース要素のデータタイプがダブルワードで、且つターゲット要素のデータタイプがワードである場合には、ui
第1のタイプ
∈[ui6、無限大]であり、ソース要素のデータタイプがクワッドワードで、且つターゲット要素のデータタイプがダブルワードである場合には、ui
第1のタイプ
∈[ui7、無限大]であり、当該ターゲット要素は符号なし数値であってもよいし、符号付き数値であってもよいことがわかる。
【0065】
シフトパラメータに従ってシフト量及びシフト演算ルールを決定した後、ステップ503を実行する。
【0066】
ステップ503では、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定し、第2のソースレジスタ内のすべてのソース要素を別のオペランドとして決定する。
【0067】
本願の実施例では、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべての要素をソース要素とするか、または第1のソースレジスタ内の一部の要素をソース要素とするようにしてもよいし、第2のソースレジスタ内のすべての要素をソース要素とするか、または第2のソースレジスタ内の一部の要素をソース要素とするようにしてもよい。例示的には、第1のソースレジスタはレジスタvd、第2のソースレジスタはレジスタvjであり、第1のレジスタvd内のすべての要素をソース要素として決定するとともに、第2のレジスタvj内の要素をソース要素として決定して、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素を別のオペランドとして決定するようにすることができる。
【0068】
選択的には、第1のソースレジスタ及び第2のソースレジスタの中からそれぞれ選択されたソース要素はデータタイプが同じで、且つソース要素のデータタイプがハーフワード、ワード、ダブルワード、クワッドワードのいずれかである。
【0069】
第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタから得られたソース要素を前記第2のソースレジスタのオペランドとして決定した後、ステップ504を実行する。
【0070】
ステップ504では、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のオペランドと第2のソースレジスタ内のオペランドとをスプライスした後、第1のスプライスベクトルを生成する。
【0071】
本願の実施例では、第1のソースレジスタ内のオペランドと第2のソースレジスタ内のオペランドとを左右にスプライスした後、第1のスプライスベクトルを生成し、第1のソースレジスタ内のオペランドと第2のソースレジスタ内のオペランドとを左右にスプライスする位置設定は、命令内のソースレジスタ識別子の位置に応じて決定され、すなわち、第1のソースレジスタ識別子が命令内に第1のタイプのベクトルオペコードの直後のソースレジスタ識別子で、第2のソースレジスタ識別子が命令内に第1のソースレジスタ識別子の後に配置されているソースレジスタ識別子である場合には、第1のソースレジスタ内のオペランドは左側に配置され、第2のソースレジスタ内のオペランドは右側に配置され、第1のスプライスベクトルを生成するが、第2のソースレジスタ識別子が命令内に第1のタイプのベクトルオペコードの直後のソースレジスタ識別子で、第1のソースレジスタ識別子が命令内に第2のソースレジスタ識別子の後に配置されているソースレジスタ識別子である場合には、第2のソースレジスタ内のオペランドは左側に配置され、第1のソースレジスタ内のオペランドは右側に配置され、第1のスプライスベクトルを生成する。例示的には、命令のフォーマットが「第1のタイプのベクトルオペコード vd,vj,即値数」である場合には、第1のソースレジスタはvd、第2のソースレジスタはvj、デスティネーションレジスタはvdであると表し、第1のソースレジスタ内のすべてのソース要素全体は1つのオペランドと見なされ、オペランド
vd
と表記され、第2のソースレジスタ内のすべてのソース要素全体は別のオペランドと見なされ、オペランド
vj
と表記され、第1のスプライスベクトルは、「オペランド
vd
オペランド
vj
」となる。
【0072】
選択的には、第1のソースレジスタ内のオペランドと第2のソースレジスタ内のオペランドはまた、要素を単位としてクロススプライスして、第1のスプライスベクトルを生成してもよく、クロススプライスの際、ソースレジスタ内に同じ位置情報を有するソース要素は1つのグループとしてクロスされ、第1のスプライスベクトルにおける異なるグループの位置はソース要素のアドレスに従って降順に配置され、異なるレジスタ内の2つの要素ごとに1つのグループとしてスプライスする際の左右位置の設定は、命令内のソースレジスタ識別子の位置に応じて決定され、これは上記の例と同じであるため、ここでは繰り返して説明しない。
【0073】
例示的には、第1のソースレジスタ内のオペランドは、「ソース要素1(位置情報がaである)、ソース要素2(位置情報がbである)、及びソース要素3(位置情報がcである)」を含み、第2のソースレジスタ内のオペランドは、「ソース要素4(位置情報がaである)、ソース要素5(位置情報がbである)、及びソース要素6(位置情報がcである)」であり、第1のソースレジスタ内のオペランドに対応するソースレジスタ識別子は、命令の左側の位置に配置され、第2のソースレジスタ内のオペランドに対応するソースレジスタ識別子は、命令の右側の位置に配置されると想定すると、左側と右側は2つのソースレジスタ位置識別子の対向位置であり、2つのオペランドを左右にスプライスして得られた結果は、「ソース要素1ソース要素2ソース要素3ソース要素4ソース要素5ソース要素6」であってもよく、または、位置情報が同じくaのソース要素1とソース要素4とを1つのグループとして見なしてクロススプライスし、位置情報が同じくbのソース要素2とソース要素5とを1つのグループとして見なしてクロススプライスし、位置情報が同じくcのソース要素3とソース要素6とを1つのグループとして見なしてクロススプライスすることによって、最終的に得られた第1のスプライスベクトルは、「ソース要素1ソース要素4ソース要素2ソース要素5ソース要素3ソース要素6」となる。
【0074】
選択的には、第1のソースレジスタ内のオペランドがNビット、第2のソースレジスタ内のオペランドがNビットの場合には、第1のスプライスベクトルは2Nビットであり、Nは0よりも大きい正の整数である。第1のソースレジスタ内のオペランドのビット数は、第1のソースレジスタに含まれている要素及び当該要素のデータタイプに対応するビットに応じて決定されてもよく、第2のソースレジスタ内のオペランドのビット数は、第2のソースレジスタに含まれている要素及び当該要素のデータタイプに対応するビットに応じて決定されてもよい。
【0075】
第1のスプライスベクトルが生成された後、ステップ505を実行する。
【0076】
ステップ505では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0077】
本願の実施例では、第1のスプライスベクトルには、複数の要素(ソース要素)が含まれており、即値数に従い、第1のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、シフト量は即値数となり、第1の初期シフト演算結果が生成され、シフト操作は右シフト操作であり、前記シフト操作は、論理シフト及び算術シフトを含み、半値幅に飽和する処理は、処理対象のデータについて、そのデータビットの幅を半値にした後のバイナリデータで表現できる値の範囲に応じて数値飽和処理を行う処理を意味し、処理されたデータは、処理前の幅と相関をとり、選択的には、処理されたデータは依然として、処理前の幅の倍数(例えば1/2)である。
【0078】
選択的には、前記第1のスプライスベクトル内のそれぞれのソース要素はシフトされ、それぞれの要素のシフト量は同じで、いずれも即値数である。例示的には、第1のスプライスベクトルは、要素1、要素2、及び要素3を含み、シフト量がui4であると、第1のスプライスベクトルをシフトすることは、すなわち、要素1をui4ビットだけシフトし、要素2をui4ビットだけシフトし、要素3をui4ビットだけシフトすることであり、要素は複数のビットを含み、要素を右シフトすることは、すなわち、要素のそれぞれのビットを予め設定されたビット数だけ右シフトし、要素内の右シフトされたビット数を破棄して、要素の左側の空き位置に指定値を設定することを意味し、当該予め設定されたビット数及び指定値はいずれも、特定の状況に応じて設定された値である。
【0079】
選択的には、第1のスプライスベクトル内のそれぞれのソース要素に対して行われるシフト丸め操作は、偶数に丸め、ゼロに丸め、切り上げ、及び切り下げという4つの丸め操作を含む。第1のスプライスベクトルに対して行われるシフト丸め操作は、第1のスプライスベクトルに対してシフト切り上げ操作を行うことであることが好ましい。
【0080】
選択的には、ビット数が2Nで、シフト量がsaである任意の要素xについて、当該要素xに対して、右論理シフトして丸めて半値幅に飽和する操作を実行するプロセスは、次の第1のステップ~第2のステップを含む。
【0081】
第1のステップでは、シフト量に応じて、演算結果Aを得る。具体的には、シフト量が0である場合には、得られた演算結果Aは要素xとなり、シフト量が0よりも大きい整数である場合には、中間演算結果を設定し、当該中間演算結果は、下位ビットが要素xのsaビットから2N-1ビット目までのデータであり、残りのsaビットの上位ビットが0であり、当該中間演算結果のビット数が2Nであり、中間演算結果は要素xのsa-1ビットに加算され、演算結果Aを得る。ここで、Nは0よりも大きい正の整数で、saは即値数である。
【0082】
第2のステップでは、演算結果の値を取得し、当該値を指定データと比較し、比較結果に応じて最終的な演算結果を得る。具体的には、演算結果Aの値を2
N-1
と比較し、演算結果Aが2
N-1
よりも大きい場合、最終的な演算結果はNビットがいずれも1のデータとなり、そうでない場合、最終的な演算結果は演算結果Aの0ビット目からN-1ビット目までのデータとなる。要素xは、符号付きベクトル又は符号なしベクトルである。
【0083】
選択的には、ビット数が2Nで、シフト量がsaである任意の要素xについて、当該要素xに対して、右算術シフトして丸めて半値幅に飽和する操作を実行するプロセスは、次の第1のステップ~第2のステップを含む。
【0084】
第1のステップでは、シフト量に応じて、演算結果Aを得る。具体的には、シフト量が0である場合には、得られた演算結果Aは要素xとなり、シフト量が0よりも大きい整数である場合には、中間演算結果を設定し、当該中間演算結果は、下位ビットが要素xのsaビットから2N-1ビット目までのデータであり、残りのsaビットの上位ビットがいずれも要素xの2N-1ビットのデータであり、当該中間演算結果のビット数が2Nであり、中間演算結果Aは要素xのsa-1ビットに加算され、演算結果Aを得る。ここで、Nは0よりも大きい正の整数で、saは即値数である。
【0085】
第2のステップでは、演算結果の値を取得し、当該値を指定データと比較し、比較結果に応じて最終的な演算結果を得る。具体的には、演算結果Aの値と2
N-1
の比較、及び演算結果Aの値と-2
N-1
の比較をそれぞれ行い、演算結果Aが2
N-1
よりも大きい場合、最終的な演算結果は最上位ビットが0、残りの下位ビットが1、最終的な演算結果のビット数がNとなり、演算結果Aが-2
N-1
よりも小さい場合、最終的な演算結果は最上位ビットが1、残りの下位ビットが0、最終的な演算結果のビット数がNとなり、演算結果Aが2
N-1
よりも小さく-2
N-1
よりも大きい場合、最終的な演算結果は演算結果Aの0ビット目からN-1ビット目までのデータであり、最終的な演算結果のビット数がNとなる。
【0086】
丸めがなされたデータについて半値幅に飽和する処理は、丸めがなされた符号付きデータについて半値幅に飽和する処理、及び丸めがなされた符号なしデータについて半値幅に飽和する処理を含む。
【0087】
本願の実施例を参照して、上記の例に係る最終的な演算結果は本願の実施例に係る第1の初期シフト演算結果における要素となり、演算結果Aは本願の実施例に係る第1のスプライスベクトルにおける要素となる。
【0088】
即値数に従い、第1のスプライスベクトルに対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成した後、ステップ506を実行する。
【0089】
ステップ506では、前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成する。
【0090】
本願の実施例では、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0091】
第1の初期シフト演算結果に対してビット選択操作を実行しシフト演算結果を生成した後、ステップ507を実行する。
【0092】
ステップ507では、前記シフト演算結果における要素をターゲット要素として、前記デスティネーションレジスタに順次書き込む。
【0093】
本願の実施例では、ターゲット要素のデータタイプはソース要素のデータタイプに応じて決定され、選択的には、ターゲット要素のデータタイプに対応するビット数はソース要素のデータタイプに対応するビット数の半分である。例示的には、ソース要素のデータタイプがハーフワードである場合には、ターゲット要素のデータタイプはバイトであり、ソース要素のデータタイプがワードである場合には、ターゲット要素のデータタイプはハーフワードであり、ソース要素のデータタイプがダブルワードである場合には、ターゲット要素のデータタイプはワードであり、ソース要素のデータタイプがクワッドワードである場合には、ターゲット要素のデータタイプはダブルワードである。ソース要素は、符号付きデータであってもよいし、符号なしデータであってもよい。
【0094】
選択的には、ターゲット要素が決定された後、ターゲット要素をデスティネーションレジスタに順次書き込む方法は、第1の初期シフト演算結果における各ターゲット要素の位置情報を決定するステップと、デスティネーションレジスタの内に、当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むステップと、を含む。ここで、当該位置情報は第1の初期シフト演算結果における要素の順序を示し、デスティネーションレジスタの内に当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むことは、ターゲット要素を上位ビットから下位ビットへ、デスティネーションレジスタのN/2-1ビット目から0ビット目までの位置に順次書き込むことを意味するか、またはターゲット要素を下位ビットから上位ビットへ、デスティネーションレジスタの0ビット目からN/2-1ビット目までの位置に順次書き込むことを意味している。
【0095】
本願の実施例における、第1のタイプのベクトルオペコードに従いターゲット要素を取得するプロセスを参照して、第1のタイプのベクトルオペコードは、異なるベクトルシフト操作を指示するために、4つのタイプのベクトルオペコード(すなわち、第1のベクトルオペコード、第2のベクトルオペコード、第3のベクトルオペコード、及び第4のベクトルオペコード)をさらに含んでおり、具体的には、下記の4つの特定の実現形態を参照して詳細に説明することができる。
【0096】
本願の第1種の特定の実現形態では、前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、具体的な処理方法は、次のサブステップA1~A2を含むことができる。
【0097】
サブステップA1では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0098】
本願の実施例では、第1のタイプのベクトルオペコードは第1のベクトルオペコードであってもよく、当該第1のベクトルオペコードは、第1のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行うことを指示するために使用可能であり、前記第1のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数で、Nは128ビットであることが好ましい。
【0099】
選択的には、右論理シフトとは、符号ビットを考慮せずに要素をシフトする方法を指し、すなわち、要素を1ビットだけ右シフトするごとに、最上位ビットとして0を1ビット補足すればよい。符号付き飽和とは、16ビット数値について、8ビット数値の符号付き値の範囲(-128から+127まで)に従って飽和を行うことを意味する。半値幅とは、ビット幅セグメントの半分を意味する。任意のベクトルに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは前述したため、ここでは繰り返して説明しない。
【0100】
第1のタイプのベクトルオペコードが第1のベクトルオペコードである場合には、第1の初期シフト演算結果を生成するために、即値数に従い第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行うことができる。
【0101】
サブステップA2では、前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0102】
本願の実施例では、第1の初期シフト演算結果を生成した後、第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択して、選択操作後の要素をシフト演算結果として決定してもよい。
【0103】
選択的には、第1のソースレジスタに含まれている第1のソース要素と第2のソース要素の両方がN/2ビットで、第2のソースレジスタに含まれている第3のソース要素と第4のソース要素がN/2ビットである場合には、第1の初期シフト演算結果はNビットで、シフト演算結果は、第1の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。
【0104】
さらに、シフト演算結果における各ターゲット要素に対してその下位半分をそれぞれ選択し、デスティネーションレジスタの各ターゲット要素にそれぞれ対応する記憶位置に順次書き込む。例示的には、第1のソースレジスタはベクトルレジスタvd、第2のソースレジスタはベクトルレジスタvjであり、ベクトルレジスタvdは第1のソース要素と第2のソース要素を含み、ベクトルレジスタvjは第3のソース要素と第4のソース要素を含み、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素のビット数はN/2で、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素をベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第2のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第3のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第4のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、ベクトルレジスタvdに順次書き込む。
【0105】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0106】
本願の第2種の特定の実現形態では、前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、具体的な処理方法は、次のサブステップB1~B2を含むことができる。
【0107】
サブステップB1では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0108】
本願の実施例では、第1のタイプのベクトルオペコードは第2のベクトルオペコードであってもよく、第2のベクトルオペコードは、第1のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行うことを指示するために使用可能であり、前記第1のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。
【0109】
選択的には、右算術シフトとは、符号ビットを考慮する必要がある要素のシフト方法を指し、すなわち、要素を1ビットだけ右シフトするごとに、符号ビットが1である場合、左側の最上位ビットに1が補足され、そうでない場合、左側の最上位ビットに0が補足される。符号付き飽和及び半値幅の意味は、前述したものと同じであるため、ここでは繰り返して説明しない。任意のベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは前述したため、ここでは繰り返して説明しない。
【0110】
第1のタイプのベクトルオペコードが第2のベクトルオペコードである場合には、第1の初期シフト演算結果を生成するために、即値数に従い、第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行うことができる。
【0111】
即値数に従い、第1のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成した後、サブステップB2を実行する。
サブステップB2では、前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0112】
本願の実施例では、第1の初期シフト演算結果を生成した後、第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択して、選択操作後の要素をシフト演算結果として決定することができる。
【0113】
選択的には、第1のソースレジスタに含まれている第1のソース要素と第2のソース要素の両方がN/2ビットで、第2のソースレジスタに含まれている第3のソース要素と第4のソース要素の両方がN/2ビットである場合には、第1の初期シフト演算結果はNビットで、シフト演算結果は、第1の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。
【0114】
さらに、シフト演算結果における各ターゲット要素に対してその下位半分をそれぞれ選択し、デスティネーションレジスタの各ターゲット要素にそれぞれ対応する記憶位置に順次書き込む。例示的には、第1のソースレジスタはベクトルレジスタvdで、第2のソースレジスタはベクトルレジスタvjで、ベクトルレジスタvdは第1のソース要素と第2のソース要素を含み、ベクトルレジスタvjは第3のソース要素と第4のソース要素を含み、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素のビット数はN/2で、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素をベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第2のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第3のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第4のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、ベクトルレジスタvdに順次書き込む。
【0115】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0116】
本願の第3種の特定の実現形態では、前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、具体的な処理方法は、次のサブステップC1~C2を含むことができる。
【0117】
サブステップC1では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0118】
本願の実施例では、第1のタイプのベクトルオペコードは第3のベクトルオペコードであってもよく、第3のベクトルオペコードは、第1のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行うことを指示するために使用可能であり、前記第1のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。
【0119】
選択的には、丸めて符号なし飽和とは、16ビット数値について、8ビット数値の符号付き値の範囲(0~255)に従って飽和を行うことを意味する。右論理シフト及び半値幅に飽和する処理の意味は、前述したものと同じであるため、ここでは繰り返して説明しない。任意のベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは前述したため、ここでは繰り返して説明しない。
【0120】
第1のタイプのベクトルオペコードが第3のベクトルオペコードである場合には、第1の初期シフト演算結果を生成するために、即値数に従い、第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行うことができる。
【0121】
即値数に従い、第1のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成した後、サブステップC2を実行する。
【0122】
サブステップC2では、前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0123】
本願の実施例では、第1の初期シフト演算結果を生成した後、第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択して、選択操作後の要素をシフト演算結果として決定することができる。
【0124】
選択的には、第1のソースレジスタに含まれている第1のソース要素と第2のソース要素の両方がN/2ビットで、第2のソースレジスタに含まれている第3のソース要素と第4のソース要素の両方がN/2ビットである場合には、第1の初期シフト演算結果はNビットで、シフト演算結果は、第1の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。
【0125】
さらに、シフト演算結果における各ターゲット要素に対してその下位半分をそれぞれ選択し、デスティネーションレジスタの各ターゲット要素にそれぞれ対応する記憶位置に順次書き込む。例示的には、第1のソースレジスタはベクトルレジスタvdで、第2のソースレジスタはベクトルレジスタvjであり、ベクトルレジスタvdは第1のソース要素と第2のソース要素を含み、ベクトルレジスタvjは第3のソース要素と第4のソース要素を含み、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素のビット数はN/2であり、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素をベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、シフト量は即値数に由来し、第1のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第2のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第3のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第4のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、ベクトルレジスタvdに順次書き込む。
【0126】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0127】
本願の第4種の特定の実現形態では、前記第1のタイプのベクトルオペコードは第4のベクトルオペコードであり、具体的な処理方法は、次のサブステップD1~D2を含むことができる。
【0128】
サブステップD1では、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成する。
【0129】
本願の実施例では、第1のタイプのベクトルオペコードは第4のベクトルオペコードであってもよく、第4のベクトルオペコードは、第1のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行うことを指示するために使用可能であり、前記第1のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。
【0130】
選択的には、右算術シフト、丸め、半値幅の意味は、前述したものと同じであるため、ここでは繰り返して説明しない。右算術シフト及び半値幅に飽和する処理の意味は、前述したものと同じであるため、ここでは繰り返して説明しない。任意のベクトルに対して、右算術シフトして半値幅に符号なし飽和する操作を実行するプロセスは前述したため、ここでは繰り返して説明しない。
【0131】
第1のタイプのベクトルオペコードが第4のベクトルオペコードである場合には、第1の初期シフト演算結果を生成するために、即値数に従い、第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行うことができる。
【0132】
即値数に従い、第1のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成した後、サブステップD2を実行する。
【0133】
サブステップD2では、前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0134】
本願の実施例では、第1の初期シフト演算結果を生成した後、第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータを選択して、選択操作後の要素をシフト演算結果として決定することができる。
【0135】
選択的には、第1のソースレジスタに含まれている第1のソース要素と第2のソース要素の両方がN/2ビットで、第2のソースレジスタに含まれている第3のソース要素と第4のソース要素の両方がN/2ビットである場合には、第1の初期シフト演算結果はNビットで、シフト演算結果は、第1の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。
【0136】
さらに、シフト演算結果における各ターゲット要素に対してその下位半分をそれぞれ選択し、デスティネーションレジスタの各ターゲット要素にそれぞれ対応する記憶位置に順次書き込む。例示的には、第1のソースレジスタはベクトルレジスタvdで、第2のソースレジスタはベクトルレジスタvjであり、ベクトルレジスタvdは第1のソース要素と第2のソース要素を含み、ベクトルレジスタvjは第3のソース要素と第4のソース要素を含み、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素のビット数はN/2であり、第1のソース要素、第2のソース要素、第3のソース要素、及び第4のソース要素をベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第1のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第2のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第3のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、第4のソース要素のシフト結果に対してその下位半分の要素を1つのターゲット要素として選択し、ベクトルレジスタvdに順次書き込む。
【0137】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0138】
本願に係る技術的解決手段を採用し、第1のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第2のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する算術シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第3のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装し、第4のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する算術シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装する。したがって、本発明に係る技術的解決手段を採用すると、異なるシフトパラメータを用いて異なるシフトニーズを達成することができ、これによって、複数のベクトルシフトニーズを1つのシフト命令で達成することができ、システムオーバーヘッドを効果的に低減し、特定の機能に対するベクトルシフトの実行効率を向上させる。
【0139】
実施例3
【0140】
本願の実施例では、オペコードは第2のタイプのベクトルオペコードであってもよく、ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、当該第2のタイプのベクトルオペコードは、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、対応するベクトルシフト操作を実行することを指示するために使用可能であり、
図6に示すように、ベクトルシフト命令の処理方法は、次のステップ601~609を含むことができる。
【0141】
ステップ601では、レジスタ識別子及びシフトパラメータを含む命令を受信する。
【0142】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1と実施例2に説明されたため、ここでは繰り返して説明しない。
【0143】
選択的には、ソースレジスタの数は2つあり、すなわち、ソース要素は2つの異なるレジスタに由来し、前記ソースレジスタ数が複数ある場合には、すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は、前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタ数が複数ある場合には、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している。実施例2と比較して、本願の実施例におけるソースレジスタとデスティネーションレジスタのビット数は、実施例2における前記ソースレジスタとデスティネーションレジスタビットのビット数の2倍であり、例示的には、本願の実施例におけるソースレジスタのビット数が256ビットである場合、実施例2におけるソースレジスタのビット数は128ビットである。
【0144】
選択的には、受信された命令を復号化し、当該命令に含まれているシフトパラメータを取得し、当該シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものであり、本例では、シフトパラメータは、シフト量やオペコードなどのパラメータを含むことができる。
【0145】
ステップ602では、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定する。
【0146】
本願の実施例では、ベクトルシフト操作が実行されるソース要素は少なくとも1つあり、前記シフト量は即値数、前記シフト演算ルールはオペコード、前記オペコードは第2のタイプのベクトルオペコードであり、前記即値数は0以上の正の整数である。
【0147】
選択的には、前記第2のタイプのベクトルオペコードはバイナリ形態で表現されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,シフト量」である。前記オペコードが第2のタイプのベクトルオペコードである場合には、実際に実装する際、命令は、「XVSSR
第2のタイプ
.{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q} xd,xj,ui
第2のタイプ
」と表すことができ、XVSSR
第2のタイプ
は、第2のタイプのベクトルオペコード内の命令名称で、{B.H/H.W/W.D/D.Q/BU.H/HU.W/WU.D/DU.Q}は、第2のタイプのベクトルオペコードのうち、ソース要素とターゲット要素のデータタイプを指示するためのパラメータであり、Bはバイトを表し、Hはハーフワードを表し、Wはワードを表し、Dはダブルワードを表し、Qはクワッドワードを表し、Uは符号なしを表し、xdはデスティネーションレジスタとソースレジスタの両方を表し、xjはソースレジスタを表し、ui
第2のタイプ
は、オペコードが第2のタイプのベクトルオペコードである場合に、命令に含まれている即値数を表す。例示的には、XVSSR
第2のタイプ1
.B.Hはバイナリ形態に変換可能な第2のタイプのベクトルオペコードであり、例えば、XVSSR
第2のタイプ1
.B.Hが011101110101000001というバイナリ形態に変換される第2のタイプのベクトルオペコードは挙げられる。
【0148】
さらに、ui
第2のタイプ
は、ソース要素とターゲット要素のデータタイプに応じて定義されたパラメータであり、当該ui
第2のタイプ
の値は範囲及び値の取り方は、実施例2におけるui
第1のタイプ
の場合と同じであるため、ここでは繰り返して説明しない。
【0149】
シフトパラメータに従ってシフト量及びシフト演算ルールを決定した後、ステップ603を実行する。
【0150】
ステップ603では、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得る。
【0151】
本願の実施例では、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタにおいて選択操作を実行し、第1のオペランドを得て、第2のソースレジスタにおいて選択操作を実行し、第2のオペランドを得る。ここで、第1のオペランドと第2のオペランドとは、データタイプが同じで、且つ第1のオペランド内のソース要素と第2のオペランド内の要素とは、データタイプがハーフワード、ワード、ダブルワード、クワッドワードのいずれかである。
【0152】
選択的には、前記選択操作は、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0153】
選択的には、第1のソースレジスタについて実行する選択操作と第2のソースレジスタについて実行する選択操作は同じである。例示的には、例えば、第1のソースレジスタについて選択操作を実行することは、第1のソースレジスタに含まれている各要素の中から連続する下位半分のデータをそれぞれ選択することであり、第2のソースレジスタについて選択操作を実行することは、第2のソースレジスタに含まれている各要素の中から連続する下位半分のデータをそれぞれ選択することである。また、例えば、第1のソースレジスタについて選択操作を実行することは、第1のソースレジスタに含まれている各要素の中から連続する上位半分のデータをそれぞれ選択することであり、第2のソースレジスタについて選択操作を実行することは、第2のソースレジスタに含まれている各要素の中から連続する上位半分のデータをそれぞれ選択することである。さらに、例えば、第1のソースレジスタについて選択操作を実行することは、第1のソースレジスタに含まれている各要素の中から中間の連続する指定ビットのデータをそれぞれ選択することであり、第2のソースレジスタに対して選択操作を実行することは、第2のソースレジスタに含まれている各要素の中から中間の連続する指定ビットのデータをそれぞれ選択することである。さらに、例えば、第1のソースレジスタについて選択操作を実行することは、第1のソースレジスタに含まれている各要素の中から連続していない指定ビットのデータをそれぞれ選択することであり、第2のソースレジスタについて選択操作を実行することは、第2のソースレジスタに含まれている各要素の中から連続していない指定ビットのデータをそれぞれ選択することである。
【0154】
第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行し、第1のオペランドと第2のオペランドを得た後、ステップ604を実行する。
【0155】
ステップ604では、前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定する。
【0156】
本願の実施例では、第3のオペランドと第4のオペランドは、第1のオペランドと第2のオペランドとはデータタイプが同じで、且つ第3のオペランド内のソース要素と第4のオペランド内の要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかである。
【0157】
選択的には、第1のソースレジスタのうち第1のオペランド以外のデータを第3のオペランドとして決定して、第2のソースレジスタのうち第2のオペランド以外のデータを第4のオペランドとして決定する。例示的には、第1のオペランドが第1のソースレジスタに含まれている各要素の中の連続する下位半分のデータである場合には、第3のオペランドは、第1のソースレジスタに含まれている各要素の中の連続する上位半分のデータとなり、同様に、第2のオペランドは、第1のソースレジスタの各要素の中の連続する下位半分のデータとなり、第4のオペランドは、第1のソースレジスタに含まれている各要素の中の連続する上位半分のデータとなる。
【0158】
第1のオペランド、第2のオペランド、第3のオペランド、及び第4のオペランドが得られた後、ステップ605を実行する。
【0159】
ステップ605では、前記第1のオペランドと第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成する。
【0160】
本願の実施例では、第1のオペランドと第2のオペランドを左右にスプライスした後、第2のスプライスベクトルを生成し、ここで、第1のオペランドと第2のオペランドを左右にスプライスする位置の設定は、命令内のソースレジスタ識別子の位置に応じて決定され、すなわち、第1のソースレジスタ識別子が命令内に第2のタイプのベクトルオペコードの直後のソースレジスタ識別子で、第2のソースレジスタ識別子が命令内に第1のソースレジスタ識別子の後に配置されているソースレジスタ識別子である場合には、第1のオペランドが第1のソースレジスタに由来するもので、第2のオペランドが第2のソースレジスタに由来するものであるため、第1のオペランドは左側に配置され、第2のオペランドは右側に配置され、第2のスプライスベクトルは生成されるが、第2のソースレジスタ識別子が命令内に第2のタイプのベクトルオペコードの直後のソースレジスタ識別子で、第1のソースレジスタ識別子が命令内に第2のソースレジスタ識別子の後に配置されているソースレジスタ識別子である場合には、第1のオペランドが第1のソースレジスタに由来するもので、第2のオペランドが第2のソースレジスタに由来するものであるため、第2のオペランドは左側に配置され、第1のオペランドは右側に配置され、第2のスプライスベクトルは生成される。例示的には、命令のフォーマットが「第2のタイプのベクトルオペコード vd,vj,即値数」である場合には、第1のソースレジスタがvd、第2のソースレジスタがvj、デスティネーションレジスタがvdであると表し、この場合、第1のオペランドはvd(第1のオペランド
vd
と表記される)に由来するものとなり、第2のオペランドはvj(第2のオペランド
vj
と表記される)に由来するものとなり、第2のスプライスベクトルは「第1のオペランド
vd
第2のオペランド
vj
」となり、同様に、命令のフォーマットが「第2のタイプのベクトルオペコード vd,vj,即値数」である場合には、第2のソースレジスタがvd、第1のソースレジスタがvj、デスティネーションレジスタがvdであると表し、この場合、第2のオペランドはvd(第2のオペランド
vd
と表記される)に由来するものとなり、第1のオペランドはvj(第1のオペランド
vj
と表記される)に由来するものとなり、第2のスプライスベクトルは「第2のオペランドvd第1のオペランドvj」となる。第3のオペランドと第4のオペランドによって第3のスプライスベクトルを生成する方法は、第1のオペランドと第2のオペランドによって第2のスプライスベクトルを生成する上記の方法と同じであるため、ここでは繰り返して説明しない。
【0161】
選択的には、第1のオペランドと第2のオペランドをさらに、要素を単位としてクロススプライスして、第2のスプライスベクトルを生成してもよく、クロススプライスの際、ソースレジスタ内に同じアドレスを有するソース要素は1つのグループとしてクロスされ、第2のスプライスベクトルにおける異なるグループの位置は、ソース要素のアドレスに従って降順に配置され、2つの異なるレジスタにそれぞれ由来する2つの要素を1つのグループとしてスプライスする際の左右位置の設定は、命令内のソースレジスタ識別子の位置に応じて決定され、ここでは上記の例と同じであるため、ここでは繰り返して説明しない。例示的には、第1のオペランドは、「ソース要素1(アドレスa)、ソース要素2(アドレスb)、及びソース要素3(アドレスc)」を含み、第2のオペランドは、「ソース要素4(アドレスa)、ソース要素5(アドレスb)、及びソース要素6(アドレスc)」であり、アドレスが同じくaのソース要素1とソース要素4を、1つのグループと見なしてクロススプライスし、アドレスが同じくbのソース要素2とソース要素5を、1つのグループと見なしてクロススプライスし、アドレスが同じくcのソース要素3とソース要素6を、1つのグループと見なしてクロススプライスし、第1のオペランドに対応するソースレジスタ識別子が命令の左側の位置に配置され、第2のオペランドに対応するソースレジスタ識別子が命令の右側の位置に配置されると想定すると、最終的に得られる第2のスプライスベクトルは、「ソース要素1ソース要素4ソース要素2ソース要素5ソース要素3ソース要素6」となる。第3のオペランドと第4のオペランドによって第3のスプライスベクトルを生成する方法は、当該第1のオペランドと第2のオペランドによって第2のスプライスベクトルを生成する方法と同じであるため、ここでは繰り返して説明しない。
【0162】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合、第2のスプライスベクトルは2Nビットとなり、同様に、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合、第3のスプライスベクトルは2Nビットとなり、Nは0よりも大きい正の整数である。第1のオペランドの合計ビット数は、当該第1のオペランドに含まれている各要素と当該要素のデータタイプに対応するビットに応じて決定可能であり、第2のオペランドの合計ビット数は、当該第2のオペランドに含まれている各要素と当該要素のデータタイプに対応するビットに応じて決定可能である。
【0163】
第2のスプライスベクトルと第3のスプライスベクトルが得られた後、ステップ606を実行する。
【0164】
ステップ606では、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0165】
本願の実施例では、第2のスプライスベクトルには複数の要素が含まれており、即値数に従い、第2のスプライスベクトルに対して、シフトして丸めて半値幅に飽和する操作を行うことは、すなわち、第2のスプライスベクトルにおける各要素に対して、シフトして丸めて半値幅に飽和する操作を実行し、シフト量を即値数とし、第2の初期シフト演算結果を生成することであり、同様に、第3のスプライスベクトルには複数の要素が含まれており、即値数に従い、第3のスプライスベクトルに対して、シフトして丸めて半値幅に飽和する操作を行うことは、すなわち、第3のスプライスベクトルにおける各要素に対して、シフトして丸めて半値幅に飽和する操作を実行し、シフト量を即値数とし、第3の初期シフト演算結果を生成することである。ここで、シフト操作は右シフト操作であり、前記シフト操作は、論理シフト及び算術シフトを含む。
【0166】
選択的には、前記第2のスプライスベクトルをシフトすることは、第2のスプライスベクトル内のそれぞれの要素に対してシフト操作を行い、シフト量を即値数とすることを含み、すなわち、各要素のシフト量が同じであり、即値数となる。例示的には、第2のスプライスベクトルには、要素1、要素2、及び要素3が含まれており、シフト量がui4であると、第2のスプライスベクトルをシフトすることは、すなわち、要素1をui4ビットだけシフトし、要素2をui4ビットだけシフトし、要素3をui4ビットだけシフトするようにそれぞれ行うことである。
【0167】
選択的には、前記第3のスプライスベクトルをシフトすることは、第3のスプライスベクトル内のそれぞれの要素に対してシフト操作を行い、シフト量を即値数とすることを含み、すなわち、各要素のシフト量が同じであり、即値数となる。例示的には、第3のスプライスベクトルには、要素4、要素5、及び要素6が含まれており、シフト量がui4であると、第3のスプライスベクトルをシフトすることは、すなわち、要素4をui4ビットだけシフトし、要素5をui4ビットだけシフトし、要素6をui4ビットだけシフトするようにそれぞれ行うことである。
【0168】
選択的には、第2のスプライスベクトル/第3のスプライスベクトルに対して行われるシフト丸め操作は、偶数に丸め、ゼロに丸め、切り上げ、及び切り下げという4つの丸め操作を含む。第2のスプライスベクトル/第3のスプライスベクトルに対して行われるシフト丸め操作は、第2のスプライスベクトル/第3のスプライスベクトルに対してシフト切り上げ操作を行うことが好ましい。
【0169】
第2のスプライスベクトル/第3のスプライスベクトルに対して、右論理シフトして丸めて半値幅に飽和する操作を行う方法は、実施例2で説明されている方法と同じであるため、ここでは繰り返して説明しない。同様に、第2のスプライスベクトル/第3のスプライスベクトルに対して、右算術シフトして丸めて半値幅に飽和する操作を行う方法は、実施例2で説明されている方法と同じであるため、ここでは繰り返して説明しない。
【0170】
第2の初期シフト演算結果及び第3の初期シフト演算結果が生成された後、ステップ607を実行する。
【0171】
ステップ607では、前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成する。
【0172】
本願の実施例では、ビット選択操作を実行することは、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0173】
第1のシフト演算結果と第2のシフト演算結果が生成された後、ステップ608とステップ609を実行する。
【0174】
ステップ608では、前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む。
【0175】
ステップ609では、前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む。
【0176】
本願の実施例では、第1のシフト演算結果と第2のシフト演算結果における要素をターゲット要素として、デスティネーションレジスタ内の対応する記憶位置に書き込む。
【0177】
選択的には、ターゲット要素のデータタイプはソース要素のデータタイプに応じて決定され、選択的には、ターゲット要素のデータタイプに対応するビット数はソース要素のデータタイプに対応するビット数の半分である。例示的には、ソース要素のデータタイプがハーフワードである場合には、ターゲット要素のデータタイプはバイトであり、ソース要素のデータタイプがワードである場合には、ターゲット要素のデータタイプはハーフワードであり、ソース要素のデータタイプがダブルワードである場合には、ターゲット要素のデータタイプはワードであり、ソース要素のデータタイプがクワッドワードである場合には、ターゲット要素のデータタイプはダブルワードである。ソース要素は、符号付きデータであってもよいし、符号なしデータであってもよい。
【0178】
選択的には、ターゲット要素を決定した後、ターゲット要素をデスティネーションレジスタに順次書き込む方法は、第2のシフト演算結果と第3のシフト演算結果における各ターゲット要素の位置情報を決定するステップと、デスティネーションレジスタ内における
当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むステップと、を含む。ここで、当該位置情報は、第2のシフト演算結果と第3のシフト演算結果における要素の順序を示すものであり、デスティネーションレジスタ内における当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むことは、すなわち、デスティネーションレジスタにおける各ターゲット要素の記憶位置を決定することであり、各ターゲット要素について、第2のシフト演算結果に由来するターゲット要素を、当該ターゲット要素が配置されている記憶位置の上位半分に記憶し、第3のシフト演算結果に由来するターゲット要素を、当該ターゲット要素が配置されている記憶位置の下位半分に記憶するか、または、各ターゲット要素について、第2のシフト演算結果に由来するターゲット要素を、当該ターゲット要素が配置されている記憶位置の下位半分に記憶し、第3のシフト演算結果に由来するターゲット要素を、当該ターゲット要素が配置されている記憶位置の上位半分に記憶する。
【0179】
本願の実施例における、第2のタイプのベクトルオペコードに従いターゲット要素を取得するプロセスを参照して、第2のタイプのベクトルオペコードは、異なるベクトルシフト操作をそれぞれ指示するために、第5のベクトルオペコード、第6のベクトルオペコード、第7のベクトルオペコード、及び第8のベクトルオペコードを含み、具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0180】
本願の実施例の第1種の特定の実現形態では、前記第2のタイプのベクトルオペコードは第5のベクトルオペコードで、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分のデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分のデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分のデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分のデータであり、具体的な処理方法は、次のサブステップE1~E4を含むことができる。
【0181】
サブステップE1では、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0182】
本願の実施例では、第2のタイプのベクトルオペコードは第5のベクトルオペコードであってもよく、当該第5のベクトルオペコードは、第2のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作及び各要素のデータの選択操作を実行すること、及び、第3のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作及び各要素のデータの選択操作を実行することを指示するためのものであり、前記第2のスプライスベクトルと第3のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。右論理シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右論理シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは、実施例2と同じであるため、ここでは繰り返して説明しない。
【0183】
第2の初期シフト演算結果と第3の初期シフト演算結果が生成された後、サブステップE2を実行する。
【0184】
サブステップE2では、前記第2の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定する。
【0185】
本願の実施例では、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定する。
【0186】
第1のシフト演算結果と第2のシフト演算結果が得られた後、サブステップE3とサブステップE4を実行する。
【0187】
サブステップE3では、前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。
【0188】
サブステップE4では、前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0189】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合には、第2の初期シフト演算結果はNビットで、第1のシフト演算結果は、第2の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の下位半分のデータを第1のオペランドとし、xjにおける各要素の下位半分のデータを第2のオペランドとし、第1のオペランドと第2のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第2の初期シフト演算結果に含まれている各要素に対してその下位半分を選択した後、下位半分選択操作が行われた各要素を第1のターゲット要素として、ベクトルレジスタxdの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。ここで、第1のオペランド内のソース要素と第2のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第1のオペランド内のソース要素と第2のオペランド内のソース要素とはデータタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0190】
選択的には、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合には、第3の初期シフト演算結果はNビットで、第2のシフト演算結果は、第3の初期シフト演算結果がN/2ビット目からN-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の上位半分のデータを第3のオペランドとし、xjにおける各要素の上位半分のデータを第4のオペランドとし、第3のオペランドと第4のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第3の初期シフト演算結果に含まれている各要素に対してその上位半分を選択した後、上位半分選択操作が行われた各要素を第2のターゲット要素として、ベクトルレジスタxdの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。ここで、第3のオペランド内のソース要素と第4のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第3のオペランド内のソース要素と第4のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0191】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0192】
本願の実施例の第2種の特定の実現形態では、前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分のデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分のデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分のデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分のデータであり、具体的な処理方法は、次のサブステップF1~F4を含むことができる。
【0193】
サブステップF1では、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0194】
本願の実施例では、第2のタイプのベクトルオペコードは第6のベクトルオペコードであってもよく、当該第6のベクトルオペコードは、第2のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作と各要素のデータの選択操作を実行すること、及び、第3のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作と各要素のデータの選択操作を実行することを指示するためのものであり、前記第2のスプライスベクトルと第3のスプライスベクトルはいずれも2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。右算術シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右算術シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0195】
第2の初期シフト演算結果と第3の初期シフト演算結果が生成された後、サブステップF2を実行する。
【0196】
サブステップF2では、前記第2の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータを選択し、選択された前記データを第2のシフト演算結果として決定する。
【0197】
本願の実施例では、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定する。
【0198】
第1のシフト演算結果と第2のシフト演算結果が得られた後、サブステップF3とサブステップF4を実行する。
【0199】
サブステップF3では、前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。
【0200】
サブステップF4では、前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0201】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合には、第2の初期シフト演算結果はNビットで、第1のシフト演算結果は、第2の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の下位半分のデータを第1のオペランドとし、xjにおける各要素の下位半分のデータを第2のオペランドとし、第1のオペランドと第2のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第2の初期シフト演算結果に含まれている各要素に対してその下位半分を選択した後、下位半分選択操作が行われた各要素を第1のターゲット要素として、ベクトルレジスタxdの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。ここで、第1のオペランド内のソース要素と第2のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第1のオペランド内のソース要素と第2のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0202】
選択的には、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合には、第3の初期シフト演算結果はNビットで、第2のシフト演算結果は、第3の初期シフト演算結果がN/2ビット目からN-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の上位半分のデータを第3のオペランドとし、xjにおける各要素の上位半分のデータを第4のオペランドとし、第3のオペランドと第4のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第3の初期シフト演算結果に含まれている各要素に対してその上位半分を選択した後、上位半分選択操作が行われた各要素を第2のターゲット要素として、ベクトルレジスタxdの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。ここで、第3のオペランド内のソース要素と第4のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第3のオペランド内のソース要素と第4のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0203】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0204】
本願の実施例の第3種の特定の実現形態では、前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分のデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分のデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分のデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分のデータであり、具体的な処理方法は、次のサブステップG1~G4を含むことができる。
【0205】
サブステップG1では、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0206】
本願の実施例では、第2のタイプのベクトルオペコードは第7のベクトルオペコードであってもよく、当該第7のベクトルオペコードは、第2のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作と各要素のデータの選択操作を実行すること、及び、第3のスプライスベクトルに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作と各要素のデータの選択操作を実行することを指示するためのものであり、前記第2のスプライスベクトルと第3のスプライスベクトルはいずれも2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。右論理シフト、丸め、半値幅の意味は、実施例2と同じであり、右論理シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0207】
第2の初期シフト演算結果と第3の初期シフト演算結果が生成された後、サブステップG2を実行する。
【0208】
サブステップG2では、前記第2の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータを選択し、選択された前記データを第2のシフト演算結果として決定する。
【0209】
本願の実施例では、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定する。
【0210】
第1のシフト演算結果と第2のシフト演算結果が決定された後、サブステップG3とサブステップG4を実行する。
【0211】
サブステップG3では、前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。
【0212】
サブステップG4では、前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0213】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合には、第2の初期シフト演算結果はNビットで、第1のシフト演算結果は、第2の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の下位半分のデータを第1のオペランドとし、xjにおける各要素の下位半分のデータを第2のオペランドとし、第1のオペランドと第2のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第2の初期シフト演算結果に含まれている各要素に対してその下位半分を選択した後、下位半分選択操作が行われた各要素を第1のターゲット要素として、ベクトルレジスタxdの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ順次書き込む。ここで、第1のオペランド内のソース要素と第2のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第1のオペランド内のソース要素と第2のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0214】
選択的には、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合には、第3の初期シフト演算結果はNビットで、第2のシフト演算結果は、第3の初期シフト演算結果がN/2ビット目からN-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の上位半分のデータを第3のオペランドとし、xjにおける各要素の上位半分のデータを第4のオペランドとし、第3のオペランドと第4のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第3の初期シフト演算結果に含まれている各要素に対してその上位半分を選択した後、上位半分選択操作が行われた各要素を第2のターゲット要素として、ベクトルレジスタxdの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。ここで、第3のオペランド内のソース要素と第4のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第3のオペランド内のソース要素と第4のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0215】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0216】
本願の実施例の第4種の特定の実現形態では、前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分のデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分のデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分のデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分のデータであり、具体的な処理方法は、次のサブステップH1~H4を含むことができる。
【0217】
サブステップH1では、前記即値数に従い、前記第2のスプライスベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成する。
【0218】
本願の実施例では、第2のタイプのベクトルオペコードは第8のベクトルオペコードであってもよい。当該第8のベクトルオペコードは、第2のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作と各要素のデータ選択操作を実行すること、及び、第3のスプライスベクトルに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作と各要素のデータ選択操作を実行することを指示するために使用可能であり、前記第2のスプライスベクトルと第3のスプライスベクトルは2Nビットで、Nは0よりも大きい正の整数であるが、Nは128ビットであることが好ましい。右算術シフト、丸め、半値幅の意味は、実施例2と同じであり、右算術シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0219】
第2の初期シフト演算結果と第3の初期シフト演算結果が生成された後、サブステップH2を実行する。
【0220】
サブステップH2では、前記第2の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定する。
【0221】
本願の実施例では、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている要素に応じて少なくとも1つの第2のターゲット要素を決定する。
【0222】
第1のシフト演算結果と第2のシフト演算結果が得られた後、サブステップH3とサブステップH4を実行する。
【0223】
サブステップH3では、前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。
【0224】
サブステップH4では、前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0225】
選択的には、第1のオペランドの合計ビット数がNビットで、第2のオペランドの合計ビット数がNビットである場合には、第1の初期シフト演算結果はNビットで、第2のシフト演算結果は、第2の初期シフト演算結果が0ビット目からN/2-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の下位半分のデータを第1のオペランドとし、xjにおける各要素の下位半分のデータを第2のオペランドとし、第1のオペランドと第2のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第2の初期シフト演算結果に含まれている各要素に対してその下位半分を選択した後、下位半分選択操作が行われた各要素を第1のターゲット要素として、ベクトルレジスタxdの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込む。ここで、第1のオペランド内のソース要素と第2のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第1のオペランド内のソース要素と第2のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0226】
選択的には、第3のオペランドの合計ビット数がNビットで、第4のオペランドの合計ビット数がNビットである場合には、第3の初期シフト演算結果はNビットで、第2のシフト演算結果は、第3の初期シフト演算結果がN/2ビット目からN-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxd、第2のソースレジスタはベクトルレジスタxjであり、xdにおける各要素の上位半分のデータを第3のオペランドとし、xjにおける各要素の上位半分のデータを第4のオペランドとし、第3のオペランドと第4のオペランドをベクトルシフト命令を用いて左右にスプライスして1つの2N(2N=256)ビットベクトルを形成することができ、当該ベクトルにおける各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作をそれぞれ行い、シフト量は即値数に由来し、第3の初期シフト演算結果に含まれている各要素に対してその上位半分を選択した後、上位半分選択操作が行われた各要素を第2のターゲット要素として、ベクトルレジスタxdの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。ここで、第3のオペランド内のソース要素と第4のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれか1つであり、第3のオペランド内のソース要素と第4のオペランド内のソース要素とは、データタイプが同じであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワード、ダブルワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0227】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0228】
本願に係る技術的解決手段を採用し、第5のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第6のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する算術シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第7のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装し、第8のベクトルオペコードと即値数を含む命令を実行することによって、2つのソース要素に対する算術シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装する。したがって、本発明に係る技術的解決手段を採用すると、異なるシフトパラメータを用いて異なるシフトニーズを達成することができ、これによって、複数のベクトルシフトニーズを1つのシフト命令で達成することができ、システムオーバーヘッドを効果的に低減し、特定の機能に対するベクトルシフトの実行効率を向上させる。
【0229】
実施例4
【0230】
本願の実施例では、前記オペコードは第3のタイプのベクトルオペコードで、前記ソースレジスタは第1のソースレジスタであり、当該
第3のタイプのベクトルオペコードは、第1のソースレジスタにおいて選択操作
を実行するとともに、対応するベクトルシフト操作を実行することを指示するために使用可能であり、
図7に示すように、ベクトルシフト命令の処理方法は、次のステップ701~707を含むことができる。
【0231】
ステップ701では、レジスタ識別子及びシフトパラメータを含む命令を受信する。
【0232】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1~実施例3に説明されているため、ここでは繰り返して説明しない。
【0233】
選択的には、ソースレジスタの数は1つあり、すなわち、すべてのソース要素は同一のソースレジスタに由来するものであり、デスティネーションレジスタの数は1つあり、ソースレジスタとデスティネーションレジスタとは、同じ又は異なるものである。第1のソースレジスタのビット数は128ビット又は256ビットであることが好ましい。
【0234】
選択的には、受信された命令を復号化し、当該命令に含まれているシフトパラメータを取得し、当該シフトパラメータは、ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものであり、本例では、シフトパラメータは、シフト量やオペコードなどのパラメータを含むことができる。
【0235】
ステップ702では、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定する。
【0236】
本願の実施例では、ベクトルシフト操作が実行されるソース要素は少なくとも1つあり、前記シフト量はシフト量レジスタに由来するものであり、前記シフト演算ルールはオペコードで、前記オペコードは第3のタイプのベクトルオペコードであり、前記シフト量レジスタに含まれている各要素シフト量は0以上の正の整数である。
【0237】
選択的には、前記第3のタイプのベクトルオペコードはバイナリ形態で表現されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,シフト量」である。前記オペコードが第3のタイプのベクトルオペコードである場合には、実際に実装する際、命令は、「[X]VSSR
第3のタイプ
.{B.H/H.W/W.D/BU.H/HU.W/WU.D} vd/xd,vj/xj,vk
第3のタイプ
/ xk
第3のタイプ
」と表され、[X]VSSR
第3のタイプ
は、第3のタイプのベクトルオペコード内の命令名称であり、{B.H/H.W/W.D /BU.H/HU.W/WU.D}は、第3のタイプのベクトルオペコードの中にソース要素とターゲット要素のデータタイプを指示するためのパラメータであり、Bはバイトを表し、Hはハーフワードを表し、Wはワードを表し、Dはダブルワードを表し、vd/xdはデスティネーションレジスタとソースレジスタの両方を表し、vj/xjはソースレジスタを表し、vk
第3のタイプ
/xk
第3のタイプ
は、オペコードが第3のタイプのベクトルオペコードである場合に命令に含まれているシフト量レジスタ識別子を表し、当該シフト量レジスタに含まれているバイナリを1つの配列とし、配列に含まれているパラメータの数とターゲット要素の数が同じであり、且つデータに含まれているパラメータは、同じ又は異なるものである。例示的には、VSSR
第3のタイプ1
.B.Hは、バイナリ形態に変換可能な第3のタイプのベクトルオペコードであり、例えば、VSSR
第3のタイプ1
.B.Hが01110001000000001というバイナリ形態に変換される第3のタイプのベクトルオペコードは挙げられる。
【0238】
シフトパラメータに従ってシフト量及びシフト演算ルールを決定した後、ステップ703を実行する。
【0239】
ステップ703では、前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得る。
【0240】
本願の実施例では、前記選択操作は、前記第1のソースレジスタの各要素に対してその連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対してその連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対してその中間の連続する指定ビットのデータを選択する操作、前記第1のレジスタの各要素に対してその連続していない指定ビットのデータを選択する操作のいずれか1つを含む。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれかである。
【0241】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとし、各データグループには少なくとも1つのソース要素が含まれており、すべてのデータグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含み、ここで、MとNは、0よりも大きい正の整数であり、M≦Nとし、ソース要素とデータとの対応関係は、ソース要素のデータタイプとデータビットとの間の変換関係に応じて決定される。
【0242】
選択的には、異なるデータグループ間には同じアドレスのデータが存在しないか、または、異なるデータグループ間には同じアドレスのデータの一部が存在している。ここで、前記アドレスは、第1のソースレジスタにおいて、当該第1のソースレジスタにおけるデータの位置情報であり、当該第1のソースレジスタにおいて、各データのアドレスが一意に識別される。
【0243】
NはMの倍数であることが好ましい。例示的には、N=128、M=128、第1のソースレジスタが256ビットのデータを含むと、第1のソースレジスタのデータは、128ビットごとに1つのグループとして、合計2つのグループ(第1のデータグループと第2のデータグループ)に分けられ、第1のデータグループは、第1のソースレジスタの0~127ビット目のデータで、第2のデータグループは、第1のソースレジスタの128~255ビット目のデータであり、第1のデータグループと第2のデータグループとは、同じアドレスのデータが存在していない。ソース要素のデータタイプがハーフワードである場合、第1のデータグループは8つのハーフワードソース要素を含むが、ソース要素のデータタイプがワードである場合、第1のデータグループは4つのワードソース要素を含むが、ソース要素のデータタイプがダブルワードである場合、第1のデータグループは2つのダブルワードソース要素を含む。
【0244】
第3のタイプのベクトルオペコードに従って第1のソースレジスタについて選択操作を実行し第5のオペランドを得た後、ステップ704を実行する。
【0245】
ステップ704では、前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0246】
本願の実施例では、シフト量はシフト量レジスタに由来するものであり、当該シフト量レジスタに記憶されているコンテンツは、1つのグループのデータとすることができ、当該グループのデータには複数のシフト値が含まれており、各シフト値は第5のオペランド内の各ソース要素にそれぞれ関わっており、異なるソース要素のシフト値は同じものであってもよいし、異なるものであってもよく、シフト値の数は第5のオペランドのソース要素の数と同じであるか、または、シフト値の数は第4の初期シフト演算結果と同じであるようにする。
【0247】
選択的には、シフト値の数が第5のオペランドのソース要素の数と同じである場合には、それぞれのシフト値が、第5のオペランド内の1つのソース要素に対応し、第5のオペランド内のそれぞれのソース要素に対しては、シフト量に応じて、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成する。例示的には、第5のオペランドには、ソース要素1、ソース要素2、ソース要素3、及びソース要素4を含み、シフト量レジスタには、4つのシフト値(シフト値1、シフト値2、シフト値3、及びシフト値4)を含み、ソース要素1に対応するシフト量がシフト値1、ソース要素2に対応するシフト量がシフト値2、ソース要素3に対応するシフト量がシフト値3、ソース要素4に対応するシフト量がシフト値4であると、ソース要素1はシフト値1に応じてシフトし、ソース要素2はシフト値2に応じてシフトし、ソース要素3はシフト値3に応じてシフトし、ソース要素4はシフト値4に応じてシフトする。
【0248】
選択的には、シフト値の数が第4の初期シフト演算結果と同じである場合には、第5のオペランドは、要素グループの数がシフト値の数と同じであるように、シフト値の数に応じて複数の要素グループに分けられ、すなわち、それぞれのシフト値が1つの要素グループに対応し、第5のオペランド内の各ソース要素に対しては、配置されている要素グループに対応するシフト量に応じて、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成する。例示的には、第5のオペランドには、ソース要素1、ソース要素2、ソース要素3、及びソース要素4を含み、シフト量レジスタには、2つのシフト値(シフト値1とシフト値2)を含み、ソース要素1とソース要素2が第1の要素グループを構成し、第1の要素グループに対応するシフト量がシフト値1であり、ソース要素3とソース要素4が第2の要素グループを構成し、第2の要素グループに対応するシフト量がシフト値2であると、ソース要素1とソース要素2は、シフト値1に応じてシフトし、ソース要素3とソース要素4はシフト値2に応じてシフトする。
【0249】
第4の初期シフト演算結果が生成された後、ステップ705を実行する。
【0250】
ステップ705では、前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成する。
【0251】
本願の実施例では、前記ビット選択操作は、前記第4の初期シフト演算結果について連続する下位半分のデータを選択する操作、前記第4の初期シフト演算結果について連続する上位半分のデータを選択する操作、前記第4の初期シフト演算結果について中間の連続する指定ビットのデータを選択する操作、前記第4の初期シフト演算結果について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0252】
シフト演算結果が生成された後、ステップ706を実行する。
【0253】
ステップ706では、前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込む。
【0254】
本願の実施例では、シフト演算結果が生成された後、シフト演算結果における各データにそれぞれ対応するターゲット要素を決定し、デスティネーションレジスタの各ターゲット要素の記憶位置に各データを順次書き込む。
【0255】
選択的には、ターゲット要素のデータタイプはソース要素のデータタイプに応じて決定され、選択的には、ターゲット要素のデータタイプに対応するビット数はソース要素のデータタイプに対応するビット数の半分である。例示的には、ソース要素のデータタイプがハーフワードである場合には、ターゲット要素のデータタイプはバイトであり、ソース要素のデータタイプがワードである場合には、ターゲット要素のデータタイプはハーフワードであり、ソース要素のデータタイプがダブルワードである場合には、ターゲット要素のデータタイプはワードである。ソース要素は、符号付きデータであってもよいし、符号なしデータであってもよい。
【0256】
選択的には、ターゲット要素が決定された後、ターゲット要素をデスティネーションレジスタに順次書き込む方法は、シフト演算結果における各ターゲット要素の位置情報を決定するステップと、デスティネーションレジスタ内における当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むステップと、を含む。ここで、当該位置情報は、シフト演算結果における要素の順序を示すものであり、デスティネーションレジスタ内における当該ターゲット要素に対応する位置情報にマッチする位置にターゲット要素を順次書き込むことは、すなわち、デスティネーションレジスタのN/2-1ビット目から0ビット目までの位置にターゲット要素を上位ビットから下位ビットへ順次書き込むか、またはデスティネーションレジスタの0ビット目からN/2-1ビット目までの位置にターゲット要素を下位ビットから上位ビットへ順次書き込むことである。
【0257】
シフト演算結果における要素をターゲット要素としてデスティネーションレジスタに順次書き込んだ後、ステップ707を実行する。
【0258】
ステップ707では、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定する。
【0259】
シフト演算結果におけるデータをデスティネーションレジスタ内の対応する位置に順次書き込んだ後、第3のタイプのベクトルオペコードに従って、デスティネーションレジスタ内のデータが書き込まれていない位置の値を設定することができる。
【0260】
本願の実施例における第3のタイプのベクトルオペコードに従ってターゲット要素を取得するプロセスを参照して、第3のタイプのベクトルオペコードは、異なるベクトルシフト操作をそれぞれ指示するために、第9のベクトルオペコード、第10のベクトルオペコード、第11のベクトルオペコード、及び第12のベクトルオペコードを含むことができる。具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0261】
本願の実施例の第1種の特定の実現形態では、前記第3のタイプのベクトルオペコードは第9のベクトルオペコードで、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、具体的な処理方法は、次のサブステップK1~K5を含むことができる。
【0262】
サブステップK1では、前記シフト量に応じて、前記第5のオペランドに対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0263】
本願の実施例では、第9のベクトルオペコードが得られた後、シフト量に応じて、第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成することができ、ここで、シフト量はシフト量レジスタに由来するものである。
【0264】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとして、各データグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含む。前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、第5のオペランド内の各ソース要素に対応するシフト量レジスタ内のシフト値を決定し、各ソース要素に対応するシフト値にそれぞれ応じて、各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を実行し、第4の初期シフト演算結果を得るステップを含む。
【0265】
さらに、右論理シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右論理シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0266】
第4の初期シフト演算結果が生成された後、サブステップK2を実行する。
【0267】
サブステップK2では、前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定する。
【0268】
本願の実施例では、第4の初期シフト演算結果が生成された後、第4の初期シフト演算結果における各要素の連続する下位半分のデータをそれぞれ選択して、選択操作後の各要素の連続する下位半分のデータをシフト演算結果として決定する。
【0269】
シフト演算結果が得られた後、サブステップK3を実行する。
【0270】
サブステップK3では、プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、複数の記憶エリアを生成する。
【0271】
本願の実施例では、プリセット値とは、ベクトルレジスタ内の記憶位置を分割するための値を指し、プリセット値は、すなわち、ターゲット要素によって占められているデータビット幅であり、プリセット値の特定の数値は、業務上の必要に応じて決定することができ、本願の実施例は、それを限定しない。当該プリセット値は、当該プリセット値に応じて分割される各記憶エリアが同じ大きさである(各記憶エリアに記憶されているデータビット幅が同じである)ようにする値であることが好ましい。
【0272】
複数の記憶エリアが生成された後、サブステップK4を実行する。
【0273】
サブステップK4では、前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込む。
【0274】
本願の実施例では、第5のオペランドがMビットであると、第4の初期シフト演算結果はM/2ビットとなり、この場合、シフト演算結果は、第4の初期シフト演算結果における、0ビット目からM/4-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxj、第1のソースレジスタは2Mであり、xjのMビットごとに対応するソース要素を第5のオペランドとし、ベクトルシフト命令を用いて、第5のオペランドに含まれているMビットごとの各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を得ることができ、シフト量は、シフト量レジスタに由来するものであり、第4の初期シフト演算結果における各要素から選択された下位半分の要素を各ターゲット要素の下位半分としてベクトルレジスタxdのMビットごとのターゲット要素の下位半分に順次書き込み、且つ当該Mビットごとの各ターゲット要素の上位半分のデータを0に設定する。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれか1つであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0275】
シフト演算結果におけるデータを各記憶エリアの下位半分に順次書き込んだ後、サブステップK5を実行する。
【0276】
サブステップK5では、各記憶エリア内のデータが書き込まれていない位置の値をそれぞれゼロに設定する。
【0277】
本願の実施例では、シフト演算結果における要素をターゲット要素として、各記憶エリアの下位半分に順次書き込んだ後、各記憶エリア内のターゲット要素が書き込まれていない位置の値をゼロに設定する。
【0278】
例示的には、第1のソースレジスタがvj/xjで、第3のタイプのベクトルオペコードが第10のベクトルオペコードであると、ベクトルシフト命令を実行し、すなわち、第1のソースレジスタvj/xjの128ビットごとの各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、シフト結果における各要素の下位半分を選択してデスティネーションレジスタvd/xdの128ビットごとの各ターゲット要素の下位半分に順次書き込み、デスティネーションレジスタの128ビットごとの各ターゲット要素の上位半分を0に設定し、各要素のシフト量はシフト量レジスタvk/xkに由来するものであり、ソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれかである。
【0279】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0280】
本願の実施例の第2種の特定の実現形態では、前記第3のタイプのベクトルオペコードは第10のベクトルオペコードで、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、具体的な処理方法は、次のサブステップM1~M5を含むことができる。
【0281】
サブステップM1では、前記シフト量に応じて、前記第5のオペランドに対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0282】
本願の実施例では、第10のベクトルオペコードが得られた後、シフト量に応じて、第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成することができ、ここで、シフト量はシフト量レジスタに由来するものである。
【0283】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとして、各データグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含む。前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、第5のオペランド内の各ソース要素に対応するシフト量レジスタ内のシフト値を決定し、各ソース要素に対応するシフト値にそれぞれ応じて、各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を実行し、第4の初期シフト演算結果を得るステップを含む。
【0284】
さらに、右算術シフト、丸め、半値幅、符号付き飽和の意味は、実施例2と同じであり、右算術シフトして丸めて半値幅に符号付き飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0285】
第4の初期シフト演算結果が生成された後、サブステップM2を実行する。
【0286】
サブステップM2では、前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定する。
【0287】
本願の実施例では、第4の初期シフト演算結果が生成された後、第4の初期シフト演算結果から各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の各要素の連続する下位半分のデータをシフト演算結果として決定することができる。
【0288】
シフト演算結果が得られた後、サブステップM3を実行する。
【0289】
サブステップM3では、プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、複数の記憶エリアを生成する。
【0290】
本願の実施例では、プリセット値とは、デスティネーションレジスタ内の記憶位置を領域分割するための数値を指し、プリセット値は、すなわち、ターゲット要素によって占められているデータビット幅であり、プリセット値の特定の数値は、業務上の必要に応じて決定することができ、本願の実施例は、それを限定しない。当該プリセット値は、当該プリセット値に応じて分割される各記憶エリアが同じ大きさである(各記憶エリアに記憶されているデータビット幅が同じである)ようにする値であることが好ましい。
【0291】
プリセット値に従いデスティネーションレジスタ内の記憶位置を分割して複数の記憶エリアを生成した後、サブステップM4を実行する。
【0292】
サブステップM4では、前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込む。
【0293】
本願の実施例では、複数の記憶エリアが生成されシフト演算結果が得られた後、シフト演算結果における要素をターゲット要素として、各記憶エリアの下位半分に順次書き込むことができる。
【0294】
選択的には、第5のオペランドがMビットであると、第4の初期シフト演算結果はM/2ビットとなり、この場合、シフト演算結果は、第4の初期シフト演算結果における、0ビット目からM/4-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxj、第1のソースレジスタは2Mであり、xjのMビットごとに対応するソース要素を第5のオペランドとし、ベクトルシフト命令を用いて、第5のオペランドに含まれているMビットごとの各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を得ることができ、シフト量は、シフト量レジスタに由来するものであり、第4の初期シフト演算結果における各要素から選択された下位半分の要素を各ターゲット要素としてベクトルレジスタxdのMビットごとの各ターゲット要素の下位半分に順次書き込み、且つ当該Mビットごとの各ターゲット要素の上位半分のデータを0に設定する。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれか1つであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0295】
シフト演算結果におけるデータを各記憶エリアの下位半分に順次書き込んだ後、サブステップM5を実行する。
【0296】
サブステップM5では、各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0297】
本願の実施例では、シフト演算結果における要素をターゲット要素として各記憶エリアの下位半分に順次書き込んだ後、各記憶エリア内のターゲット要素が書き込まれていない位置の値をそれぞれ0に設定することができる。
【0298】
例示的には、第1のソースレジスタがvj/xj、第3のタイプのベクトルオペコードが第9のベクトルオペコードであると、ベクトルシフト命令を実行し、すなわち、第1のソースレジスタvj/xjの128ビットごとの各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、シフト結果における各要素の下位半分を選択してデスティネーションレジスタvd/xdの128ビットごとの各ターゲット要素の下位半分に順次書き込み、デスティネーションレジスタの128ビットごとの各ターゲット要素の上位半分を0に設定し、各要素のシフト量はシフト量レジスタvk/xkに由来するものであり、ソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれかである。
【0299】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0300】
本願の実施例の第3種の特定の実現形態では、前記第3のタイプのベクトルオペコードは第11のベクトルオペコード、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、具体的な処理方法は、次のサブステップN1~N5を含むことができる。
【0301】
サブステップN1では、前記シフト量に応じて、前記第5のオペランドに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0302】
本願の実施例では、第11のベクトルオペコードが得られた後、シフト量に応じて、第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成することができ、ここで、シフト量はシフト量レジスタに由来するものである。
【0303】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとして、各データグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含む。前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、第5のオペランド内の各ソース要素に対応するシフト量レジスタ内のシフト値を決定し、各ソース要素に対応するシフト値にそれぞれ応じて、各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を実行し、第4の初期シフト演算結果を得るステップを含む。
【0304】
さらに、右論理シフト、丸め、半値幅の意味は、実施例2と同じであり、右論理シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0305】
シフト量に応じて、第5のオペランドに対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成した後、サブステップN2を実行する。
【0306】
サブステップN2では、前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定する。
【0307】
本願の実施例では、第4の初期シフト演算結果が生成された後、第4の初期シフト演算結果から各要素の連続する下位半分のデータをそれぞれ選択し、選択された各要素の連続する下位半分のデータをシフト演算結果として決定する。
【0308】
シフト演算結果が得られた後、サブステップN3を実行する。
【0309】
サブステップN3では、プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、複数の記憶エリアを生成する。
【0310】
本願の実施例では、プリセット値とは、デスティネーションレジスタ内の記憶位置を領域分割するための値を指し、プリセット値は、すなわち、ターゲット要素によって占められているデータビット幅であり、プリセット値の特定の数値は、業務上の必要に応じて決定することができ、本願の実施例は、それを限定しない。当該プリセット値は、当該プリセット値に応じて分割される各記憶エリアが同じ大きさである(各記憶エリアに記憶されているデータビット幅が同じである)ようにする値であることが好ましい。
【0311】
複数の記憶エリアが生成された後、サブステップN4を実行する。
【0312】
サブステップN4では、前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込む。
【0313】
本願の実施例では、複数の記憶エリアが生成され、且つシフト演算結果が得られた後、シフト演算結果における要素をターゲット要素として、各記憶エリアの下位半分に順次書き込むことができる。
【0314】
選択的には、第5のオペランドがMビットであると、第4の初期シフト演算結果はM/2ビットとなり、この場合、シフト演算結果は、第4の初期シフト演算結果における、0ビット目からM/4-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxj、第1のソースレジスタは2Mであり、xjのMビットごとに対応するソース要素を第5のオペランドとし、ベクトルシフト命令を用いて、第5のオペランドに含まれているMビットごとの各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を得ることができ、シフト量は、シフト量レジスタに由来するものであり、第4の初期シフト演算結果における各要素から選択された下位半分の要素を各ターゲット要素としてベクトルレジスタxdのMビットごとの各ターゲット要素の下位半分に順次書き込み、且つ当該Mビットごとの各ターゲット要素の上位半分のデータを0に設定する。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれか1つであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0315】
シフト演算結果におけるデータを各記憶エリアの下位半分に順次書き込んだ後、サブステップN5を実行する。
【0316】
サブステップN5では、各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0317】
シフト演算結果における要素をターゲット要素として各記憶エリアの下位半分に順次書き込んだ後、各記憶エリア内のターゲット要素が書き込まれていない位置の値をそれぞれをゼロに設定することができる。
【0318】
例示的には、第1のソースレジスタがvj/xj、第3のタイプのベクトルオペコードが第11のベクトルオペコードであると、ベクトルシフト命令を実行し、すなわち、第1のソースレジスタvj/xjの128ビットごとの各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、シフト結果における各要素の下位半分を選択してデスティネーションレジスタvd/xdの128ビットごとの各ターゲット要素の下位半分に順次書き込み、デスティネーションレジスタの128ビットごとの各ターゲット要素の上位半分を0に設定し、各要素のシフト量はシフト量レジスタvk/xkに由来するものであり、ソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれかである。
【0319】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0320】
本願の第4種の特定の実現形態では、前記第3のタイプのベクトルオペコードは第12のベクトルオペコード、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、具体的な処理方法は、次のサブステップS1~S5を含むことができる。
【0321】
サブステップS1では、前記シフト量に応じて、前記第5のオペランドに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成する。
【0322】
本願の実施例では、第12のベクトルオペコードが得られた後、シフト量に応じて、第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成することができ、ここで、シフト量はシフト量レジスタに由来するものである。
【0323】
第4の初期シフト演算結果が生成された後、サブステップS2を実行する。
【0324】
サブステップS2では、前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定する。
【0325】
本願の実施例では、第4の初期シフト演算結果が生成された後、第4の初期シフト演算結果から各要素の連続する下位半分のデータをそれぞれ選択し、選択された各要素の連続する下位半分のデータをシフト演算結果として決定することができる。
【0326】
選択的には、第1のソースレジスタには2Nビットのデータを含み、当該2Nビットのデータは、複数のハーフワード要素、ワード要素、またはダブルワード要素に対応することができ、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップは、前記第1のソースレジスタのMビットごとのデータを1つのグループのデータグループとして、各データグループに対応するすべてのソース要素を第5のオペランドとして決定するステップを含む。前記シフト量に応じて、前記第5のオペランドに対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、第5のオペランド内の各ソース要素に対応するシフト量レジスタ内のシフト値を決定し、各ソース要素に対応するシフト値にそれぞれ応じて、各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を実行し、第4の初期シフト演算結果を得るステップを含む。
【0327】
さらに、右算術シフト、丸め、半値幅、符号なし飽和の意味は、実施例2と同じであり、右算術シフトして丸めて半値幅に符号なし飽和する操作を実行するプロセスは実施例2と同じであるため、ここでは繰り返して説明しない。
【0328】
シフト演算結果が得られた後、サブステップS3を実行する。
【0329】
サブステップS3では、プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、複数の記憶エリアを生成する。
【0330】
本願の実施例では、プリセット値とは、デスティネーションレジスタ内の記憶位置を領域分割するための数値を指し、プリセット値は、すなわち、ターゲット要素によって占められているデータビット幅であり、プリセット値の特定の数値は、業務上の必要に応じて決定することができ、本願の実施例は、それを限定しない。当該プリセット値は、当該プリセット値に応じて分割される各記憶エリアが同じ大きさである(各記憶エリアに記憶されているデータビット幅が同じである)ようにする値であることが好ましい。
【0331】
複数の記憶エリアが生成された後、サブステップS4を実行する。
【0332】
サブステップS4では、前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込む。
【0333】
本願の実施例では、複数の記憶エリアが生成され、且つシフト演算結果が得られた後、シフト演算結果における要素をターゲット要素として各記憶エリアの下位半分に順次書き込むことができる。
【0334】
選択的には、第5のオペランドがMビットであると、第4の初期シフト演算結果はM/2ビットとなり、この場合、シフト演算結果は、第4の初期シフト演算結果における、0ビット目からM/4-1ビット目まで示しているデータとなる。例示的には、第1のソースレジスタはベクトルレジスタxj、第1のソースレジスタは2Mであり、xjのMビットごとに対応するソース要素を第5のオペランドとし、ベクトルシフト命令を用いて、第5のオペランドに含まれているMビットごとの各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を得ることができ、シフト量は、シフト量レジスタに由来するものであり、第4の初期シフト演算結果における各要素から選択された下位半分の要素を各ターゲット要素としてベクトルレジスタxdのMビットごとの各ターゲット要素の下位半分に順次書き込み、且つ当該Mビットごとの各ターゲット要素の上位半分のデータを0に設定する。ここで、第5のオペランド内のソース要素のデータタイプは、ハーフワード、ワード、ダブルワードのいずれか1つであり、ベクトルレジスタxdに書き込まれたターゲット要素のデータタイプは、上記のソース要素のデータタイプに対応するように、バイト、ハーフワード、ワードであり、ソース要素のデータタイプとターゲット要素のデータタイプとの間の対応関係は、この前にも説明されているため、ここでは繰り返して説明しない。
【0335】
シフト演算結果におけるデータを各記憶エリアの下位半分に順次書き込んだ後、サブステップS5を実行する。
【0336】
サブステップS5では、各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0337】
シフト演算結果における要素をターゲット要素として各記憶エリアの下位半分に順次書き込んだ後、各記憶エリア内のターゲット要素が書き込まれていない位置の値をそれぞれ0に設定することができる。
【0338】
上記の例は、本願の実施例に係る技術的解決手段をよりよく理解するために例示している例にすぎず、本願の実施例を一意に限定するものではないことを理解されたい。
【0339】
本願に係る技術的解決手段を採用し、第9のベクトルオペコードとシフト量を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第10のベクトルオペコードとシフト量を含む命令を実行することによって、シフト量はレジスタに由来するものであり、2つのソース要素に対する算術シフト及び丸めて半値幅に符号付き飽和する操作などの一連の操作を実装し、第11のベクトルオペコードとシフト量を含む命令を実行することによって、2つのソース要素に対する論理シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装し、第12のベクトルオペコードとシフト量を含む命令を実行することによって、2つのソース要素に対する算術シフト及び丸めて半値幅に符号なし飽和する操作などの一連の操作を実装する。したがって、本発明に係る技術的解決手段を採用すると、異なるシフトパラメータを用いて異なるシフトニーズを達成することができ、これによって、複数のベクトルシフトニーズを1つのシフト命令で達成することができ、システムオーバーヘッドを効果的に低減し、特定の機能に対するベクトルシフトの実行効率を向上させる。
【0340】
実施例5
【0341】
図8を参照されたい。
図8は、本願の実施例2に係るプロセッサの構造ブロック図を示している。
【0342】
図8に示すように、プロセッサは、複数のベクトルレジスタ、命令復号化ユニット83、実行ユニット84を含むことができ、
前記複数のベクトルレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するためのソースレジスタ81、及びデスティネーションレジスタ82を含み、
前記命令復号化ユニット83は、レジスタ識別子及びシフトパラメータを含むベクトルシフト命令を復号化するためのものであり、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタ81を示すためのものであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタ82を示すためのものであり、
前記実行ユニット84は、前記ベクトルシフト命令に応答し、前記シフトパラメータに従い、前記ソースレジスタ81から取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタ82に書き込む。
【0343】
好ましくは、前記実行ユニット84は、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定し、ここで、ベクトルシフト操作が実行されるソース要素は少なくとも1つあり、前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成し、前記シフト演算結果における要素をターゲット要素として決定する。
【0344】
好ましくは、前記シフトパラメータは、シフト量及びオペコードを含み、前記シフト量は、前記ベクトルシフト操作が実行される際に操作されるソース要素のシフトビット数を指示するためのものであり、前記オペコードは、前記ソースレジスタ内のソース要素及びデスティネーションレジスタ内のターゲット要素に対して実行するシフト演算ルールを示すためのものであり、
前記実行ユニット84は、前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト操作を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定し、前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成し、前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定し、前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶する。
【0345】
好ましくは、前記シフト量は即値数であり、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含む。
【0346】
好ましくは、前記オペコードは第1のタイプのベクトルオペコードであり、
前記実行ユニット84は、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素をオペランドとして決定し、
前記第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタ内のオペランドと前記第2のソースレジスタ内のオペランドをスプライスした後、第1のスプライスベクトルを生成し、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含む。
【0347】
好ましくは、前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、
前記実行ユニット84は、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0348】
好ましくは、前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、
前記実行ユニット84は、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0349】
好ましくは、前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、
前記実行ユニット84は、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0350】
好ましくは、前記第1のタイプのベクトルオペコードは第4のベクトルオペコードであり、
前記実行ユニット84は、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する。
【0351】
好ましくは、前記オペコードは第2のタイプのベクトルオペコードであり、
前記実行ユニット84は、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得て、ここで、前記選択操作は、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含み、
前記実行ユニット84はまた、
前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定し、
前記第1のオペランドと第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成し、ここで、前記第2のスプライスベクトルと前記第3のスプライスベクトルに含まれている要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、ここで、前記実行ビット選択操作は、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作のうちのいずれか1つを含み、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む。
【0352】
好ましくは、前記第2のタイプのベクトルオペコードは第5のベクトルオペコードであり、前記第1のオペランドは、前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは、前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは、第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは、第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニット84は、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定し、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0353】
好ましくは、前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは、前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは、前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは、第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは、第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0354】
好ましくは、前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは、前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは、前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは、第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは、第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニット84は、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0355】
好ましくは、前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは、前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは、前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは、第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは、第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニット84は、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む。
【0356】
好ましくは、前記命令は、シフト量を記憶するレジスタであるシフト量レジスタを示すためのシフト量レジスタ識別子をさらに含む。
【0357】
好ましくは、前記オペコードは第3のタイプのベクトルオペコードであり、前記ソースレジスタは第1のソースレジスタを含み、
前記実行ユニットは、前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得て、ここで、前記選択操作は、前記第1のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、前記第1のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作のいずれか1つを含み、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する下位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する上位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその中間の連続する指定ビットのデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続していない指定ビットのデータをそれぞれ選択する操作のうちのいずれか1つを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込み、
前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定する。
【0358】
好ましくは、前記第3のタイプのベクトルオペコードは第9のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニット84は、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0359】
好ましくは、前記第3のタイプのベクトルオペコードは第10のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニット84は、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0360】
好ましくは、前記第3のタイプのベクトルオペコードは第11のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニット84は、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータを選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0361】
好ましくは、前記第3のタイプのベクトルオペコードは第12のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニット84は、前記シフト量に応じて、前記第5のオペランドに含まれている各要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する。
【0362】
好ましくは、前記ソースレジスタ数は1つ又は複数あり、前記デスティネーションレジスタ数は1つあり、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と同じ又は異なるものである。
【0363】
好ましくは、前記ソースレジスタ数が複数あり、前記デスティネーションレジスタ数は1つあり、
すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は、前記デスティネーションレジスタ識別子と異なるか、または、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している。
【0364】
実施例6
【0365】
図9を参照されたい。
図9は、本願の
実施例6に係るベクトルシフト操作を実行するための電子機器の構造概略図を示している。
【0366】
図9に示すように、電子機器は、処理アセンブリ902、メモリ904、電源アセンブリ906、マルチメディアアセンブリ908、オーディオアセンブリ910、入力/出力(I/O)用インタフェース912、センサアセンブリ914、及び通信アセンブリ916のうちの1つ又は複数のアセンブリを含むことができる。
【0367】
処理アセンブリ902は、一般に、表示、データ通信、カメラ動作、及び記録動作に関連する動作など、電子機器の全体的な動作を制御する。処理アセンブリ902は、上述した方法のステップのすべて又は一部を完了させるために、命令を実行する1つ又は複数のプロセッサ920を含むことができる。また、処理アセンブリ902は、処理アセンブリ902と他のアセンブリとの間の相互作用を容易にするための1つ又は複数のモジュールを含むことができる。例えば、処理アセンブリ902は、マルチメディアアセンブリ908と処理アセンブリ902との間の相互作用を容易にするためのマルチメディアモジュールを含むことができる。
【0368】
メモリ904は、電子機器での操作をサポートするための様々なタイプのデータを記憶するように構成されている。このようなデータの例としては、電子機器上で操作される任意のアプリケーション又は方法の命令、連絡先データ、電話帳データ、メッセージ、画像、ビデオなどがある。メモリ904は、スタティックランダムアクセスメモリ(SRAM)、電気的に消去可能なプログラマブル読み取り専用メモリ(EEPROM)、消去可能なプログラマブル読み取り専用メモリ(EPROM)、プログラマブル読み取り専用メモリ(PROM)、読み取り専用メモリ(ROM)、磁気メモリ、フラッシュメモリ、磁気ディスク、または光ディスクのような任意のタイプの揮発性又は不揮発性記憶機器、またはそれらの組み合わせによって実装され得る。
【0369】
電源アセンブリ906は、電子機器の様々なアセンブリに電力を供給する。電源アセンブリ906は、電源管理システム、1つまたは複数の電源、及び電子機器900に供する電力の生成、管理、及び配電に関連するその他のアセンブリを含むことができる。
【0370】
マルチメディアアセンブリ908は、前記電子機器とユーザとの間の出力インタフェースを提供するスクリーンを含む。いくつかの実施例では、スクリーンは、液晶ディスプレイ(LCD)及びタッチパネル(TP)を含み得る。スクリーンがタッチパネルを含む場合、スクリーンはユーザからの入力信号を受信するためのタッチスクリーンとして実装され得る。タッチパネルは、タッチ、スワイプ、及びタッチパネル上でのジェスチャーを感知するための1つ又は複数のタッチセンサを含む。前記タッチセンサは、タッチ又はスワイプ操作の境界を感知するだけでなく、前記タッチ又はスワイプ操作に関連する持続時間及び圧力を検出することもできる。いくつかの実施例では、マルチメディアアセンブリ908は、1つのフロントカメラ及び/又はリアカメラを含む。フロントカメラ及び/又はリアカメラは、電子機器が撮影モード又はビデオモードなどの動作モードにあるときに、外部マルチメディアデータを受信することができる。各フロントカメラ及びリアカメラは、固定式光学レンズシステムであってもよいし、焦点距離及び光学ズーム機能を有するものであってもよい。
【0371】
オーディオアセンブリ910は、オーディオ信号を出力及び/又は入力するように構成されている。例えば、オーディオアセンブリ910は、端末が通話モード、録音モード、音声認識モードなどの動作モードにあるときに、外部オーディオ信号を受信するように構成されているマイクロフォン(MIC)を含む。受信されたオーディオ信号は、さらに、メモリ904に記憶されるか、通信アセンブリ916によって送信され得る。いくつかの実施例では、オーディオアセンブリ910は、オーディオ信号を出力するためのスピーカをさらに含む。
【0372】
I/Oインターフェース912は、処理アセンブリ902と周辺インタフェースモジュールとの間のインタフェースを提供し、上記の周辺インタフェースモジュールは、キーパッド、クリックホイール、ボタンなどであってもよい。これらのボタンは、ホームボタン、音量ボタン、スタートボタン、ロックボタンを含むことができるが、これらに限定されない。
【0373】
センサアセンブリ914は、電子機器900の状態の様々な側面の評価を提供するための1つ又は複数のセンサを含む。例えば、センサアセンブリ914は、電子機器900の開/閉状態、例えば前記アセンブリが端末のディスプレイ及びキーパッドであるようなアセンブリの相対的位置決めを検出することができ、センサアセンブリ914はまた、端末又は端末の1つのアセンブリの位置の変化、電子機器に対するユーザの接触の有無、電子機器の向き又は加速/減速、及び電子機器の温度の変化を検出することができる。センサアセンブリ914は、物理的な接触が一切なくても近くの物体の存在を検出するように構成されている近接センサを含むことができる。センサアセンブリ914はまた、撮像用途に使用するためのCMOS又は電荷結合素子(charge coupled device、CCD)イメージセンサなどの光学センサを含み得る。いくつかの実施例において、センサアセンブリ914はさらに、加速度センサ、ジャイロスコープセンサ、磁気センサ、圧力センサ、または温度センサを含み得る。
【0374】
通信アセンブリ916は、電子機器と他のデバイスとの間の有線又は無線通信を容易にするように構成されている。電子機器は、WiFi、2Gもしくは3G、またはそれらの組み合わせなどの通信規格に基づく無線ネットワークにアクセスすることができる。1つの例示的な実施例では、通信コンポーネント916は、ブロードキャストチャネルを経由して、外部のブロードキャスト管理システムからのブロードキャスト信号又はブロードキャスト関連情報を受信する。1つの例示的な実施例では、前記通信コンポーネント916は、近距離通信を容易にするための近距離通信(NFC)モジュールをさらに備える。例えば、NFCモジュールは、無線周波数識別(RFID)技術、赤外線データ協会(IrDA)技術、ウルトラワイドバンド(UWB)技術、ブルートゥース(登録商標)(BT)技術、及び他の技術に基づいて実装することができる。
【0375】
例示的な実施例では、電子機器は、上述のベクトルシフト方法を実行するために、1つまたは複数のアプリケーション特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)、デジタル信号処理デバイス(DSPD)、プログラマブルロジックデバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、コントローラー、マイクロコントローラー、マイクロプロセッサ、または他の電子素子によって実装され得る。
【0376】
本願の実施例に係る電子機器は、前述した複数の方法の実施例における対応する、命令を用いて実行されるベクトルシフト方法を実装するためのものであり、且つ対応する方法の実施の有益な効果を有しているため、ここでは繰り返して説明しない。
【0377】
本明細書における各実施例は漸進的に説明され、各実施例は他の実施例との相違点に焦点を当て説明を進んでおり、各実施例同士の同じ又は類似する部分は互いに参照すればよい。装置の実施例については、基本的に方法の実施例と類似しているため、説明は比較的に簡単であり、関連している箇所は、方法の実施例を参照して説明すればよい。
【0378】
以上は、本願により提供されるベクトルシフト方法、プロセッサ、電子機器及び可読記憶媒体について詳細に説明した。本明細書において、本願発明の原理及び実施形態は、特定の例を適用して説明されているが、以上の実施例は、単に本願発明の方法及びその主要な構想を理解するのに役立つために説明されており、同時に、当業者であれば、本願発明の構想に基づき、特定の実施形態及びその適用範囲に変化を加えることができる。以上のように、本明細書の記載は本願発明を制限するためのものとして理解すべきではない。
【0379】
本明細書で提供されるアルゴリズムや表示は、特定のコンピュータ、電子システム、その他のデバイスと本質的に関連するものではない。様々な汎用システムも、本明細書に基づく教示と組み合わせて使用することができる。そのようなシステムを構築するために必要な構造は、上記の説明に照らして明らかである。さらに、本願は、特定のプログラミング言語を対象とするものではない。本明細書で説明されている本願の内容を実装するために、様々なプログラミング言語を利用することができ、特定の言語に関する上記の説明は、本願の最良の実施形態を開示するために提供されることを理解されたい。
【0380】
本願により提供される明細書において、大量の具体的な詳細が記載されている。しかしながら、本願の実施例は、これらの具体的な詳細がなくても実施可能であることが理解され得る。いくつかの実例では、本明細書の理解を不明瞭にしないように、公知の方法、構造及び技術は詳細に示されていない。
【0381】
同様に、本開示を簡潔にして、様々な発明の1つ又は複数の態様の理解に役立つようにするために、本願の例示的な実施例の上記の説明において、本願の様々な特徴は、単一の実施例、図面、またはそれらに関する説明にまとめられていることがあることが理解されるべきである。しかしながら、当該開示に係る方法は、特許を請求する本願が、各請求項に明示的に記載されている特徴よりも多くの特徴を必要とする意図を反映するものと解釈されるべきではない。より正確にいうと、以下の特許請求の範囲に反映されているように、本発明の態様は、先に開示された個々の実施例に係るすべての特徴よりも少ない数の特徴がある。したがって、特定の実施形態に従う特許請求の範囲は、それによってその特定の実施形態に明示的に組み込まれ、各請求項自体が本願の別個の実施例として機能する。
【0382】
当業者であれば、実施例におけるデバイス内のモジュールを適応的に変更し、当該実施例とは異なる1つ又は複数のデバイスに配置することが可能であることを理解することができる。実施例におけるモジュール又はユニット又はアセンブリを、単一のモジュール又はユニット又はアセンブリに組み合わせることが可能であり、さらに、複数のサブモジュール又はサブユニット又はサブアセンブリに分割することも可能である。このような特徴及び/又はプロセスもしくはユニットの少なくとも一部が相互に排他的である場合を除き、本明細書(添付の特許請求の範囲、要約及び添付図面を含む)に開示されたすべての特徴及びこのように開示された方法又はデバイスのすべてのプロセス又はユニットを、任意の組み合わせで組み合わせることができる。本明細書(添付の特許請求の範囲、要約、及び添付図面を含む)に開示された各特徴は、特に明記されていない限り、同一、等価、または類似する目的を提供する代替的な特徴によって置き換えられてもよい。
【0383】
加えて、当業者は、本明細書に記載されているいくつかの実施例は、その他の実施例に含まれているその他の特徴ではなくいくつかの特徴を含むが、異なる実施例の特徴の組み合わせは、本願の範囲内のものであり、異なる実施例を形成していることを意味することを理解することができる。例えば、以下の特許請求の範囲では、主張される実施例のいずれか1つは任意の組み合わせで使用され得る。
【0384】
本願の様々な構成要素の実施例は、ハードウェア、または1つまたは複数のプロセッサ上で実行されるソフトウェアモジュール、またはそれらの組み合わせで実装され得る。当業者は、マイクロプロセッサ又はデジタル信号プロセッサ(DSP)が、本願の実施例による電子機器における構成要素の一部又はすべての機能の一部又はすべてを実装するために実際に使用され得ることを理解すべきである。また、本願は、本明細書に記載の方法の一部又は全部を実行するためのデバイス又は装置プログラム(例えば、コンピュータプログラム及びコンピュータプログラム製品)として実装され得る。本願を実装するこのようなプログラムは、コンピュータ可読媒体に格納されているものであってもよいし、1つまたは複数の信号の形態を有するものであってもよい。このような信号は、インターネットサイトからダウンロード可能であってもよいし、キャリア信号で提供されてもよいし、任意の他の形態で提供されてもよい。
【0385】
上記の実施例は、本願を説明するためのものであり、本願を限定するものではなく、当業者であれば、添付の特許請求の範囲から逸脱することなく、代替の実施例を設計することができることに留意されたい。特許請求の範囲において、括弧の間に位置する参照符号は、特許請求の範囲を限定するものとして解釈されるべきではない。用語「含む」は、特許請求の範囲に記載されていない素子又はステップの存在を排除しない。素子の前にある用語「一」又は「1つ」は、そのような素子が複数存在することを除外しない。本願は、いくつかの異なる素子を含むハードウェア、及び適切にプログラムされたコンピュータによって実装され得る。いくつかの装置を列挙している個別の請求項では、これらの装置のいくつかが、同一のハードウェアによって具現化され得る。第1、第2、第3といった用語の使用は、いかなる順序を示すものではない。これらの用語は名称として解釈されてもよい。
【0386】
本願は、2021年12月10日に中国国家知的産権局に提出された、出願番号が202111509173.2であり、発明の名称が「ベクトルシフト方法、プロセッサ及び電子機器」である中国特許出願の優先権を主張しており、その内容の全ては、本明細書に参照によって取り込まれる。
【手続補正2】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
レジスタ識別子及びシフトパラメータを含む命令を受信するステップであって、ここで、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタであり、前記シフトパラメータは、前記ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのものである、ステップと、
前記命令を実行して、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む、ことを特徴とするベクトルシフト方法。
【請求項2】
前記命令を実行して、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得するステップは、
前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定するステップであって、ベクトルシフト操作が実行される前記ソース要素は少なくとも1つある、ステップと、
前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成するステップと、
前記シフト演算結果における要素をターゲット要素として決定するステップと、を含む、ことを特徴とする請求項1に記載のベクトルシフト方法。
【請求項3】
前記シフトパラメータはシフト量及びオペコードを含み、前記シフト量は、前記ベクトルシフト
操作が実行される際に操作されるソース要素のシフトビット数を指示するためのものであり、前記オペコードは、前記ソースレジスタ内のソース要素及びデスティネーションレジスタ内のターゲット要素に対して実行するシフト演算ルールを示すためのものであり、
前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト
操作を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップと、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップと、を含み、
前記シフト演算結果における要素をターゲット要素として決定した後、前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定するステップと、
前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶するステップと、を含む、ことを特徴とする請求項2に記載のベクトルシフト方法。
【請求項4】
前記シフト量は即値数であり、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含む、ことを特徴とする請求項3に記載のベクトルシフト方法。
【請求項5】
前記オペコードは第1のタイプのベクトルオペコードであり、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト
操作を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素をオペランドとして決定するステップを含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタ内のオペランドと前記第2のソースレジスタ内のオペランドをスプライスした後、第1のスプライスベクトルを生成するステップと、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップと、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップと、を含み、ここで、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビット
のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ことを特徴とする請求項4に記載のベクトルシフト方法。
【請求項6】
前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項5に記載のベクトルシフト方法。
【請求項7】
前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項5に記載のベクトルシフト方法。
【請求項8】
前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項5に記載のベクトルシフト方法。
【請求項9】
前記第1のタイプのベクトルオペコードは第4
のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項5に記載のベクトルシフト方法。
【請求項10】
前記オペコードは第2のタイプのベクトルオペコードであり、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト
操作を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得るステップであって、ここで、前記選択操作は、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ステップと、
前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定するステップと、を含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第1のオペランドと前記第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成するステップであって、ここで、前記第2のスプライスベクトルと前記第3のスプライスベクトルに含まれている
ソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかである、ステップと、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成するステップと、を含み、ここで
、実行
した前記ビット選択操作は、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、及び前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記記憶形態に従い、前記ターゲット要素を
前記デスティネーションレジスタに記憶するステップは、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップと、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップと、を含む、ことを特徴とする請求項4に記載のベクトルシフト方法。
【請求項11】
前記第2のタイプのベクトルオペコードは第5のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、
第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、
第2のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている
データに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項10に記載のベクトルシフト方法。
【請求項12】
前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなる
データであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、
第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、
第2のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている
データに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各
第1のターゲット要素を、前記デスティネーションレジスタの各
第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各
第2のターゲット要素を、前記デスティネーションレジスタの各
第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項10に記載のベクトルシフト方法。
【請求項13】
前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、
第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、
第2のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている
データに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項10に記載のベクトルシフト方法。
【請求項14】
前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、
第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、
第2のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている
データに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位
置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置
に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項10に記載のベクトルシフト方法。
【請求項15】
前記命令は、シフト量を記憶するレジスタであるシフト量レジスタを示すためのシフト量レジスタ識別子をさらに含む、ことを特徴とする請求項3に記載のベクトルシフト方法。
【請求項16】
前記オペコードは第3のタイプのベクトルオペコードであり、前記ソースレジスタは第1のソースレジスタを含み、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト
操作を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップを含み、前記選択操作は、前記第1のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のいずれか1つを含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップと、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップと、を含み、ここで、前記ビット選択操作は、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する下位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する上位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその中間の連続する指定ビットのデータをそれぞれ選択する操作、及び前記第4の初期シフト演算結果に含まれている各要素に対してその連続していない指定ビットのデータをそれぞれ選択する操作、のうちのいずれか1つを含み、
前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶するステップは、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むステップと、
前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップと、を含む、ことを特徴とする請求項15に記載のベクトルシフト方法。
【請求項17】
前記第3のタイプのベクトルオペコードは第9のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各
ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の
データをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項16に記載のベクトルシフト方法。
【請求項18】
前記第3のタイプのベクトルオペコードは第10のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各
ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の
データをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項16に記載のベクトルシフト方法。
【請求項19】
前記第3のタイプのベクトルオペコードは第11のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各
ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の
データを
それぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項16に記載のベクトルシフト方法。
【請求項20】
前記第3のタイプのベクトルオペコードは第12のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各
ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の
データをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項16に記載のベクトルシフト方法。
【請求項21】
前記ソースレジスタ数は1つ又は複数あり、前記デスティネーションレジスタ数は1つあり、前記ソースレジスタ識別子は、前記デスティネーションレジスタ識別子と同じ又は異なるものである、ことを特徴とする請求項1~3、16~20のいずれか1項に記載のベクトルシフト方法。
【請求項22】
前記ソースレジスタ数が複数あり、前記デスティネーションレジスタ数は1つあり、
すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なるか、または、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している、ことを特徴とする請求項1~15のいずれか1項に記載のベクトルシフト方法。
【請求項23】
複数のベクトルレジスタ、命令復号化ユニット、及び実行ユニットを含むプロセッサであって、
前記複数のベクトルレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するためのソースレジスタ、及びデスティネーションレジスタを含み、
前記命令復号化ユニットは、レジスタ識別子及びシフトパラメータを含むベクトルシフト命令を復号化するためのものであり、前記レジスタ識別子は、ソースレジスタを示すためのソースレジスタ識別子、及びデスティネーションレジスタを示すためのデスティネーションレジスタ識別子を含み、
前記実行ユニットは、前記ベクトルシフト命令に応答し、前記シフトパラメータに従い前記ソースレジスタから取得されたソース要素に対してベクトルシフト操作を実行し、前記ベクトルシフト操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む、ことを特徴とするプロセッサ。
【請求項24】
前記実行ユニットは、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定し、ここで、ベクトルシフト操作が実行されるソース要素は少なくとも1つあり、前記シフト量及び前記シフト演算ルールに従い、前記ソースレジスタ内のソース要素に対して対応するシフト演算を実行し、シフト演算結果を生成し、前記シフト演算結果
における要素をターゲット要素として決定する、ことを特徴とする請求項23に記載のプロセッサ。
【請求項25】
前記シフトパラメータはシフト量及びオペコードを含み、前記シフト量は、前記ベクトルシフト
操作が実行される際に操作されるソース要素のシフトビット数を指示するためのものであり、前記オペコードは、前記ソースレジスタ内のソース要素とデスティネーションレジスタ内のターゲット要素に対して実行するシフト演算ルールを示すためのものであり、
前記実行ユニットは、前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト
操作を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定し、前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成し、前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定し、前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶する、ことを特徴とする請求項24に記載のプロセッサ。
【請求項26】
前記シフト量は即値数であり、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含む、ことを特徴とする請求項25に記載のプロセッサ。
【請求項27】
前記オペコードは第1のタイプのベクトルオペコードであり、
前記実行ユニットは、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素をオペランドとして決定し、
前記第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタ内のオペランドと前記第2のソースレジスタ内のオペランドをスプライスした後、第1のスプライスベクトルを生成し、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビット
のデータを選択する操作、及び前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ことを特徴とする請求項26に記載のプロセッサ。
【請求項28】
前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項27に記載のプロセッサ。
【請求項29】
前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項27に記載のプロセッサ。
【請求項30】
前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項27に記載のプロセッサ。
【請求項31】
前記第1のタイプのベクトルオペコードは第4のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項27に記載のプロセッサ。
【請求項32】
前記オペコードは第2のタイプのベクトルオペコードであり、
前記実行ユニットは、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得、ここで、前記選択操作は、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジス
タと前記第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記実行ユニットはまた、
前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定し、
前記第1のオペランドと前記第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成し、ここで、前記第2のスプライスベクトルと前記第3のスプライスベクトルに含まれている
ソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、ここで、前記実行ビット選択操作は、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、及び前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む、ことを特徴とする請求項26に記載のプロセッサ。
【請求項33】
前記第2のタイプのベクトルオペコードは第5のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている
データに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項32に記載のプロセッサ。
【請求項34】
前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなる
データであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている
データに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各
第1のターゲット要素を、前記デスティネーションレジスタの各
第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各
第2のターゲット要素を、前記デスティネーションレジスタの各
第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項32に記載のプロセッサ。
【請求項35】
前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている
データに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項32に記載のプロセッサ。
【請求項36】
前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれの
ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれの
ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれている
データに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項32に記載のプロセッサ。
【請求項37】
前記命令は、シフト量を記憶するレジスタであるシフト量レジスタを示すためのシフト量レジスタ識別子をさらに含む、ことを特徴とする請求項25に記載のプロセッサ。
【請求項38】
前記オペコードは第3のタイプのベクトルオペコードであり、前記ソースレジスタは第1のソースレジスタを含み、
前記実行ユニットは、前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得、ここで、前記選択操作は、前記第1のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のいずれか1つを含み、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する下位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する上位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその中間の連続する指定ビットのデータをそれぞれ選択する操作、及び前記第4の初期シフト演算結果に含まれている各要素に対してその連続していない指定ビットのデータをそれぞれ選択する操作、のうちのいずれか1つを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込み、
前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定する、ことを特徴とする請求項37に記載のプロセッサ。
【請求項39】
前記第3のタイプのベクトルオペコードは第9のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各
ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各
ソース要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項38に記載のプロセッサ。
【請求項40】
前記第3のタイプのベクトルオペコードは第10のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各
ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の
データをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項38に記載のプロセッサ。
【請求項41】
前記第3のタイプのベクトルオペコードは第11のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各
ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の
データを
それぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項38に記載のプロセッサ。
【請求項42】
前記第3のタイプのベクトルオペコードは第12のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各
ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分の
データをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項38に記載のプロセッサ。
【請求項43】
前記ソースレジスタ数は1つ又は複数あり、前記デスティネーションレジスタ数は1つあり、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と同じ又は異なるものである、ことを特徴とする請求項23~25、38~42のいずれか1項に記載のプロセッサ。
【請求項44】
前記ソースレジスタ数が複数あり、前記デスティネーションレジスタ数は1つあり、
すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なるか、または、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している、ことを特徴とする請求項23~37のいずれか1項に記載のプロセッサ。
【請求項45】
メモリ、及び1つ以上の
プロセッサを含む電子機器であって
、1つ以上のプログラムは、
前記メモリに記憶されており、且つ請求項1~
20のいずれか1項に記載のベクトルシフト方法を
前記1つ以上のプロセッサにより実行するように構成されている、ことを特徴とする電子機器。
【手続補正3】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【手続補正4】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【手続補正書】
【提出日】2024-08-30
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
レジスタ識別子及びシフトパラメータを含む命令を受信するステップであって、ここで、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシフト操作実行後に得られたターゲット要素を記憶するレジスタであり、前記シフトパラメータは、前記ソース要素に対してベクトルシフト操作を実行するときに根拠とするルールを指示するためのもので
あり、前記シフトパラメー
タはシフト量及びオペコードを含み、前記シフト量は、前記ベクトルシフト演算が実行される際に操作されるソース要素のシフトビット数を指示するためのものであり、前記オペコードは、前記ソースレジスタ内のソース要素及びデスティネーションレジスタ内のターゲット要素に対して実行するシフト演算ルールを示すためのものであり、前記オペコードには命令名称、前記ソース要素及び前記ターゲット要素のデータタイプを指示するためのパラメータが含まれる、ステップと、
前記命令を実行して、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定するステップであって、ベクトルシフト操作が実行される前記ソース要素は少なくとも1つある、ステップと、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップと、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップと、
前記シフト演算結果における要素をターゲット要素として決定するステップと、
前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定するステップと、
前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶するステップと、を含む、ことを特徴とするベクトルシフト方法。
【請求項2】
前記シフト量は即値数であり、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含む、ことを特徴とする請求項
1に記載のベクトルシフト方法。
【請求項3】
前記オペコードは第1のタイプのベクトルオペコードであり、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト
演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素をオペランドとして決定するステップを含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタ内のオペランドと前記第2のソースレジスタ内のオペランドをスプライスした後、第1のスプライスベクトルを生成するステップと、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップと、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップと、を含み、ここで、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ことを特徴とする請求項
2に記載のベクトルシフト方法。
【請求項4】
前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項
3に記載のベクトルシフト方法。
【請求項5】
前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項
3に記載のベクトルシフト方法。
【請求項6】
前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項
3に記載のベクトルシフト方法。
【請求項7】
前記第1のタイプのベクトルオペコードは第4のベクトルオペコードであり、
前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成するステップを含み、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定するステップを含む、ことを特徴とする請求項
3に記載のベクトルシフト方法。
【請求項8】
前記オペコードは第2のタイプのベクトルオペコードであり、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト
演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得るステップであって、ここで、前記選択操作は、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ステップと、
前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定するステップと、を含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第1のオペランドと前記第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成するステップであって、ここで、前記第2のスプライスベクトルと前記第3のスプライスベクトルに含まれているソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかである、ステップと、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成するステップと、を含み、ここで、
前記実
行ビット選択操作は、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、及び前記第2の初期シフト演算結果に含まれている各要素及び前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶するステップは、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップと、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップと、を含む、ことを特徴とする請求項
2に記載のベクトルシフト方法。
【請求項9】
前記第2のタイプのベクトルオペコードは第5のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項
8に記載のベクトルシフト方法。
【請求項10】
前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項
8に記載のベクトルシフト方法。
【請求項11】
前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項
8に記載のベクトルシフト方法。
【請求項12】
前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成するステップは、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成するステップと、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成するステップと、を含み、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成するステップは、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定するステップを含み、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込むステップを含み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込むステップは、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込むステップを含む、ことを特徴とする請求項
8に記載のベクトルシフト方法。
【請求項13】
前記命令は、シフト量を記憶するレジスタであるシフト量レジスタを示すためのシフト量レジスタ識別子をさらに含む、ことを特徴とする請求項
1に記載のベクトルシフト方法。
【請求項14】
前記オペコードは第3のタイプのベクトルオペコードであり、前記ソースレジスタは第1のソースレジスタを含み、
前記オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト
演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定するステップは、
前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得るステップを含み、前記選択操作は、前記第1のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のいずれか1つを含み、
前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成するステップは、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップと、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップと、を含み、ここで、前記ビット選択操作は、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する下位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する上位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその中間の連続する指定ビットのデータをそれぞれ選択する操作、及び前記第4の初期シフト演算結果に含まれている各要素に対してその連続していない指定ビットのデータをそれぞれ選択する操作、のうちのいずれか1つを含み、
前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶するステップは、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むステップと、
前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップと、を含む、ことを特徴とする請求項
13に記載のベクトルシフト方法。
【請求項15】
前記第3のタイプのベクトルオペコードは第9のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項
14に記載のベクトルシフト方法。
【請求項16】
前記第3のタイプのベクトルオペコードは第10のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項
14に記載のベクトルシフト方法。
【請求項17】
前記第3のタイプのベクトルオペコードは第11のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項
14に記載のベクトルシフト方法。
【請求項18】
前記第3のタイプのベクトルオペコードは第12のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成するステップは、
前記シフト量に応じて、前記第5のオペランドに含まれている各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成するステップを含み、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成するステップは、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定するステップを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込むとともに、前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定するステップは、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定するステップと、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込むステップと、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定するステップと、を含む、ことを特徴とする請求項
14に記載のベクトルシフト方法。
【請求項19】
前記ソースレジスタ数は1つ又は複数あり、前記デスティネーションレジスタ数は1つあり、前記ソースレジスタ識別子は、前記デスティネーションレジスタ識別子と同じ又は異なるものである、ことを特徴とする請求項
1、14~18のいずれか1項に記載のベクトルシフト方法。
【請求項20】
前記ソースレジスタ数が複数あり、前記デスティネーションレジスタ数は1つあり、
すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なるか、または、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している、ことを特徴とする請求項1~
13のいずれか1項に記載のベクトルシフト方法。
【請求項21】
複数のベクトルレジスタ、命令復号化ユニット、及び実行ユニットを含むプロセッサであって、
前記複数のベクトルレジスタは、ベクトルシフト操作実行時に操作されるソース要素を記憶するためのソースレジスタ、及びデスティネーションレジスタを含み、
前記命令復号化ユニットは、レジスタ識別子及びシフトパラメータを含むベクトルシフト命令を復号化するためのものであり、前記レジスタ識別子は、ソースレジスタを示すためのソースレジスタ識別子、及びデスティネーションレジスタを示すためのデスティネーションレジスタ識別子を含み、
前記シフトパラメータはシフト量及びオペコードを含み、前記シフト量は、前記ベクトルシフト演算が実行される際に操作されるソース要素のシフトビット数を指示するためのものであり、前記オペコードは、前記ソースレジスタ内のソース要素及びデスティネーションレジスタ内のターゲット要素に対して実行するシフト演算ルールを示すためのものであり、前記オペコードには命令名称、前記ソース要素及び前記ターゲット要素のデータタイプを指示するためのパラメータが含まれ、
前記実行ユニットは、前記シフトパラメータに従い、シフト量及びシフト演算ルールを決定し
、ベクトルシフト操作が実行される
前記ソース要素は少なくとも1つあり、前記
オペコードに従い、前記ソースレジスタの中から、前記ベクトルシフト演算を実行するソース要素を選択して、選択された前記ソース要素をオペランドとして決定し、前記オペコードに従い、前記オペランドに対して対応するシフト演算を実行し、シフト演算結果を生成し、前記シフト演算結果における要素をターゲット要素として決定し、前記オペコードに従い、前記ターゲット要素の前記デスティネーションレジスタへの記憶形態を決定し、前記記憶形態に従い、前記ターゲット要素を前記デスティネーションレジスタに記憶する、ことを特徴とするプロセッサ。
【請求項22】
前記シフト量は即値数であり、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含む、ことを特徴とする請求項
21に記載のプロセッサ。
【請求項23】
前記オペコードは第1のタイプのベクトルオペコードであり、
前記実行ユニットは、前記第1のタイプのベクトルオペコードに従い、第1のソースレジスタ内のすべてのソース要素を1つのオペランドとして決定するとともに、第2のソースレジスタ内のすべてのソース要素をオペランドとして決定し、
前記第1のタイプのベクトルオペコードに従い、前記第1のソースレジスタ内のオペランドと前記第2のソースレジスタ内のオペランドをスプライスした後、第1のスプライスベクトルを生成し、
前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第1の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第1の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、及び前記第1の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含む、ことを特徴とする請求項
22に記載のプロセッサ。
【請求項24】
前記第1のタイプのベクトルオペコードは第1のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項
23に記載のプロセッサ。
【請求項25】
前記第1のタイプのベクトルオペコードは第2のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項
23に記載のプロセッサ。
【請求項26】
前記第1のタイプのベクトルオペコードは第3のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項
23に記載のプロセッサ。
【請求項27】
前記第1のタイプのベクトルオペコードは第4のベクトルオペコードであり、
前記実行ユニットは、前記即値数に従い、前記第1のスプライスベクトルにおける各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第1の初期シフト演算結果を生成し、
前記第1の初期シフト演算結果に含まれている各要素の中の連続する下位半分のデータをそれぞれ選択し、選択操作後の前記要素をシフト演算結果として決定する、ことを特徴とする請求項
23に記載のプロセッサ。
【請求項28】
前記オペコードは第2のタイプのベクトルオペコードであり、
前記実行ユニットは、前記第2のタイプのベクトルオペコードに従い、第1のソースレジスタと第2のソースレジスタにおいてそれぞれ選択操作を実行して、第1のオペランドと第2のオペランドを得、ここで、前記選択操作は、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタと前記第2のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記実行ユニットはまた、
前記第1のソースレジスタのうち前記第1のオペランド以外のデータを第3のオペランドとして決定し、前記第2のソースレジスタのうち前記第2のオペランド以外のデータを第4のオペランドとして決定し、
前記第1のオペランドと前記第2のオペランドをスプライスした後、第2のスプライスベクトルを生成し、第3のオペランドと第4のオペランドをスプライスした後、第3のスプライスベクトルを生成し、ここで、前記第2のスプライスベクトルと前記第3のスプライスベクトルに含まれているソース要素のデータタイプは、ハーフワード、ワード、ダブルワード、クワッドワードのいずれかであり、
前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第2の初期シフト演算結果を生成するとともに、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、シフトして丸めて半値幅に飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に対してビット選択操作を実行し、第1のシフト演算結果を生成し、前記第3の初期シフト演算結果に対してビット選択操作を実行し、第2のシフト演算結果を生成し、ここで、前記実行ビット選択操作は、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続する下位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続する上位半分のデータを選択する操作、前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について中間の連続する指定ビットのデータを選択する操作、及び前記第2の初期シフト演算結果に含まれている各要素と前記第3の初期シフト演算結果に含まれている各要素について連続していない指定ビットのデータを選択する操作、のうちのいずれか1つを含み、
前記第1のシフト演算結果のビット選択操作位置に応じて、前記第1のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込み、
前記第2のシフト演算結果のビット選択操作位置に応じて、前記第2のシフト演算結果を前記デスティネーションレジスタ内の対応する記憶位置に書き込む、ことを特徴とする請求項
22に記載のプロセッサ。
【請求項29】
前記第2のタイプのベクトルオペコードは第5のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項
28に記載のプロセッサ。
【請求項30】
前記第2のタイプのベクトルオペコードは第6のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第2の初期シフト演算結果を生成し、前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項
28に記載のプロセッサ。
【請求項31】
前記第2のタイプのベクトルオペコードは第7のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項
28に記載のプロセッサ。
【請求項32】
前記第2のタイプのベクトルオペコードは第8のベクトルオペコードであり、前記第1のオペランドは前記第1のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第2のオペランドは前記第2のソースレジスタの各要素の連続する下位半分からなるデータであり、前記第3のオペランドは第1のソースレジスタの各要素の連続する上位半分からなるデータであり、前記第4のオペランドは第2のソースレジスタの各要素の連続する上位半分からなるデータであり、
前記実行ユニットは、前記即値数に従い、前記第2のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第2の初期シフト演算結果を生成し、
前記即値数に従い、前記第3のスプライスベクトル内のそれぞれのソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第3の初期シフト演算結果を生成し、
前記第2の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択された前記データを第1のシフト演算結果として決定するとともに、前記第3の初期シフト演算結果に含まれている各要素の連続する上位半分のデータをそれぞれ選択し、選択された前記データを第2のシフト演算結果として決定し、ここで、前記第1のシフト演算結果に含まれているデータに応じて少なくとも1つの第1のターゲット要素を決定し、前記第2のシフト演算結果に含まれているデータに応じて少なくとも1つの第2のターゲット要素を決定するようにしており、
前記第1のシフト演算結果に含まれている各第1のターゲット要素を、前記デスティネーションレジスタの各第1のターゲット要素が配置されている位置の下位半分にそれぞれ書き込み、
前記第2のシフト演算結果に含まれている各第2のターゲット要素を、前記デスティネーションレジスタの各第2のターゲット要素が配置されている位置の上位半分にそれぞれ書き込む、ことを特徴とする請求項
28に記載のプロセッサ。
【請求項33】
前記命令は、シフト量を記憶するレジスタであるシフト量レジスタを示すためのシフト量レジスタ識別子をさらに含む、ことを特徴とする請求項
21に記載のプロセッサ。
【請求項34】
前記オペコードは第3のタイプのベクトルオペコードであり、前記ソースレジスタは第1のソースレジスタを含み、
前記実行ユニットは、前記第3のタイプのベクトルオペコードに従い、前記第1のソースレジスタにおいて選択操作を実行し、第5のオペランドを得、ここで、前記選択操作は、前記第1のソースレジスタの各要素に対して連続する下位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して連続する上位半分のデータを選択する操作、前記第1のソースレジスタの各要素に対して中間の連続する指定ビットのデータを選択する操作、及び前記第1のソースレジスタの各要素に対して連続していない指定ビットのデータを選択する操作、のいずれか1つを含み、
前記第3のタイプのベクトルオペコードと前記シフト量に従い、前記第5のオペランドに対して、シフトして丸めて半値幅に飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に対してビット選択操作を実行し、シフト演算結果を生成し、ここで、前記ビット選択操作は、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する下位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその連続する上位半分のデータをそれぞれ選択する操作、前記第4の初期シフト演算結果に含まれている各要素に対してその中間の連続する指定ビットのデータをそれぞれ選択する操作、及び前記第4の初期シフト演算結果に含まれている各要素に対してその連続していない指定ビットのデータをそれぞれ選択する操作、のうちのいずれか1つを含み、
前記シフト演算結果におけるデータを、前記デスティネーションレジスタ内の対応する位置に順次書き込み、
前記第3のタイプのベクトルオペコードに従い、前記デスティネーションレジスタ内の前記データが書き込まれていない位置の値を設定する、ことを特徴とする請求項
33に記載のプロセッサ。
【請求項35】
前記第3のタイプのベクトルオペコードは第9のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各ソース要素に対して、右論理シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各ソース要素の連続する下位半分の要素をそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項
34に記載のプロセッサ。
【請求項36】
前記第3のタイプのベクトルオペコードは第10のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各ソース要素に対して、右算術シフトして丸めて半値幅に符号付き飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項
34に記載のプロセッサ。
【請求項37】
前記第3のタイプのベクトルオペコードは第11のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各ソース要素に対して、右論理シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項
34に記載のプロセッサ。
【請求項38】
前記第3のタイプのベクトルオペコードは第12のベクトルオペコードであり、前記第5のオペランドは前記第1のソースレジスタの連続する任意のソース要素であり、
前記実行ユニットは、前記シフト量に応じて、前記第5のオペランドに含まれている各ソース要素に対して、右算術シフトして丸めて半値幅に符号なし飽和する操作を行い、第4の初期シフト演算結果を生成し、
前記第4の初期シフト演算結果に含まれている各要素の連続する下位半分のデータをそれぞれ選択し、選択操作後の要素をシフト演算結果として決定し、
プリセット値に従ってデスティネーションレジスタ内の記憶位置を分割し、各ターゲット要素の記憶エリアを決定し、
前記シフト演算結果におけるデータを、各記憶エリアの下位半分に順次書き込み、
各記憶エリアの前記データが書き込まれていない位置の値をそれぞれゼロに設定する、ことを特徴とする請求項
34に記載のプロセッサ。
【請求項39】
前記ソースレジスタ数は1つ又は複数あり、前記デスティネーションレジスタ数は1つあり、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と同じ又は異なるものである、ことを特徴とする請求項
21、34~38のいずれか1項に記載のプロセッサ。
【請求項40】
前記ソースレジスタ数が複数あり、前記デスティネーションレジスタ数は1つあり、
すべての前記ソースレジスタ内のそれぞれのソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なるか、または、すべての前記ソースレジスタの中には、前記デスティネーションレジスタ識別子と同じソースレジスタ識別子が1つ存在している、ことを特徴とする請求項
21~33のいずれか1項に記載のプロセッサ。
【請求項41】
メモリ、及び1つ以上のプロセッサを含む電子機器であって、1つ以上のプログラムは、前記メモリに記憶されており、且つ請求項1~
18のいずれか1項に記載のベクトルシフト方法を前記1つ以上のプロセッサにより実行するように構成されている、ことを特徴とする電子機器。
【国際調査報告】