JPH0721034A - 文字列複写処理方法 - Google Patents
文字列複写処理方法Info
- Publication number
- JPH0721034A JPH0721034A JP5157221A JP15722193A JPH0721034A JP H0721034 A JPH0721034 A JP H0721034A JP 5157221 A JP5157221 A JP 5157221A JP 15722193 A JP15722193 A JP 15722193A JP H0721034 A JPH0721034 A JP H0721034A
- Authority
- JP
- Japan
- Prior art keywords
- character string
- byte
- copy
- instruction
- register
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Document Processing Apparatus (AREA)
Abstract
(57)【要約】
【目的】RISCアーキテクチャ等の計算機における文
字列複写処理方法に関し,高速な文字列複写を実現する
ことを目的とする。 【構成】複写元文字列がK(例えばK=8)バイト境界
になるまでの端数処理(S1)を行い,その後に,Kバイト
単位のロード(S2),複写先のバイト境界に応じたデータ
の生成(S3),Kバイト単位のストア(S4)を繰り返し(S
5),最後に未複写文字列が残っていればそれを複写する
(S6)。
字列複写処理方法に関し,高速な文字列複写を実現する
ことを目的とする。 【構成】複写元文字列がK(例えばK=8)バイト境界
になるまでの端数処理(S1)を行い,その後に,Kバイト
単位のロード(S2),複写先のバイト境界に応じたデータ
の生成(S3),Kバイト単位のストア(S4)を繰り返し(S
5),最後に未複写文字列が残っていればそれを複写する
(S6)。
Description
【0001】
【産業上の利用分野】本発明は,いわゆる縮小命令セッ
ト計算機(RISC:Reduced InstructionSet Compute
r)上での文字列を,高速に複写できるようにした文字
列複写処理方法に関する。
ト計算機(RISC:Reduced InstructionSet Compute
r)上での文字列を,高速に複写できるようにした文字
列複写処理方法に関する。
【0002】本発明は,例えばRISC上のC言語やF
ORTRAN等のプログラミング言語のコンパイラ,お
よびそのコンパイラが生成する目的プログラムにリンカ
により結合されるライブラリに利用することができる。
すなわち,プログラミング言語で記述されたプログラム
中の文字列複写機能を,コンパイラの生成する目的プロ
グラムまたはライブラリ(サブルーチン)で実現する場
合に使用できる。
ORTRAN等のプログラミング言語のコンパイラ,お
よびそのコンパイラが生成する目的プログラムにリンカ
により結合されるライブラリに利用することができる。
すなわち,プログラミング言語で記述されたプログラム
中の文字列複写機能を,コンパイラの生成する目的プロ
グラムまたはライブラリ(サブルーチン)で実現する場
合に使用できる。
【0003】
【従来の技術】従来の複合命令セット計算機(CIS
C:Complex Instruction Set Computer)においては,
“文字列複写命令”が存在し,この複合機能命令を1個
使用するだけで,比較的長い文字列の複写を簡単に行う
ことができる。このCISCの命令セットにおいては,
複雑な命令セットのうち,実際に頻繁に使用される命
令はごくわずかしかない,複合(高)機能の命令は,
利用者の要求する機能に完全に一致することが少ないた
めに,使用される頻度が少ない,命令セットを複雑に
すれば,論理回路が複雑になり,命令の解釈実行に時間
がかかるようになる,等の問題があり,それを解決する
ためにRISCアーキテクチャが考えられた。
C:Complex Instruction Set Computer)においては,
“文字列複写命令”が存在し,この複合機能命令を1個
使用するだけで,比較的長い文字列の複写を簡単に行う
ことができる。このCISCの命令セットにおいては,
複雑な命令セットのうち,実際に頻繁に使用される命
令はごくわずかしかない,複合(高)機能の命令は,
利用者の要求する機能に完全に一致することが少ないた
めに,使用される頻度が少ない,命令セットを複雑に
すれば,論理回路が複雑になり,命令の解釈実行に時間
がかかるようになる,等の問題があり,それを解決する
ためにRISCアーキテクチャが考えられた。
【0004】RISCは,CISCに対して命令セット
を簡単にし,コンパイラの出力する目的プログラムの実
行を高速にすることを目的として作られたコンピュータ
である。RISCアーキテクチャの特徴は次のとおりで
ある。
を簡単にし,コンパイラの出力する目的プログラムの実
行を高速にすることを目的として作られたコンピュータ
である。RISCアーキテクチャの特徴は次のとおりで
ある。
【0005】 1命令は1サイクルで実行される。 メモリへの読み書きは,ロード/ストア命令を使用
し,その他の命令はレジスタを使用する。
し,その他の命令はレジスタを使用する。
【0006】 命令数とアドレス指定方法を少なく
し,命令の解釈実行に要する時間を縮小する。 命令形式を固定化し,命令の読み出しと解釈実行を
単一化する。
し,命令の解釈実行に要する時間を縮小する。 命令形式を固定化し,命令の読み出しと解釈実行を
単一化する。
【0007】 パイプライン処理の最適化等の命令に
依存する最適化は,すべてコンパイラで行う。 ところで,計算機により実行するプログラムでは,メモ
リ上の比較的長い文字列を,メモリ上の他の領域に複写
することがしばしば必要になる。従来のCISC上のコ
ンパイラとライブラリにおいては,文字列複写命令を使
用して文字列転送機能を実現できた。しかし,RISC
では,文字列複写命令がないために,従来,1バイト単
位のロード命令とストア命令を繰り返し使用して,文字
列を複写するようにしていた。
依存する最適化は,すべてコンパイラで行う。 ところで,計算機により実行するプログラムでは,メモ
リ上の比較的長い文字列を,メモリ上の他の領域に複写
することがしばしば必要になる。従来のCISC上のコ
ンパイラとライブラリにおいては,文字列複写命令を使
用して文字列転送機能を実現できた。しかし,RISC
では,文字列複写命令がないために,従来,1バイト単
位のロード命令とストア命令を繰り返し使用して,文字
列を複写するようにしていた。
【0008】
【発明が解決しようとする課題】従来,RISC上で文
字列複写機能を実現する場合には,1バイト単位のロー
ド命令とストア命令を,複写する文字列の長さ分だけ繰
り返し実行する方法が採られていたため,文字列複写の
処理時間が長くかかるという問題があった。
字列複写機能を実現する場合には,1バイト単位のロー
ド命令とストア命令を,複写する文字列の長さ分だけ繰
り返し実行する方法が採られていたため,文字列複写の
処理時間が長くかかるという問題があった。
【0009】本発明は上記問題点の解決を図り,1命令
で任意長の文字列複写命令を持たない計算機において,
高速に文字列を複写できるようにすることを目的とす
る。
で任意長の文字列複写命令を持たない計算機において,
高速に文字列を複写できるようにすることを目的とす
る。
【0010】
【課題を解決するための手段】図1は本発明の原理説明
図である。図中の10は複写する文字列が格納されてい
るメモリ上の複写元領域,11は複写する文字列の転送
先であるメモリ上の複写先領域,12,13は命令によ
ってメモリ上のデータをロード/ストアするレジスタを
表す。
図である。図中の10は複写する文字列が格納されてい
るメモリ上の複写元領域,11は複写する文字列の転送
先であるメモリ上の複写先領域,12,13は命令によ
ってメモリ上のデータをロード/ストアするレジスタを
表す。
【0011】本発明は,Kバイト境界(ただし,K≧
2)にあるデータをKバイト単位でレジスタにロードす
る命令およびKバイト単位でKバイト境界のメモリにス
トアする命令を持ち,Lバイト(ただし,L>K)の文
字列を複写する文字列複写命令を持たない命令セットを
備えた計算機システムにおける文字列複写に用いられ
る。
2)にあるデータをKバイト単位でレジスタにロードす
る命令およびKバイト単位でKバイト境界のメモリにス
トアする命令を持ち,Lバイト(ただし,L>K)の文
字列を複写する文字列複写命令を持たない命令セットを
備えた計算機システムにおける文字列複写に用いられ
る。
【0012】ステップS1では,まず複写元領域10に
ある複写元文字列がKバイト境界になるまで,Kバイト
境界の制限のない命令で文字列の複写を行う。次のステ
ップS2では,Kバイト境界の複写元文字列をKバイト
単位でレジスタ12にロードする。
ある複写元文字列がKバイト境界になるまで,Kバイト
境界の制限のない命令で文字列の複写を行う。次のステ
ップS2では,Kバイト境界の複写元文字列をKバイト
単位でレジスタ12にロードする。
【0013】ステップS3では,Kバイト単位でレジス
タ12にロードしたデータを操作し,複写先領域11に
おけるKバイト境界の領域に対応したKバイト単位のデ
ータをレジスタ13上で生成する。
タ12にロードしたデータを操作し,複写先領域11に
おけるKバイト境界の領域に対応したKバイト単位のデ
ータをレジスタ13上で生成する。
【0014】ステップS4では,生成したKバイト単位
のデータを複写先領域11にストアする。以上のステッ
プS2〜S4を複写元文字列におけるKバイト単位の文
字列が終了するまで繰り返す(ステップS5)。
のデータを複写先領域11にストアする。以上のステッ
プS2〜S4を複写元文字列におけるKバイト単位の文
字列が終了するまで繰り返す(ステップS5)。
【0015】最後に,ステップS6では,Kバイト未満
の未複写文字列が残っている場合に,Kバイト境界の制
限のない命令で残りの文字列を,複写先領域11に複写
する。上記のステップS1およびステップS6は,Kバ
イト境界の端数処理が不要である場合には,それぞれ省
略可能である。
の未複写文字列が残っている場合に,Kバイト境界の制
限のない命令で残りの文字列を,複写先領域11に複写
する。上記のステップS1およびステップS6は,Kバ
イト境界の端数処理が不要である場合には,それぞれ省
略可能である。
【0016】請求項2記載の発明では,さらにステップ
S2〜ステップS5を,複写先領域11格納場所のKバ
イト境界からのずれに応じて別々にあらかじめ用意され
た命令群を実行することによって処理する。
S2〜ステップS5を,複写先領域11格納場所のKバ
イト境界からのずれに応じて別々にあらかじめ用意され
た命令群を実行することによって処理する。
【0017】請求項3記載の発明では,上記ステップS
1〜S6を実行するプログラムをライブラリ化し,コン
パイラの出力する目的プログラムの結合編集時に,実行
形式のプログラム本体に組み込むようにする。
1〜S6を実行するプログラムをライブラリ化し,コン
パイラの出力する目的プログラムの結合編集時に,実行
形式のプログラム本体に組み込むようにする。
【0018】
【作用】本発明では,例えば4バイト長,8バイト長ま
たは16バイト長のレジスタ,またはレジスタの集まり
を単位として,複写元のデータをロードし,その単位で
複写先へデータをストアする。Kバイト単位にロード/
ストアすることにより,1バイト単位にデータをロード
/ストアする場合に比較して,K倍の性能を実現でき
る。以下の説明では,K=8であるとして説明する。
たは16バイト長のレジスタ,またはレジスタの集まり
を単位として,複写元のデータをロードし,その単位で
複写先へデータをストアする。Kバイト単位にロード/
ストアすることにより,1バイト単位にデータをロード
/ストアする場合に比較して,K倍の性能を実現でき
る。以下の説明では,K=8であるとして説明する。
【0019】図1に示すように,複写元領域10のアド
レスが8n−jで,複写先領域11のアドレスが8m+
i−j(ただし,n,mは整数,i,jは1から7まで
の整数)であるとする。
レスが8n−jで,複写先領域11のアドレスが8m+
i−j(ただし,n,mは整数,i,jは1から7まで
の整数)であるとする。
【0020】本発明による処理の基本的な考え方は以下
のとおりである。 複写元と複写先がともに8バイト境界の場合には,
8バイト単位のロード/ストアを繰り返す。
のとおりである。 複写元と複写先がともに8バイト境界の場合には,
8バイト単位のロード/ストアを繰り返す。
【0021】 複写元が8バイト境界(8n)であ
り,複写先が8m+i(i=1〜7)である場合には,
複写元の8バイト境界のデータをレジスタにロードし,
そのデータと前のループでロード済みのiバイトをマー
ジして,複写先の8バイト境界(8m)の8バイトデー
タをレジスタ上で作成し,ストアする。
り,複写先が8m+i(i=1〜7)である場合には,
複写元の8バイト境界のデータをレジスタにロードし,
そのデータと前のループでロード済みのiバイトをマー
ジして,複写先の8バイト境界(8m)の8バイトデー
タをレジスタ上で作成し,ストアする。
【0022】そのため,具体的には次のように処理す
る。ステップS1では,複写元領域10が8nバイトの
境界になるまで,1バイトごとに単純複写する。すなわ
ち,文字列“VWXYZ”を1バイトずつ複写する。
る。ステップS1では,複写元領域10が8nバイトの
境界になるまで,1バイトごとに単純複写する。すなわ
ち,文字列“VWXYZ”を1バイトずつ複写する。
【0023】次に,ステップS2では,複写元の8バイ
ト境界(8n)から,8バイトのデータをレジスタ12
にロードする。このデータを転送すべき複写先領域11
の格納場所は8m+iであり,iが0でない場合には8
バイト境界ではない。
ト境界(8n)から,8バイトのデータをレジスタ12
にロードする。このデータを転送すべき複写先領域11
の格納場所は8m+iであり,iが0でない場合には8
バイト境界ではない。
【0024】そこでステップS3では,前に処理したi
バイトを先頭に付加したデータを,レジスタ13上で作
成する。そして,ステップS4により,レジスタ13上
のデータ(文字列“YZABCDEF”)を,複写先領
域11の8mのアドレスにストアする。
バイトを先頭に付加したデータを,レジスタ13上で作
成する。そして,ステップS4により,レジスタ13上
のデータ(文字列“YZABCDEF”)を,複写先領
域11の8mのアドレスにストアする。
【0025】同様に処理を繰り返し,次のステップS2
では,文字列“IJKLMNOP”をレジスタ12にロ
ードし,ステップS3により,このデータをシフトする
とともに,先頭に前のデータの文字列“GH”を付加
し,ステップS4によって,複写先領域11の8m+8
のアドレスにストアする。
では,文字列“IJKLMNOP”をレジスタ12にロ
ードし,ステップS3により,このデータをシフトする
とともに,先頭に前のデータの文字列“GH”を付加
し,ステップS4によって,複写先領域11の8m+8
のアドレスにストアする。
【0026】以下,ステップS2〜S4を繰り返して,
ステップS5により終了の判定を行い,複写元領域10
に未転送の8バイト単位の文字列がなくなった場合に
は,ステップS6によって,残りの未複写文字列“QR
STU”を1バイト単位で単純複写し,文字列複写処理
を終了する。
ステップS5により終了の判定を行い,複写元領域10
に未転送の8バイト単位の文字列がなくなった場合に
は,ステップS6によって,残りの未複写文字列“QR
STU”を1バイト単位で単純複写し,文字列複写処理
を終了する。
【0027】以上のように処理することにより,8バイ
ト境界にない文字列であっても,先頭部分と最終部分を
除き,8バイト単位での複写が可能になり,文字列複写
処理の高速化が可能になる。
ト境界にない文字列であっても,先頭部分と最終部分を
除き,8バイト単位での複写が可能になり,文字列複写
処理の高速化が可能になる。
【0028】特に,複写先領域11の格納場所の8バイ
ト境界からのずれ(iの値)に応じて,あらかじめ8バ
イト単位転送のループ(ステップS2〜S5)の命令群
を個別に用意しておくことにより,最適な実行命令によ
る処理が実現される。
ト境界からのずれ(iの値)に応じて,あらかじめ8バ
イト単位転送のループ(ステップS2〜S5)の命令群
を個別に用意しておくことにより,最適な実行命令によ
る処理が実現される。
【0029】また,これらの文字列複写処理方法を,サ
ブルーチンまたは関数化したプログラムにより実現し,
そのプログラムをライブラリ化することによって,応用
プログラム等に意識させることなく,プログラムの高速
化を図ることができる。
ブルーチンまたは関数化したプログラムにより実現し,
そのプログラムをライブラリ化することによって,応用
プログラム等に意識させることなく,プログラムの高速
化を図ることができる。
【0030】
【実施例】図2は,本発明の適用システムの例を示す。
図2において,20はC言語やFORTRAN等のプロ
グラミング言語で記述された原始プログラム,21は原
始プログラム20を翻訳するコンパイラ,22は原始プ
ログラム20を翻訳した結果の目的プログラム,23は
目的プログラム22を実行可能な形式に結合編集するリ
ンカ,24は目的プログラム22に結合されるプログラ
ムが格納されたライブラリ,25は文字列複写関数,2
6は目的プログラム22を実行可能な形式に編集した結
果の実行形式プログラム,27はメモリ,28は命令実
行機能を持つ中央処理装置(CPU),29は命令によ
り操作対象データが格納されるレジスタ,30はメモリ
27上にローディングされた実行形式プログラム,31
は複写元文字列,32は複写先文字列を表す。
図2において,20はC言語やFORTRAN等のプロ
グラミング言語で記述された原始プログラム,21は原
始プログラム20を翻訳するコンパイラ,22は原始プ
ログラム20を翻訳した結果の目的プログラム,23は
目的プログラム22を実行可能な形式に結合編集するリ
ンカ,24は目的プログラム22に結合されるプログラ
ムが格納されたライブラリ,25は文字列複写関数,2
6は目的プログラム22を実行可能な形式に編集した結
果の実行形式プログラム,27はメモリ,28は命令実
行機能を持つ中央処理装置(CPU),29は命令によ
り操作対象データが格納されるレジスタ,30はメモリ
27上にローディングされた実行形式プログラム,31
は複写元文字列,32は複写先文字列を表す。
【0031】CPU28は,RISCの代表的チップで
あるSPARC(米国Sun Microsystems社商標)マイク
ロプロセッサであり,8バイト長のデータのロード/ス
トアを行うためには,そのデータが8バイト境界に合っ
ていなければならないという制限がある。レジスタ29
は,1個が4バイト長であり,偶数番目の偶数レジスタ
と奇数番目の奇数レジスタとを組み合わせて8バイト長
として用いることができるようになっている。以下の実
施例の説明では,偶数レジスタをre0,re1,…,
奇数レジスタをro0,ro1,…と表す。
あるSPARC(米国Sun Microsystems社商標)マイク
ロプロセッサであり,8バイト長のデータのロード/ス
トアを行うためには,そのデータが8バイト境界に合っ
ていなければならないという制限がある。レジスタ29
は,1個が4バイト長であり,偶数番目の偶数レジスタ
と奇数番目の奇数レジスタとを組み合わせて8バイト長
として用いることができるようになっている。以下の実
施例の説明では,偶数レジスタをre0,re1,…,
奇数レジスタをro0,ro1,…と表す。
【0032】プログラム中で長い文字列を複写する場
合,原始プログラム20に文字列複写関数25を呼び出
す命令文を記述する。その原始プログラム20をコンパ
イラ21によりコンパイルし,その結果の目的プログラ
ム22とライブラリ24との結合編集を,リンカ23に
よって行う。これにより,文字列複写関数25の命令群
が組み込まれた実行形式プログラム26が生成される。
合,原始プログラム20に文字列複写関数25を呼び出
す命令文を記述する。その原始プログラム20をコンパ
イラ21によりコンパイルし,その結果の目的プログラ
ム22とライブラリ24との結合編集を,リンカ23に
よって行う。これにより,文字列複写関数25の命令群
が組み込まれた実行形式プログラム26が生成される。
【0033】実行形式プログラム26がメモリ27へロ
ーディングされ,そのローディングされた実行形式プロ
グラム30における文字列複写関数25が呼び出される
と,文字列複写関数25は,レジスタ29を用いて,複
写元文字列31を複写先文字列32に複写する。この文
字列複写関数25によって本発明が実施される。
ーディングされ,そのローディングされた実行形式プロ
グラム30における文字列複写関数25が呼び出される
と,文字列複写関数25は,レジスタ29を用いて,複
写元文字列31を複写先文字列32に複写する。この文
字列複写関数25によって本発明が実施される。
【0034】図3は本発明の実施例のフローチャート,
図4は本発明の実施例の動作例説明図である。以下,図
3に示す処理(a) 〜(k) に従って説明する。ここで,図
4(A)に示すように,1個のレジスタは4バイト長で
あり,偶数レジスタと奇数レジスタのペアにより,8バ
イト単位のロード/ストアが可能になっているとする。
図4は本発明の実施例の動作例説明図である。以下,図
3に示す処理(a) 〜(k) に従って説明する。ここで,図
4(A)に示すように,1個のレジスタは4バイト長で
あり,偶数レジスタと奇数レジスタのペアにより,8バ
イト単位のロード/ストアが可能になっているとする。
【0035】(a) 複写元文字列が8バイト境界になるま
で,1バイト複写を行う。複写元の8nのバイト境界に
対応して,複写先の境界は8m+iとなる。iは0,
1,2,3,4,5,6,7のいずれかである。このi
の値に応じて,8バイト単位のデータ転送を行う。ここ
では,i=1のときの例を説明する。以下のループ処理
のために,奇数レジスタro2に,転送時のiバイトの
データを残しておく。
で,1バイト複写を行う。複写元の8nのバイト境界に
対応して,複写先の境界は8m+iとなる。iは0,
1,2,3,4,5,6,7のいずれかである。このi
の値に応じて,8バイト単位のデータ転送を行う。ここ
では,i=1のときの例を説明する。以下のループ処理
のために,奇数レジスタro2に,転送時のiバイトの
データを残しておく。
【0036】(b) まず,複写元の8バイトデータを偶数
レジスタre0と奇数レジスタro0のペアにロードす
る(図4の,)。 (c) 偶数レジスタre0を右にiバイトシフトし,別の
偶数レジスタre1に入れる(図4の)。
レジスタre0と奇数レジスタro0のペアにロードす
る(図4の,)。 (c) 偶数レジスタre0を右にiバイトシフトし,別の
偶数レジスタre1に入れる(図4の)。
【0037】(d) 奇数レジスタro0を右にiバイトシ
フトし,別の奇数レジスタro1に入れる(図4の
)。 (e) 元の偶数レジスタre0を(4−i)バイト左にシ
フトする。これを偶数レジスタre2に入れる(図4の
)。
フトし,別の奇数レジスタro1に入れる(図4の
)。 (e) 元の偶数レジスタre0を(4−i)バイト左にシ
フトする。これを偶数レジスタre2に入れる(図4の
)。
【0038】(f) 直前で左にシフトして記憶している偶
数レジスタre2のデータと,奇数レジスタro1の論
理和(or)をとり,奇数レジスタro1に入れる(図
4の)。
数レジスタre2のデータと,奇数レジスタro1の論
理和(or)をとり,奇数レジスタro1に入れる(図
4の)。
【0039】(g) 前のループで左にシフトして記憶して
いるデータ(図4の’)と,偶数レジスタre1との
論理和(or)をとり,偶数レジスタre1に入れる
(図4の)。
いるデータ(図4の’)と,偶数レジスタre1との
論理和(or)をとり,偶数レジスタre1に入れる
(図4の)。
【0040】(h) できあがった偶数レジスタre1と奇
数レジスタro1のペアを複写先へ8バイトストアす
る。 (i) 元の奇数レジスタro0を(4−i)バイト左にシ
フトし,次のループで使用するために奇数レジスタro
2に入れる(図4の)。
数レジスタro1のペアを複写先へ8バイトストアす
る。 (i) 元の奇数レジスタro0を(4−i)バイト左にシ
フトし,次のループで使用するために奇数レジスタro
2に入れる(図4の)。
【0041】(j) 複写元の8バイト単位の文字列は終わ
りかを判定し,終わりでなければ処理(b) へ戻って,次
の8バイトについて同様に処理を繰り返す。 (k) 8バイト単位の文字列が終わったならば,8バイト
単位の末尾の端数のデータを1バイト単位で複写し,処
理を終了する。
りかを判定し,終わりでなければ処理(b) へ戻って,次
の8バイトについて同様に処理を繰り返す。 (k) 8バイト単位の文字列が終わったならば,8バイト
単位の末尾の端数のデータを1バイト単位で複写し,処
理を終了する。
【0042】図3に示す処理(b) 〜処理(j) のループ
は,複写先における8m+iバイト境界のiの値によっ
て異なる。図5は,iの値に応じた転送ループの処理命
令列を示している。図5において,lddは8バイトの
データを偶数レジスタと奇数レジスタのペアにロードす
ることを指示するロード命令,srlはレジスタのデー
タを右へシフトすることを指示する右シフト命令,sl
lはレジスタのデータを左へシフトすることを指示する
左シフト命令,orは2つのレジスタのデータの論理和
を計算する論理和命令,stdは偶数レジスタと奇数レ
ジスタのペアに設定されている8バイトのデータをスト
アすることを指示する命令,addは加算命令,bは分
岐命令,movはレジスタのデータを他のレジスタに移
すことを指示する命令である。
は,複写先における8m+iバイト境界のiの値によっ
て異なる。図5は,iの値に応じた転送ループの処理命
令列を示している。図5において,lddは8バイトの
データを偶数レジスタと奇数レジスタのペアにロードす
ることを指示するロード命令,srlはレジスタのデー
タを右へシフトすることを指示する右シフト命令,sl
lはレジスタのデータを左へシフトすることを指示する
左シフト命令,orは2つのレジスタのデータの論理和
を計算する論理和命令,stdは偶数レジスタと奇数レ
ジスタのペアに設定されている8バイトのデータをスト
アすることを指示する命令,addは加算命令,bは分
岐命令,movはレジスタのデータを他のレジスタに移
すことを指示する命令である。
【0043】転送先が8m+i(i=1,2,3)の境
界の場合には,図5(A)に示すような命令列により,
8バイト単位のデータ転送を行う。この命令列は,図3
のフローチャートで説明した処理を実行する命令列であ
る。add命令は,転送元および転送先のアドレスを8
バイト分インクリメントするための命令である。
界の場合には,図5(A)に示すような命令列により,
8バイト単位のデータ転送を行う。この命令列は,図3
のフローチャートで説明した処理を実行する命令列であ
る。add命令は,転送元および転送先のアドレスを8
バイト分インクリメントするための命令である。
【0044】転送先が8m+i(i=5,6,7)の境
界の場合には,図5(B)に示すような命令列により,
8バイト単位のデータ転送を行う。ここで,temp−
r1,temp−r2は一時的に使用する作業用レジス
タを表す。処理の考え方は図3のフローチャートで説明
した処理と同様である。複写先の8バイト境界に合わせ
るためのデータの操作が,図5(A)の例と異なる。
界の場合には,図5(B)に示すような命令列により,
8バイト単位のデータ転送を行う。ここで,temp−
r1,temp−r2は一時的に使用する作業用レジス
タを表す。処理の考え方は図3のフローチャートで説明
した処理と同様である。複写先の8バイト境界に合わせ
るためのデータの操作が,図5(A)の例と異なる。
【0045】転送先が8m+4の境界の場合には,図5
(C)に示すような命令列により,8バイト単位のデー
タ転送を行う。レジスタのデータ長が4バイトであるた
め,シフトは不要となる。レジスタ間のデータ移動命令
(mov)により,各ループ毎に4バイトずつデータを
ずらして8バイト単位の複写データを作成する。
(C)に示すような命令列により,8バイト単位のデー
タ転送を行う。レジスタのデータ長が4バイトであるた
め,シフトは不要となる。レジスタ間のデータ移動命令
(mov)により,各ループ毎に4バイトずつデータを
ずらして8バイト単位の複写データを作成する。
【0046】転送先が8m,すなわち8バイト境界であ
る場合には,8バイト単位のロード命令と8バイト単位
のストア命令の組合せだけで,文字列を転送することが
できる。本実施例では,分岐命令の数を少なくするため
に,128バイト転送,256バイト転送,512バイ
ト転送,1024バイト転送の4種類のブロック転送を
行うldd/std命令の単純並びによる内部関数を用
意し,転送文字列の長さと端数部分を考慮して,これら
の関数を呼び分けるようにしている。図5(D)は,5
12バイト転送関数の例を示しており,8バイトのロー
ド(ldd)命令とストア(std)命令とを,64回
繰り返している。1024バイト転送の内部関数では,
これらを128回繰り返す。このようなブロック転送の
関数を用意することにより,ループのための分岐命令を
削減することができ,処理の高速化を図ることができ
る。
る場合には,8バイト単位のロード命令と8バイト単位
のストア命令の組合せだけで,文字列を転送することが
できる。本実施例では,分岐命令の数を少なくするため
に,128バイト転送,256バイト転送,512バイ
ト転送,1024バイト転送の4種類のブロック転送を
行うldd/std命令の単純並びによる内部関数を用
意し,転送文字列の長さと端数部分を考慮して,これら
の関数を呼び分けるようにしている。図5(D)は,5
12バイト転送関数の例を示しており,8バイトのロー
ド(ldd)命令とストア(std)命令とを,64回
繰り返している。1024バイト転送の内部関数では,
これらを128回繰り返す。このようなブロック転送の
関数を用意することにより,ループのための分岐命令を
削減することができ,処理の高速化を図ることができ
る。
【0047】図6は,本発明の効果を説明するための性
能比較説明図である。図5に示す転送ループの処理を,
従来技術による単純なバイト転送によって行う処理の例
と比較する。最初の端数処理により,複写元領域は8n
のバイト境界にあるものとする。
能比較説明図である。図5に示す転送ループの処理を,
従来技術による単純なバイト転送によって行う処理の例
と比較する。最初の端数処理により,複写元領域は8n
のバイト境界にあるものとする。
【0048】従来技術のような単純なバイト転送の場合
の命令列は,図6(A)に示すような命令列となる。こ
こでldubは1バイトロード命令,stbは1バイト
ストア命令である。この場合,転送先が8m+i(i=
0〜7)のどの境界にあっても,命令数は図6(A)に
示すように19命令となる。
の命令列は,図6(A)に示すような命令列となる。こ
こでldubは1バイトロード命令,stbは1バイト
ストア命令である。この場合,転送先が8m+i(i=
0〜7)のどの境界にあっても,命令数は図6(A)に
示すように19命令となる。
【0049】これに対し,本発明の実施例では,転送先
が8m+0(8バイト境界)の場合には,8バイトロー
ド(ldd)命令,8バイトストア(std)命令,転
送元・転送先のそれぞれのアドレス加算(add)命令
および分岐命令の5命令で,8バイト単位の文字列の複
写が可能である。したがって,この場合の性能比は,単
純バイト転送の1.0に対して5/19=0.26にな
る。
が8m+0(8バイト境界)の場合には,8バイトロー
ド(ldd)命令,8バイトストア(std)命令,転
送元・転送先のそれぞれのアドレス加算(add)命令
および分岐命令の5命令で,8バイト単位の文字列の複
写が可能である。したがって,この場合の性能比は,単
純バイト転送の1.0に対して5/19=0.26にな
る。
【0050】また,転送先が8m+i(i=1,2,
3)の場合には,図5(A)に示すような命令列とな
り,命令数は11となる。したがって,この場合の性能
比は,11/19=0.58となる。
3)の場合には,図5(A)に示すような命令列とな
り,命令数は11となる。したがって,この場合の性能
比は,11/19=0.58となる。
【0051】転送先が8m+4の場合には,図5(C)
に示すような命令列となり,命令数は7命令となる。し
たがって,この場合の性能比は,7/11=0.37と
なる。
に示すような命令列となり,命令数は7命令となる。し
たがって,この場合の性能比は,7/11=0.37と
なる。
【0052】転送先が8m+i(i=5,6,7)の場
合には,図5(B)に示すような命令列となり,命令数
は11となる。したがって,この場合の性能比は,11
/19=0.58となる。
合には,図5(B)に示すような命令列となり,命令数
は11となる。したがって,この場合の性能比は,11
/19=0.58となる。
【0053】
【発明の効果】以上説明したように,本発明によれば,
RISCアーキテクチャ等の計算機において,高性能の
文字列複写を実現することができるようになる。
RISCアーキテクチャ等の計算機において,高性能の
文字列複写を実現することができるようになる。
【図1】本発明の原理説明図である。
【図2】本発明の適用システムの例を示す図である。
【図3】本発明の実施例のフローチャートである。
【図4】本発明の実施例の動作例説明図である。
【図5】本発明の実施例における転送ループの処理命令
列を示す図である。
列を示す図である。
【図6】本発明の効果を説明するための性能比較説明図
である。
である。
10 複写元領域 11 複写先領域 12,13 レジスタ S1〜S6 処理ステップ
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.6 識別記号 庁内整理番号 FI 技術表示箇所 G06F 17/24 7315−5L G06F 15/20 554 H
Claims (3)
- 【請求項1】 Kバイト境界(ただし,K≧2)にある
データをKバイト単位でレジスタにロードする命令およ
びKバイト単位でKバイト境界のメモリにストアする命
令を持ち,Lバイト(ただし,L>K)の文字列を複写
する文字列複写命令を持たない命令セットを備えた計算
機システムにおける文字列複写処理方法において,複写
元文字列がKバイト境界になるまで,Kバイト境界の制
限のない命令で文字列の複写を行う第1の処理過程(S1)
と,Kバイト境界の複写元文字列をKバイト単位でレジ
スタにロードする第2の処理過程(S2)と,Kバイト単位
でレジスタにロードしたデータを操作し,複写先領域に
おけるKバイト境界の領域に対応したKバイト単位のデ
ータをレジスタ上で生成する第3の処理過程(S3)と,生
成したKバイト単位のデータを複写先のメモリ領域にス
トアする第4の処理過程(S4)と,前記第2ないし第4の
処理過程を複写元文字列におけるKバイト単位の文字列
が終了するまで繰り返す第5の処理過程(S5)と,Kバイ
ト未満の未複写文字列が残っている場合に,Kバイト境
界の制限のない命令で残りの文字列を複写する第6の処
理過程(S6)とを有することを特徴とする文字列複写処理
方法。 - 【請求項2】 請求項1記載の文字列複写処理方法にお
いて,前記第2の処理過程(S2),第3の処理過程(S3),
第4の処理過程(S4)および第5の処理過程(S5)を,転送
先の領域における格納場所のKバイト境界からのずれに
応じて別々にあらかじめ用意された命令群を実行するこ
とによって処理することを特徴とする文字列複写処理方
法。 - 【請求項3】 文字列を複写するプログラムを実行する
計算機システムにおける文字列複写処理方法において,
請求項1または請求項2記載の文字列複写処理方法を,
目的プログラムの結合編集時に組み込まれるライブラリ
中のプログラムによって行うことを特徴とする文字列複
写処理方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5157221A JPH0721034A (ja) | 1993-06-28 | 1993-06-28 | 文字列複写処理方法 |
US08/214,313 US5410661A (en) | 1993-06-28 | 1994-03-17 | Character string copying method |
KR1019940005679A KR970007761B1 (ko) | 1993-06-28 | 1994-03-22 | 문자열 복사 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5157221A JPH0721034A (ja) | 1993-06-28 | 1993-06-28 | 文字列複写処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH0721034A true JPH0721034A (ja) | 1995-01-24 |
Family
ID=15644875
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP5157221A Pending JPH0721034A (ja) | 1993-06-28 | 1993-06-28 | 文字列複写処理方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US5410661A (ja) |
JP (1) | JPH0721034A (ja) |
KR (1) | KR970007761B1 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009009587A (ja) * | 2001-10-29 | 2009-01-15 | Intel Corp | データを右方向平行シフトマージする方法及び装置 |
JP2012507805A (ja) * | 2008-11-05 | 2012-03-29 | インテル・コーポレーション | シーケンス検出又は命令に関連付けられた情報に基づいた命令の最適化性能 |
US8214626B2 (en) | 2001-10-29 | 2012-07-03 | Intel Corporation | Method and apparatus for shuffling data |
JP2020140290A (ja) * | 2019-02-27 | 2020-09-03 | 株式会社ウーノラボ | 中央演算処理装置 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5611062A (en) * | 1995-03-31 | 1997-03-11 | International Business Machines Corporation | Specialized millicode instruction for string operations |
US5822773A (en) * | 1996-10-17 | 1998-10-13 | Fwb Software Llc | Method and system for accelerating the copying of repetitively copied computer data |
US6399684B1 (en) | 1998-08-26 | 2002-06-04 | E. I. Du Pont De Nemours & Company | Polymer-polyamide blends having a phosphorous containing additive |
US7100029B2 (en) * | 2002-08-28 | 2006-08-29 | Intel Corporation | Performing repeat string operations |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9454367B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Finding the length of a set of character data having a termination character |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9454366B2 (en) * | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4829294A (en) * | 1986-06-25 | 1989-05-09 | Hitachi, Ltd. | Document processing method and system using multiwindow |
CA1323448C (en) * | 1989-02-24 | 1993-10-19 | Terrence C. Miller | Method and apparatus for translucent file system |
US5150312A (en) * | 1989-06-16 | 1992-09-22 | International Business Machines Corporation | Animation processor method and apparatus |
US5230075A (en) * | 1990-06-04 | 1993-07-20 | General Electric Company | Database shadowing system with data tags that select an operation of the save command |
US5274807A (en) * | 1990-11-01 | 1993-12-28 | At&T Bell Laboratories | Method for reducing magnetic storage volume for computer disk image backup |
US5283880A (en) * | 1991-01-02 | 1994-02-01 | Compaq Computer Corp. | Method of fast buffer copying by utilizing a cache memory to accept a page of source buffer contents and then supplying these contents to a target buffer without causing unnecessary wait states |
US5285505A (en) * | 1991-03-11 | 1994-02-08 | International Business Machines Corporation | Method and apparatus for improving prototypes of similar characters in on-line handwriting recognition |
US5276840A (en) * | 1991-03-22 | 1994-01-04 | Acer Incorporated | Disk caching method for writing data from computer memory including a step of writing a plurality of physically adjacent blocks in a single I/O operation |
US5161245A (en) * | 1991-05-01 | 1992-11-03 | Apple Computer, Inc. | Pattern recognition system having inter-pattern spacing correction |
-
1993
- 1993-06-28 JP JP5157221A patent/JPH0721034A/ja active Pending
-
1994
- 1994-03-17 US US08/214,313 patent/US5410661A/en not_active Expired - Fee Related
- 1994-03-22 KR KR1019940005679A patent/KR970007761B1/ko not_active IP Right Cessation
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009009587A (ja) * | 2001-10-29 | 2009-01-15 | Intel Corp | データを右方向平行シフトマージする方法及び装置 |
US8214626B2 (en) | 2001-10-29 | 2012-07-03 | Intel Corporation | Method and apparatus for shuffling data |
US8225075B2 (en) | 2001-10-29 | 2012-07-17 | Intel Corporation | Method and apparatus for shuffling data |
US8688959B2 (en) | 2001-10-29 | 2014-04-01 | Intel Corporation | Method and apparatus for shuffling data |
US9229718B2 (en) | 2001-10-29 | 2016-01-05 | Intel Corporation | Method and apparatus for shuffling data |
US9229719B2 (en) | 2001-10-29 | 2016-01-05 | Intel Corporation | Method and apparatus for shuffling data |
US9477472B2 (en) | 2001-10-29 | 2016-10-25 | Intel Corporation | Method and apparatus for shuffling data |
US10152323B2 (en) | 2001-10-29 | 2018-12-11 | Intel Corporation | Method and apparatus for shuffling data |
JP2012507805A (ja) * | 2008-11-05 | 2012-03-29 | インテル・コーポレーション | シーケンス検出又は命令に関連付けられた情報に基づいた命令の最適化性能 |
JP2020140290A (ja) * | 2019-02-27 | 2020-09-03 | 株式会社ウーノラボ | 中央演算処理装置 |
US12111788B2 (en) | 2019-02-27 | 2024-10-08 | Uno Laboratories, Ltd. | Central processing unit with asynchronous registers |
Also Published As
Publication number | Publication date |
---|---|
KR950001531A (ko) | 1995-01-03 |
US5410661A (en) | 1995-04-25 |
KR970007761B1 (ko) | 1997-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH0721034A (ja) | 文字列複写処理方法 | |
JPH077385B2 (ja) | データ処理装置 | |
JPH03266039A (ja) | フリーフォーマットデータリンク処理方式 | |
EP0237637B1 (en) | A method for the relocation of linked control blocks | |
JPH1185526A (ja) | プログラムロード方法 | |
JPH01147627A (ja) | 質問応答装置 | |
US4417305A (en) | Method for evaluating boolean expressions | |
JPH0363092B2 (ja) | ||
JP3887097B2 (ja) | コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体 | |
JPS6355636A (ja) | デ−タ処理システム | |
JP3461185B2 (ja) | ロードモジュールへのソースコード行番号登録方法および装置 | |
EP0180077A2 (en) | A data processing machine for compiling computer programs | |
WO2006126449A1 (ja) | 情報処理装置および命令実行方法 | |
JPS6226728B2 (ja) | ||
JPS58137081A (ja) | ベクトルプロセツサ | |
JPH01207824A (ja) | モジュール結合制御方式 | |
JPH04365133A (ja) | プレロード命令実行装置及びプログラム修正装置 | |
JPS63211423A (ja) | デ−タ入出力方法 | |
JPS5846439A (ja) | 計算機のプログラム編集方法 | |
JP2576589B2 (ja) | 仮想記憶アクセス制御方式 | |
JPS62226336A (ja) | マイクロプログラム制御方式 | |
JPH0646412B2 (ja) | デ−タフロ−プロセツサ | |
JPH11328028A (ja) | 入出力バッファ、入出力バッファ制御方法、共有ファイルアクセス方法、多重計算機システム,入出力バッファ制御プログラムを記録した記録媒体、共有ファイルアクセスプログラムを記録した記録媒体 | |
JP2001184227A (ja) | シミュレーション装置 | |
JPH02263265A (ja) | 作表処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20020312 |