diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-06-07 14:30:36 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-06-07 14:30:36 +0200 |
| commit | eb013f3492e8f8ab63d9894f8eefe0f01827db38 (patch) | |
| tree | f935310fca51546a74a759c0b9ee830603c377df /src | |
| parent | b2fd651abe8aa02ff9984e5d9a84394b7869ed17 (diff) | |
| download | box64-eb013f3492e8f8ab63d9894f8eefe0f01827db38.tar.gz box64-eb013f3492e8f8ab63d9894f8eefe0f01827db38.zip | |
[DYNAREC] This should fix RV64 and LA64 builds
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_pass2.h | 1 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_pass3.h | 6 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_private.h | 1 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_pass2.h | 1 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_pass3.h | 6 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_private.h | 1 |
6 files changed, 12 insertions, 4 deletions
diff --git a/src/dynarec/la64/dynarec_la64_pass2.h b/src/dynarec/la64/dynarec_la64_pass2.h index df7d7809..6410790d 100644 --- a/src/dynarec/la64/dynarec_la64_pass2.h +++ b/src/dynarec/la64/dynarec_la64_pass2.h @@ -15,6 +15,7 @@ if (ninst) { \ dyn->insts[ninst].address = (dyn->insts[ninst - 1].address + dyn->insts[ninst - 1].size); \ dyn->insts_size += 1 + ((dyn->insts[ninst - 1].x64.size > (dyn->insts[ninst - 1].size / 4)) ? dyn->insts[ninst - 1].x64.size : (dyn->insts[ninst - 1].size / 4)) / 15; \ + dyn->insts[ninst].ymm0_pass2 = dyn->ymm_zero; \ } #define INST_EPILOG dyn->insts[ninst].epilog = dyn->native_size; #define INST_NAME(name) diff --git a/src/dynarec/la64/dynarec_la64_pass3.h b/src/dynarec/la64/dynarec_la64_pass3.h index ecaf8a77..34654f99 100644 --- a/src/dynarec/la64/dynarec_la64_pass3.h +++ b/src/dynarec/la64/dynarec_la64_pass3.h @@ -16,8 +16,10 @@ #define MESSAGE(A, ...) \ if (box64_dynarec_dump) dynarec_log(LOG_NONE, __VA_ARGS__) #define NEW_INST \ - if (ninst) \ - addInst(dyn->instsize, &dyn->insts_size, dyn->insts[ninst - 1].x64.size, dyn->insts[ninst - 1].size / 4); + if (ninst) { \ + addInst(dyn->instsize, &dyn->insts_size, dyn->insts[ninst - 1].x64.size, dyn->insts[ninst - 1].size / 4); \ + dyn->insts[ninst].ymm0_pass3 = dyn->ymm_zero; \ + } #define INST_EPILOG #define INST_NAME(name) inst_name_pass3(dyn, ninst, name, rex) #define TABLE64(A, V) \ diff --git a/src/dynarec/la64/dynarec_la64_private.h b/src/dynarec/la64/dynarec_la64_private.h index 9086e68f..9fa7618b 100644 --- a/src/dynarec/la64/dynarec_la64_private.h +++ b/src/dynarec/la64/dynarec_la64_private.h @@ -85,6 +85,7 @@ typedef struct instruction_la64_s { uint16_t ymm0_add; // the ymm0 added by the opcode uint16_t ymm0_sub; // the ymm0 removed by the opcode uint16_t ymm0_out; // the ymmm0 at th end of the opcode + uint16_t ymm0_pass2, ymm0_pass3; uint8_t barrier_maybe; uint8_t will_write; uint8_t last_write; diff --git a/src/dynarec/rv64/dynarec_rv64_pass2.h b/src/dynarec/rv64/dynarec_rv64_pass2.h index 1c6e4734..f29cf267 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass2.h +++ b/src/dynarec/rv64/dynarec_rv64_pass2.h @@ -11,6 +11,7 @@ if(ninst) { \ dyn->insts[ninst].address = (dyn->insts[ninst-1].address+dyn->insts[ninst-1].size); \ dyn->insts_size += 1+((dyn->insts[ninst-1].x64.size>(dyn->insts[ninst-1].size/4))?dyn->insts[ninst-1].x64.size:(dyn->insts[ninst-1].size/4))/15; \ + dyn->insts[ninst].ymm0_pass2 = dyn->ymm_zero; \ } #define INST_EPILOG dyn->insts[ninst].epilog = dyn->native_size; #define INST_NAME(name) diff --git a/src/dynarec/rv64/dynarec_rv64_pass3.h b/src/dynarec/rv64/dynarec_rv64_pass3.h index 459c4e13..4a32a728 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass3.h +++ b/src/dynarec/rv64/dynarec_rv64_pass3.h @@ -14,8 +14,10 @@ #define MESSAGE(A, ...) if(box64_dynarec_dump) dynarec_log(LOG_NONE, __VA_ARGS__) #define NEW_INST \ if(box64_dynarec_dump) print_newinst(dyn, ninst); \ - if(ninst) \ - addInst(dyn->instsize, &dyn->insts_size, dyn->insts[ninst-1].x64.size, dyn->insts[ninst-1].size/4); + if(ninst) { \ + addInst(dyn->instsize, &dyn->insts_size, dyn->insts[ninst-1].x64.size, dyn->insts[ninst-1].size/4); \ + dyn->insts[ninst].ymm0_pass3 = dyn->ymm_zero; \ + } #define INST_EPILOG #define INST_NAME(name) inst_name_pass3(dyn, ninst, name, rex) diff --git a/src/dynarec/rv64/dynarec_rv64_private.h b/src/dynarec/rv64/dynarec_rv64_private.h index 9d3240fc..1b32b7fe 100644 --- a/src/dynarec/rv64/dynarec_rv64_private.h +++ b/src/dynarec/rv64/dynarec_rv64_private.h @@ -95,6 +95,7 @@ typedef struct instruction_rv64_s { uint16_t ymm0_add; // the ymm0 added by the opcode uint16_t ymm0_sub; // the ymm0 removed by the opcode uint16_t ymm0_out; // the ymmm0 at th end of the opcode + uint16_t ymm0_pass2, ymm0_pass3; int barrier_maybe; flagcache_t f_exit; // flags status at end of intruction extcache_t e; // extcache at end of intruction (but before poping) |