mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
tcg-i386: Introduce limited deposit support
x86 cannot provide an optimized generic deposit implementation. But at least for a few special cases, namely for writing bits 0..7, 8..15, and 0..15, versions using only a single instruction are feasible. Introducing such limited support improves emulating 16-bit x86 code on x86, but also rarer cases where 32-bit or 64-bit code accesses bytes or words. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
7e17a21706
commit
a4773324b4
4 changed files with 40 additions and 4 deletions
|
@ -2045,7 +2045,7 @@ static inline void tcg_gen_deposit_i32(TCGv_i32 ret, TCGv_i32 arg1,
|
|||
TCGv_i32 arg2, unsigned int ofs,
|
||||
unsigned int len)
|
||||
{
|
||||
if (TCG_TARGET_HAS_deposit_i32) {
|
||||
if (TCG_TARGET_HAS_deposit_i32 && TCG_TARGET_deposit_i32_valid(ofs, len)) {
|
||||
tcg_gen_op5ii_i32(INDEX_op_deposit_i32, ret, arg1, arg2, ofs, len);
|
||||
} else {
|
||||
uint32_t mask = (1u << len) - 1;
|
||||
|
@ -2064,7 +2064,7 @@ static inline void tcg_gen_deposit_i64(TCGv_i64 ret, TCGv_i64 arg1,
|
|||
TCGv_i64 arg2, unsigned int ofs,
|
||||
unsigned int len)
|
||||
{
|
||||
if (TCG_TARGET_HAS_deposit_i64) {
|
||||
if (TCG_TARGET_HAS_deposit_i64 && TCG_TARGET_deposit_i64_valid(ofs, len)) {
|
||||
tcg_gen_op5ii_i64(INDEX_op_deposit_i64, ret, arg1, arg2, ofs, len);
|
||||
} else {
|
||||
uint64_t mask = (1ull << len) - 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue