前回の続きで、結果的にメモリ渡しの部分が間違っていたため、動作していない部分があった。
データ形式の変換については、よく分からない部分が多いので、memcpyで変換しながらコピーするようにした。
MemResult RiscvEnv::LoadFromBus (Addr_t addr, Size_t size, DWord_t *data) { Byte_t byte[8]; MemResult result = LoadFromBus (addr, size, byte); memcpy (data, byte, 8); return result; }
これにて、ダブルワードの機能は実装完了だ。一応、リグレッションテストもパスした。
ctest . ... 97% tests passed, 11 tests failed out of 434 Total Test time (real) = 4.91 sec The following tests FAILED: 1 - rv32mi-p-csr (Failed) 9 - rv32si-p-csr (Failed) 47 - rv32ui-pm-lrsc (Failed) 125 - rv64mi-p-csr (Failed) 126 - rv64mi-p-dirty (Failed) 130 - rv64mi-p-mcsr (Failed) 136 - rv64si-p-csr (Failed) 230 - rv64ui-pm-lrsc (Failed) 233 - rv64ui-p-mulhsu (Failed) 315 - rv64ui-pt-mulhsu (Failed) 401 - rv64ui-v-mulhsu (Failed) Errors while running CTest
できた!