;;;;;
;
; Tests various operand types for JMP, XOR, RTS.
; JMP Rx is not allowed, all other modes are.
;
; XOR shares the instruction format with JSR
; (their source operand can only be a register),
; but XOR Rx,Ry is allowed whereas JSR Rx,Ry is not.
;

start:  jmp     label           ; rel(pc)       jumps to label
        jmp     @label          ; @rel(pc)      does something else!
        jmp     #label          ; (pc)+         does something else!
        jmp     @#label         ; @(pc)+        jumps to label

        jmp     r1              ; must fail
        jmp     (r0)            ; must succeed (failed before a24e3ba3)
        jmp     (r2)
        jmp     (r1)+
        jmp     @(r1)+
        jmp     -(r1)
        jmp     @-(r1)
        jmp     1234(r1)
        jmp     @1234(r1)

secnd:  jsr     r0,label        ; rel(pc)       jumps to label
        jsr     0,label         ; rel(pc)       yes MACRO11 accepts this
        jsr     r0,@label       ; @rel(pc)      does something else!
        jsr     r0,#label       ; (pc)+         does something else!
        jsr     r0,@#label      ; @(pc)+        jumps to label

        jsr     r2,r1           ; must fail
        jsr     r3,(r2)
        jsr     r4,(r1)+
        jsr     r5,@(r1)+
        jsr     r2,-(r1)
        jsr     r3,@-(r1)
        jsr     r4,1234(r1)
        jsr     r5,@1234(r1)

third:  xor     r0,label        ; rel(pc)
        xor     0,label         ; rel(pc)  yes MACRO11 accepts this
        xor     r0,@label       ; @rel(pc)
        xor     r0,#label       ; (pc)+
        xor     r0,@#label      ; @(pc)+

        xor     r2,r1           ; must succeed
        xor     r3,(r2)         ; must succeed
        xor     r4,(r1)+        ; must succeed
        xor     r5,@(r1)+       ; must succeed
        xor     r2,-(r1)        ; must succeed
        xor     r3,@-(r1)       ; must succeed
        xor     r4,1234(r1)     ; must succeed
        xor     r5,@1234(r1)    ; must succeed

        xor     (r2),r1         ; must fail
        xor     (r2)+,r1        ; must fail
        xor     @(r2)+,r1       ; must fail
        xor     -(r2),r1        ; must fail
        xor     @-(r2),r1       ; must fail
        xor     1234(r2),r1     ; must fail
        xor     @1234(r2),r1    ; must fail

three = 3
label:  rts     pc
        rts     r1
        rts     3               ; yes MACRO11 accepts this
        rts     three
        rts                     ; must fail
        rts     .               ; must fail
        rts     (r1)            ; must fail

        .psect  abssec,abs
        . = 0
zero:   rts     zero            ; dubious but ok
two:    rts     two             ; dubious but ok
four:   rts     four            ; dubious but ok
six:    rts     six             ; dubious but ok
eight:  rts     eight           ; bad

        .psect  relsec,rel
rzero:  rts     rzero           ; bad
rtwo:   rts     rtwo            ; bad
rfour:  rts     rfour           ; bad
rsix:   rts     rsix            ; bad
reight: rts     reight          ; bad
