diff options
author | David Hildenbrand | 2019-03-07 13:15:21 +0100 |
---|---|---|
committer | Cornelia Huck | 2019-03-11 09:31:01 +0100 |
commit | 60e9e3f1b0117a3aefd4a8047168f1c20f6c9013 (patch) | |
tree | d6e00fd62c6110d65549451b0ec6c3299246e6c7 /target/s390x/insn-data.def | |
parent | s390x/tcg: Implement VECTOR LOAD MULTIPLE (diff) | |
download | qemu-60e9e3f1b0117a3aefd4a8047168f1c20f6c9013.tar.gz qemu-60e9e3f1b0117a3aefd4a8047168f1c20f6c9013.tar.xz qemu-60e9e3f1b0117a3aefd4a8047168f1c20f6c9013.zip |
s390x/tcg: Implement VECTOR LOAD TO BLOCK BOUNDARY
Very similar to LOAD COUNT TO BLOCK BOUNDARY, but instead of only
calculating, the actual vector is loaded. Use a temporary vector to
not modify the real vector on exceptions. Initialize that one to zero,
to not leak any data. Provide a fast path if we're loading a full
vector.
As we don't have gvec ool handlers for single vectors, just calculate
the vector address manually.
We can reuse the helper later on for VECTOR LOAD WITH LENGTH. In fact,
we are going to name it "vll" right from the beginning, because that's
a better match.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20190307121539.12842-15-david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'target/s390x/insn-data.def')
-rw-r--r-- | target/s390x/insn-data.def | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def index fa0f3a9003..ad8df5283c 100644 --- a/target/s390x/insn-data.def +++ b/target/s390x/insn-data.def @@ -1002,6 +1002,8 @@ F(0xe704, VLLEZ, VRX, V, la2, 0, 0, 0, vllez, 0, IF_VEC) /* VECTOR LOAD MULTIPLE */ F(0xe736, VLM, VRS_a, V, la2, 0, 0, 0, vlm, 0, IF_VEC) +/* VECTOR LOAD TO BLOCK BOUNDARY */ + F(0xe707, VLBB, VRX, V, la2, 0, 0, 0, vlbb, 0, IF_VEC) #ifndef CONFIG_USER_ONLY /* COMPARE AND SWAP AND PURGE */ |