OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [gas/] [testsuite/] [gas/] [score/] [branch_32.s] - Rev 818

Compare with Previous | Blame | View Log

/*
 * 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"

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.