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