From fb7238eeb5a5f0942ec30d56fa24396113f79c5c Mon Sep 17 00:00:00 2001 From: nakeee Date: Sun, 19 Jul 2009 10:08:25 +0000 Subject: [PATCH] dsptool: add -f option (errors are not critical) git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3847 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/DSPCore/Src/DSPCodeUtil.cpp | 9 +++++---- Source/Core/DSPCore/Src/DSPCodeUtil.h | 2 +- Source/Core/DSPCore/Src/assemble.cpp | 10 +++++++--- Source/Core/DSPCore/Src/disassemble.h | 2 ++ Source/DSPTool/Src/main.cpp | 9 ++++++--- 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Source/Core/DSPCore/Src/DSPCodeUtil.cpp b/Source/Core/DSPCore/Src/DSPCodeUtil.cpp index d0dd510949..7da2ae1ece 100644 --- a/Source/Core/DSPCore/Src/DSPCodeUtil.cpp +++ b/Source/Core/DSPCore/Src/DSPCodeUtil.cpp @@ -26,14 +26,15 @@ #include "disassemble.h" -bool Assemble(const char *text, std::vector &code) +bool Assemble(const char *text, std::vector &code, bool force) { AssemblerSettings settings; - settings.pc = 0; + // settings.pc = 0; // settings.decode_registers = false; // settings.decode_names = false; - settings.print_tabs = false; - settings.ext_separator = '\''; + settings.force = force; + // settings.print_tabs = false; + // settings.ext_separator = '\''; // TODO: fix the terrible api of the assembler. DSPAssembler assembler(settings); diff --git a/Source/Core/DSPCore/Src/DSPCodeUtil.h b/Source/Core/DSPCore/Src/DSPCodeUtil.h index bcf4a78048..7fb1f77171 100644 --- a/Source/Core/DSPCore/Src/DSPCodeUtil.h +++ b/Source/Core/DSPCore/Src/DSPCodeUtil.h @@ -23,7 +23,7 @@ #include "Common.h" -bool Assemble(const char *text, std::vector &code); +bool Assemble(const char *text, std::vector &code, bool force = false); bool Disassemble(const std::vector &code, bool line_numbers, std::string &text); bool Compare(const std::vector &code1, const std::vector &code2); void GenRandomCode(int size, std::vector &code); diff --git a/Source/Core/DSPCore/Src/assemble.cpp b/Source/Core/DSPCore/Src/assemble.cpp index 7516b4182f..667e826828 100644 --- a/Source/Core/DSPCore/Src/assemble.cpp +++ b/Source/Core/DSPCore/Src/assemble.cpp @@ -79,11 +79,12 @@ static const char *err_string[] = }; DSPAssembler::DSPAssembler(const AssemblerSettings &settings) : + gdg_buffer(NULL), m_cur_addr(0), m_cur_pass(0), m_current_param(0), - settings_(settings), - gdg_buffer(NULL) + settings_(settings) + { } @@ -137,7 +138,10 @@ bool DSPAssembler::Assemble(const char *text, std::vector &code, std::vecto void DSPAssembler::ShowError(err_t err_code, const char *extra_info) { - failed = true; + + if (!settings_.force) + failed = true; + char error_buffer[1024]; char *buf_ptr = error_buffer; buf_ptr += sprintf(buf_ptr, "%i : %s ", code_line, cur_line.c_str()); diff --git a/Source/Core/DSPCore/Src/disassemble.h b/Source/Core/DSPCore/Src/disassemble.h index c1e2689659..dba9f36287 100644 --- a/Source/Core/DSPCore/Src/disassemble.h +++ b/Source/Core/DSPCore/Src/disassemble.h @@ -38,6 +38,7 @@ struct AssemblerSettings : print_tabs(false), show_hex(false), show_pc(false), + force(false), decode_names(true), decode_registers(true), ext_separator('\''), @@ -49,6 +50,7 @@ struct AssemblerSettings bool print_tabs; bool show_hex; bool show_pc; + bool force; bool decode_names; bool decode_registers; char ext_separator; diff --git a/Source/DSPTool/Src/main.cpp b/Source/DSPTool/Src/main.cpp index 8fb5321298..cea5c879f6 100644 --- a/Source/DSPTool/Src/main.cpp +++ b/Source/DSPTool/Src/main.cpp @@ -205,7 +205,7 @@ void RunAsmTests() // dsptool -o asdf.bin asdf.txt // Assemble a file, output header: // dsptool -h asdf.h asdf.txt - +// dsptool -f errors are not critical // So far, all this binary can do is test partially that itself works correctly. int main(int argc, const char *argv[]) { @@ -218,6 +218,7 @@ int main(int argc, const char *argv[]) printf("-s: Print the final size in bytes (only)\n"); printf("-o : Results from stdout redirected to a file\n"); printf("-h
: Output assembly results to a header\n"); + printf("-f: Errors are not critical\n"); return 0; } @@ -231,7 +232,7 @@ int main(int argc, const char *argv[]) std::string output_header_name; std::string output_name; - bool disassemble = false, compare = false, multiple = false, outputSize = false; + bool disassemble = false, compare = false, multiple = false, outputSize = false, force = false; for (int i = 1; i < argc; i++) { if (!strcmp(argv[i], "-d")) @@ -246,6 +247,8 @@ int main(int argc, const char *argv[]) outputSize = true; else if (!strcmp(argv[i], "-m")) multiple = true; + else if (!strcmp(argv[i], "-f")) + force = true; else { if (!input_name.empty()) @@ -371,7 +374,7 @@ int main(int argc, const char *argv[]) { std::vector code; - if(!Assemble(source.c_str(), code)) { + if(!Assemble(source.c_str(), code, force)) { printf("Assemble: Assembly failed due to errors\n"); return 1; }