qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 15/26] target/s390x: fix COMPARE LOGICAL LONG EX


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH 15/26] target/s390x: fix COMPARE LOGICAL LONG EXTENDED
Date: Fri, 26 May 2017 08:23:13 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0

On 05/25/2017 02:04 PM, Aurelien Jarno wrote:
There are multiple issues with the COMPARE LOGICAL LONG EXTENDED
instruction:
- The test between the two operands is inverted, leading to an inversion
   of the cc values 1 and 2.
- The address and length of an operand continue to be decreased after
   reaching the end of this operand. These values are then wrong write
   back to the registers.
- We should limit the amount of bytes to process, so that interrupts can
   be served correctly.

Signed-off-by: Aurelien Jarno <address@hidden>
---
  target/s390x/mem_helper.c | 36 ++++++++++++++++++++++++++++--------
  1 file changed, 28 insertions(+), 8 deletions(-)

diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 1dc71fe5f0..bd3bce3623 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -716,28 +716,48 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, 
uint64_t a2,
      uint64_t srclen = get_length(env, r3 + 1);
      uint64_t src = get_address(env, r3);
      uint8_t pad = a2 & 0xff;
+    uint64_t len = MAX(srclen, destlen);
      uint32_t cc = 0;
if (!(destlen || srclen)) {

Might as well replace this with len == 0 now.

          if (v1 != v2) {
-            cc = (v1 < v2) ? 1 : 2;
+            cc = (v1 > v2) ? 1 : 2;

This would have been less confusing, perhaps, if we'd not used "src" and "dest" -- and doubly so since they are two sources -- but rather "src1" and "src3", which corresponds better to the PoO text.

That said,

Reviewed-by: Richard Henderson <address@hidden>


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]