Skip to content

umedaikiti/PowerPC64Simulator

Repository files navigation

#PowerPC64Simulator

情報科学基礎実験の課題のPowerPC64のシミュレーター。 x86_64-linux-gnuのgccに依存するコードを含む(ちなみに自分はgcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2で動作のテストをしている)。

  • signed型の算術右シフト
  • ビットフィールドの順序
  • short, int, long longを2, 4, 8バイトの整数型として扱っている

他にもあるかも

実装の方針

  • PowerPCの命令を一つずつシミュレートして、レジスタの内容の変化を追えるようなプログラムにする
  • 算術演算、論理演算、分岐命令、比較などを中心に実装
  • 浮動小数点数は(面倒なので)実装しない
  • 例外処理、メモリアクセスの際のアドレス変換、特権モードなども(今のところの予定では)実装しない

使い方

アセンブリコードの作り方

testにあるMakefileを参照、というかコピーして必要なとこだけ書き換えればいい

シミュレーターの使い方

make
./powerpc64sim <PPC64のアセンブリコード>

コマンド一覧

コマンド 説明
h ヘルプの表示
r <レジスタ番号> GPRの中身を表示
n 次の命令を実行
d 全てのレジスタの中身を表示する
m <サイズ> <アドレス(16進数)> メモリの中身の表示
b <命令のアドレス(16進数)> ブレークポイントの設定
c ブレークポイントまでシミュレーションする(continue)
q 終了する

実装済み命令一覧

算術演算

  • addi
  • addis
  • add
  • subf
  • addic
  • addic.
  • subfic
  • addc
  • subfc
  • adde
  • subfe
  • addme
  • subfme
  • addze
  • subfze
  • neg
  • mulli
  • mulhw
  • mullw
  • mulhwu
  • divw
  • divwu
  • divwe
  • divweu
  • mulld
  • mulhd
  • mulhdu
  • divd
  • divdu
  • divde
  • divdeu

論理演算

  • andi
  • andis
  • ori
  • oris
  • xori
  • xoris
  • and
  • or
  • xor
  • nand
  • nor
  • eqv
  • andc
  • orc
  • extsb
  • extsh
  • cntlzw
  • cmpb
  • popcntb
  • popcntw
  • prtyd
  • prtyw
  • extsw
  • popcntd
  • cntlzd
  • bpermd

シフト/ローテート

  • rlwinm
  • rlwnm
  • rlwimi
  • rldicl
  • rldicr
  • rldic
  • rldcl
  • rldcr
  • rldimi
  • slw
  • srw
  • srawi
  • sraw
  • sld
  • srd
  • sradi
  • srad

分岐命令

  • b
  • bc
  • bclr
  • bcctr

ロード/ストア

  • stb
  • stbx
  • stbu
  • stbux
  • sth
  • sthx
  • sthu
  • sthux
  • stw
  • stwx
  • stwu
  • stwux
  • std
  • stdx
  • stdu
  • stdux
  • lbz
  • lbzx
  • lbzu
  • lbzux
  • lhz
  • lhzx
  • lhzu
  • lhzux
  • lha
  • lhax
  • lhau
  • lhaux
  • lwz
  • lwzx
  • lwzu
  • lwzux
  • lwa
  • lwax
  • lwaux
  • ld
  • ldx
  • ldu
  • ldux

Move To/From System Register Instructions

  • mtspr
  • mfspr
  • mtcrf
  • mfcr
  • mtocrf
  • mfocrf
  • mcrxr
  • mtdcrux
  • mfdcrux

比較

  • cmpi
  • cmp
  • cmpli
  • cmpl

Condition Register Instructions

  • crand
  • crnand
  • cror
  • crxor
  • crnor
  • creqv
  • crandc
  • crorc
  • mcrf

実装済みレジスタ一覧

  • GPR(General Purpose Register)
  • CR(Condition Register)
  • LR(Link Register)
  • CTR(Count Register)
  • XER(Fixed-Point Exception Register)

補足(今後変更する可能性が高いことなど)

  • エントリーポイントは0x10000000固定(そのうち何とかしたい)
  • 掛け算割り算は面倒なので実装しないかも
  • ニーモニックの表示と命令の実行は別なので、実行できてもmnemonic unknownのことがある

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published