1 /* DN(X) generates 2**N copies of asm instruction X. */
2 #define D0(X) X
3 #define D1(X) X "\n\t" X
4 #define D2(X) D1 (D1 (X))
5 #define D3(X) D2 (D1 (X))
6 #define D4(X) D2 (D2 (X))
7 #define D5(X) D4 (D1 (X))
8 #define D6(X) D4 (D2 (X))
9 #define D7(X) D4 (D2 (D1 (X)))
10 #define D8(X) D4 (D4 (X))
11 #define D9(X) D8 (D1 (X))
12 #define D10(X) D8 (D2 (X))
13 #define D11(X) D8 (D2 (D1 (X)))
14 #define D12(X) D8 (D4 (X))
15 #define D13(X) D8 (D4 (D1 (X)))
16 #define D14(X) D8 (D4 (D2 (X)))
17
18 /* Emit something that is 0x1fff8 bytes long, which is the largest
19 permissible range for non-MIPS16 forward branches. */
20 #define OCCUPY_0x1fff8 \
21 asm (D14 ("nop") "\n\t" \
22 D13 ("nop") "\n\t" \
23 D12 ("nop") "\n\t" \
24 D11 ("nop") "\n\t" \
25 D10 ("nop") "\n\t" \
26 D9 ("nop") "\n\t" \
27 D8 ("nop") "\n\t" \
28 D7 ("nop") "\n\t" \
29 D6 ("nop") "\n\t" \
30 D5 ("nop") "\n\t" \
31 D4 ("nop") "\n\t" \
32 D3 ("nop") "\n\t" \
33 D2 ("nop") "\n\t" \
34 D1 ("nop"))
35
36 /* Emit something that is 0xfffc bytes long, which is the largest
37 permissible range for microMIPS forward branches when branches
38 have delay slots. */
39 #define OCCUPY_0xfffc \
40 asm (D13 ("nop32") "\n\t" \
41 D12 ("nop32") "\n\t" \
42 D11 ("nop32") "\n\t" \
43 D10 ("nop32") "\n\t" \
44 D9 ("nop32") "\n\t" \
45 D8 ("nop32") "\n\t" \
46 D7 ("nop32") "\n\t" \
47 D6 ("nop32") "\n\t" \
48 D5 ("nop32") "\n\t" \
49 D4 ("nop32") "\n\t" \
50 D3 ("nop32") "\n\t" \
51 D2 ("nop32") "\n\t" \
52 D1 ("nop32") "\n\t" \
53 D0 ("nop32"))
54 /* Likewise emit something that is 0x1fffc bytes long. */
55 #define OCCUPY_0x1fffc do { asm ("nop"); OCCUPY_0x1fff8; } while (0)
56 /* Likewise emit something that is 0x10000 bytes long. */
57 #define OCCUPY_0x10000 do { asm ("nop32"); OCCUPY_0xfffc; } while (0)