about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_emit_math.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_emit_math.c b/src/dynarec/rv64/dynarec_rv64_emit_math.c
index f6a7d88b..c076f2d3 100644
--- a/src/dynarec/rv64/dynarec_rv64_emit_math.c
+++ b/src/dynarec/rv64/dynarec_rv64_emit_math.c
@@ -1226,7 +1226,8 @@ void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3)
         }    
     }
     IFX(X_SF) {
-        ANDI(s3, s1, 1 << F_SF);    // 1<<F_SF is sign bit, so just mask
+        SRLI(s3, s1, 15-F_SF);    // put sign bit in place
+        ANDI(s3, s3, 1 << F_SF);    // 1<<F_SF is sign bit, so just mask
         OR(xFlags, xFlags, s3);
     }
     IFX(X_PF) {