1/* 2 * tests for branch instruction relaxation 3 * 4 * Author: libin 5 */ 6 7.include "relaxation_macro.h" 8 9.macro _b_op_pattern insn insn1 10.balign 2 11 12/* 13 * for local label 1, assembler should NOT alter instructions before .skip; 14 * but it SHOULD alter instructions afte it. 15 */ 161: 17 insn_16 "\insn! 1b" 18 tran_16_32 "\insn! 1b", "\insn 1b" 19 insn_16 "\insn1 1b" 20.skip 512 21 insn_16 "\insn! 1b" 22 tran_16_32 "\insn! 1b", "\insn 1b" 23 insn_16 "\insn1 1b" 24 25/* 26 * for local label 2, assembler SHOULD alter instructions before .skip; 27 * but it should NOT alter instructions after it. 28 */ 29 insn_16 "\insn! 2f" 30 tran_16_32 "\insn! 2f", "\insn 2f" 31 insn_16 "\insn1 2f" 32.skip 511 33 insn_16 "\insn! 2f" 34 tran_16_32 "\insn! 2f", "\insn 2f" 35 insn_16 "\insn1 2f" 362: 37 nop! 38 39/* tests for boundary */ 403: 41.skip 512 42 insn_16 "\insn! 3b" 43 insn_16 "\insn! 3b" 44 45 insn_16 "\insn! 4f" 46 insn_16 "\insn! 4f" 47.skip 511 484: 49 nop! 50.endm 51 52.macro _br_op_pattern insn 53.balign 2 54 insn_32 "\insn r0" 55 insn_32 "\insn r15" 56 57 tran_16_32 "\insn! r0", "\insn r0" 58 59 /* shouldn't alter */ 60 insn_32 "\insn r16" 61 insn_32 "\insn r31" 62.endm 63 64.macro _bcmp_op_pattern1 insn 65.balign 2 66 67/* as will give "Using temp register(r1)" warning if you using r1 */ 68 69/* 70 * for local label 1, assembler should NOT alter instructions before .skip; 71 * but it SHOULD alter instructions afte it. 72 */ 731: 74 insn_32 "\insn r0, r15, 1b" 75 insn_32 "\insn r15, r16, 1b" 76 insn_32 "\insn r15, r31, 1b" 77 insn_32 "\insn r16, r31, 1b" 78.skip 512 79 insn_32 "\insn r0, r15, 1b" 80 insn_32 "\insn r15, r16, 1b" 81 insn_32 "\insn r15, r31, 1b" 82 insn_32 "\insn r16, r31, 1b" 83 84/* 85 * for local label 2, assembler SHOULD alter instructions before .skip; 86 * but it should NOT alter instructions after it. 87 */ 88 insn_32 "\insn r0, r15, 2f" 89 insn_32 "\insn r15, r16, 2f" 90 insn_32 "\insn r15, r31, 2f" 91 insn_32 "\insn r16, r31, 2f" 92.skip 511 93 insn_32 "\insn r0, r15, 2f" 94 insn_32 "\insn r15, r16, 2f" 95 insn_32 "\insn r15, r31, 2f" 96 insn_32 "\insn r16, r31, 2f" 972: 98 nop! 99 100/* tests for boundary */ 1013: 102.skip 512 103 insn_32 "\insn r0, r15, 3b" 104 insn_32 "\insn r16, r15, 3b" 105 106 insn_32 "\insn r0, r15, 4f" 107 insn_32 "\insn r16, r15, 4f" 108.skip 511 1094: 110.endm 111 112.macro _bcmp_op_pattern2 insn 113.balign 2 114 115/* as will give "Using temp register(r1)" warning if you using r1 */ 116 117/* 118 * for local label 1, assembler should NOT alter instructions before .skip; 119 * but it SHOULD alter instructions afte it. 120 */ 1211: 122 insn_32 "\insn r0, 1b" 123 insn_32 "\insn r15, 1b" 124 insn_32 "\insn r16, 1b" 125 insn_32 "\insn r31, 1b" 126.skip 512 127 insn_32 "\insn r0, 1b" 128 insn_32 "\insn r15, 1b" 129 insn_32 "\insn r16, 1b" 130 insn_32 "\insn r31, 1b" 131 132/* 133 * for local label 2, assembler SHOULD alter instructions before .skip; 134 * but it should NOT alter instructions after it. 135 */ 136 insn_32 "\insn r0, 2f" 137 insn_32 "\insn r15, 2f" 138 insn_32 "\insn r16, 2f" 139 insn_32 "\insn r31, 2f" 140.skip 511 141 insn_32 "\insn r0, 2f" 142 insn_32 "\insn r15, 2f" 143 insn_32 "\insn r16, 2f" 144 insn_32 "\insn r31, 2f" 1452: 146 nop! 147 148/* tests for boundary */ 1493: 150.skip 512 151 insn_32 "\insn r0, 3b" 152 insn_32 "\insn r16, 3b" 153 154 insn_32 "\insn r0, 4f" 155 insn_32 "\insn r16, 4f" 156.skip 511 1574: 158.endm 159 160.text 161/* b Disp19 <-> b! Disp9 */ 162_b_op_pattern "bgtu", "bgtul" 163_b_op_pattern "bleu", "bleul" 164_b_op_pattern "beq", "beql" 165_b_op_pattern "bne", "bnel" 166_b_op_pattern "bgt", "bgtl" 167_b_op_pattern "ble", "blel" 168_b_op_pattern "bcnz", "bcnzl" 169_b_op_pattern "b", "bl" 170 171/* br rD <-> br! rD */ 172_br_op_pattern "br" 173_br_op_pattern "brl" 174 175/* bcmpeq/bcmpne rA,rB,Disp9 -> cmp/cmp! rA, rB; beq/bne Disp19 */ 176_bcmp_op_pattern1 "bcmpeq" 177_bcmp_op_pattern1 "bcmpne" 178 179/* bcmpeqz/bcmpnez rA,Disp9 -> cmpi! rA, 0; beq/bne Disp19 */ 180_bcmp_op_pattern2 "bcmpeqz" 181_bcmp_op_pattern2 "bcmpnez" 182