You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
1
|
|
2
|
3
|
4
|
5
(4) |
6
(3) |
7
(3) |
8
(2) |
|
9
(1) |
10
(1) |
11
(2) |
12
(2) |
13
(3) |
14
(7) |
15
(2) |
|
16
|
17
|
18
(1) |
19
|
20
(4) |
21
(1) |
22
(1) |
|
23
|
24
|
25
(2) |
26
(1) |
27
(2) |
28
(2) |
29
(1) |
|
From: Andreas A. <ar...@so...> - 2020-02-18 10:17:59
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=f27fe920cd321ca3cf4bc03a72879fd18bf2736f commit f27fe920cd321ca3cf4bc03a72879fd18bf2736f Author: Andreas Arnez <ar...@li...> Date: Wed Feb 12 14:13:55 2020 +0100 Bug 417452 - s390x: Force 12-bit amode for vector stores in isel It was seen that the s390 instruction selector chose a wrong addressing mode for storing a vector register. The VST instruction only handles short (12-bit unsigned) displacements, but a long (20-bit signed) displacement was generated instead, resulting in a panic: vex: the `impossible' happened: s390_insn_store_emit: unknown dst->tag for HRcVec128 The fix prevents long displacements for vector store operations. It also optimizes vector store operations from an Iex_Get, by converting them to a memory copy. This optimization was already performed for integer registers. Diff: --- NEWS | 1 + VEX/priv/host_s390_defs.c | 2 +- VEX/priv/host_s390_isel.c | 67 +++++++++++++++++++++++++++++++++-------------- 3 files changed, 49 insertions(+), 21 deletions(-) diff --git a/NEWS b/NEWS index 79b3d7c..99ece46 100644 --- a/NEWS +++ b/NEWS @@ -116,6 +116,7 @@ n-i-bz Add support for the Linux io_uring system calls n-i-bz sys_statx: don't complain if both |filename| and |buf| are NULL. n-i-bz Fix non-glibc build of test suite with s390x_features 416667 gcc10 ppc64le impossible constraint in 'asm' in test_isa. +417452 s390_insn_store_emit: dst->tag for HRcVec128 Release 3.15.0 (12 April 2019) diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c index 9ad7240..47928cb 100644 --- a/VEX/priv/host_s390_defs.c +++ b/VEX/priv/host_s390_defs.c @@ -6314,7 +6314,7 @@ s390_insn_memcpy(UChar size, s390_amode *dst, s390_amode *src) insn->variant.memcpy.src = src; insn->variant.memcpy.dst = dst; - vassert(size == 1 || size == 2 || size == 4 || size == 8); + vassert(size == 1 || size == 2 || size == 4 || size == 8 || size == 16); return insn; } diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c index 97614c8..fff81fe 100644 --- a/VEX/priv/host_s390_isel.c +++ b/VEX/priv/host_s390_isel.c @@ -302,12 +302,14 @@ ulong_fits_signed_8bit(ULong val) return val == v; } -/* EXPR is an expression that is used as an address. Return an s390_amode - for it. If select_b12_b20_only is true the returned amode must be either - S390_AMODE_B12 or S390_AMODE_B20. */ +/* EXPR is an expression that is used as an address. Return an s390_amode for + it. If no_index is true the returned amode must be either S390_AMODE_B12 or + S390_AMODE_B20. If short_displacement is true it must be either + S390_AMODE_B12 or S390_AMODE_BX12. */ static s390_amode * s390_isel_amode_wrk(ISelEnv *env, IRExpr *expr, - Bool select_b12_b20_only __attribute__((unused))) + Bool no_index __attribute__((unused)), + Bool short_displacement) { if (expr->tag == Iex_Binop && expr->Iex.Binop.op == Iop_Add64) { IRExpr *arg1 = expr->Iex.Binop.arg1; @@ -328,7 +330,7 @@ s390_isel_amode_wrk(ISelEnv *env, IRExpr *expr, if (ulong_fits_unsigned_12bit(value)) { return s390_amode_b12((Int)value, s390_isel_int_expr(env, arg1)); } - if (ulong_fits_signed_20bit(value)) { + if (!short_displacement && ulong_fits_signed_20bit(value)) { return s390_amode_b20((Int)value, s390_isel_int_expr(env, arg1)); } } @@ -348,7 +350,25 @@ s390_isel_amode(ISelEnv *env, IRExpr *expr) /* Address computation should yield a 64-bit value */ vassert(typeOfIRExpr(env->type_env, expr) == Ity_I64); - am = s390_isel_amode_wrk(env, expr, /* B12, B20 only */ False); + am = s390_isel_amode_wrk(env, expr, False, False); + + /* Check post-condition */ + vassert(s390_amode_is_sane(am)); + + return am; +} + +/* Sometimes we need an amode with short (12-bit) displacement. An example is + the vector-store opcode. */ +static s390_amode * +s390_isel_amode_short(ISelEnv *env, IRExpr *expr) +{ + s390_amode *am; + + /* Address computation should yield a 64-bit value */ + vassert(typeOfIRExpr(env->type_env, expr) == Ity_I64); + + am = s390_isel_amode_wrk(env, expr, False, True); /* Check post-condition */ vassert(s390_amode_is_sane(am)); @@ -379,7 +399,7 @@ s390_isel_amode_b12_b20(ISelEnv *env, IRExpr *expr) /* Address computation should yield a 64-bit value */ vassert(typeOfIRExpr(env->type_env, expr) == Ity_I64); - am = s390_isel_amode_wrk(env, expr, /* B12, B20 only */ True); + am = s390_isel_amode_wrk(env, expr, True, False); /* Check post-condition */ vassert(s390_amode_is_sane(am) && @@ -4727,7 +4747,26 @@ s390_isel_stmt(ISelEnv *env, IRStmt *stmt) if (stmt->Ist.Store.end != Iend_BE) goto stmt_fail; - am = s390_isel_amode(env, stmt->Ist.Store.addr); + if (tyd == Ity_V128) { + am = s390_isel_amode_short(env, stmt->Ist.Store.addr); + } else { + am = s390_isel_amode(env, stmt->Ist.Store.addr); + } + + /* Check whether we can use a memcpy. Currently, the restriction + is that both amodes need to be B12, so MVC can be emitted. + We do not consider a store whose data expression is a load because + we don't want to deal with overlapping locations. */ + /* store(get) never overlaps*/ + if (am->tag == S390_AMODE_B12 && + stmt->Ist.Store.data->tag == Iex_Get) { + UInt offset = stmt->Ist.Store.data->Iex.Get.offset; + s390_amode *from = s390_amode_for_guest_state(offset); + if (from->tag == S390_AMODE_B12) { + addInstr(env, s390_insn_memcpy(sizeofIRType(tyd), am, from)); + return; + } + } switch (tyd) { case Ity_I8: @@ -4742,18 +4781,6 @@ s390_isel_stmt(ISelEnv *env, IRStmt *stmt) addInstr(env, s390_insn_mimm(sizeofIRType(tyd), am, value)); return; } - /* Check whether we can use a memcpy here. Currently, the restriction - is that both amodes need to be B12, so MVC can be emitted. - We do not consider a store whose data expression is a load because - we don't want to deal with overlapping locations. */ - /* store(get) never overlaps*/ - if (am->tag == S390_AMODE_B12 && - stmt->Ist.Store.data->tag == Iex_Get) { - UInt offset = stmt->Ist.Store.data->Iex.Get.offset; - s390_amode *from = s390_amode_for_guest_state(offset); - addInstr(env, s390_insn_memcpy(sizeofIRType(tyd), am, from)); - return; - } /* General case: compile data into a register */ src = s390_isel_int_expr(env, stmt->Ist.Store.data); break; |