diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-11-15 15:34:22 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-11-15 15:34:22 +0100 |
| commit | 8c1335626f69bf93e43ba701b89e0686b35875f7 (patch) | |
| tree | cc536363497b4fd4ea81aee76ca600f01830efa5 /src | |
| parent | 8b0eec097bf9f9c9166e24d902394a3e85082c54 (diff) | |
| download | box64-8c1335626f69bf93e43ba701b89e0686b35875f7.tar.gz box64-8c1335626f69bf93e43ba701b89e0686b35875f7.zip | |
[ARM64_DYNAREC] A few fixes to 8/16bits logic/math opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_emit_logic.c | 18 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_emit_math.c | 4 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_helper.h | 10 |
3 files changed, 16 insertions, 16 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_emit_logic.c b/src/dynarec/arm64/dynarec_arm64_emit_logic.c index 50791333..7433dc86 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_logic.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_logic.c @@ -350,7 +350,7 @@ void emit_or8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) } // emit OR8 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch -void emit_or8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4) +void emit_or8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4) { int mask = convert_bitmask_w(c); if(!mask) { @@ -401,7 +401,7 @@ void emit_xor8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) } // emit XOR8 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch -void emit_xor8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4) +void emit_xor8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4) { int mask = convert_bitmask_w(c); if(!mask) { @@ -469,7 +469,7 @@ void emit_and8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) } // emit AND8 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch -void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4) +void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4) { int mask = convert_bitmask_w(c); if(!mask) { @@ -539,9 +539,9 @@ void emit_or16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) // emit OR16 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch void emit_or16c(dynarec_arm_t* dyn, int ninst, int s1, int16_t c, int s3, int s4) { - int mask = convert_bitmask_w(c); + int mask = convert_bitmask_w((uint16_t)c); if(!mask) { - MOV32w(s3, c); + MOV32w(s3, (uint16_t)c); emit_or16(dyn, ninst, s1, s3, s3, s4); return; } @@ -590,9 +590,9 @@ void emit_xor16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) // emit XOR16 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch void emit_xor16c(dynarec_arm_t* dyn, int ninst, int s1, int16_t c, int s3, int s4) { - int mask = convert_bitmask_w(c); + int mask = convert_bitmask_w((uint16_t)c); if(!mask) { - MOV32w(s3, c); + MOV32w(s3, (uint16_t)c); emit_xor16(dyn, ninst, s1, s3, s3, s4); return; } @@ -659,9 +659,9 @@ void emit_and16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) // emit AND16 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch void emit_and16c(dynarec_arm_t* dyn, int ninst, int s1, int16_t c, int s3, int s4) { - int mask = convert_bitmask_w(c); + int mask = convert_bitmask_w((uint16_t)c); if(!mask) { - MOV32w(s3, c); + MOV32w(s3, (uint16_t)c); emit_and16(dyn, ninst, s1, s3, s3, s4); return; } diff --git a/src/dynarec/arm64/dynarec_arm64_emit_math.c b/src/dynarec/arm64/dynarec_arm64_emit_math.c index b23244c8..ee3d4ecc 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_math.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_math.c @@ -345,7 +345,7 @@ void emit_add8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) } // emit ADD8 instruction, from s1, const c, store result in s1 using s3 and s4 as scratch -void emit_add8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4) +void emit_add8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4) { IFX(X_PEND) { MOV32w(s4, c); @@ -432,7 +432,7 @@ void emit_sub8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) } // emit SUB8 instruction, from s1, constant c, store result in s1 using s3 and s4 as scratch -void emit_sub8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4, int s5) +void emit_sub8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4, int s5) { MAYUSE(s5); IFX(X_ALL|X_PEND) { diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 84533591..e9fd068b 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -1453,11 +1453,11 @@ void emit_test32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i void emit_add32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4); void emit_add32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4, int s5); void emit_add8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4); -void emit_add8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4); +void emit_add8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4); void emit_sub32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4); void emit_sub32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4, int s5); void emit_sub8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4); -void emit_sub8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4, int s5); +void emit_sub8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4, int s5); void emit_or32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4); void emit_or32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4); void emit_xor32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4); @@ -1465,11 +1465,11 @@ void emit_xor32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, in void emit_and32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4); void emit_and32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4); void emit_or8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4); -void emit_or8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4); +void emit_or8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4); void emit_xor8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4); -void emit_xor8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4); +void emit_xor8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4); void emit_and8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4); -void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4); +void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4); void emit_add16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4); //void emit_add16c(dynarec_arm_t* dyn, int ninst, int s1, int32_t c, int s3, int s4); void emit_sub16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4); |