page0072
の編集
http://osecpu.osask.jp/wiki/?page0072
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
BracketName
FormattingRules
FrontPage
Fulyn
Fulyn-v2
Fulyn_Samples
Help
InterWiki
InterWikiName
InterWikiSandBox
K
KOR_PIT8254
KWVM.NET
Liva
MANA
MenuBar
OSECPU_FPGA
PG_MANA
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RecentDeleted
SandBox
WikiEngines
WikiName
WikiWikiWeb
YukiWiki
hikalium
hikarupsp
hikarupsp_ELCHNOS
hikarupsp_ELCHNOS_IDE
hikarupsp_FrontEndCode
hikarupsp_WebCPU-VM
hikarupsp_WebCPU-VM_internal
hikarupsp_study_hh4
impressions
impressions0000
jpag0000
jpag0001
jpag0002
jpag0003
jpag0004
jpag0005
lambdalice
mandel59
members
memo0000
memo0001
memo0002
memo0003
memo0004
memo0005
memo0006
memo0007
memo0008
memo0009
memo0010
osask
osecpu4android
page0000
page0001
page0002
page0003
page0004
page0005
page0006
page0007
page0008
page0009
page0010
page0011
page0012
page0013
page0014
page0015
page0016
page0017
page0018
page0019
page0020
page0021
page0022
page0023
page0024
page0025
page0026
page0027
page0028
page0029
page0030
page0031
page0032
page0033
page0034
page0035
page0036
page0037
page0038
page0039
page0040
page0041
page0042
page0043
page0044
page0045
page0046
page0047
page0048
page0049
page0050
page0051
page0052
page0053
page0054
page0055
page0056
page0057
page0058
page0059
page0060
page0061
page0062
page0063
page0064
page0065
page0066
page0067
page0068
page0069
page0070
page0071
page0072
page0073
page0074
page0075
page0076
page0077
page0078
page0079
page0080
page0081
page0082
page0083
page0084
page0085
page0086
page0087
page0088
page0089
page0090
page0091
page0092
page0093
page0094
page0095
page0096
page0097
page0098
page0099
page0100
page0101
page0102
page0103
page0104
page0105
page0106
page0107
page0108
page0109
pagenames
populars
seccamp2013
seccamp2014
seccamp2017
ttwilb
ttwilb-asmi
yao
* Rev2のベタ命令セット(バックエンド命令セット) -(by [[K]], 2014.04.24) ** (1) 基本構成 -最初に3バイトのシグネチャがある。 05 E2 00 --なお、OSECPU-VM命令セットは、他の様々な用途に応用される可能性があると思うが、その場合は、このシグネチャを強要しない(推奨もしない)。それぞれがそれぞれの方法でOSECPU-VMリビジョン2のバックエンドの命令セットであることを判断する。 ---応用を示唆する例: [[すべてがOSECPUアプリになる?>page0059]] --というか、そもそもここに書く命令セットは「ベタ」であって、サイズの追及もされていない冗長なものなので、これをそのまま応用することはないような気もする。 -シグネチャの後はhh4エンコードで命令列を並べる。データ系命令以外はこれに従う。 --hh4: http://osask.net/w/634.html --[Q]なぜ以前のようにバイト列で定義しないのですか? --[A]OSECPU-VMは32bitに限定されない仕様に近づくから。・・・完全に32bitの制約が無くなるのが「第三世代OSASK」で、OSECPU-VMはそのうちの32bit以下だけをサポートしたものに相当する。 --32bit前提じゃなくなると、immやtypが32bit固定だとは言いにくくなる。だから単純なバイト列では規定できない。それで可変ビット長なhh4を採用。hh4なら固定ビット長方式もできる。 -命令表: (rはRxxのこと、pはPxxのこと、bitは定数32を入れておくとよい、uimmは符号なし整数のこと) |+0|+1 |+2 |+3 |+4 |+5 |+6|+7|命令表記 |説明| |00| | | | | | | |NOP(); | | |01|uimm|opt| | | | | |LB(opt, uimm); | | |02|imm |r |bit | | | | |LIMM(bit, r, imm); | | |03|uimm|p | | | | | |PLIMM(p, uimm); | | |04|r | | | | | | |CND(r); |CND命令は下位1bitしか見ない| |05| | | | | | | |(reserve) |API特別構文用| |06| | | | | | | |(reserve) |ループ構文用| |07| | | | | | | |(reserve) |ループ構文用| |08|p |typ|0 |r |bit| | |LMEM(bit, r, typ, p, 0);| | |09|r |bit|p |typ|0 | | |SMEM(bit, r, typ, p, 0);| | |0A|p1 |typ|0 |p0 | | | |-PLMEM(p0, typ, p1, 0);| | |0B|p0 |p1 |typ |0 | | | |-PSMEM(p0, typ, p1, 0);| | |0C| | | | | | | |(LEA) | | |0D| | | | | | | |(reserve) |型指定プリフィクス用| |0E|p1 |typ|r |bit|p0 | | |PADD(bit, p0, typ, p1, r);| | |0F|p0 |p1 |typ |r |bit| | |-PDIF(r, typ, p0, p1); | | |10|r1 |r2 |r0 |bit| | | |OR(bit, r0, r1, r2); |r1=r2にすると、CP(r0,r1);になる| |11|r1 |r2 |r0 |bit| | | |XOR(bit, r0, r1, r2); | | |12|r1 |r2 |r0 |bit| | | |AND(bit, r0, r1, r2); | | |13|r1 |r2 |r0 |bit| | | |SBX(bit, r0, r1, r2); |符号ビット拡張、r2はR3Fしか指定できない| |14|r1 |r2 |r0 |bit| | | |ADD(bit, r0, r1, r2); | | |15|r1 |r2 |r0 |bit| | | |SUB(bit, r0, r1, r2); | | |16|r1 |r2 |r0 |bit| | | |MUL(bit, r0, r1, r2); | | |17| | | | | | | | | | |18|r1 |r2 |r0 |bit| | | |SHL(bit, r0, r1, r2); | | |19|r1 |r2 |r0 |bit| | | |SAR(bit, r0, r1, r2); | | |1A|r1 |r2 |r0 |bit| | | |DIV(bit, r0, r1, r2); | | |1B|r1 |r2 |r0 |bit| | | |MOD(bit, r0, r1, r2); | | |1C| | | | | | | |(PLMT0) | | |1D| | | | | | | |(PLMT1) | | |1E|p1 |p0 | | | | | |PCP(p0, p1); | | |1F| | | | | | | |(PCST) | | |20|r1 |r2 |bit1|r0 |bit0| | |CMPE(bit0, bit1, r0, r1, r2);|bit1はr1とr2のbit、bit0はr0のbit| |21| | | | | | | |CMPNE | | |22| | | | | | | |CMPL | | |23| | | | | | | |CMPGE | | |24| | | | | | | |CMPLE | | |25| | | | | | | |CMPG | | |26| | | | | | | |TSTZ | | |27| | | | | | | |TSTNZ | | |28|p0 |p1 |r |bit| | | |-PCMPE(r, p0, p1); | | |29| | | | | | | |PCMPNE | | |2A| | | | | | | |PCMPL | | |2B| | | | | | | |PCMPGE | | |2C| | | | | | | |PCMPLE | | |2D| | | | | | | |PCMPG | | |2E|typ |len|... | | | | |data |typもlenもuimm, data部分はhh4エンコードをしない生データ| |2F|uimm| | | | | | |(reserve) |各種プリフィクス| |30|r0 |bit0|r1 |bit1|p | | |talloc |r0はtyp、r1は個数、bit0はr0のbit、bit1はr1のbit| |31|p |r0 |bit0|r1 |bit1| | |tfree | | |32|r0 |bit0|r1 |bit1|p | | |malloc | | |33|p |r0 |bit0|r1 |bit1| | |mfree | | |34| | | | | | | | | | |35| | | | | | | | | | |36| | | | | | | | | | |37| | | | | | | | | | |38| | | | | | | |(reserve) |PALMEM構文用| |39| | | | | | | |(reserve) |PASMEM構文用| |3A| | | | | | | |(reserve) |PAPLMEM構文用| |3B| | | | | | | |(reserve) |PAPSMEM構文用| |3C|rn |bit0|pn |fn |bit1|0| |ENTER |rn,pn,fnはuimmで保存する個数、bit0はRxxのbit、bit1はFxxのbit| |3D|rn |bit0|pn |fn |bit1|0| |LEAVE | | |3E| | | | | | | |(reserve) |call構文用| |3F| | | | | | | |(reserve) |call構文用| |40|mod|fimm|f |bit| | | |FLIMM | | |41|f1 |bit1|f0 |bit0| | | |FCP |bit0>bit1でもよい(つまり精度拡張にも使える)| |42|r |bit1|f |bit0| | | |CNVIF | | |43|f |bit1|r |bit0| | | |CNVFI | | |44| | | | | | | |(FLMEM) | | |45| | | | | | | |(FSMEM) | | |46| | | | | | | |(reserve) |PAFLMEM構文用| |47| | | | | | | |(reserve) |PAFSMEM構文用| |48|f1 |f2 |bit1|r |bit0| | |FCMPE | | |49| | | | | | | |FCMPNE | | |4A| | | | | | | |FCMPL | | |4B| | | | | | | |FCMPGE | | |4C| | | | | | | |FCMPLE | | |4D| | | | | | | |FCMPG | | |4E| | | | | | | | |NaN検出用の命令にするかも| |4F| | | | | | | | |NaN検出用の命令にするかも| |50| | | | | | | |FADD | | |51| | | | | | | |FSUB | | |52| | | | | | | |FMUL | | |53| | | | | | | |FDIV | | |54| | | | | | | |(reserve) | | |55| | | | | | | |(reserve) | | |56| | | | | | | |(reserve) | | |57| | | | | | | |(reserve) | | |58| | | | | | | |FCOS | | |59| | | | | | | |FSIN | | |5A| | | | | | | |FTAN | | |5B| | | | | | | |(reserve) |FCOSIN構文用| |78| | | | | | | |(reserve) |bit/bit1オーバーライド構文用| |79| | | | | | | |(reserve) |bit0オーバーライド構文用| |FD|imm |dr | | | | | |LIDR |load imm. to debug register| |FE|uimm|len| | | | | |remark | | //レジスタの一部のデータだけが保存されることを理解しているというメモリストア系のプリフィクス(2F) -2013年のころのバイトコードと比較すると、データの流れが左から右になっている。 --なぜ?・・・そのほうがデコーダを書きやすいから。 -typはpの直後に来る。 --なぜ?・・・そのほうが型推論を書きやすいから。 -bitってなんですか? --Rxxの演算精度のこと。bit=32の場合、Rxxは32bitかそれ以上で計算してほしいということ。 --これが何のために必要かというと、今まではcharの演算で済むときでさえ無条件で32bit演算していたわけで、これは32bitのCPUでは大して問題にならないとしても、8bitのCPUにとっては大きなロスになる。bitを指定できないとこの無駄をVMは「気づくことすらできなかった」が、bitが入ることでこれを反映して無駄を取り除けるようになる。 --「第三世代OSASK」では、bitは64や256などを指定してもよくなる。 --このようにアーキテクチャが固有の標準bitを持たないことを「ビットフリー」ということにする。 -C0~DFまでは独自拡張用に開けておくので勝手に使って構わない。 -E0~EFは内部エラー通知用。 * こめんと欄 -[[hikarupsp_WebCPU-VM_internal]]をすごく参考にしています! -- [[K]] SIZE(10){2014-04-24 (木) 17:09:32} -(こちらにあったhikarupspさんの質問とその回答は[[page0082]]に引っ越しました。) -- ''K'' SIZE(10){2014-06-09 (月) 11:23:24} #comment
タイムスタンプを変更しない
* Rev2のベタ命令セット(バックエンド命令セット) -(by [[K]], 2014.04.24) ** (1) 基本構成 -最初に3バイトのシグネチャがある。 05 E2 00 --なお、OSECPU-VM命令セットは、他の様々な用途に応用される可能性があると思うが、その場合は、このシグネチャを強要しない(推奨もしない)。それぞれがそれぞれの方法でOSECPU-VMリビジョン2のバックエンドの命令セットであることを判断する。 ---応用を示唆する例: [[すべてがOSECPUアプリになる?>page0059]] --というか、そもそもここに書く命令セットは「ベタ」であって、サイズの追及もされていない冗長なものなので、これをそのまま応用することはないような気もする。 -シグネチャの後はhh4エンコードで命令列を並べる。データ系命令以外はこれに従う。 --hh4: http://osask.net/w/634.html --[Q]なぜ以前のようにバイト列で定義しないのですか? --[A]OSECPU-VMは32bitに限定されない仕様に近づくから。・・・完全に32bitの制約が無くなるのが「第三世代OSASK」で、OSECPU-VMはそのうちの32bit以下だけをサポートしたものに相当する。 --32bit前提じゃなくなると、immやtypが32bit固定だとは言いにくくなる。だから単純なバイト列では規定できない。それで可変ビット長なhh4を採用。hh4なら固定ビット長方式もできる。 -命令表: (rはRxxのこと、pはPxxのこと、bitは定数32を入れておくとよい、uimmは符号なし整数のこと) |+0|+1 |+2 |+3 |+4 |+5 |+6|+7|命令表記 |説明| |00| | | | | | | |NOP(); | | |01|uimm|opt| | | | | |LB(opt, uimm); | | |02|imm |r |bit | | | | |LIMM(bit, r, imm); | | |03|uimm|p | | | | | |PLIMM(p, uimm); | | |04|r | | | | | | |CND(r); |CND命令は下位1bitしか見ない| |05| | | | | | | |(reserve) |API特別構文用| |06| | | | | | | |(reserve) |ループ構文用| |07| | | | | | | |(reserve) |ループ構文用| |08|p |typ|0 |r |bit| | |LMEM(bit, r, typ, p, 0);| | |09|r |bit|p |typ|0 | | |SMEM(bit, r, typ, p, 0);| | |0A|p1 |typ|0 |p0 | | | |-PLMEM(p0, typ, p1, 0);| | |0B|p0 |p1 |typ |0 | | | |-PSMEM(p0, typ, p1, 0);| | |0C| | | | | | | |(LEA) | | |0D| | | | | | | |(reserve) |型指定プリフィクス用| |0E|p1 |typ|r |bit|p0 | | |PADD(bit, p0, typ, p1, r);| | |0F|p0 |p1 |typ |r |bit| | |-PDIF(r, typ, p0, p1); | | |10|r1 |r2 |r0 |bit| | | |OR(bit, r0, r1, r2); |r1=r2にすると、CP(r0,r1);になる| |11|r1 |r2 |r0 |bit| | | |XOR(bit, r0, r1, r2); | | |12|r1 |r2 |r0 |bit| | | |AND(bit, r0, r1, r2); | | |13|r1 |r2 |r0 |bit| | | |SBX(bit, r0, r1, r2); |符号ビット拡張、r2はR3Fしか指定できない| |14|r1 |r2 |r0 |bit| | | |ADD(bit, r0, r1, r2); | | |15|r1 |r2 |r0 |bit| | | |SUB(bit, r0, r1, r2); | | |16|r1 |r2 |r0 |bit| | | |MUL(bit, r0, r1, r2); | | |17| | | | | | | | | | |18|r1 |r2 |r0 |bit| | | |SHL(bit, r0, r1, r2); | | |19|r1 |r2 |r0 |bit| | | |SAR(bit, r0, r1, r2); | | |1A|r1 |r2 |r0 |bit| | | |DIV(bit, r0, r1, r2); | | |1B|r1 |r2 |r0 |bit| | | |MOD(bit, r0, r1, r2); | | |1C| | | | | | | |(PLMT0) | | |1D| | | | | | | |(PLMT1) | | |1E|p1 |p0 | | | | | |PCP(p0, p1); | | |1F| | | | | | | |(PCST) | | |20|r1 |r2 |bit1|r0 |bit0| | |CMPE(bit0, bit1, r0, r1, r2);|bit1はr1とr2のbit、bit0はr0のbit| |21| | | | | | | |CMPNE | | |22| | | | | | | |CMPL | | |23| | | | | | | |CMPGE | | |24| | | | | | | |CMPLE | | |25| | | | | | | |CMPG | | |26| | | | | | | |TSTZ | | |27| | | | | | | |TSTNZ | | |28|p0 |p1 |r |bit| | | |-PCMPE(r, p0, p1); | | |29| | | | | | | |PCMPNE | | |2A| | | | | | | |PCMPL | | |2B| | | | | | | |PCMPGE | | |2C| | | | | | | |PCMPLE | | |2D| | | | | | | |PCMPG | | |2E|typ |len|... | | | | |data |typもlenもuimm, data部分はhh4エンコードをしない生データ| |2F|uimm| | | | | | |(reserve) |各種プリフィクス| |30|r0 |bit0|r1 |bit1|p | | |talloc |r0はtyp、r1は個数、bit0はr0のbit、bit1はr1のbit| |31|p |r0 |bit0|r1 |bit1| | |tfree | | |32|r0 |bit0|r1 |bit1|p | | |malloc | | |33|p |r0 |bit0|r1 |bit1| | |mfree | | |34| | | | | | | | | | |35| | | | | | | | | | |36| | | | | | | | | | |37| | | | | | | | | | |38| | | | | | | |(reserve) |PALMEM構文用| |39| | | | | | | |(reserve) |PASMEM構文用| |3A| | | | | | | |(reserve) |PAPLMEM構文用| |3B| | | | | | | |(reserve) |PAPSMEM構文用| |3C|rn |bit0|pn |fn |bit1|0| |ENTER |rn,pn,fnはuimmで保存する個数、bit0はRxxのbit、bit1はFxxのbit| |3D|rn |bit0|pn |fn |bit1|0| |LEAVE | | |3E| | | | | | | |(reserve) |call構文用| |3F| | | | | | | |(reserve) |call構文用| |40|mod|fimm|f |bit| | | |FLIMM | | |41|f1 |bit1|f0 |bit0| | | |FCP |bit0>bit1でもよい(つまり精度拡張にも使える)| |42|r |bit1|f |bit0| | | |CNVIF | | |43|f |bit1|r |bit0| | | |CNVFI | | |44| | | | | | | |(FLMEM) | | |45| | | | | | | |(FSMEM) | | |46| | | | | | | |(reserve) |PAFLMEM構文用| |47| | | | | | | |(reserve) |PAFSMEM構文用| |48|f1 |f2 |bit1|r |bit0| | |FCMPE | | |49| | | | | | | |FCMPNE | | |4A| | | | | | | |FCMPL | | |4B| | | | | | | |FCMPGE | | |4C| | | | | | | |FCMPLE | | |4D| | | | | | | |FCMPG | | |4E| | | | | | | | |NaN検出用の命令にするかも| |4F| | | | | | | | |NaN検出用の命令にするかも| |50| | | | | | | |FADD | | |51| | | | | | | |FSUB | | |52| | | | | | | |FMUL | | |53| | | | | | | |FDIV | | |54| | | | | | | |(reserve) | | |55| | | | | | | |(reserve) | | |56| | | | | | | |(reserve) | | |57| | | | | | | |(reserve) | | |58| | | | | | | |FCOS | | |59| | | | | | | |FSIN | | |5A| | | | | | | |FTAN | | |5B| | | | | | | |(reserve) |FCOSIN構文用| |78| | | | | | | |(reserve) |bit/bit1オーバーライド構文用| |79| | | | | | | |(reserve) |bit0オーバーライド構文用| |FD|imm |dr | | | | | |LIDR |load imm. to debug register| |FE|uimm|len| | | | | |remark | | //レジスタの一部のデータだけが保存されることを理解しているというメモリストア系のプリフィクス(2F) -2013年のころのバイトコードと比較すると、データの流れが左から右になっている。 --なぜ?・・・そのほうがデコーダを書きやすいから。 -typはpの直後に来る。 --なぜ?・・・そのほうが型推論を書きやすいから。 -bitってなんですか? --Rxxの演算精度のこと。bit=32の場合、Rxxは32bitかそれ以上で計算してほしいということ。 --これが何のために必要かというと、今まではcharの演算で済むときでさえ無条件で32bit演算していたわけで、これは32bitのCPUでは大して問題にならないとしても、8bitのCPUにとっては大きなロスになる。bitを指定できないとこの無駄をVMは「気づくことすらできなかった」が、bitが入ることでこれを反映して無駄を取り除けるようになる。 --「第三世代OSASK」では、bitは64や256などを指定してもよくなる。 --このようにアーキテクチャが固有の標準bitを持たないことを「ビットフリー」ということにする。 -C0~DFまでは独自拡張用に開けておくので勝手に使って構わない。 -E0~EFは内部エラー通知用。 * こめんと欄 -[[hikarupsp_WebCPU-VM_internal]]をすごく参考にしています! -- [[K]] SIZE(10){2014-04-24 (木) 17:09:32} -(こちらにあったhikarupspさんの質問とその回答は[[page0082]]に引っ越しました。) -- ''K'' SIZE(10){2014-06-09 (月) 11:23:24} #comment
テキスト整形のルールを表示する