28 lines
1.1 KiB
Diff
28 lines
1.1 KiB
Diff
|
commit ba73f8d2ebe4b5fe8163ee5ab806f0e50961ebdf
|
||
|
Author: Andreas Arnez <arnez@linux.ibm.com>
|
||
|
Date: Tue Nov 3 18:17:30 2020 +0100
|
||
|
|
||
|
Bug 428648 - s390x: Force 12-bit amode for vector loads in isel
|
||
|
|
||
|
Similar to Bug 417452, where the instruction selector sometimes attempted
|
||
|
to generate vector stores with a 20-bit displacement, the same problem has
|
||
|
now been reported with vector loads.
|
||
|
|
||
|
The problem is caused in s390_isel_vec_expr_wrk(), where the addressing
|
||
|
mode is generated with s390_isel_amode() instead of
|
||
|
s390_isel_amode_short(). This is fixed.
|
||
|
|
||
|
diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c
|
||
|
index 2f80dd850..134f3eb6f 100644
|
||
|
--- a/VEX/priv/host_s390_isel.c
|
||
|
+++ b/VEX/priv/host_s390_isel.c
|
||
|
@@ -3741,7 +3741,7 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr)
|
||
|
/* --------- LOAD --------- */
|
||
|
case Iex_Load: {
|
||
|
HReg dst = newVRegV(env);
|
||
|
- s390_amode *am = s390_isel_amode(env, expr->Iex.Load.addr);
|
||
|
+ s390_amode *am = s390_isel_amode_short(env, expr->Iex.Load.addr);
|
||
|
|
||
|
if (expr->Iex.Load.end != Iend_BE)
|
||
|
goto irreducible;
|