https://bugs.kde.org/show_bug.cgi?id=385409

--- Comment #45 from Vadim Barkov <vbr...@gmail.com> ---
(In reply to Julian Seward from comment #44)

The new VFENE implementation has no problems. I just want to point you that in
my opinion the memchecks' "Conditional jump or move depends on uninitialised
value(s)" error for "VFENEZB %v0, %v0, %v0" instruction (which is used in
inline ) can be considered as correct error (from some point of view it is not
false positive).

Let's assume that we have a vector register %v0:
0xaa11223344556677, 0x8800???????????? -- the contents of %v0
"?" sign means that that bytes are uninitialized/undefined for some reason
(e.g. 
 because of "vector load with length" VLL instruction)

We have "VFENEZBS %v0, %v0, %v0" instruction in code. It searchs for the zero
byte in %v0, writes the index of zero byte in byte 7 of %v0 and upgrades
condition code (CC, used for branches)
The result of execution is:
0x000000000000009, 0x0000000000000000 -- the new contents of %v0

On the one hand this result is memcheck clean (there is issues like
"Conditional jump or move depends on uninitialised value(s)") because the CPU
works using this algorithm:

int index;
for(index = 0; index < 16; index++) {
   if(v0[index] == 0)
      break;
}
return index;

But on the other hand the S390x specification ("z/Archtecture. Principles of
Operation", SA22-7832-10) says that VFENE with ZS flag set (if mnemonic of
operation contains the letter "Z") reads all bytes of second operand (in our
example from %v0). So we get situation when instruction reads uninitialized
bytes.
Is the result of this instruction detemined in the terms of valgrind's
terminology? That's my question.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to