Update s390_features.c for DFP.
authorflorian <florian@a5019735-40e9-0310-863c-91ae7b9d1cf9>
Sat, 10 Nov 2012 22:35:24 +0000 (22:35 +0000)
committerflorian <florian@a5019735-40e9-0310-863c-91ae7b9d1cf9>
Sat, 10 Nov 2012 22:35:24 +0000 (22:35 +0000)
Add a testcase.
Patch by Maran (maranp@linux.vnet.ibm.com).
Part of fixing BZ 307113.
See also VEX r2560.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13120 a5019735-40e9-0310-863c-91ae7b9d1cf9

configure.in
none/tests/s390x/Makefile.am
none/tests/s390x/opcodes.h
tests/s390x_features.c

index b385aeda79d3e60c5e56e2afb6f24bc7900b01a8..077ad377f0c67b90339e026345670293754c682d 100644 (file)
@@ -1220,6 +1220,21 @@ CFLAGS=$safe_CFLAGS
 AM_CONDITIONAL(HAS_DFP, test x$ac_asm_have_dfp = xyes -a x$ac_gcc_have_dfp = xyes)
 
 
+AC_MSG_CHECKING([that compiler knows DFP datatypes])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+]], [[
+  _Decimal64 x = 0.0DD;
+]])], [
+ac_gcc_have_dfp_type=yes
+AC_MSG_RESULT([yes])
+], [
+ac_gcc_have_dfp_type=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_DFP_TESTS, test x$ac_gcc_have_dfp_type = xyes)
+
+
 # Check for pthread_create@GLIBC2.0
 AC_MSG_CHECKING([for pthread_create@GLIBC2.0()])
 
index 6780c0fe10efeb02f0d056685619deddb0dd4b08..26c155b1e4176f0db2ffd2b68112cb3f7c1d87e6 100644 (file)
@@ -18,6 +18,9 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \
             spechelper-ltr spechelper-or   \
             spechelper-icm-1  spechelper-icm-2 spechelper-tmll \
             spechelper-tm
+if BUILD_DFP_TESTS
+  INSN_TESTS += dfp-1
+endif
 
 check_PROGRAMS = $(INSN_TESTS) \
                 allexec \
index b3aa7d6e73c11963a3441a5545cbc5721971127c..497b94e423b67f0d7da2a63f1f29aa91e2457275 100644 (file)
@@ -69,6 +69,7 @@
             ".short 0x" #op1 #r1 #r3 "\n\t"  \
             ".long  0x" #b2 #dl2 #dh2 #op2 "\n\t"
 #define RRF_F0FF2(op,r3,u0,r1,r2)  ".long 0x" #op #r3 #u0 #r1 #r2 "\n\t"
+#define RRF_FUFF2(op,r3,m4,r1,r2) ".long 0x" #op #r3 #m4 #r1 #r2 "\n\t"
 #define RRF_UUFR(op,m3,m4,r1,r2)  ".long 0x" #op #m3 #m4 #r1 #r2 "\n\t"
 #define RRF_UURF(op,m3,m4,r1,r2)  ".long 0x" #op #m3 #m4 #r1 #r2 "\n\t"
 
 #define RRF_M0RERE(op,m3,r1,r2)  ".long 0x" #op #m3 "0" #r1 #r2 "\n\t"
 #define S_RD(op,b2,d2) ".long 0x" #op #b2 #d2 "\n\t"
 
+#define ADTRA(r3,m4,r1,r2)              RRF_FUFF2(b3d2,r3,m4,r1,r2)
 #define AFI(r1,i2)                      RIL_RI(c2,r1,9,i2)
 #define AGFI(r1,i2)                     RIL_RI(c2,r1,8,i2)
 #define AGHIK(r1,r3,i2)                 RIE_RRI0(ec,r1,r3,i2,00,d9)
 #define CXLFBR(m3,m4,r1,r2)             RRF_UUFR(b392,m3,m4,r1,r2)
 #define CXLGBR(m3,m4,r1,r2)             RRF_UUFR(b3a2,m3,m4,r1,r2)
 #define CY(r1,x2,b2,dl2,dh2)            RXY_RRRD(e3,r1,x2,b2,dl2,dh2,59)
+#define DDTRA(r3,m4,r1,r2)              RRF_FUFF2(b3d1,r3,m4,r1,r2)
 #define EXRL(r1,i2)                     RIL_RP(c6,r1,0,i2)
 #define FLOGR(r1,r2)                    RRE_RR(b983,00,r1,r2)
 #define ICMY(r1,r3,b2,dl2,dh2)          RSY_RURD(eb,r1,r3,b2,dl2,dh2,81)
 #define LTG(r1,x2,b2,dl2,dh2)           RXY_RRRD(e3,r1,x2,b2,dl2,dh2,02)
 #define LTGF(r1,x2,b2,dl2,dh2)          RXY_RRRD(e3,r1,x2,b2,dl2,dh2,32)
 #define LY(r1,x2,b2,dl2,dh2)            RXY_RRRD(e3,r1,x2,b2,dl2,dh2,58)
+#define MDTRA(r3,m4,r1,r2)              RRF_FUFF2(b3d0,r3,m4,r1,r2)
 #define MFY(r1,x2,b2,dl2,dh2)           RXY_RRRD(e3,r1,x2,b2,dl2,dh2,5c)
 #define MHY(r1,x2,b2,dl2,dh2)           RXY_RRRD(e3,r1,x2,b2,dl2,dh2,7c)
 #define MSFI(r1,i2)                     RIL_RI(c2,r1,1,i2)
 #define SHY(r1,x2,b2,dl2,dh2)           RXY_RRRD(e3,r1,x2,b2,dl2,dh2,7b)
 #define SLAK(r1,r3,b2,dl2,dh2)          RSY_RRRD(eb,r1,r3,b2,dl2,dh2,dd)
 #define ECAG(r1,r3,b2,dl2,dh2)          RSY_RRRD(eb,r1,r3,b2,dl2,dh2,4c)
+#define SDTRA(r3,m4,r1,r2)              RRF_FUFF2(b3d3,r3,m4,r1,r2)
 #define SLFI(r1,i2)                     RIL_RU(c2,r1,5,i2)
 #define SLGFI(r1,i2)                    RIL_RU(c2,r1,4,i2)
 #define SLGRK(r3,r1,r2)                 RRF_R0RR2(b9eb,r3,0,r1,r2)
index 4dde355f2994ec8de2e27d421b6626cbb96fbe08..265e22a6a5a6f94d6d04c9ba3c64cdea8265b822 100644 (file)
@@ -225,6 +225,8 @@ static int go(char *feature, char *cpu)
       match = facilities & FAC_BIT(30);
    } else if (strcmp(feature, "s390x-fpext") == 0 ) {
       match = facilities & FAC_BIT(37);
+   } else if (strcmp(feature, "s390x-dfp") == 0 ) {
+      match = facilities & FAC_BIT(42);
    } else {
       return 2;          // Unrecognised feature.
    }