]> git.proxmox.com Git - mirror_qemu.git/commit
s390x/tcg: Don't model FP registers as globals
authorDavid Hildenbrand <david@redhat.com>
Mon, 4 Feb 2019 15:44:06 +0000 (16:44 +0100)
committerCornelia Huck <cohuck@redhat.com>
Mon, 4 Feb 2019 17:32:17 +0000 (18:32 +0100)
commit80a7b759493e05579c26e8a913a3d6349641853e
tree2e491f7d55582caf191d7a026f5c295ad368ac71
parentaede5d5dfc5f3e4ea7467b28c51fda2f8945d117
s390x/tcg: Don't model FP registers as globals

As floating point registers overlay some vector registers and we want
to make use of the general tcg_gvec infrastructure that assumes vectors
are not stored in globals but in memory, don't model floating point
registers as globals anymore. This is then similar to how arm handles
it.

Reading/writing a floating point register means reading/writing memory now.

Break up ugly in2_x2() handling that modifies both, in1 and in2 into
in2_x2l and in2_x2h. This makes things more readable. Also, in1_x1() is
ugly as it touches out/out2, get rid of that and use prep_x1() instead.

As we are no longer able to use the original global variables for
out/out2, we have to use new temporary variables and write from them to
the target registers using wout_ helpers.

E.g. an instruction that reads and writes x1 will use
- prep_x1 to get the values into out/out2
- wout_x1 to write the values from out/out2
This special handling is needed for x1 as it is often used along with
other inputs, so in1/in2 is already used.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20190204154406.16122-1-david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
target/s390x/insn-data.def
target/s390x/translate.c