From 38828bdc3b4d254a48799b2d978f74ca56499a4d Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 12 Jul 2020 21:05:46 +0200 Subject: [PATCH] TSC update cycle fixes. --- src/codegen/codegen_accumulate_x86-64.c | 2 +- src/codegen/codegen_accumulate_x86.c | 2 +- src/codegen_new/codegen_accumulate.c | 2 +- src/cpu/386_dynarec.c | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/codegen/codegen_accumulate_x86-64.c b/src/codegen/codegen_accumulate_x86-64.c index 45ec96684..d81c7dd83 100644 --- a/src/codegen/codegen_accumulate_x86-64.c +++ b/src/codegen/codegen_accumulate_x86-64.c @@ -26,7 +26,7 @@ void codegen_accumulate(int acc_reg, int delta) addbyte(0x04); addbyte(0x25); addlong((uint32_t) (uintptr_t) &(acycs)); - addlong(delta); + addlong(-delta); } } diff --git a/src/codegen/codegen_accumulate_x86.c b/src/codegen/codegen_accumulate_x86.c index e577d913d..a897c942a 100644 --- a/src/codegen/codegen_accumulate_x86.c +++ b/src/codegen/codegen_accumulate_x86.c @@ -25,7 +25,7 @@ void codegen_accumulate(int acc_reg, int delta) addbyte(0x81); /*ADD $acc_regs[c].count,acc_regs[c].dest*/ addbyte(0x05); addlong((uint32_t) (uintptr_t) &(acycs)); - addlong((uintptr_t) delta); + addlong((uintptr_t) -delta); } } diff --git a/src/codegen_new/codegen_accumulate.c b/src/codegen_new/codegen_accumulate.c index 3b71d78d7..d307f3102 100644 --- a/src/codegen_new/codegen_accumulate.c +++ b/src/codegen_new/codegen_accumulate.c @@ -22,7 +22,7 @@ void codegen_accumulate(ir_data_t *ir, int acc_reg, int delta) acc_regs[acc_reg].count += delta; if (delta != 0) { - uop_ADD_IMM(ir, IREG_acycs, IREG_acycs, delta); + uop_ADD_IMM(ir, IREG_acycs, IREG_acycs, -delta); } } diff --git a/src/cpu/386_dynarec.c b/src/cpu/386_dynarec.c index 37aa81f00..4d0b43402 100644 --- a/src/cpu/386_dynarec.c +++ b/src/cpu/386_dynarec.c @@ -296,7 +296,8 @@ void update_tsc(void) tsc += cycdiff; } else { /* TSC has not changed. */ - tsc += cycdiff; + if (cycdiff > 0) + tsc += cycdiff; } if (cycdiff > 0) {