]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/none/tests/s390x/div.h
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / none / tests / s390x / div.h
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