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