• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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