/none/tests/s390x/sub
/none/tests/s390x/sub-z14
/none/tests/s390x/sub_EI
-/none/tests/s390x/tcxb
+/none/tests/s390x/bfp-tdc
+/none/tests/s390x/hfp
/none/tests/s390x/xc
/none/tests/s390x/xor
/none/tests/s390x/xor_EI
/none/tests/s390x/stcke
/none/tests/s390x/stckf
/none/tests/s390x/op_exception
-/none/tests/s390x/fgx
/none/tests/s390x/condloadstore
/none/tests/s390x/fold_And16
/none/tests/s390x/stfle
/none/tests/s390x/rounding-1
/none/tests/s390x/rounding-2
/none/tests/s390x/rounding-3
-/none/tests/s390x/rounding-4
-/none/tests/s390x/rounding-5
/none/tests/s390x/bfp-1
/none/tests/s390x/bfp-2
/none/tests/s390x/bfp-3
/none/tests/s390x/srnmt
/none/tests/s390x/pfpo
/none/tests/s390x/rxsbg
-/none/tests/s390x/fixbr
/none/tests/s390x/popcnt
/none/tests/s390x/vector
/none/tests/s390x/lsc2
INSN_TESTS = clc clcle cvb cvd icm lpr lam_stam xc mvst add sub mul \
and or xor insert div srst fold_And16 flogr sub_EI add_EI \
and_EI or_EI xor_EI insert_EI mul_GE add_GE condloadstore \
- op_exception fgx stck stckf stcke stfle cksm mvcl clcl troo \
+ op_exception stck stckf stcke stfle cksm mvcl clcl troo \
trto trot trtt tr tre cij cgij clij clgij crj cgrj clrj clgrj \
cs csg cds cdsg cu21 cu21_1 cu24 cu24_1 cu42 cu12 cu12_1 \
ex_sig ex_clone cu14 cu14_1 cu41 fpconv ecag fpext_warn \
- bfp-tdc rounding-1 rounding-2 rounding-3 rounding-4 rounding-5 bfp-1 \
+ bfp-tdc rounding-1 rounding-2 rounding-3 bfp-1 \
bfp-2 bfp-3 bfp-4 srnm srnmb comp-1 comp-2 exrl tmll tm stmg \
ex clst mvc test_fork test_sig rounding-6 rxsbg popcnt \
high-word traps \
vector_float add-z14 sub-z14 mul-z14 bic \
misc3 vec2 vec2_float \
dfp-1 dfp-2 dfp-3 dfp-4 dfpconv dfpext dfptest pfpo srnmt \
- fpext fixbr hfp
+ fpext hfp
check_PROGRAMS = $(INSN_TESTS) \
allexec \
ecag.stdout.exp-z13 ecag.stdout.exp-z14 ecag.stdout.exp-z15 \
ecag.stdout.exp-z16 \
op00.stderr.exp op00.vgtest \
- fixbr.vgtest fixbr.stderr.exp fixbr.stdout.exp \
fpext.vgtest fpext.stderr.exp fpext.stdout.exp \
fpext_fail.vgtest fpext_fail.stderr.exp fpext_fail.stdout.exp \
test.h opcodes.h add.h and.h div.h insert.h dfp_utils.h \
+++ /dev/null
-#include <stdio.h>
-#include <string.h>
-#include "opcodes.h"
-
-int main()
-{
- register long g asm("r7");
- register double f asm("f8");
- double f1;
-
- memset(&f1, 0x0f, sizeof(double));
- f = f1;
- g = 42;
- printf("test LGDR\n\n");
- printf("before g = %ld\n", g);
- printf("before f = %a\n", f);
- printf("copy f to g\n");
- asm volatile ( LGDR(7,8) : "=d"(g) : "f"(f));
- printf("after g = %16.16lx\n", g); /* 0x0x0x0...... */
- printf("after f = %a\n", f);
-
- printf("\ntest LDGR\n\n");
- f = 3.14;
- printf("before g = %16.16lx\n", g); /* 0x0x0x0...... */
- printf("before f = %a\n", f);
- printf("copy g to f\n");
- asm volatile ( LDGR(8,7) : "=f"(f) : "d"(g));
- printf("after g = %16.16lx\n", g); /* 0x0x0x0...... */
- printf("after f = %a\n", f);
-
- return 0;
-}
-
+++ /dev/null
-test LGDR
-
-before g = 42
-before f = 0x1.f0f0f0f0f0f0fp-783
-copy f to g
-after g = 0f0f0f0f0f0f0f0f
-after f = 0x1.f0f0f0f0f0f0fp-783
-
-test LDGR
-
-before g = 0f0f0f0f0f0f0f0f
-before f = 0x1.91eb851eb851fp+1
-copy g to f
-after g = 0f0f0f0f0f0f0f0f
-after f = 0x1.f0f0f0f0f0f0fp-783
+++ /dev/null
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include "opcodes.h"
-#include "rounding.h"
-
-/* Test "fixbr" with rounding mode given in insn (m3 field)
- Covers all generally available rounding modes that can be mapped to
- IRRoundingMode. As a consequence m3=1 which is "round to nearest with
- ties away from 0" is not tested here.
-*/
-
-const char *
-rtext(unsigned m3_round)
-{
- switch (m3_round) {
- case 0: return "[-> per fpc]";
- case 1: return "[-> nearest away]";
- case 3: return "[-> prepare short]"; // floating point extension fac needed
- case 4: return "[-> nearest even]";
- case 5: return "[-> 0]";
- case 6: return "[-> +inf]";
- case 7: return "[-> -inf]";
- }
- assert(0);
-}
-
-#define round_to_int(value,round) \
-do { \
- long double src = value; \
- long double dst; \
- \
- __asm__ volatile ("fixbr %[dst]," #round ",%[src]\n\t" \
- : [dst] "=f"(dst) \
- : [src] "f"(src)); \
- \
- printf("fixbr %.5Lf\t-> %Lg %s\n", \
- src, dst, rtext(round)); \
-} while (0)
-
-#define fixbr(value,round) round_to_int(value,round)
-
-void
-set_rounding_mode(unsigned mode)
-{
- register unsigned r asm("1") = mode;
- __asm__ volatile ( SFPC(1) : : "d"(r) );
-}
-
-
-int main(void)
-{
- int j;
- static const long double dval[] = {
- 1.25, 1.5, 2.5, 1.75, -1.25, -1.5, -2.5, -1.75, 0.0,
- };
-
- assert(sizeof(long double) == 16);
-
- /* f128 -> f128, round to int */
- for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
- set_rounding_mode(FPC_BFP_ROUND_ZERO);
- fixbr(dval[j], M3_BFP_ROUND_NEAREST_EVEN);
- set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
- fixbr(dval[j], M3_BFP_ROUND_ZERO);
- fixbr(dval[j], M3_BFP_ROUND_POSINF);
- fixbr(dval[j], M3_BFP_ROUND_NEGINF);
- }
-
- return 0;
-}
+++ /dev/null
-fixbr 1.25000 -> 1 [-> nearest even]
-fixbr 1.25000 -> 1 [-> 0]
-fixbr 1.25000 -> 2 [-> +inf]
-fixbr 1.25000 -> 1 [-> -inf]
-fixbr 1.50000 -> 2 [-> nearest even]
-fixbr 1.50000 -> 1 [-> 0]
-fixbr 1.50000 -> 2 [-> +inf]
-fixbr 1.50000 -> 1 [-> -inf]
-fixbr 2.50000 -> 2 [-> nearest even]
-fixbr 2.50000 -> 2 [-> 0]
-fixbr 2.50000 -> 3 [-> +inf]
-fixbr 2.50000 -> 2 [-> -inf]
-fixbr 1.75000 -> 2 [-> nearest even]
-fixbr 1.75000 -> 1 [-> 0]
-fixbr 1.75000 -> 2 [-> +inf]
-fixbr 1.75000 -> 1 [-> -inf]
-fixbr -1.25000 -> -1 [-> nearest even]
-fixbr -1.25000 -> -1 [-> 0]
-fixbr -1.25000 -> -1 [-> +inf]
-fixbr -1.25000 -> -2 [-> -inf]
-fixbr -1.50000 -> -2 [-> nearest even]
-fixbr -1.50000 -> -1 [-> 0]
-fixbr -1.50000 -> -1 [-> +inf]
-fixbr -1.50000 -> -2 [-> -inf]
-fixbr -2.50000 -> -2 [-> nearest even]
-fixbr -2.50000 -> -2 [-> 0]
-fixbr -2.50000 -> -2 [-> +inf]
-fixbr -2.50000 -> -3 [-> -inf]
-fixbr -1.75000 -> -2 [-> nearest even]
-fixbr -1.75000 -> -1 [-> 0]
-fixbr -1.75000 -> -1 [-> +inf]
-fixbr -1.75000 -> -2 [-> -inf]
-fixbr 0.00000 -> 0 [-> nearest even]
-fixbr 0.00000 -> 0 [-> 0]
-fixbr 0.00000 -> 0 [-> +inf]
-fixbr 0.00000 -> 0 [-> -inf]
+++ /dev/null
-prog: fixbr
-prereq: test -e fixbr && ../../../tests/s390x_features s390x-fpext
+++ /dev/null
-#include <stdio.h>
-#include <assert.h>
-#include "opcodes.h"
-
-/* Test "load rounded" with universally available rounding modes.
- Rounding mode is provided via FPC.
- Also test "load lengthened" (which is independent of rounding modes). */
-
-volatile double d;
-volatile float f;
-
-const char *
-rtext(unsigned fpc_round)
-{
- switch (fpc_round) {
- case 0: return "[-> near]";
- case 1: return "[-> zero]";
- case 2: return "[-> +inf]";
- case 3: return "[-> -inf]";
- }
- assert(0);
-}
-
-void
-set_rounding_mode(unsigned mode)
-{
- printf("setting FPC rounding mode to %s\n", rtext(mode));
- register unsigned r asm("1") = mode;
- __asm__ volatile ( SFPC(1) : : "d"(r) );
-}
-
-
-void
-load_rounded(void)
-{
- f = d;
- printf("load rounded d = %10.3f f = %10.3f\n", d, f);
-}
-
-void
-load_lengthened(void)
-{
- d = f;
- printf("load lengthened d = %22.20g f = %22.20g\n", d, f);
-}
-
-/* Tests for load rounded and load lengthened */
-int main()
-{
- d = 12345678.25;
- set_rounding_mode(0);
- load_rounded();
- set_rounding_mode(1);
- load_rounded();
- set_rounding_mode(2);
- load_rounded();
- set_rounding_mode(3);
- load_rounded();
- printf("======================================\n");
- d = 12345678.75;
- set_rounding_mode(0);
- load_rounded();
- set_rounding_mode(1);
- load_rounded();
- set_rounding_mode(2);
- load_rounded();
- set_rounding_mode(3);
- load_rounded();
- printf("======================================\n");
- d = -12345678.25;
- set_rounding_mode(0);
- load_rounded();
- set_rounding_mode(1);
- load_rounded();
- set_rounding_mode(2);
- load_rounded();
- set_rounding_mode(3);
- load_rounded();
- printf("======================================\n");
- d = -12345678.75;
- set_rounding_mode(0);
- load_rounded();
- set_rounding_mode(1);
- load_rounded();
- set_rounding_mode(2);
- load_rounded();
- set_rounding_mode(3);
- load_rounded();
- printf("\n");
-
- f = 1234.5678f;
- load_lengthened();
-
- return 0;
-}
+++ /dev/null
-setting FPC rounding mode to [-> near]
-load rounded d = 12345678.250 f = 12345678.000
-setting FPC rounding mode to [-> zero]
-load rounded d = 12345678.250 f = 12345678.000
-setting FPC rounding mode to [-> +inf]
-load rounded d = 12345678.250 f = 12345679.000
-setting FPC rounding mode to [-> -inf]
-load rounded d = 12345678.250 f = 12345678.000
-======================================
-setting FPC rounding mode to [-> near]
-load rounded d = 12345678.750 f = 12345679.000
-setting FPC rounding mode to [-> zero]
-load rounded d = 12345678.750 f = 12345678.000
-setting FPC rounding mode to [-> +inf]
-load rounded d = 12345678.750 f = 12345679.000
-setting FPC rounding mode to [-> -inf]
-load rounded d = 12345678.750 f = 12345678.000
-======================================
-setting FPC rounding mode to [-> near]
-load rounded d = -12345678.250 f = -12345678.000
-setting FPC rounding mode to [-> zero]
-load rounded d = -12345678.250 f = -12345678.000
-setting FPC rounding mode to [-> +inf]
-load rounded d = -12345678.250 f = -12345678.000
-setting FPC rounding mode to [-> -inf]
-load rounded d = -12345678.250 f = -12345679.000
-======================================
-setting FPC rounding mode to [-> near]
-load rounded d = -12345678.750 f = -12345679.000
-setting FPC rounding mode to [-> zero]
-load rounded d = -12345678.750 f = -12345678.000
-setting FPC rounding mode to [-> +inf]
-load rounded d = -12345678.750 f = -12345678.000
-setting FPC rounding mode to [-> -inf]
-load rounded d = -12345678.750 f = -12345679.000
-
-load lengthened d = 1234.5677490234375 f = 1234.5677490234375
+++ /dev/null
-prog: rounding-4
+++ /dev/null
-#include <stdio.h>
-#include <assert.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include "opcodes.h"
-
-/* Test "convert from fixed" with universally available rounding modes.
- Rounding mode is provided via FPC. */
-
-volatile int32_t i32;
-volatile int64_t i64;
-
-const char *
-rtext(unsigned fpc_round)
-{
- switch (fpc_round) {
- case 0: return "[-> near]";
- case 1: return "[-> zero]";
- case 2: return "[-> +inf]";
- case 3: return "[-> -inf]";
- }
- assert(0);
-}
-
-void
-set_rounding_mode(unsigned mode)
-{
- printf("setting FPC rounding mode to %s\n", rtext(mode));
- register unsigned r asm("1") = mode;
- __asm__ volatile ( SFPC(1) : : "d"(r) );
-}
-
-void cefbr(unsigned mode)
-{
- set_rounding_mode(mode);
-
- float out;
-
- __asm__ volatile("cefbr %[r1],%[r2]" : [r1] "=f"(out) : [r2] "d"(i32));
- printf("cefbr: %"PRId32" -> %f\n", i32, out);
-}
-
-void cegbr(unsigned mode)
-{
- set_rounding_mode(mode);
-
- float out;
-
- __asm__ volatile("cegbr %[r1],%[r2]" : [r1] "=f"(out) : [r2] "d"(i64));
- printf("cegbr: %"PRId64" -> %f\n", i64, out);
-}
-
-void cdgbr(unsigned mode)
-{
- set_rounding_mode(mode);
-
- double out;
-
- __asm__ volatile("cdgbr %[r1],%[r2]" : [r1] "=f"(out) : [r2] "d"(i64));
- printf("cegbr: %"PRId64" -> %f\n", i64, out);
-}
-
-
-int main()
-{
- int mode;
-
- /* i32 -> f32 */
- i32 = INT32_MAX;
- for (mode = 0; mode <= 3; ++mode) cefbr(mode);
- printf("\n");
- i32 = INT32_MIN;
- for (mode = 0; mode <= 3; ++mode) cefbr(mode);
- printf("\n");
-
- /* i64 -> f32 */
- i64 = INT64_MAX;
- for (mode = 0; mode <= 3; ++mode) cegbr(mode);
- printf("\n");
- i64 = INT64_MIN;
- for (mode = 0; mode <= 3; ++mode) cegbr(mode);
- printf("\n");
-
- /* i64 -> f64 */
- i64 = INT64_MAX;
- for (mode = 0; mode <= 3; ++mode) cdgbr(mode);
- printf("\n");
- i64 = INT64_MIN;
- for (mode = 0; mode <= 3; ++mode) cdgbr(mode);
- printf("\n");
-
- return 0;
-}
+++ /dev/null
-setting FPC rounding mode to [-> near]
-cefbr: 2147483647 -> 2147483648.000000
-setting FPC rounding mode to [-> zero]
-cefbr: 2147483647 -> 2147483520.000000
-setting FPC rounding mode to [-> +inf]
-cefbr: 2147483647 -> 2147483648.000000
-setting FPC rounding mode to [-> -inf]
-cefbr: 2147483647 -> 2147483520.000000
-
-setting FPC rounding mode to [-> near]
-cefbr: -2147483648 -> -2147483648.000000
-setting FPC rounding mode to [-> zero]
-cefbr: -2147483648 -> -2147483648.000000
-setting FPC rounding mode to [-> +inf]
-cefbr: -2147483648 -> -2147483648.000000
-setting FPC rounding mode to [-> -inf]
-cefbr: -2147483648 -> -2147483648.000000
-
-setting FPC rounding mode to [-> near]
-cegbr: 9223372036854775807 -> 9223372036854775808.000000
-setting FPC rounding mode to [-> zero]
-cegbr: 9223372036854775807 -> 9223371487098961920.000000
-setting FPC rounding mode to [-> +inf]
-cegbr: 9223372036854775807 -> 9223372036854775808.000000
-setting FPC rounding mode to [-> -inf]
-cegbr: 9223372036854775807 -> 9223371487098961920.000000
-
-setting FPC rounding mode to [-> near]
-cegbr: -9223372036854775808 -> -9223372036854775808.000000
-setting FPC rounding mode to [-> zero]
-cegbr: -9223372036854775808 -> -9223372036854775808.000000
-setting FPC rounding mode to [-> +inf]
-cegbr: -9223372036854775808 -> -9223372036854775808.000000
-setting FPC rounding mode to [-> -inf]
-cegbr: -9223372036854775808 -> -9223372036854775808.000000
-
-setting FPC rounding mode to [-> near]
-cegbr: 9223372036854775807 -> 9223372036854775808.000000
-setting FPC rounding mode to [-> zero]
-cegbr: 9223372036854775807 -> 9223372036854774784.000000
-setting FPC rounding mode to [-> +inf]
-cegbr: 9223372036854775807 -> 9223372036854775808.000000
-setting FPC rounding mode to [-> -inf]
-cegbr: 9223372036854775807 -> 9223372036854774784.000000
-
-setting FPC rounding mode to [-> near]
-cegbr: -9223372036854775808 -> -9223372036854775808.000000
-setting FPC rounding mode to [-> zero]
-cegbr: -9223372036854775808 -> -9223372036854775808.000000
-setting FPC rounding mode to [-> +inf]
-cegbr: -9223372036854775808 -> -9223372036854775808.000000
-setting FPC rounding mode to [-> -inf]
-cegbr: -9223372036854775808 -> -9223372036854775808.000000
-
+++ /dev/null
-prog: rounding-5