1b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#include <stdio.h>
2b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
3d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj/* Dummy variable. Needed to work around GCC code generation bugs */
4d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardjvolatile long v;
5d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj
6b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define ADD_REG_MEM(insn, s1, s2, CARRY)		\
7b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({							\
8b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	unsigned long tmp = s1;				\
9b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	int cc;						\
10b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	asm volatile(	"lghi 0," #CARRY "\n"		\
11b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"aghi 0, 0\n"			\
12b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			#insn " %0, %3\n"		\
13b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"ipm %1\n"			\
14b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"srl %1,28\n"			\
15b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "+d" (tmp), "=d" (cc)		\
16b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "d" (tmp), "Q" (s2)		\
17b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "0", "cc");			\
18b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	printf(#insn " " #CARRY " + %16.16lX + %16.16lX = %16.16lX (cc=%d)\n", s1, s2, tmp, cc); \
19b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj})
20b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
21b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define ADD_REG_REG(insn, s1, s2, CARRY)		\
22b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({							\
23b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	unsigned long tmp = s1;				\
24b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	int cc;						\
25b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	asm volatile(	"lghi 0," #CARRY "\n"		\
26b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"aghi 0, 0\n"			\
27b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			#insn " %0, %3\n"		\
28b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"ipm %1\n"			\
29b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"srl %1,28\n"			\
30b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "+d" (tmp), "=d" (cc)		\
31b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "d" (tmp), "d" (s2)		\
32b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "0", "cc");			\
33b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	printf(#insn " " #CARRY " + %16.16lX + %16.16lX = %16.16lX (cc=%d)\n", s1, s2, tmp, cc); \
34b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj})
35b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
36b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define ADD_REG_IMM(insn, s1, s2, CARRY)		\
37b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({							\
38b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	unsigned long tmp = s1;				\
39b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	int cc;						\
40b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	asm volatile(	"lghi 0," #CARRY "\n"		\
41b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"aghi 0, 0\n"			\
42b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			#insn " %0," #s2 "\n"		\
43b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"ipm %1\n"			\
44b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"srl %1,28\n"			\
45b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "+d" (tmp), "=d" (cc)		\
46b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "d" (tmp)			\
47b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "0", "cc");			\
48b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	printf(#insn " " #CARRY " + %16.16lX + %16.16lX = %16.16lX (cc=%d)\n", s1, (unsigned long) s2, tmp, cc); \
49b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj})
50b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
51b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define ADD_MEM_IMM(insn, s1, s2, CARRY)		\
52b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({							\
53d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	unsigned long tmp = s1, v2;			\
54d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	register unsigned long *addr asm("5") = &tmp;	\
55b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	int cc;						\
56b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	asm volatile(	"lghi 0," #CARRY "\n"		\
57b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"aghi 0, 0\n"			\
58d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			insn(s2,5,000,00)		\
59b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"ipm %1\n"			\
60b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			"srl %1,28\n"			\
61b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "+Q" (tmp), "=d" (cc)		\
62d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			: "Q" (tmp), "d" (addr)		\
63b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj			: "0", "cc");			\
64d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj        v2 =  (((signed long)((unsigned long)0x##s2 << 56)) >> 56); \
65d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	printf(#insn " " #CARRY " + %16.16lX + %16.16lX = %16.16lX (cc=%d)\n", s1, v2, tmp, cc); \
66b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj})
67b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
68b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
69b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define memsweep(i, s2, carryset)				\
70b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({								\
71b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0ul, s2, carryset);			\
72b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 1ul, s2, carryset);			\
73b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0xfffful, s2, carryset);			\
74b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0x7ffful, s2, carryset);			\
75b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0x8000ul, s2, carryset);			\
76b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0xfffffffful, s2, carryset);		\
77b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0x80000000ul, s2, carryset);		\
78b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0x7ffffffful, s2, carryset);		\
79b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0xfffffffffffffffful, s2, carryset);	\
80b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0x8000000000000000ul, s2, carryset);	\
81b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_MEM(i, 0x7ffffffffffffffful, s2, carryset);	\
82b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj})
83b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
84b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define regsweep(i, s2, carryset)				\
85b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({								\
86b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0ul, s2, carryset);			\
87b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 1ul, s2, carryset);			\
88b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0xfffful, s2, carryset);			\
89b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0x7ffful, s2, carryset);			\
90b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0x8000ul, s2, carryset);			\
91b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0xfffffffful, s2, carryset);		\
92b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0x80000000ul, s2, carryset);		\
93b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0x7ffffffful, s2, carryset);		\
94b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0xfffffffffffffffful, s2, carryset);	\
95b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0x8000000000000000ul, s2, carryset);	\
96b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_REG(i, 0x7ffffffffffffffful, s2, carryset);	\
97b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj})
98b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
99b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define immsweep(i, s2, carryset)				\
100b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({								\
101b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0ul, s2, carryset);			\
102b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 1ul, s2, carryset);			\
103b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0xfffful, s2, carryset);			\
104b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0x7ffful, s2, carryset);			\
105b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0x8000ul, s2, carryset);			\
106b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0xfffffffful, s2, carryset);		\
107b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0x80000000ul, s2, carryset);		\
108b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0x7ffffffful, s2, carryset);		\
109b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0xfffffffffffffffful, s2, carryset);	\
110b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0x8000000000000000ul, s2, carryset);	\
111b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_REG_IMM(i, 0x7ffffffffffffffful, s2, carryset);	\
112b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj})
113b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
114b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define memimmsweep(i, s2, carryset)				\
115b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({								\
116b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0ul, s2, carryset);			\
117b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 1ul, s2, carryset);			\
118b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0xfffful, s2, carryset);			\
119b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0x7ffful, s2, carryset);			\
120b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0x8000ul, s2, carryset);			\
121b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0xfffffffful, s2, carryset);		\
122b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0x80000000ul, s2, carryset);		\
123b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0x7ffffffful, s2, carryset);		\
124b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0xfffffffffffffffful, s2, carryset);	\
125b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0x8000000000000000ul, s2, carryset);	\
126b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj	ADD_MEM_IMM(i, 0x7ffffffffffffffful, s2, carryset);	\
127b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj})
128b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj
129d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define ahysweep(i, s2, carryset)				\
130d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({								\
131d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0ul, s2, carryset);			\
132d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 1ul, s2, carryset);			\
133d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0xfffful, s2, carryset);			\
134d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0x7ffful, s2, carryset);			\
135d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0x8000ul, s2, carryset);			\
136d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0xfffffffful, s2, carryset);		\
137d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0x80000000ul, s2, carryset);		\
138d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0x7ffffffful, s2, carryset);		\
139d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0xfffffffffffffffful, s2, carryset);	\
140d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0x8000000000000000ul, s2, carryset);	\
141d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_MEM(i, 0x7ffffffffffffffful, s2, carryset);	\
142d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj})
143d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj
144d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define ADD_REG_LDISP(insn, s1, s2, CARRY)			\
145d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({								\
146d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	register unsigned long tmp asm("2") = s1;		\
147d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	register unsigned long *addr asm("5") = &s2;		\
148d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	int cc;							\
149d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	asm volatile(	"lghi 0," #CARRY "\n"			\
150d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			"aghi 0, 0\n"				\
151d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			insn(2,0,5,000,00)			\
152d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			"ipm %1\n"				\
153d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			"srl %1,28\n"				\
154d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			: "+d" (tmp), "=d" (cc)			\
155d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			: "d" (tmp), "Q" (s2), "d"(addr)	\
156d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			: "cc");				\
157d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	v = tmp; /* work around GCC code gen bug */     \
158d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	printf(#insn " " #CARRY " + %16.16lX + %16.16lX = %16.16lX (cc=%d)\n", s1, s2, v, cc); \
159d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj})
160d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj
161d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define ldispsweep(i, s2, carryset)				\
162d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({								\
163d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0ul, s2, carryset);			\
164d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 1ul, s2, carryset);			\
165d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0xfffful, s2, carryset);		\
166d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0x7ffful, s2, carryset);		\
167d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0x8000ul, s2, carryset);		\
168d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0xfffffffful, s2, carryset);		\
169d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0x80000000ul, s2, carryset);		\
170d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0x7ffffffful, s2, carryset);		\
171d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0xfffffffffffffffful, s2, carryset);	\
172d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0x8000000000000000ul, s2, carryset);	\
173d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_LDISP(i, 0x7ffffffffffffffful, s2, carryset);	\
174d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj})
175d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj
176d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define ADD_REG_XIMM(insn, s1, us2,s2, CARRY)		\
177d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({							\
178d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	register unsigned long tmp asm("2") = s1;	\
179d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	int cc;						\
180d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	asm volatile(	"lghi 0," #CARRY "\n"		\
181d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			"aghi 0, 0\n"			\
182d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			insn(2,s2)			\
183d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			"ipm %1\n"			\
184d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			"srl %1,28\n"			\
185d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			: "+d" (tmp), "=d" (cc)		\
186d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			: "d" (tmp)			\
187d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj			: "0", "cc");			\
188d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	v = tmp; /* work around GCC code gen bug */     \
189d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	printf(#insn " " #CARRY " + %16.16lX + %16.16lX = %16.16lX (cc=%d)\n", s1, (unsigned long) 0x##us2##s2, v, cc); \
190d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj})
191d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj
192d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define ximmsweep(i, us2, s2, carryset)					\
193d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({									\
194d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0ul, us2, s2, carryset);			\
195d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 1ul, us2, s2, carryset);			\
196d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0xfffful, us2, s2, carryset);			\
197d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0x7ffful, us2, s2, carryset);			\
198d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0x8000ul, us2, s2, carryset);			\
199d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0xfffffffful, us2, s2, carryset);		\
200d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0x80000000ul, us2, s2, carryset);		\
201d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0x7ffffffful, us2, s2, carryset);		\
202d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0xfffffffffffffffful, us2, s2, carryset);	\
203d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0x8000000000000000ul, us2, s2, carryset);	\
204d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj	ADD_REG_XIMM(i, 0x7ffffffffffffffful, us2, s2, carryset);	\
205d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj})
206d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj
207