blob: f6ab4cda14d4fa6220feda229eac94fb1fc69e3a [file] [log] [blame]
cborntra2f3d1172013-11-08 09:45:12 +00001#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; \
Elliott Hughesa0664b92017-04-18 17:46:52 -07009 asm volatile( "clgr 1,2\n" \
10 insn(1,2, i3, i4, i5) \
cborntra2f3d1172013-11-08 09:45:12 +000011 "ipm %1\n" \
12 "srl %1,28\n" \
13 : "+d" (r1), "=d" (cc) \
Elliott Hughesa0664b92017-04-18 17:46:52 -070014 : "d" (r1), "d" (r2) \
cborntra2f3d1172013-11-08 09:45:12 +000015 : "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
71int main()
72{
73 i5sweep(RISBG);
74 i5sweep(RNSBG);
75 i5sweep(ROSBG);
76 i5sweep(RXSBG);
Elliott Hughesa0664b92017-04-18 17:46:52 -070077 i5sweep(RISBGN);
cborntra2f3d1172013-11-08 09:45:12 +000078
79 return 0;
80}