mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-19 15:23:30 +08:00
19dd1b4833
* ld-m68hc11/adj-jump.d: New test for linker relaxation. * ld-m68hc11/adj-jump.s: Likewise. * ld-m68hc11/adj-brset.s: Likewise. * ld-m68hc11/adj-brset.d: Likewise. * ld-m68hc11/relax-direct.s: Likewise. * ld-m68hc11/relax-direct.d: Likewise. * ld-m68hc11/relax-group.s: Likewise. * ld-m68hc11/relax-group.d: Likewise. * ld-m68hc11/bug-1403.d: Likewise. * ld-m68hc11/bug-1403.s: Likewise.
162 lines
2.2 KiB
ArmAsm
162 lines
2.2 KiB
ArmAsm
;;; Test 68HC11 linker relaxation (group relax)
|
|
;;;
|
|
.sect .text
|
|
.globl _start
|
|
_start:
|
|
;;;
|
|
;;; The following group of instructions are adjusted.
|
|
;;;
|
|
.relax L1x
|
|
ldx #table
|
|
bset 0,x #4
|
|
L1x:
|
|
.relax L1y
|
|
ldy #table
|
|
bset 0,y #4
|
|
L1y:
|
|
.relax L2x
|
|
ldx #table+3
|
|
bset 0,x #4
|
|
bset 1,x #8
|
|
L2x:
|
|
.relax L2y
|
|
ldy #table+3
|
|
bset 0,y #4
|
|
bset 1,y #8
|
|
L2y:
|
|
.relax L3x
|
|
ldx #table+6
|
|
bset 0,x #4
|
|
bset 1,x #8
|
|
bset 2,x #12
|
|
bset 3,x #12
|
|
bset 4,x #12
|
|
bset 5,x #12
|
|
L3x:
|
|
.relax L3y
|
|
ldy #table+6
|
|
bset 0,y #4
|
|
bset 1,y #8
|
|
bset 2,y #12
|
|
bset 3,y #12
|
|
bset 4,y #12
|
|
bset 5,y #12
|
|
L3y:
|
|
;; Next branch is always relative. It must be adjusted while
|
|
;; above instructions are relaxed.
|
|
bra _start
|
|
;;;
|
|
;;; This group has the first two bset insn relaxable while the
|
|
;;; others are not. The ldx/ldy must not be removed.
|
|
;;;
|
|
.relax L4x
|
|
ldx #table+0xfe
|
|
bset 0,x #4
|
|
bset 1,x #8
|
|
bset 2,x #12
|
|
bset 3,x #12
|
|
bset 4,x #12
|
|
bset 5,x #12
|
|
L4x:
|
|
.relax L4y
|
|
ldy #table+0xfe
|
|
bset 0,y #4
|
|
bset 1,y #8
|
|
bset 2,y #12
|
|
bset 3,y #12
|
|
bset 4,y #12
|
|
bset 5,y #12
|
|
L4y:
|
|
;;;
|
|
;;; Relax group for bclr
|
|
;;;
|
|
.relax L5x
|
|
ldx #table+10
|
|
bclr 0,x #4
|
|
bclr 1,x #8
|
|
L5x:
|
|
.relax L5y
|
|
ldy #table+16
|
|
bclr 10,y #4
|
|
bclr 11,y #8
|
|
L5y:
|
|
;;;
|
|
;;; Relax group for brset (with backward branch)
|
|
;;;
|
|
.relax L6x
|
|
ldx #table+8
|
|
brset 0,x #4 L5y
|
|
L6x:
|
|
.relax L7x
|
|
ldy #table+8
|
|
brset 0,y #4 L6x
|
|
L7x:
|
|
;;;
|
|
;;; Relax group for brset (with forward branch)
|
|
;;;
|
|
.relax L8x
|
|
ldx #table+8
|
|
brset 0,x #4 brend
|
|
L8x:
|
|
.relax L8y
|
|
ldy #table+8
|
|
brset 0,y #4 brend
|
|
L8y:
|
|
;;;
|
|
;;; Relax group for brclr (with backward branch)
|
|
;;;
|
|
.relax L9x
|
|
ldx #table+8
|
|
brclr 0,x #4 L8y
|
|
L9x:
|
|
.relax L9y
|
|
ldy #table+8
|
|
brclr 0,y #4 L9x
|
|
L9y:
|
|
;;;
|
|
;;; Relax group for brclr (with forward branch)
|
|
;;;
|
|
.relax L10x
|
|
ldx #table+8
|
|
brclr 0,x #4 brend
|
|
L10x:
|
|
.relax L10y
|
|
ldy #table+8
|
|
brclr 0,y #4 brend
|
|
L10y:
|
|
nop
|
|
brend:
|
|
;;;
|
|
;;; The following are wrong use of .relax groups.
|
|
;;;
|
|
.relax w1
|
|
w1:
|
|
.relax w2
|
|
bset 0,x #4
|
|
w2:
|
|
.relax w3
|
|
ldx #table
|
|
w3:
|
|
.relax w4
|
|
ldy #table+8
|
|
w4:
|
|
.relax w5
|
|
rts
|
|
w5:
|
|
;;;
|
|
;;; Next insn is not in a .relax group
|
|
ldx #table
|
|
bset 0,x #5
|
|
bra _start
|
|
rts
|
|
|
|
.sect .page0
|
|
.globl table
|
|
table: .long 0
|
|
table4: .long 0
|
|
table8: .long 0
|
|
.skip 10
|
|
end_table:
|
|
.long 0
|
|
|