mirror of
https://github.com/N64Recomp/N64Recomp.git
synced 2025-05-14 08:12:19 +00:00
Fixed divu sign extension in live recompiler and fixed warnings
This commit is contained in:
parent
dc2a5b6a46
commit
4a44e2b4c0
4 changed files with 11 additions and 13 deletions
10
.gitignore
vendored
10
.gitignore
vendored
|
@ -6,8 +6,8 @@
|
||||||
*.elf
|
*.elf
|
||||||
*.z64
|
*.z64
|
||||||
|
|
||||||
# Output C files
|
# Local working data
|
||||||
test/funcs
|
tests
|
||||||
|
|
||||||
# Linux build output
|
# Linux build output
|
||||||
build/
|
build/
|
||||||
|
@ -42,12 +42,6 @@ bld/
|
||||||
# Visual Studio 2015/2017 cache/options directory
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
.vs/
|
.vs/
|
||||||
|
|
||||||
# Libraries (binaries that aren't in the repo)
|
|
||||||
test/Lib
|
|
||||||
|
|
||||||
# RT64 (since it's not public yet)
|
|
||||||
test/RT64
|
|
||||||
|
|
||||||
# Runtime files
|
# Runtime files
|
||||||
imgui.ini
|
imgui.ini
|
||||||
rt64.log
|
rt64.log
|
||||||
|
|
|
@ -48,8 +48,8 @@ struct N64Recomp::LiveGeneratorContext {
|
||||||
sljit_jump* cur_branch_jump;
|
sljit_jump* cur_branch_jump;
|
||||||
};
|
};
|
||||||
|
|
||||||
N64Recomp::LiveGenerator::LiveGenerator(size_t num_funcs, const LiveGeneratorInputs& inputs) : compiler(compiler), inputs(inputs) {
|
N64Recomp::LiveGenerator::LiveGenerator(size_t num_funcs, const LiveGeneratorInputs& inputs) : inputs(inputs) {
|
||||||
compiler = sljit_create_compiler(NULL);
|
compiler = sljit_create_compiler(nullptr);
|
||||||
context = std::make_unique<LiveGeneratorContext>();
|
context = std::make_unique<LiveGeneratorContext>();
|
||||||
context->func_labels.resize(num_funcs);
|
context->func_labels.resize(num_funcs);
|
||||||
}
|
}
|
||||||
|
@ -1026,7 +1026,7 @@ void N64Recomp::LiveGenerator::emit_muldiv(InstrId instr_id, int reg1, int reg2)
|
||||||
sljit_set_label(jump_skip_division, after_division);
|
sljit_set_label(jump_skip_division, after_division);
|
||||||
|
|
||||||
// Move the numerator into hi.
|
// Move the numerator into hi.
|
||||||
sljit_emit_op1(compiler, SLJIT_MOV, Registers::hi, 0, SLJIT_R0, 0);
|
sljit_emit_op1(compiler, save_opcode, Registers::hi, 0, SLJIT_R0, 0);
|
||||||
|
|
||||||
if (is_signed) {
|
if (is_signed) {
|
||||||
// Calculate the negative signum of the numerator and place it in lo.
|
// Calculate the negative signum of the numerator and place it in lo.
|
||||||
|
@ -1037,7 +1037,7 @@ void N64Recomp::LiveGenerator::emit_muldiv(InstrId instr_id, int reg1, int reg2)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Move -1 into lo.
|
// Move -1 into lo.
|
||||||
sljit_emit_op1(compiler, SLJIT_MOV, Registers::lo, 0, SLJIT_IMM, -1);
|
sljit_emit_op1(compiler, SLJIT_MOV, Registers::lo, 0, SLJIT_IMM, sljit_sw(-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emit a label and set it as the target of the jump after the divison.
|
// Emit a label and set it as the target of the jump after the divison.
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
#include <cinttypes>
|
||||||
|
|
||||||
#include "sljitLir.h"
|
#include "sljitLir.h"
|
||||||
#include "recompiler/live_recompiler.h"
|
#include "recompiler/live_recompiler.h"
|
||||||
|
@ -274,7 +275,7 @@ int main(int argc, const char** argv) {
|
||||||
switch (stats.error) {
|
switch (stats.error) {
|
||||||
case TestError::Success:
|
case TestError::Success:
|
||||||
printf(" Success\n");
|
printf(" Success\n");
|
||||||
printf(" Generated %llu bytes in %llu microseconds and ran in %llu microseconds\n",
|
printf(" Generated %" PRIu64 " bytes in %" PRIu64 " microseconds and ran in %" PRIu64 " microseconds\n",
|
||||||
stats.code_size, stats.codegen_microseconds, stats.execution_microseconds);
|
stats.code_size, stats.codegen_microseconds, stats.execution_microseconds);
|
||||||
passed_count++;
|
passed_count++;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -490,6 +490,9 @@ void N64Recomp::CGenerator::emit_muldiv(InstrId instr_id, int reg1, int reg2) co
|
||||||
case InstrId::cpu_ddivu:
|
case InstrId::cpu_ddivu:
|
||||||
fmt::print(output_file, "DDIVU(U64({}), U64({}), &lo, &hi);\n", gpr_to_string(reg1), gpr_to_string(reg2));
|
fmt::print(output_file, "DDIVU(U64({}), U64({}), &lo, &hi);\n", gpr_to_string(reg1), gpr_to_string(reg2));
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue