という訳で、実装した。Coremarkも完走したので、とりあえずは大丈夫かな。
- PC操作、分岐系
- addiupc
- align
- aluipc
- aui
auipc
コンパクト型分岐系
- balc
- bc
- blezalc
- bgezalc
- bgtzalc
- bltzalc
- beqzalc
- bnezalc
- blezc
- bgezc
- bgec
- bgtzc
- bltzc
- bltc
- bgeuc
- bltuc
- beqc
- bnec
- beqzc
- bnezc
- bovc
bnvc
メモリアクセス拡張系
lsa
算術演算(HI/LOを利用しない)系
- div_r6
- mod_r6
- divu_r6
- modu_r6
- mul_r6
- muh_r6
- mulu_r6
muhu_r6
分岐系
- jic
jialc
参考演算子
- seleqz
- selnez
基本的にパイプラインを効率性を重視する命令が増えている。 - 遅延分岐を撤廃 - 1命令で3レジスタを読む命令の撤廃
命令数的にはどうなのか?
実は、R5でコンパイルした方が命令数的には少ない。ただ、R6の方がパイプラインの効率が良いかもしれんね。
$ tail coremark.r5.log 333416 : [80002aa4] 8fb60080 : lw r22,0x0080(r29) r29=>7f003f78 (7f003ff8)=>00000000 r22<=00000000 333417 : [80002aa8] 8fb5007c : lw r21,0x007c(r29) r29=>7f003f78 (7f003ff4)=>00000000 r21<=00000000 333418 : [80002aac] 8fb40078 : lw r20,0x0078(r29) r29=>7f003f78 (7f003ff0)=>00000000 r20<=00000000 333419 : [80002ab0] 8fb30074 : lw r19,0x0074(r29) r29=>7f003f78 (7f003fec)=>00000000 r19<=00000000 333420 : [80002ab4] 8fb20070 : lw r18,0x0070(r29) r29=>7f003f78 (7f003fe8)=>00000000 r18<=00000000 333421 : [80002ab8] 8fb1006c : lw r17,0x006c(r29) r29=>7f003f78 (7f003fe4)=>00000000 r17<=00000000 333422 : [80002abc] 8fb00068 : lw r16,0x0068(r29) r29=>7f003f78 (7f003fe0)=>00000000 r16<=00000000 333423 : [80002ac0] 03e00008 : jr r31 r31=>bfc00094 pc<=80002ac4 pc<=bfc00094 333424 : [80002ac4] 27bd0090 : addiu r29,r29,0x0090 r29=>7f003f78 r29<=7f004008 333425 : [bfc00094] 42000020 : wait $ tail coremark.log 345063 : [800026c0] 8fb60088 : lw s6,0x0088(sp) sp=>7f003f80 (7f004008)=>00000000 s6<=00000000 345064 : [800026c4] 8fb50084 : lw s5,0x0084(sp) sp=>7f003f80 (7f004004)=>00000000 s5<=00000000 345065 : [800026c8] 8fb40080 : lw s4,0x0080(sp) sp=>7f003f80 (7f004000)=>00000000 s4<=00000000 345066 : [800026cc] 8fb3007c : lw s3,0x007c(sp) sp=>7f003f80 (7f003ffc)=>00000000 s3<=00000000 345067 : [800026d0] 8fb20078 : lw s2,0x0078(sp) sp=>7f003f80 (7f003ff8)=>00000000 s2<=00000000 345068 : [800026d4] 8fb10074 : lw s1,0x0074(sp) sp=>7f003f80 (7f003ff4)=>00000000 s1<=00000000 345069 : [800026d8] 8fb00070 : lw s0,0x0070(sp) sp=>7f003f80 (7f003ff0)=>00000000 s0<=00000000 345070 : [800026dc] 03e00009 : jalr ra,zero ra=>bfc00094 pc<=800026e0 pc<=bfc00094 345071 : [800026e0] 27bd0098 : addiu sp,sp,0x0098 sp=>7f003f80 sp<=7f004018 345072 : [bfc00094] 42000020 : wait