mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-24 23:32:06 +00:00
50 lines
974 B
ArmAsm
50 lines
974 B
ArmAsm
;;; Bug #1825: gas assemble PC-relative indexed addressing modes incorrectly
|
|
;;; http://savannah.gnu.org/bugs/?func=detailbug&bug_id=1825&group_id=2424
|
|
;;;
|
|
.sect .text
|
|
.globl _main
|
|
_main:
|
|
nop
|
|
ldx L1,pc ; Assemble to 5-bit > 0 offset
|
|
bra L2
|
|
L1:
|
|
.dc.w 0xaabb
|
|
L2:
|
|
subd L1,pc ; Assemble to 5-bit < 0 offset
|
|
L3:
|
|
.ds.b 14, 0xA7
|
|
ldab L3,pc ; 5-bit < 0 offset
|
|
ldab L4,pc ; 5-bit > 0 offset
|
|
.skip 15
|
|
L4:
|
|
.skip 128
|
|
subd L4,pc ; 9-bit < 0 offset
|
|
addd L5,pc ; 9-bit > 0 offset
|
|
.skip 128
|
|
L5:
|
|
.skip 256-3
|
|
orab L5,pc ; 9 bit < 0 offset (min value)
|
|
oraa L6,pc ; 9 bit > 0 offset (max value)
|
|
.skip 255
|
|
L6:
|
|
.skip 256-2
|
|
orab L6,pc ; 16 bit < 0 offset
|
|
anda _main,pc ; 16 bit < 0 offset
|
|
andb L7,pc
|
|
.skip 256
|
|
L7:
|
|
stab external,pc ; External 16-bit PCREL
|
|
ldd _table,pc
|
|
addd _table+2,pc
|
|
subd _table+4,pc
|
|
addd _table+8,pc
|
|
addd _table+12,pc
|
|
addd _table+16,pc
|
|
rts
|
|
nop
|
|
_table:
|
|
.ds.b 16,0
|
|
leax _table,sp ; 16-bit absolute reloc
|
|
leay _table,x
|
|
leax _table,y
|