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)
58