(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
mips/
branch-helper.h
       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)