blob: efc882863e039c97fd531137b44408263e4c8434 [file] [log] [blame]
.text
;;; Test some common instruction patterns for disabling/enabling interrupts.
;;; "MOV &FOO,r10" is used as an artbitrary statement which isn't a NOP, to
;;; break up the instructions being tested.
fn1:
;;; 1: Test EINT
;; 430 ISA: NOP *not* required before *or* after EINT
;; 430x ISA: NOP *is* required before *and* after EINT
MOV &FOO,r10
EINT
MOV &FOO,r10
BIS.W #8,SR ; Alias for EINT
MOV &FOO,r10
;;; 2: Test DINT
;; 430 ISA: NOP *is* required after DINT
;; 430x ISA: NOP *is* required after DINT
MOV &FOO,r10
DINT
NOP
MOV &FOO,r10
BIC.W #8,SR ; Alias for DINT
NOP
MOV &FOO,r10
;;; 3: Test EINT immediately before DINT
;; 430 ISA: NOP *not* required.
;; 430x ISA: NOP *is* required between EINT and DINT
MOV &FOO,r10
NOP
EINT
DINT
NOP
MOV &FOO,r10
NOP
BIS.W #8,SR ; Alias for EINT
BIC.W #8,SR ; Alias for DINT
NOP
MOV &FOO,r10
;;; 4: Test DINT immediately before EINT
;; 430 ISA: NOP *is* required after DINT.
;; 430x ISA: NOP *is* required after DINT and before EINT. Ensure only one
;; warning is emitted.
MOV &FOO,r10
NOP
DINT
EINT
NOP
MOV &FOO,r10
BIC.W #8,SR ; Alias for DINT
BIS.W #8,SR ; Alias for EINT
NOP
MOV &FOO,r10
;;; 5: Test EINT last insn in file
NOP
EINT