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-06 11:31:46
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=e83c28e10c99d52b22ee69e25857dac8bf3d5240 commit e83c28e10c99d52b22ee69e25857dac8bf3d5240 Author: Andreas Arnez <ar...@li...> Date: Thu Jan 16 13:49:10 2020 +0100 Bug 416301 - s390x: Support "compare and signal" instructions Add VEX support for the s390x "compare and signal" instructions KEBR, KDBR, KXBR, KEB, and KDB. For now, let them behave exactly like their non-signalling counterparts. Enhance the bfp-4 test case to cover these instructions as well. Update the list of supported instructions in s390-opcodes.csv. Add a disclaimer to README.s390, explaining that FP signalling is not handled accurately on s390x at the moment. Diff: --- NEWS | 1 + README.s390 | 7 +- VEX/priv/guest_s390_toIR.c | 134 +++++++++++++++++++++++--------------- docs/internals/s390-opcodes.csv | 10 +-- none/tests/s390x/bfp-4.c | 130 +++++++++++++++++++++++------------- none/tests/s390x/bfp-4.stdout.exp | 86 ++++++++++++++++++++++-- 6 files changed, 255 insertions(+), 113 deletions(-) diff --git a/NEWS b/NEWS index 96ed2ff..c9ec9fa 100644 --- a/NEWS +++ b/NEWS @@ -105,6 +105,7 @@ where XXXXXX is the bug number as listed below. 415757 vex x86->IR: 0x66 0xF 0xCE 0x4F (bswapw) 416239 valgrind crashes when handling clock_adjtime 416286 DRD reports "conflicting load" error on std::mutex::lock() +416301 s390x: "compare and signal" not supported 416387 finit_module and bpf syscalls are unhandled on arm64 416464 Fix false reports for uninitialized memory for PR_CAPBSET_READ/DROP n-i-bz Fix minor one time leaks in dhat. diff --git a/README.s390 b/README.s390 index ac9485a..7df386e 100644 --- a/README.s390 +++ b/README.s390 @@ -11,7 +11,10 @@ Limitations ----------- - 31-bit client programs are not supported. - Hexadecimal floating point is not supported. -- Transactional memory is not supported. +- Transactional memory is not supported. The transactional-execution + facility is masked off from HWCAP. +- FP signalling is not accurate. E.g., the "compare and signal" + instructions behave like their non-signalling counterparts. - memcheck, cachegrind, drd, helgrind, massif, lackey, and none are supported. - On machine models predating z10, cachegrind will assume a z10 cache @@ -21,8 +24,6 @@ Limitations - Some gcc versions use mvc to copy 4/8 byte values. This will affect certain debug messages. For example, memcheck will complain about 4 one-byte reads/writes instead of just a single read/write. -- The transactional-execution facility is not supported; it is masked - off from HWCAP. Hardware facilities diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c index a8f0d3a..ed95fc0 100644 --- a/VEX/priv/guest_s390_toIR.c +++ b/VEX/priv/guest_s390_toIR.c @@ -1204,6 +1204,16 @@ get_dpr_dw0(UInt archreg) return IRExpr_Get(fpr_dw0_offset(archreg), Ity_D64); } +/* Read a float of given type from an fpr. */ +static IRExpr * +get_fpr_float(UInt archreg, IRType type) +{ + if (type == Ity_F128) + return get_fpr_pair(archreg); + else + return IRExpr_Get(fpr_offset(archreg), type); +} + /*------------------------------------------------------------*/ /*--- gpr registers ---*/ /*------------------------------------------------------------*/ @@ -14055,94 +14065,103 @@ s390_irgen_AXBR(UChar r1, UChar r2) return "axbr"; } +/* Helper for "compare" insns CEBR, CDBR, CXBR, and their signalling + counterparts. */ static const HChar * -s390_irgen_CEBR(UChar r1, UChar r2) +s390_irgen_CxBR(const HChar *mnem, UChar r1, UChar r2, IRType type, IROp cmp_op) { - IRTemp op1 = newTemp(Ity_F32); - IRTemp op2 = newTemp(Ity_F32); + IRTemp op1 = newTemp(type); + IRTemp op2 = newTemp(type); IRTemp cc_vex = newTemp(Ity_I32); IRTemp cc_s390 = newTemp(Ity_I32); - assign(op1, get_fpr_w0(r1)); - assign(op2, get_fpr_w0(r2)); - assign(cc_vex, binop(Iop_CmpF32, mkexpr(op1), mkexpr(op2))); + assign(op1, get_fpr_float(r1, type)); + assign(op2, get_fpr_float(r2, type)); + assign(cc_vex, binop(cmp_op, mkexpr(op1), mkexpr(op2))); assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); + return mnem; +} + +static const HChar * +s390_irgen_CEBR(UChar r1, UChar r2) +{ + return s390_irgen_CxBR("cebr", r1, r2, Ity_F32, Iop_CmpF32); +} - return "cebr"; +static const HChar * +s390_irgen_KEBR(UChar r1, UChar r2) +{ + return s390_irgen_CxBR("kebr", r1, r2, Ity_F32, Iop_CmpF32); } static const HChar * s390_irgen_CDBR(UChar r1, UChar r2) { - IRTemp op1 = newTemp(Ity_F64); - IRTemp op2 = newTemp(Ity_F64); - IRTemp cc_vex = newTemp(Ity_I32); - IRTemp cc_s390 = newTemp(Ity_I32); + return s390_irgen_CxBR("cdbr", r1, r2, Ity_F64, Iop_CmpF64); +} - assign(op1, get_fpr_dw0(r1)); - assign(op2, get_fpr_dw0(r2)); - assign(cc_vex, binop(Iop_CmpF64, mkexpr(op1), mkexpr(op2))); +static const HChar * +s390_irgen_KDBR(UChar r1, UChar r2) +{ + return s390_irgen_CxBR("kdbr", r1, r2, Ity_F64, Iop_CmpF64); +} - assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); - s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); +static const HChar * +s390_irgen_CXBR(UChar r1, UChar r2) +{ + return s390_irgen_CxBR("cxbr", r1, r2, Ity_F128, Iop_CmpF128); +} - return "cdbr"; +static const HChar * +s390_irgen_KXBR(UChar r1, UChar r2) +{ + return s390_irgen_CxBR("kxbr", r1, r2, Ity_F128, Iop_CmpF128); } +/* Helper for "compare" insns CEB, CDB, and their signalling counterparts. */ static const HChar * -s390_irgen_CXBR(UChar r1, UChar r2) +s390_irgen_CxB(const HChar *mnem, UChar r1, IRTemp op2addr, IRType type, + IROp cmp_op) { - IRTemp op1 = newTemp(Ity_F128); - IRTemp op2 = newTemp(Ity_F128); + IRTemp op1 = newTemp(type); + IRTemp op2 = newTemp(type); IRTemp cc_vex = newTemp(Ity_I32); IRTemp cc_s390 = newTemp(Ity_I32); - assign(op1, get_fpr_pair(r1)); - assign(op2, get_fpr_pair(r2)); - assign(cc_vex, binop(Iop_CmpF128, mkexpr(op1), mkexpr(op2))); + assign(op1, get_fpr_float(r1, type)); + assign(op2, load(type, mkexpr(op2addr))); + assign(cc_vex, binop(cmp_op, mkexpr(op1), mkexpr(op2))); assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); - - return "cxbr"; + return mnem; } static const HChar * s390_irgen_CEB(UChar r1, IRTemp op2addr) { - IRTemp op1 = newTemp(Ity_F32); - IRTemp op2 = newTemp(Ity_F32); - IRTemp cc_vex = newTemp(Ity_I32); - IRTemp cc_s390 = newTemp(Ity_I32); - - assign(op1, get_fpr_w0(r1)); - assign(op2, load(Ity_F32, mkexpr(op2addr))); - assign(cc_vex, binop(Iop_CmpF32, mkexpr(op1), mkexpr(op2))); - - assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); - s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); + return s390_irgen_CxB("ceb", r1, op2addr, Ity_F32, Iop_CmpF32); +} - return "ceb"; +static const HChar * +s390_irgen_KEB(UChar r1, IRTemp op2addr) +{ + return s390_irgen_CxB("keb", r1, op2addr, Ity_F32, Iop_CmpF32); + return "keb"; } static const HChar * s390_irgen_CDB(UChar r1, IRTemp op2addr) { - IRTemp op1 = newTemp(Ity_F64); - IRTemp op2 = newTemp(Ity_F64); - IRTemp cc_vex = newTemp(Ity_I32); - IRTemp cc_s390 = newTemp(Ity_I32); - - assign(op1, get_fpr_dw0(r1)); - assign(op2, load(Ity_F64, mkexpr(op2addr))); - assign(cc_vex, binop(Iop_CmpF64, mkexpr(op1), mkexpr(op2))); - - assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); - s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); + return s390_irgen_CxB("cdb", r1, op2addr, Ity_F64, Iop_CmpF64); +} - return "cdb"; +static const HChar * +s390_irgen_KDB(UChar r1, IRTemp op2addr) +{ + return s390_irgen_CxB("kdb", r1, op2addr, Ity_F64, Iop_CmpF64); } static const HChar * @@ -19270,7 +19289,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) case 0xb306: s390_format_RRE_FF(s390_irgen_LXEBR, RRE_r1(ovl), RRE_r2(ovl)); goto ok; case 0xb307: /* MXDBR */ goto unimplemented; - case 0xb308: /* KEBR */ goto unimplemented; + case 0xb308: s390_format_RRE_FF(s390_irgen_KEBR, RRE_r1(ovl), + RRE_r2(ovl)); goto ok; case 0xb309: s390_format_RRE_FF(s390_irgen_CEBR, RRE_r1(ovl), RRE_r2(ovl)); goto ok; case 0xb30a: s390_format_RRE_FF(s390_irgen_AEBR, RRE_r1(ovl), @@ -19300,7 +19320,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) RRE_r2(ovl)); goto ok; case 0xb317: s390_format_RRE_FF(s390_irgen_MEEBR, RRE_r1(ovl), RRE_r2(ovl)); goto ok; - case 0xb318: /* KDBR */ goto unimplemented; + case 0xb318: s390_format_RRE_FF(s390_irgen_KDBR, RRE_r1(ovl), + RRE_r2(ovl)); goto ok; case 0xb319: s390_format_RRE_FF(s390_irgen_CDBR, RRE_r1(ovl), RRE_r2(ovl)); goto ok; case 0xb31a: s390_format_RRE_FF(s390_irgen_ADBR, RRE_r1(ovl), @@ -19351,7 +19372,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) case 0xb347: s390_format_RRF_UUFF(s390_irgen_FIXBRA, RRF2_m3(ovl), RRF2_m4(ovl), RRF2_r1(ovl), RRF2_r2(ovl)); goto ok; - case 0xb348: /* KXBR */ goto unimplemented; + case 0xb348: s390_format_RRE_FF(s390_irgen_KXBR, RRE_r1(ovl), + RRE_r2(ovl)); goto ok; case 0xb349: s390_format_RRE_FF(s390_irgen_CXBR, RRE_r1(ovl), RRE_r2(ovl)); goto ok; case 0xb34a: s390_format_RRE_FF(s390_irgen_AXBR, RRE_r1(ovl), @@ -21408,7 +21430,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) RXE_x2(ovl), RXE_b2(ovl), RXE_d2(ovl)); goto ok; case 0xed0000000007ULL: /* MXDB */ goto unimplemented; - case 0xed0000000008ULL: /* KEB */ goto unimplemented; + case 0xed0000000008ULL: s390_format_RXE_FRRD(s390_irgen_KEB, RXE_r1(ovl), + RXE_x2(ovl), RXE_b2(ovl), + RXE_d2(ovl)); goto ok; case 0xed0000000009ULL: s390_format_RXE_FRRD(s390_irgen_CEB, RXE_r1(ovl), RXE_x2(ovl), RXE_b2(ovl), RXE_d2(ovl)); goto ok; @@ -21448,7 +21472,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) case 0xed0000000017ULL: s390_format_RXE_FRRD(s390_irgen_MEEB, RXE_r1(ovl), RXE_x2(ovl), RXE_b2(ovl), RXE_d2(ovl)); goto ok; - case 0xed0000000018ULL: /* KDB */ goto unimplemented; + case 0xed0000000018ULL: s390_format_RXE_FRRD(s390_irgen_KDB, RXE_r1(ovl), + RXE_x2(ovl), RXE_b2(ovl), + RXE_d2(ovl)); goto ok; case 0xed0000000019ULL: s390_format_RXE_FRRD(s390_irgen_CDB, RXE_r1(ovl), RXE_x2(ovl), RXE_b2(ovl), RXE_d2(ovl)); goto ok; diff --git a/docs/internals/s390-opcodes.csv b/docs/internals/s390-opcodes.csv index 0765bd1..82332e4 100644 --- a/docs/internals/s390-opcodes.csv +++ b/docs/internals/s390-opcodes.csv @@ -268,11 +268,11 @@ cdbr,"compare long bfp",implemented, cdb,"compare long bfp",implemented, cebr,"compare short bfp",implemented, ceb,"compare short bfp",implemented, -kxbr,"compare and signal extended bfp","not implemented", -kdbr,"compare and signal long bfp","not implemented", -kdb,"compare and signal long bfp","not implemented", -kebr,"compare and signal short bfp","not implemented", -keb,"compare and signal short bfp","not implemented", +kxbr,"compare and signal extended bfp",implemented, +kdbr,"compare and signal long bfp",implemented, +kdb,"compare and signal long bfp",implemented, +kebr,"compare and signal short bfp",implemented, +keb,"compare and signal short bfp",implemented, cxfbr,"convert from fixed 32 to extended bfp",implemented, cdfbr,"convert from fixed 32 to long bfp",implemented, cefbr,"convert from fixed 32 to short bfp",implemented, diff --git a/none/tests/s390x/bfp-4.c b/none/tests/s390x/bfp-4.c index c2d8881..02315b6 100644 --- a/none/tests/s390x/bfp-4.c +++ b/none/tests/s390x/bfp-4.c @@ -1,61 +1,101 @@ #include <stdio.h> -/* Test BFP comparison for 32/64-bit. */ +static const char *const cmp_result_str[] = { + "==", "<", ">", "??" +}; -void cebr(float v1, float v2) +#define TEST_CxB(insn, fmt, mode, v1, v2) \ + do { \ + int cc; \ + \ + __asm__ volatile(insn " %[r1],%[r2]\n\t" \ + "ipm %[psw]\n\t" \ + "srl %[psw],28\n\t" \ + : [psw]"=d"(cc) \ + : [r1]"f"(v1), [r2]mode(v2) \ + : "cc"); \ + printf("%-6s" fmt " %s " fmt "\n", \ + insn ":", v1, cmp_result_str[cc], v2); \ + } while (0) + +/* Test BFP comparison for 32/64/128-bit. */ + +static void cebr(float a, float b) +{ + TEST_CxB("cebr", "%g", "f", a, b); +} + +static void ceb(float a, float b) +{ + TEST_CxB("ceb", "%g", "R", a, b); +} + +static void cdbr(double a, double b) { - int cc; + TEST_CxB("cdbr", "%g", "f", a, b); +} - __asm__ volatile("cebr %[r1],%[r2]\n\t" - "ipm %[psw]\n\t" - "srl %[psw],28\n\t" - : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); - if (cc == 0) - printf("cfebr: %f == %f\n", v1, v2); - if (cc == 1) - printf("cfebr: %f < %f\n", v1, v2); - if (cc == 2) - printf("cfebr: %f > %f\n", v1, v2); +static void cdb(double a, double b) +{ + TEST_CxB("cdb", "%g", "R", a, b); } -void cdbr(double v1, double v2) +static void cxbr(long double a, long double b) { - int cc; + TEST_CxB("cxbr", "%Lg", "f", a, b); +} + +static void kebr(float a, float b) +{ + TEST_CxB("kebr", "%g", "f", a, b); +} - __asm__ volatile("cdbr %[r1],%[r2]\n\t" - "ipm %[psw]\n\t" - "srl %[psw],28\n\t" - : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); - if (cc == 0) - printf("cdebr: %f == %f\n", v1, v2); - if (cc == 1) - printf("cdebr: %f < %f\n", v1, v2); - if (cc == 2) - printf("cdebr: %f > %f\n", v1, v2); +static void keb(float a, float b) +{ + TEST_CxB("keb", "%g", "R", a, b); +} + +static void kdbr(double a, double b) +{ + TEST_CxB("kdbr", "%g", "f", a, b); +} + +static void kdb(double a, double b) +{ + TEST_CxB("kdb", "%g", "R", a, b); +} + +static void kxbr(long double a, long double b) +{ + TEST_CxB("kxbr", "%Lg", "f", a, b); +} + +static void do_compare(float a, float b) +{ + cebr(a, b); + ceb(a, b); + kebr(a, b); + keb(a, b); + cdbr((double) a, (double) b); + cdb((double) a, (double) b); + kdbr((double) a, (double) b); + kdb((double) a, (double) b); + cxbr((long double) a, (long double) b); + kxbr((long double) a, (long double) b); } int main(void) { - float f1, f2; - float d1, d2; - - // compare 4 bytes - f1 = 3.14f; - f2 = f1; - cebr(f1, f2); - f2 = f1 + 10.; - cebr(f1, f2); - f2 = f1 - 100.; - cebr(f1, f2); - - // compare 8 bytes - d1 = 2.78; - d2 = d1; - cdbr(d1, d2); - d2 = d1 + 10.; - cdbr(d1, d2); - d2 = d1 - 100.; - cdbr(d1, d2); + float inf = 1.f / 0.; + float neg_inf = -1.f / 0.; + do_compare(3.14f, 3.14f); + do_compare(-2.78f, 2.78f); + do_compare(inf, inf); + do_compare(inf, neg_inf); + do_compare(neg_inf, neg_inf); + do_compare(inf, 1.f); + do_compare(neg_inf, -1.f); + do_compare(1.f / inf, -1.f / inf); return 0; } diff --git a/none/tests/s390x/bfp-4.stdout.exp b/none/tests/s390x/bfp-4.stdout.exp index eff1366..bc81ea6 100644 --- a/none/tests/s390x/bfp-4.stdout.exp +++ b/none/tests/s390x/bfp-4.stdout.exp @@ -1,6 +1,80 @@ -cfebr: 3.140000 == 3.140000 -cfebr: 3.140000 < 13.140000 -cfebr: 3.140000 > -96.860001 -cdebr: 2.780000 == 2.780000 -cdebr: 2.780000 < 12.780000 -cdebr: 2.780000 > -97.220001 +cebr: 3.14 == 3.14 +ceb: 3.14 == 3.14 +kebr: 3.14 == 3.14 +keb: 3.14 == 3.14 +cdbr: 3.14 == 3.14 +cdb: 3.14 == 3.14 +kdbr: 3.14 == 3.14 +kdb: 3.14 == 3.14 +cxbr: 3.14 == 3.14 +kxbr: 3.14 == 3.14 +cebr: -2.78 < 2.78 +ceb: -2.78 < 2.78 +kebr: -2.78 < 2.78 +keb: -2.78 < 2.78 +cdbr: -2.78 < 2.78 +cdb: -2.78 < 2.78 +kdbr: -2.78 < 2.78 +kdb: -2.78 < 2.78 +cxbr: -2.78 < 2.78 +kxbr: -2.78 < 2.78 +cebr: inf == inf +ceb: inf == inf +kebr: inf == inf +keb: inf == inf +cdbr: inf == inf +cdb: inf == inf +kdbr: inf == inf +kdb: inf == inf +cxbr: inf == inf +kxbr: inf == inf +cebr: inf > -inf +ceb: inf > -inf +kebr: inf > -inf +keb: inf > -inf +cdbr: inf > -inf +cdb: inf > -inf +kdbr: inf > -inf +kdb: inf > -inf +cxbr: inf > -inf +kxbr: inf > -inf +cebr: -inf == -inf +ceb: -inf == -inf +kebr: -inf == -inf +keb: -inf == -inf +cdbr: -inf == -inf +cdb: -inf == -inf +kdbr: -inf == -inf +kdb: -inf == -inf +cxbr: -inf == -inf +kxbr: -inf == -inf +cebr: inf > 1 +ceb: inf > 1 +kebr: inf > 1 +keb: inf > 1 +cdbr: inf > 1 +cdb: inf > 1 +kdbr: inf > 1 +kdb: inf > 1 +cxbr: inf > 1 +kxbr: inf > 1 +cebr: -inf < -1 +ceb: -inf < -1 +kebr: -inf < -1 +keb: -inf < -1 +cdbr: -inf < -1 +cdb: -inf < -1 +kdbr: -inf < -1 +kdb: -inf < -1 +cxbr: -inf < -1 +kxbr: -inf < -1 +cebr: 0 == -0 +ceb: 0 == -0 +kebr: 0 == -0 +keb: 0 == -0 +cdbr: 0 == -0 +cdb: 0 == -0 +kdbr: 0 == -0 +kdb: 0 == -0 +cxbr: 0 == -0 +kxbr: 0 == -0 |
|
From: Daniel F. <da...@fa...> - 2020-02-06 09:12:32
|
Hi, In the bugzilla there exists a couple of bugs regarding the setns syscall[1]. They even have patches attached to them, at least 343099 and 368923 does. What is the status of this? I have verified that the patches solves the issue. Is there anything that I can help with in order for this to be merged? Best regards, Daniel Fahlgren 1: https://bugs.kde.org/show_bug.cgi?id=343099 https://bugs.kde.org/show_bug.cgi?id=369031 https://bugs.kde.org/show_bug.cgi?id=368923 |
|
From: Philippe W. <phi...@sk...> - 2020-02-06 07:09:10
|
On Wed, 2020-02-05 at 09:40 +0100, Julian Seward wrote: > Also, of course, if there are other changes that should go in 3.16, speak up > now. I am wondering what we should do for prwritev (and similar syscall) supp entries not working anymore: https://bugs.kde.org/show_bug.cgi?id=417075 The origin of this bug has been identified as a backward incompatible change introduced in 3.15: some suppression entries working with 3.14 and before will not suppress anymore the same error in 3.15, but fixing this backward incompatibility in 3.16 might mean we are then breaking the supp entries working with 3.15 :(. Philippe |