;; ;; This file verifies the 68HC12 indexed addressing modes ;; with a 5, 9 and 16-bit offset. ;; .sect .text .globl _main _main: nop ;;; Global check (1st) ldab L1-_main,x ; Offset/const of these 2 insns must be ldaa #L1-_main ; identical (likewise for 2nd global check) ;;; Test gas relax with difference of symbols (same section) ldaa L2-L1,x ; -> ldaa 2,x (5-bit offset), text seg adda L1-L2,y ; -> adda -2,y (5-bit offset), text seg orab L7-L6,sp ; -> orab 8,sp (5-bit offset), text seg anda L8-L7,sp ; -> anda 15,sp (5-bit offset), text seg eora L7-L8,sp ; -> eora -15,sp (5-bit offset), text seg eorb L7-L9,sp ; -> eorb -16,sp (5-bit offset), text seg andb L9-L7,sp ; -> andb 16,sp (9-bit offset), text seg staa L7-L10,x ; -> staa -17,x (9-bit offset), text seg stab L11-L10,y ; -> stab 128,y (9-bit offset), text seg stab L10-L11,y ; -> stab -128,y (9-bit offset), text seg stab L11-L10+1,y ; -> stab 129,y (9-bit offset), text seg stab L10-L11-1,y ; -> stab -129,y (9-bit offset), text seg stab L11-1-L10,y ; -> stab 127,y (9-bit offset), text seg stab L10-1-L11,y ; -> stab -129,y (9-bit offset), text seg tst L12-L10,x ; -> tst 255,x (9-bit offset), text seg tst L10-L12,x ; -> tst -255,x (9-bit offset), text seg tst L12-L10+1,x ; -> tst 256,x (16-bit offset), text seg mina L13-L10,x ; -> mina 256,x (16-bit offset) mina L10-L13,x ; -> mina -256,x (9-bit offset) maxa L14-L10,x ; -> maxa 257,x (16-bit offset) maxa L10-L14,x ; -> maxa -257,x (16-bit offset) ;;; Test gas relax with difference of symbols (different section) ldaa D2-D1,x ; -> ldaa 2,x (5-bit offset), data seg adda D1-D2,y ; -> adda -2,y (5-bit offset), data seg orab D7-D6,sp ; -> orab 8,sp (5-bit offset), data seg anda D8-D7,sp ; -> anda 15,sp (5-bit offset), data seg eora D7-D8,sp ; -> eora -15,sp (5-bit offset), data seg eorb D7-D9,sp ; -> eorb -16,sp (5-bit offset), data seg andb D9-D7,sp ; -> andb 16,sp (9-bit offset), data seg staa D7-D10,x ; -> staa -17,x (9-bit offset), data seg stab D11-D10,y ; -> stab 128,y (9-bit offset), data seg stab D10-D11,y ; -> stab -128,y (9-bit offset), data seg stab D11-D10+1,y ; -> stab 129,y (9-bit offset), data seg stab D10-D11+1,y ; -> stab -127,y (9-bit offset), data seg stab D11-1-D10,y ; -> stab 127,y (9-bit offset), data seg stab D10-1-D11,y ; -> stab -129,y (9-bit offset), data seg tst D12-D10,x ; -> tst 255,x (9-bit offset), data seg tst D10-D12,x ; -> tst -255,x (9-bit offset), data seg tst D12-D10+1,x ; -> tst 256,x (16-bit offset), data seg mina D13-D10,x ; -> mina 256,x (16-bit offset) mina D10-D13,x ; -> mina -256,x (9-bit offset) maxa D14-D10,x ; -> maxa 257,x (16-bit offset) maxa D10-D14,x ; -> maxa -257,x (16-bit offset) ;;; Global check (2nd) ldab L1-_main,x ldaa #L1-_main ;;; Indexed addressing with external symbol ldab _external+128,x bra L2 L1: .dc.w 0xaabb L2: L6: .ds.b 8, 0xa7 L7: .ds.b 15, 0xa7 L8: nop L9: nop L10: .skip 128 L11: .skip 127 L12: nop L13: nop L14: rts .sect .data D1: .dc.w 0xaabb D2: D6: .ds.b 8, 0xa7 D7: .ds.b 15, 0xa7 D8: nop D9: nop D10: .skip 128 D11: .skip 127 D12: nop D13: nop D14: