• Joseph Myers's avatar
    target/i386: fix pcmpxstrx substring search · ae35eea7
    Joseph Myers authored
    One of the cases of the SSE4.2 pcmpestri / pcmpestrm / pcmpistri /
    pcmpistrm instructions does a substring search.  The implementation of
    this case in the pcmpxstrx helper is incorrect.  The operation in this
    case is a search for a string (argument d to the helper) in another
    string (argument s to the helper); if a copy of d at a particular
    position would run off the end of s, the resulting output bit should
    be 0 whether or not the strings match in the region where they
    overlap, but the QEMU implementation was wrongly comparing only up to
    the point where s ends and counting it as a match if an initial
    segment of d matched a terminal segment of s.  Here, "run off the end
    of s" means that some byte of d would overlap some byte outside of s;
    thus, if d has zero length, it is considered to match everywhere,
    including after the end of s.  This patch fixes the implementation to
    correspond with the proper instruction semantics.  This fixes four gcc
    test failures in my GCC 6-based testing.
    Signed-off-by: 's avatarJoseph Myers <joseph@codesourcery.com>
    
    Message-Id: <alpine.DEB.2.20.1708102139310.8101@digraph.polyomino.org.uk>
    Signed-off-by: 's avatarPaolo Bonzini <pbonzini@redhat.com>
    ae35eea7
Name
Last commit
Last update
accel Loading commit data...
audio Loading commit data...
backends Loading commit data...
block Loading commit data...
bsd-user Loading commit data...
chardev Loading commit data...
contrib Loading commit data...
crypto Loading commit data...
default-configs Loading commit data...
disas Loading commit data...
docs Loading commit data...
dtc @ 558cd81b Loading commit data...
fpu Loading commit data...
fsdev Loading commit data...
gdb-xml Loading commit data...
hw Loading commit data...
include Loading commit data...
io Loading commit data...
libdecnumber Loading commit data...
linux-headers Loading commit data...
linux-user Loading commit data...
migration Loading commit data...
nbd Loading commit data...
net Loading commit data...
pc-bios Loading commit data...
po Loading commit data...
qapi Loading commit data...
qga Loading commit data...
qobject Loading commit data...
qom Loading commit data...
replay Loading commit data...
roms Loading commit data...
scripts Loading commit data...
slirp Loading commit data...
stubs Loading commit data...
target Loading commit data...
tcg Loading commit data...
tests Loading commit data...
trace Loading commit data...
ui Loading commit data...
util Loading commit data...
.dir-locals.el Loading commit data...
.editorconfig Loading commit data...
.exrc Loading commit data...
.gdbinit Loading commit data...
.gitignore Loading commit data...
.gitmodules Loading commit data...
.mailmap Loading commit data...
.shippable.yml Loading commit data...
.travis.yml Loading commit data...
CODING_STYLE Loading commit data...
COPYING Loading commit data...
COPYING.LIB Loading commit data...
COPYING.PYTHON Loading commit data...
Changelog Loading commit data...
HACKING Loading commit data...
LICENSE Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
Makefile.objs Loading commit data...
Makefile.target Loading commit data...
README Loading commit data...
VERSION Loading commit data...
arch_init.c Loading commit data...
balloon.c Loading commit data...
block.c Loading commit data...
blockdev-nbd.c Loading commit data...
blockdev.c Loading commit data...
blockjob.c Loading commit data...
bootdevice.c Loading commit data...
bt-host.c Loading commit data...
bt-vhci.c Loading commit data...
configure Loading commit data...
cpus-common.c Loading commit data...
cpus.c Loading commit data...
device-hotplug.c Loading commit data...
device_tree.c Loading commit data...
disas.c Loading commit data...
dma-helpers.c Loading commit data...
dump.c Loading commit data...
exec.c Loading commit data...
gdbstub.c Loading commit data...
hax-stub.c Loading commit data...
hmp-commands-info.hx Loading commit data...
hmp-commands.hx Loading commit data...
hmp.c Loading commit data...
hmp.h Loading commit data...
ioport.c Loading commit data...
iothread.c Loading commit data...
memory.c Loading commit data...
memory_ldst.inc.c Loading commit data...
memory_mapping.c Loading commit data...
module-common.c Loading commit data...
monitor.c Loading commit data...
numa.c Loading commit data...
os-posix.c Loading commit data...
os-win32.c Loading commit data...
qapi-schema.json Loading commit data...
qdev-monitor.c Loading commit data...
qdict-test-data.txt Loading commit data...
qemu-bridge-helper.c Loading commit data...
qemu-doc.texi Loading commit data...
qemu-ga.texi Loading commit data...
qemu-img-cmds.hx Loading commit data...
qemu-img.c Loading commit data...
qemu-img.texi Loading commit data...
qemu-io-cmds.c Loading commit data...
qemu-io.c Loading commit data...
qemu-nbd.c Loading commit data...
qemu-nbd.texi Loading commit data...
qemu-option-trace.texi Loading commit data...
qemu-options-wrapper.h Loading commit data...
qemu-options.h Loading commit data...
qemu-options.hx Loading commit data...
qemu-seccomp.c Loading commit data...
qemu-tech.texi Loading commit data...
qemu.nsi Loading commit data...
qemu.sasl Loading commit data...
qmp.c Loading commit data...
qtest.c Loading commit data...
replication.c Loading commit data...
replication.h Loading commit data...
rules.mak Loading commit data...
thunk.c Loading commit data...
tpm.c Loading commit data...
trace-events Loading commit data...
version.rc Loading commit data...
vl.c Loading commit data...