|
From: <sv...@va...> - 2013-03-12 01:32:49
|
florian 2013-03-12 01:32:40 +0000 (Tue, 12 Mar 2013)
New Revision: 13325
Log:
s390: Add testcase for the SRNMT instruction.
Patch by Maran Pakkirisamy (ma...@li...).
Part of fixing BZ 307113.
Added files:
trunk/none/tests/s390x/srnmt.c
trunk/none/tests/s390x/srnmt.stderr.exp
trunk/none/tests/s390x/srnmt.stdout.exp
trunk/none/tests/s390x/srnmt.vgtest
Modified directories:
trunk/none/tests/s390x/
Modified files:
trunk/none/tests/s390x/Makefile.am
trunk/none/tests/s390x/opcodes.h
Modified: trunk/none/tests/s390x/
Added: trunk/none/tests/s390x/srnmt.vgtest (+2 -0)
===================================================================
--- trunk/none/tests/s390x/srnmt.vgtest 2013-03-10 16:29:02 +00:00 (rev 13324)
+++ trunk/none/tests/s390x/srnmt.vgtest 2013-03-12 01:32:40 +00:00 (rev 13325)
@@ -0,0 +1,2 @@
+prog: srnmt
+prereq: test -e srnmt && ../../../tests/s390x_features s390x-dfp
Property changed: trunk/none/tests/s390x (+0 -0)
___________________________________________________________________
Name: svn:ignore
- .deps
add
add_EI
add_GE
allexec
and
and_EI
clc
clcle
cvb
cvd
div
ex_clone
ex_sig
flogr
icm
insert
insert_EI
lam_stam
lpr
Makefile
Makefile.in
mul
mul_GE
mvst
or
or_EI
srst
sub
sub_EI
tcxb
xc
xor
xor_EI
stck
stcke
stckf
op_exception
fgx
condloadstore
fold_And16
stfle
op00
cksm
clcl
mvcl
troo
trot
trto
trtt
tr
tre
clrj
clgrj
crj
cgrj
clij
clgij
cij
cgij
cs
csg
cds
cdsg
cu21
cu21_1
cu24
cu24_1
cu42
cu12
cu12_1
cu14
cu14_1
cu41
ecag
fpext
fpext_warn
fpconv
rounding-1
rounding-2
rounding-3
rounding-4
rounding-5
bfp-1
bfp-2
bfp-3
bfp-4
srnm
srnmb
comp-1
comp-2
ex
exrl
tm
tmll
stmg
test_sig
test_clone
test_fork
clst
mvc
spechelper-algr
spechelper-tmll
spechelper-icm-1
spechelper-icm-2
spechelper-cr
spechelper-ltr
spechelper-alr
spechelper-clr
spechelper-slr
spechelper-slgr
spechelper-or
spechelper-tm
rounding-6
laa
dfp-1
dfp-2
dfp-3
dfp-4
dfptest
dfpext
dfpconv
+ .deps
add
add_EI
add_GE
allexec
and
and_EI
clc
clcle
cvb
cvd
div
ex_clone
ex_sig
flogr
icm
insert
insert_EI
lam_stam
lpr
Makefile
Makefile.in
mul
mul_GE
mvst
or
or_EI
srst
sub
sub_EI
tcxb
xc
xor
xor_EI
stck
stcke
stckf
op_exception
fgx
condloadstore
fold_And16
stfle
op00
cksm
clcl
mvcl
troo
trot
trto
trtt
tr
tre
clrj
clgrj
crj
cgrj
clij
clgij
cij
cgij
cs
csg
cds
cdsg
cu21
cu21_1
cu24
cu24_1
cu42
cu12
cu12_1
cu14
cu14_1
cu41
ecag
fpext
fpext_warn
fpconv
rounding-1
rounding-2
rounding-3
rounding-4
rounding-5
bfp-1
bfp-2
bfp-3
bfp-4
srnm
srnmb
comp-1
comp-2
ex
exrl
tm
tmll
stmg
test_sig
test_clone
test_fork
clst
mvc
spechelper-algr
spechelper-tmll
spechelper-icm-1
spechelper-icm-2
spechelper-cr
spechelper-ltr
spechelper-alr
spechelper-clr
spechelper-slr
spechelper-slgr
spechelper-or
spechelper-tm
rounding-6
laa
dfp-1
dfp-2
dfp-3
dfp-4
dfptest
dfpext
dfpconv
srnmt
Added: trunk/none/tests/s390x/srnmt.c (+61 -0)
===================================================================
--- trunk/none/tests/s390x/srnmt.c 2013-03-10 16:29:02 +00:00 (rev 13324)
+++ trunk/none/tests/s390x/srnmt.c 2013-03-12 01:32:40 +00:00 (rev 13325)
@@ -0,0 +1,61 @@
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "opcodes.h"
+
+#define srnmt(b,d) \
+ ({ \
+ __asm__ volatile ( "lghi 8," #b "\n\t" \
+ SRNMT(8,d) \
+ ::: "8"); \
+ })
+
+
+/* Like srnmt above, except it uses r0 as a base register */
+#define srnmt0(d) \
+ ({ \
+ __asm__ volatile ( SRNMT(0,d) \
+ ::: "0"); \
+ })
+
+unsigned
+get_dfp_rounding_mode(void)
+{
+ unsigned fpc;
+
+ __asm__ volatile ("stfpc %0\n\t" : "=m"(fpc));
+
+ return (fpc & 0x70) >> 4;
+}
+
+int main(void)
+{
+ printf("initial rounding mode = %u\n", get_dfp_rounding_mode());
+
+ /* Set basic rounding modes in various ways */
+ srnmt(1,002); // 1 + 2 = 3
+ printf("rounding mode = %u\n", get_dfp_rounding_mode());
+
+ srnmt(2,000);
+ printf("rounding mode = %u\n", get_dfp_rounding_mode());
+
+ srnmt(0,001);
+ printf("rounding mode = %u\n", get_dfp_rounding_mode());
+
+ srnmt(0,000);
+ printf("rounding mode = %u\n", get_dfp_rounding_mode());
+
+ srnmt(7,000);
+ printf("rounding mode = %u\n", get_dfp_rounding_mode());
+
+ srnmt(0,006);
+ printf("rounding mode = %u\n", get_dfp_rounding_mode());
+
+ srnmt0(005);
+ printf("rounding mode = %u\n", get_dfp_rounding_mode());
+
+ srnmt0(004);
+ printf("rounding mode = %u\n", get_dfp_rounding_mode());
+
+ return 0;
+}
Modified: trunk/none/tests/s390x/Makefile.am (+3 -2)
===================================================================
--- trunk/none/tests/s390x/Makefile.am 2013-03-10 16:29:02 +00:00 (rev 13324)
+++ trunk/none/tests/s390x/Makefile.am 2013-03-12 01:32:40 +00:00 (rev 13325)
@@ -19,7 +19,7 @@
spechelper-icm-1 spechelper-icm-2 spechelper-tmll \
spechelper-tm laa
if BUILD_DFP_TESTS
- INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv
+ INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt
endif
check_PROGRAMS = $(INSN_TESTS) \
@@ -43,7 +43,8 @@
dfp-4.stderr.exp dfp-4.stdout.exp dfp-4.vgtest \
dfptest.stderr.exp dfptest.stdout.exp dfptest.vgtest \
dfpext.stderr.exp dfpext.stdout.exp dfpext.vgtest \
- dfpconv.stderr.exp dfpconv.stdout.exp dfpconv.vgtest
+ dfpconv.stderr.exp dfpconv.stdout.exp dfpconv.vgtest \
+ srnmt.stderr.exp srnmt.stdout.exp srnmt.vgtest
AM_CFLAGS += @FLAG_M64@
AM_CXXFLAGS += @FLAG_M64@
Added: trunk/none/tests/s390x/srnmt.stdout.exp (+9 -0)
===================================================================
--- trunk/none/tests/s390x/srnmt.stdout.exp 2013-03-10 16:29:02 +00:00 (rev 13324)
+++ trunk/none/tests/s390x/srnmt.stdout.exp 2013-03-12 01:32:40 +00:00 (rev 13325)
@@ -0,0 +1,9 @@
+initial rounding mode = 0
+rounding mode = 3
+rounding mode = 2
+rounding mode = 1
+rounding mode = 0
+rounding mode = 7
+rounding mode = 6
+rounding mode = 5
+rounding mode = 4
Modified: trunk/none/tests/s390x/opcodes.h (+1 -0)
===================================================================
--- trunk/none/tests/s390x/opcodes.h 2013-03-10 16:29:02 +00:00 (rev 13324)
+++ trunk/none/tests/s390x/opcodes.h 2013-03-12 01:32:40 +00:00 (rev 13325)
@@ -348,6 +348,7 @@
#define SRK(r3,r1,r2) RRF_R0RR2(b9f9,r3,0,r1,r2)
#define SRLK(r1,r3,b2,dl2,dh2) RSY_RRRD(eb,r1,r3,b2,dl2,dh2,de)
#define SRNMB(b2,d2) S_RD(b2b8,b2,d2)
+#define SRNMT(b2,d2) S_RD(b2b9,b2,d2)
#define STAMY(r1,r3,b2,dl2,dh2) RSY_AARD(eb,r1,r3,b2,dl2,dh2,9b)
#define STCH(r1,x2,b2,dl2,dh2) RXY_RRRD(e3,r1,x2,b2,dl2,dh2,c3)
#define STCMY(r1,r3,b2,dl2,dh2) RSY_RURD(eb,r1,r3,b2,dl2,dh2,2d)
Added: trunk/none/tests/s390x/srnmt.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/srnmt.stderr.exp 2013-03-10 16:29:02 +00:00 (rev 13324)
+++ trunk/none/tests/s390x/srnmt.stderr.exp 2013-03-12 01:32:40 +00:00 (rev 13325)
@@ -0,0 +1,2 @@
+
+
|