blob: aba4dcd8649d25eff751f3cf6f157e7f81f90f8c [file] [log] [blame]
/*
* tests for branch instruction relaxation
*
* Author: libin
*/
.include "relaxation_macro.h"
.macro _b_op_pattern insn insn1
.balign 2
/*
* for local label 1, assembler should NOT alter instructions before .skip;
* but it SHOULD alter instructions afte it.
*/
1:
insn_16 "\insn! 1b"
tran_16_32 "\insn! 1b", "\insn 1b"
insn_16 "\insn1 1b"
.skip 512
insn_16 "\insn! 1b"
tran_16_32 "\insn! 1b", "\insn 1b"
insn_16 "\insn1 1b"
/*
* for local label 2, assembler SHOULD alter instructions before .skip;
* but it should NOT alter instructions after it.
*/
insn_16 "\insn! 2f"
tran_16_32 "\insn! 2f", "\insn 2f"
insn_16 "\insn1 2f"
.skip 511
insn_16 "\insn! 2f"
tran_16_32 "\insn! 2f", "\insn 2f"
insn_16 "\insn1 2f"
2:
nop!
/* tests for boundary */
3:
.skip 512
insn_16 "\insn! 3b"
insn_16 "\insn! 3b"
insn_16 "\insn! 4f"
insn_16 "\insn! 4f"
.skip 511
4:
nop!
.endm
.macro _br_op_pattern insn
.balign 2
insn_32 "\insn r0"
insn_32 "\insn r15"
tran_16_32 "\insn! r0", "\insn r0"
/* shouldn't alter */
insn_32 "\insn r16"
insn_32 "\insn r31"
.endm
.macro _bcmp_op_pattern1 insn
.balign 2
/* as will give "Using temp register(r1)" warning if you using r1 */
/*
* for local label 1, assembler should NOT alter instructions before .skip;
* but it SHOULD alter instructions afte it.
*/
1:
insn_32 "\insn r0, r15, 1b"
insn_32 "\insn r15, r16, 1b"
insn_32 "\insn r15, r31, 1b"
insn_32 "\insn r16, r31, 1b"
.skip 512
insn_32 "\insn r0, r15, 1b"
insn_32 "\insn r15, r16, 1b"
insn_32 "\insn r15, r31, 1b"
insn_32 "\insn r16, r31, 1b"
/*
* for local label 2, assembler SHOULD alter instructions before .skip;
* but it should NOT alter instructions after it.
*/
insn_32 "\insn r0, r15, 2f"
insn_32 "\insn r15, r16, 2f"
insn_32 "\insn r15, r31, 2f"
insn_32 "\insn r16, r31, 2f"
.skip 511
insn_32 "\insn r0, r15, 2f"
insn_32 "\insn r15, r16, 2f"
insn_32 "\insn r15, r31, 2f"
insn_32 "\insn r16, r31, 2f"
2:
nop!
/* tests for boundary */
3:
.skip 512
insn_32 "\insn r0, r15, 3b"
insn_32 "\insn r16, r15, 3b"
insn_32 "\insn r0, r15, 4f"
insn_32 "\insn r16, r15, 4f"
.skip 511
4:
.endm
.macro _bcmp_op_pattern2 insn
.balign 2
/* as will give "Using temp register(r1)" warning if you using r1 */
/*
* for local label 1, assembler should NOT alter instructions before .skip;
* but it SHOULD alter instructions afte it.
*/
1:
insn_32 "\insn r0, 1b"
insn_32 "\insn r15, 1b"
insn_32 "\insn r16, 1b"
insn_32 "\insn r31, 1b"
.skip 512
insn_32 "\insn r0, 1b"
insn_32 "\insn r15, 1b"
insn_32 "\insn r16, 1b"
insn_32 "\insn r31, 1b"
/*
* for local label 2, assembler SHOULD alter instructions before .skip;
* but it should NOT alter instructions after it.
*/
insn_32 "\insn r0, 2f"
insn_32 "\insn r15, 2f"
insn_32 "\insn r16, 2f"
insn_32 "\insn r31, 2f"
.skip 511
insn_32 "\insn r0, 2f"
insn_32 "\insn r15, 2f"
insn_32 "\insn r16, 2f"
insn_32 "\insn r31, 2f"
2:
nop!
/* tests for boundary */
3:
.skip 512
insn_32 "\insn r0, 3b"
insn_32 "\insn r16, 3b"
insn_32 "\insn r0, 4f"
insn_32 "\insn r16, 4f"
.skip 511
4:
.endm
.text
/* b Disp19 <-> b! Disp9 */
_b_op_pattern "bgtu", "bgtul"
_b_op_pattern "bleu", "bleul"
_b_op_pattern "beq", "beql"
_b_op_pattern "bne", "bnel"
_b_op_pattern "bgt", "bgtl"
_b_op_pattern "ble", "blel"
_b_op_pattern "bcnz", "bcnzl"
_b_op_pattern "b", "bl"
/* br rD <-> br! rD */
_br_op_pattern "br"
_br_op_pattern "brl"
/* bcmpeq/bcmpne rA,rB,Disp9 -> cmp/cmp! rA, rB; beq/bne Disp19 */
_bcmp_op_pattern1 "bcmpeq"
_bcmp_op_pattern1 "bcmpne"
/* bcmpeqz/bcmpnez rA,Disp9 -> cmpi! rA, 0; beq/bne Disp19 */
_bcmp_op_pattern2 "bcmpeqz"
_bcmp_op_pattern2 "bcmpnez"