X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flightrec%2Fregcache.c;h=45d77c6ccd578cd87db3cc5f693666004f265934;hb=1e98ada32a77394ce8d14a33d689680764d8e41a;hp=d9926d388908c4c3a60fd88b7b89428f02312c65;hpb=6fffa2ff148630fc82e3b3ed5efa7596e38be4d0;p=pcsx_rearmed.git diff --git a/deps/lightrec/regcache.c b/deps/lightrec/regcache.c index d9926d38..45d77c6c 100644 --- a/deps/lightrec/regcache.c +++ b/deps/lightrec/regcache.c @@ -296,6 +296,21 @@ void lightrec_temp_set_value(struct regcache *cache, u8 jit_reg, intptr_t value) nreg->value = value; } +u8 lightrec_alloc_reg_temp_with_value(struct regcache *cache, + jit_state_t *_jit, intptr_t value) +{ + s8 reg; + + reg = lightrec_get_reg_with_value(cache, value); + if (reg < 0) { + reg = lightrec_alloc_reg_temp(cache, _jit); + jit_movi((u8)reg, value); + lightrec_temp_set_value(cache, (u8)reg, value); + } + + return (u8)reg; +} + u8 lightrec_alloc_reg_out(struct regcache *cache, jit_state_t *_jit, u16 reg, u8 flags) { @@ -400,6 +415,22 @@ u8 lightrec_alloc_reg_in(struct regcache *cache, jit_state_t *_jit, return jit_reg; } +void lightrec_remap_reg(struct regcache *cache, jit_state_t *_jit, + u8 jit_reg, u16 reg_out, bool discard) +{ + struct native_register *nreg; + + lightrec_discard_reg_if_loaded(cache, reg_out); + + nreg = lightning_reg_to_lightrec(cache, jit_reg); + clean_reg(_jit, nreg, jit_reg, !discard); + + nreg->output = true; + nreg->emulated_register = reg_out; + nreg->extend = nreg->extended; + nreg->zero_extend = nreg->zero_extended; +} + static bool reg_pc_is_mapped(struct regcache *cache) { struct native_register *nreg = lightning_reg_to_lightrec(cache, JIT_V0);