| 1 | |
| 2 | .EXTERN MY_LABEL2; |
| 3 | .section .text; |
| 4 | |
| 5 | // |
| 6 | //2 Program Flow Control |
| 7 | // |
| 8 | |
| 9 | |
| 10 | //JUMP ( Preg ) ; /* indirect to an absolute (not PC-relative)address (a) */ |
| 11 | //Preg: P5-0, SP, FP |
| 12 | |
| 13 | JUMP (P0); |
| 14 | JUMP (P1); |
| 15 | JUMP (P2); |
| 16 | JUMP (P3); |
| 17 | JUMP (P4); |
| 18 | JUMP (P5); |
| 19 | JUMP (SP); |
| 20 | JUMP (FP); |
| 21 | |
| 22 | //JUMP ( PC + Preg ) ; /* PC-relative, indexed (a) */ |
| 23 | JUMP (PC+P0); |
| 24 | JUMP (PC+P1); |
| 25 | JUMP (PC+P2); |
| 26 | JUMP (PC+P3); |
| 27 | JUMP (PC+P4); |
| 28 | JUMP (PC+P5); |
| 29 | JUMP (PC+SP); |
| 30 | JUMP (PC+FP); |
| 31 | |
| 32 | |
| 33 | //JUMP pcrelm2 ; /* PC-relative, immediate (a) or (b) */ |
| 34 | |
| 35 | JUMP 0X0; |
| 36 | JUMP 1234; |
| 37 | JUMP -1234; |
| 38 | JUMP 2; |
| 39 | JUMP -2; |
| 40 | |
| 41 | MY_LABEL1: |
| 42 | //JUMP.S pcrel13m2 ; /* PC-relative, immediate, short (a) */ |
| 43 | JUMP.S 0X0; |
| 44 | JUMP.S 1234; |
| 45 | JUMP.S -1234; |
| 46 | JUMP.S 2; |
| 47 | JUMP.S -2; |
| 48 | |
| 49 | //JUMP.L pcrel25m2 ; /* PC-relative, immediate, long (b) */ |
| 50 | JUMP.L 0XFF800000; |
| 51 | JUMP.L 0X007FFFFE; |
| 52 | JUMP.L 0X0; |
| 53 | JUMP.L 1234; |
| 54 | JUMP.L -1234; |
| 55 | JUMP.L 2; |
| 56 | JUMP.L -2; |
| 57 | |
| 58 | //JUMP user_label ; /* user-defined absolute address label, */ |
| 59 | JUMP MY_LABEL1; |
| 60 | JUMP MY_LABEL2; |
| 61 | |
| 62 | JUMP MY_LABEL1-2; |
| 63 | JUMP MY_LABEL2-2; |
| 64 | |
| 65 | //IF CC JUMP pcrel11m2 ; /* branch if CC=1, branch predicted as not taken (a) */ |
| 66 | IF CC JUMP 0xFFFFFE08; |
| 67 | IF CC JUMP 0x0B4; |
| 68 | IF CC JUMP 0; |
| 69 | |
| 70 | //IF CC JUMP pcrel11m2 (bp) ; /* branch if CC=1, branch predicted as taken (a) */ |
| 71 | IF CC JUMP 0xFFFFFE08(bp); |
| 72 | IF CC JUMP 0x0B4(bp); |
| 73 | |
| 74 | //IF !CC JUMP pcrel11m2 ; /* branch if CC=0, branch predicted as not taken (a) */ |
| 75 | IF !CC JUMP 0xFFFFFF22; |
| 76 | IF !CC JUMP 0X120; |
| 77 | |
| 78 | //IF !CC JUMP pcrel11m2 (bp) ; /* branch if CC=0, branch predicted as taken (a) */ |
| 79 | IF !CC JUMP 0xFFFFFF22(bp); |
| 80 | IF !CC JUMP 0X120(bp); |
| 81 | |
| 82 | //IF CC JUMP user_label ; /* user-defined absolute address label, resolved by the assembler/linker to the appropriate PC-relative instruction (a) */ |
| 83 | IF CC JUMP MY_LABEL1; |
| 84 | IF CC JUMP MY_LABEL2; |
| 85 | |
| 86 | //IF CC JUMP user_label (bp) ; /* user-defined absolute address label, resolved by the assembler/linker to the appropriate PC-relative instruction (a) */ |
| 87 | IF CC JUMP MY_LABEL1(bp); |
| 88 | IF CC JUMP MY_LABEL2(bp); |
| 89 | |
| 90 | //IF !CC JUMP user_label ; /* user-defined absolute address label, resolved by the assembler/linker to the appropriate PC-relative instruction (a) */ |
| 91 | IF !CC JUMP MY_LABEL1; |
| 92 | IF !CC JUMP MY_LABEL2; |
| 93 | |
| 94 | //IF !CC JUMP user_label (bp) ; /* user-defined absolute address label, resolved by the assembler/linker to the appropriate PC-relative instruction (a) */ |
| 95 | IF !CC JUMP MY_LABEL1(bp); |
| 96 | IF !CC JUMP MY_LABEL2(bp); |
| 97 | |
| 98 | //CALL ( Preg ) ; /* indirect to an absolute (not PC-relative) address (a) */ |
| 99 | CALL(P0); |
| 100 | CALL(P1); |
| 101 | CALL(P2); |
| 102 | CALL(P3); |
| 103 | CALL(P4); |
| 104 | CALL(P5); |
| 105 | |
| 106 | |
| 107 | //CALL ( PC + Preg ) ; /* PC-relative, indexed (a) */ |
| 108 | CALL(PC+P0); |
| 109 | CALL(PC+P1); |
| 110 | CALL(PC+P2); |
| 111 | CALL(PC+P3); |
| 112 | CALL(PC+P4); |
| 113 | CALL(PC+P5); |
| 114 | |
| 115 | //CALL pcrel25m2 ; /* PC-relative, immediate (b) */ |
| 116 | CALL 0x123456 ; |
| 117 | CALL -1234; |
| 118 | |
| 119 | //CALL user_label ; /* user-defined absolute address label,resolved by the assembler/linker to the appropriate PC-relative instruction (a) or (b) */ |
| 120 | CALL MY_LABEL1; |
| 121 | CALL MY_LABEL2; |
| 122 | |
| 123 | RTS ; // Return from Subroutine (a) |
| 124 | RTI ; // Return from Interrupt (a) |
| 125 | RTX ; // Return from Exception (a) |
| 126 | RTN ; // Return from NMI (a) |
| 127 | RTE ; // Return from Emulation (a) |
| 128 | |
| 129 | lsetup ( 4, 4 ) lc0 ; |
| 130 | |
| 131 | lsetup ( beg_poll_bit, end_poll_bit ) lc0 ; |
| 132 | NOP;NOP; |
| 133 | beg_poll_bit: R0=1(Z); |
| 134 | end_poll_bit: R1=2(Z); |
| 135 | |
| 136 | lsetup ( 4, 6 ) lc1 ; |
| 137 | |
| 138 | lsetup ( FIR_filter, bottom_of_FIR_filter ) lc1 ; |
| 139 | NOP; |
| 140 | FIR_filter: R0=1(Z); |
| 141 | bottom_of_FIR_filter: R1=2(Z); |
| 142 | |
| 143 | lsetup ( 4, 8 ) lc0 = p1 ; |
| 144 | |
| 145 | lsetup ( 4, 8 ) lc0 = p1>>1 ; |
| 146 | |
| 147 | loop DoItSome LC0 ; /* define loop DoItSome with Loop Counter 0 */ |
| 148 | loop_begin DoItSome ; /* place before the first instruction in the loop */ |
| 149 | R0=1; |
| 150 | R1=2; |
| 151 | loop_end DoItSome ; /* place after the last instruction in the loop */ |
| 152 | |
| 153 | loop DoItSomeMore LC1 ; /* define loop MyLoop with Loop Counter 1*/ |
| 154 | |
| 155 | |