gitで一気にたくさん修正をしてしまったけど、コミットは別々に分けたい、というときは、interactiveモードを使ってもいいけど、もっと手軽に-pを使おう。
なんか一杯変更してもうたなあ。。。
diff --git a/src_cpp/gen_arch_table.rb b/src_cpp/gen_arch_table.rb index e9fb073..73c16c7 100755 --- a/src_cpp/gen_arch_table.rb +++ b/src_cpp/gen_arch_table.rb @@ -228,7 +228,8 @@ inst_func_fp.printf(" RiscvEnv *m_env;\n") inst_func_fp.printf("\npublic:\n"); inst_func_fp.printf(" InstEnv (RiscvEnv *env);\n\n") inst_func_fp.printf(" typedef void (InstEnv::*InstFunc) (Word_t inst_hex);\n"); -inst_func_fp.printf(" static const InstFunc inst_exec_func[];\n\n\n"); +inst_func_fp.printf(" static const InstFunc m_inst_exec_func[];\n\n"); +inst_func_fp.printf(" void RISCV_Inst_Exec (uint32_t index, Word_t inst_hex);\n\n"); $arch_table.each {|inst_info| inst_func_fp.printf(" void RISCV_%s (Word_t inst_hex);\n", inst_info[DEC::INST_NAME]); @@ -236,7 +237,7 @@ $arch_table.each {|inst_info| inst_func_fp.printf("};\n"); -inst_func_fp.puts("const InstEnv::InstFunc InstEnv::inst_exec_func[] = {\n"); +inst_func_fp.puts("const InstEnv::InstFunc InstEnv::m_inst_exec_func[] = {\n"); $arch_table.each_with_index {|inst_info, index| inst_func_fp.printf(" &InstEnv::RISCV_%s", inst_info[DEC::INST_NAME]); if (index == $arch_table.size-1) then diff --git a/src_cpp/inst_riscv.cpp b/src_cpp/inst_riscv.cpp index 231cecd..7c720de 100644 --- a/src_cpp/inst_riscv.cpp +++ b/src_cpp/inst_riscv.cpp @@ -40,6 +40,14 @@ InstEnv::InstEnv (RiscvEnv *env) } +void InstEnv::RISCV_Inst_Exec (uint32_t index, Word_t inst_hex) +{ + (this->*m_inst_exec_func[index]) (inst_hex); + + return; +} + + void InstEnv::RISCV_INST_LUI (Word_t inst_hex) { RegAddr_t rd_addr = ExtractRDField (inst_hex); diff --git a/src_cpp/simulation.cpp b/src_cpp/simulation.cpp index 883b2d7..9dc696a 100644 --- a/src_cpp/simulation.cpp +++ b/src_cpp/simulation.cpp @@ -57,7 +57,7 @@ void RiscvEnv::StepSimulation (int32_t stepCount) fprintf (m_dbgfp, "<Error: instruction is not decoded. [%08x]=%08x\n", m_current_pc, inst_hex); exit (EXIT_FAILURE); } else { - (m_inst_env->*m_inst_exec_func[inst_idx]) (); + m_inst_env->RISCV_Inst_Exec (inst_idx, inst_hex); fprintf (m_dbgfp, "%10d : ", m_step); fprintf (m_dbgfp, "[%08x] %08x : ", m_current_pc, inst_hex);
git add -pで小分けにaddしていこう。別のファイルでも、diffのグループが分かれていれば、個別にaddすることができる。
$ git add -p diff --git a/src_cpp/gen_arch_table.rb b/src_cpp/gen_arch_table.rb index e9fb073..73c16c7 100755 --- a/src_cpp/gen_arch_table.rb +++ b/src_cpp/gen_arch_table.rb @@ -228,7 +228,8 @@ inst_func_fp.printf(" RiscvEnv *m_env;\n") inst_func_fp.printf("\npublic:\n"); inst_func_fp.printf(" InstEnv (RiscvEnv *env);\n\n") inst_func_fp.printf(" typedef void (InstEnv::*InstFunc) (Word_t inst_hex);\n"); -inst_func_fp.printf(" static const InstFunc inst_exec_func[];\n\n\n"); +inst_func_fp.printf(" static const InstFunc m_inst_exec_func[];\n\n"); +inst_func_fp.printf(" void RISCV_Inst_Exec (uint32_t index, Word_t inst_hex);\n\n"); $arch_table.each {|inst_info| inst_func_fp.printf(" void RISCV_%s (Word_t inst_hex);\n", inst_info[DEC::INST_NAME]); Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]?
で、追加したいならy、省略したいならnを入力していくのだけれど、それ以外のキーって何に使うんだっけ、とか、もう追加し終わったから、終了したいとかはどうするんだけって、となると、?を押す。
Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? ? y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk or any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk or any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help
ほほう、qを押すと、今時点の変更はキャンセルして、終了するのか。
$ git st On branch utf8_convert Your branch is behind 'origin/utf8_convert' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch) Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: gen_arch_table.rb modified: simulation.cpp Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: gen_arch_table.rb modified: inst_riscv.cpp Untracked files: (use "git add <file>..." to include in what will be committed)
ばらばらにaddできた。この後、commitすれば良い。