]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
s390: Fix code generation for Iop_16Uto32(0x...:I16)
authorFlorian Krohm <flo2030@eich-krohm.de>
Thu, 14 Aug 2025 15:35:21 +0000 (15:35 +0000)
committerFlorian Krohm <flo2030@eich-krohm.de>
Thu, 14 Aug 2025 15:35:21 +0000 (15:35 +0000)
Using LHI is wrong as it sign-extends. Use IILF instead.
This has been wrong since day #1. Found by iropt-test.

VEX/priv/host_s390_defs.c

index 1ee1696b301db8dbe691d5360a927a08aa98ddae..c79aa11c0688ef57fc86e0b02ef5fc5d5d624cb4 100644 (file)
@@ -9258,7 +9258,10 @@ s390_widen_emit(UChar *buf, const s390_insn *insn, UInt from_size,
 
       case 2:
          if (insn->size == 4) {  /* 16 --> 32 */
-            return s390_emit_LHI(buf, r1, value);
+            if (sign_extend)
+               return s390_emit_LHI(buf, r1, value);
+            else
+               return s390_emit_IILF(buf, r1, value);
          }
          if (insn->size == 8) {  /* 16 --> 64 */
             if (sign_extend)