div.h revision b32f58018498ea2225959b0ba11c18f0c433deef
1#include <stdio.h>
2
3#define DIV_REG_MEM(insn, d1_1, d1_2, d2)		\
4({							\
5	unsigned long tmp1 = d1_1;			\
6	unsigned long tmp2 = d1_2;			\
7	asm volatile(	"lgr 2, %0\n"			\
8			"lgr 3, %1\n"			\
9			#insn " 2, %2\n"		\
10			"lgr %0,2\n"			\
11			"lgr %1,3\n"			\
12			: "+d" (tmp1), "+d" (tmp2)	\
13			: "Q" (d2)			\
14			: "2","3");			\
15	printf(#insn " %16.16lX%16.16lX / %16.16lX = %16.16lX (rem %16.16lX)\n", d1_1, d1_2, d2, tmp2, tmp1); \
16})
17
18#define DIV_REG_REG(insn, d1_1, d1_2, d2)		\
19({							\
20	unsigned long tmp1 = d1_1;			\
21	unsigned long tmp2 = d1_2;			\
22	asm volatile(	"lgr 2, %0\n"			\
23			"lgr 3, %1\n"			\
24			#insn " 2, %2\n"		\
25			"lgr %0,2\n"			\
26			"lgr %1,3\n"			\
27			: "+d" (tmp1), "+d" (tmp2)	\
28			: "d" (d2)			\
29			: "2","3");			\
30	printf(#insn " %16.16lX%16.16lX / %16.16lX = %16.16lX (rem %16.16lX)\n", d1_1, d1_2, d2, tmp2, tmp1); \
31})
32
33
34#define memsweep(i, d2)						\
35({								\
36	DIV_REG_MEM(i, 0x0ul, 0ul, d2);				\
37	DIV_REG_MEM(i, 0x0ul, 1ul, d2);				\
38	DIV_REG_MEM(i, 0x0ul, 0xfffful, d2);			\
39	DIV_REG_MEM(i, 0x0ul, 0x7ffful, d2);			\
40	DIV_REG_MEM(i, 0x0ul, 0x8000ul, d2);			\
41	DIV_REG_MEM(i, 0x0ul, 0xfffffffful, d2);		\
42	DIV_REG_MEM(i, 0x0ul, 0x80000000ul, d2);		\
43	DIV_REG_MEM(i, 0x0ul, 0x7ffffffful, d2);		\
44	DIV_REG_MEM(i, 0x0ul, 0xfffffffffffffffful, d2);	\
45	DIV_REG_MEM(i, 0x0ul, 0x8000000000000000ul, d2);	\
46	DIV_REG_MEM(i, 0x0ul, 0x7ffffffffffffffful, d2);	\
47	DIV_REG_MEM(i, 0x1ul, 0xaffffffful, d2);		\
48})
49
50#define regsweep(i, d2)						\
51({								\
52	DIV_REG_REG(i, 0x0ul, 0ul, d2);				\
53	DIV_REG_REG(i, 0x0ul, 1ul, d2);				\
54	DIV_REG_REG(i, 0x0ul, 0xfffful, d2);			\
55	DIV_REG_REG(i, 0x0ul, 0x7ffful, d2);			\
56	DIV_REG_REG(i, 0x0ul, 0x8000ul, d2);			\
57	DIV_REG_REG(i, 0x0ul, 0xfffffffful, d2);		\
58	DIV_REG_REG(i, 0x0ul, 0x80000000ul, d2);		\
59	DIV_REG_REG(i, 0x0ul, 0x7ffffffful, d2);		\
60	DIV_REG_REG(i, 0x0ul, 0xfffffffffffffffful, d2);	\
61	DIV_REG_REG(i, 0x0ul, 0x8000000000000000ul, d2);	\
62	DIV_REG_REG(i, 0x0ul, 0x7ffffffffffffffful, d2);	\
63	DIV_REG_REG(i, 0x1ul, 0xaffffffful, d2);		\
64})
65
66