Home | History | Annotate | Download | only in s390x
      1 #include <stdio.h>
      2 #include "opcodes.h"
      3 
      4 #define DO_RXSBG(insn, _r1, _r2, i3, i4, i5)		\
      5 ({							\
      6 	register unsigned long r1 asm ("1") = _r1;	\
      7 	register unsigned long r2 asm ("2") = _r2;	\
      8 	int cc;						\
      9 	asm volatile(   "clgr 1,2\n"                    \
     10                         insn(1,2, i3, i4, i5)           \
     11 			"ipm %1\n"			\
     12 			"srl %1,28\n"			\
     13 			: "+d" (r1), "=d" (cc)		\
     14 			: "d" (r1), "d" (r2)		\
     15 			: "cc");			\
     16 	printf(#insn " r1(==%16.16lX),r2(==%16.16lX),0x" #i3 ",0x" #i4 ",0x" #i5 " = %16.16lX (cc=%d)\n", _r1, _r2, r1, cc); \
     17 })
     18 
     19 #define r1sweep(i, r2, i3, i4, i5)				\
     20 ({								\
     21 	DO_RXSBG(i, 000000000000000000ul, r2, i3, i4, i5);	\
     22 	DO_RXSBG(i, 0x0000ffffccccaaaaul, r2, i3, i4, i5);	\
     23 	DO_RXSBG(i, 0xfffffffffffffffful, r2, i3, i4, i5);	\
     24 })
     25 
     26 #define r2sweep(i, i3, i4, i5)				\
     27 ({							\
     28 	r1sweep(i, 0x0000000000000000ul, i3, i4, i5);	\
     29 	r1sweep(i, 0x5555ccccffff0000ul, i3, i4, i5);	\
     30 	r1sweep(i, 0xfffffffffffffffful, i3, i4, i5);	\
     31 })
     32 
     33 
     34 /* min/max z=0/1 and some random number in the middle */
     35 #define i3sweep(i, i4, i5)		\
     36 ({					\
     37 	r2sweep(i, 00, i4, i5);		\
     38 	r2sweep(i, 14, i4, i5);		\
     39 	r2sweep(i, 3f, i4, i5);		\
     40 	r2sweep(i, 80, i4, i5);		\
     41 	r2sweep(i, a1, i4, i5);		\
     42 	r2sweep(i, bf, i4, i5);		\
     43 })
     44 
     45 /* min/max t=0/1 and some random number in the middle */
     46 #define i4sweep(i, i5)			\
     47 ({					\
     48 	i3sweep(i, 00, i5);		\
     49 	i3sweep(i, 2a, i5);		\
     50 	i3sweep(i, 3f, i5);		\
     51 	i3sweep(i, 80, i5);		\
     52 	i3sweep(i, 9e, i5);		\
     53 	i3sweep(i, bf, i5);		\
     54 })
     55 
     56 /* min/max and other shifts */
     57 #define i5sweep(i)		\
     58 ({				\
     59 	i4sweep(i, 00);		\
     60 	i4sweep(i, 01);		\
     61 	i4sweep(i, 13);		\
     62 	i4sweep(i, 3e);		\
     63 	i4sweep(i, 3f);		\
     64 })
     65 
     66 
     67 
     68 
     69 
     70 
     71 int main()
     72 {
     73 	i5sweep(RISBG);
     74 	i5sweep(RNSBG);
     75 	i5sweep(ROSBG);
     76 	i5sweep(RXSBG);
     77         i5sweep(RISBGN);
     78 
     79 	return 0;
     80 }
     81