« 風間監督へ恩返し vs名古屋戦@トヨタ | トップページ | 命令セットアーキテクチャを考える(番外編) 特殊レジスタの汎用レジスタへの割り当て »

2018/03/21

命令セットアーキテクチャを考える(番外編) max/min命令

命令コードのビットパターンに余裕があればですが、max命令/min命令を追加したいと思っています。

max [v] [b|h|w|d] Rs,{Rt|=imm},Rd

・RsとRtまたは即値を比較して小さくない方をRdにセットする。
・Rdにセットされる値に応じてCCRがセットされる。

基本的な命令を組み合わせて実現すると、以下のようなコードになります。
分岐命令が入るので、あまり好ましくありません。

mv Rs,Rd
comp Rs,Rt
bgt next
mv Rt,Rd
next *

min [v] [b|h|w|d] Rs,{Rt|=imm},Rd

・RsとRtまたは即値を比較して大きくない方をRdにセットする。


実は、max命令があれば、min命令はなくても、以下のように実現できます。3命令必要になりますが。
逆にmin命令があれば、max命令を実現できます。
また、キャリーやオーバーフローを考慮すると機械命令レベルではもうちょっと複雑になります。

min(a,b) = a + b - max(a,b)
max(a,b) = a + b - min(a,b)


整数データの場合、比較を行うので、符号付きと符号なしデータを命令コードレベルで区別する必要があります。

maxu [v] [b|h|w|d] Rs,{Rt|=imm},Rd
minu [v] [b|h|w|d] Rs,{Rt|=imm},Rd

水平演算命令も欲しいところです。

hmax [b|h|w|d] Rs,{Rt|=imm},Rd
hmin [b|h|w|d] Rs,{Rt|=imm},Rd
hmaxu [b|h|w|d] Rs,{Rt|=imm},Rd
hminu [b|h|w|d] Rs,{Rt|=imm},Rd

当然、整数演算だけでなく浮動小数点演算も欲しくなります。

fmax [v] [b|h|w|d] Rs,{Rt|=imm},Rd
fmin [v] [b|h|w|d] Rs,{Rt|=imm},Rd
fhmax [b|h|w|d] Rs,{Rt|=imm},Rd
fhmin [b|h|w|d] Rs,{Rt|=imm},Rd

命令コードのビットパターンに余裕がないので、レジスタ本数を32本(5bit)に減らさないと無理ですね。

|

« 風間監督へ恩返し vs名古屋戦@トヨタ | トップページ | 命令セットアーキテクチャを考える(番外編) 特殊レジスタの汎用レジスタへの割り当て »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 命令セットアーキテクチャを考える(番外編) max/min命令:

« 風間監督へ恩返し vs名古屋戦@トヨタ | トップページ | 命令セットアーキテクチャを考える(番外編) 特殊レジスタの汎用レジスタへの割り当て »