binutils-gdb/sim/testsuite/d10v/t-macros.i
Mike Frysinger 1368b914e9 sim: testsuite: flatten tree
Now that all port tests live under testsuite/sim/*/, and none live
in testsuite/ directly, flatten the structure by moving all of the
dirs under testsuite/sim/ to testsuite/ directly.

We need to stop passing --tool to dejagnu so that it searches all
dirs and not just ones that start with "sim".  Since we have no
other dirs in this tree, and no plans to add any, should be fine.
2021-01-15 19:18:34 -05:00

236 lines
3.0 KiB
OpenEdge ABL

# mach: d10v
# output:
# sim: --environment operating
.macro start
.text
.align 2
.globl _start
_start:
ldi r0, 0
.endm
.macro exit47
ldi r4, 1
ldi r0, 47
trap 15
.endm
.macro exit0
ldi r4, 1
ldi r0, 0
trap 15
.endm
.macro exit1
ldi r4, 1
ldi r0, 1
trap 15
.endm
.macro exit2
ldi r4, 1
ldi r0, 2
trap 15
.endm
.macro load reg val
ldi \reg, #\val
.endm
.macro load2w reg hi lo
ld2w \reg, @(1f,r0)
.data
.align 2
1: .short \hi
.short \lo
.text
.endm
.macro check exit reg val
cmpeqi \reg, #\val
brf0t 1f
0: ldi r4, 1
ldi r0, \exit
trap 15
1:
.endm
.macro check2w2 exit reg hi lo
st2w \reg, @(1f,r0)
ld r2, @(1f, r0)
cmpeqi r2, #\hi
brf0f 0f
ld r2, @(1f + 2, r0)
cmpeqi r2, #\lo
brf0f 0f
bra 2f
0: ldi r4, 1
ldi r0, \exit
trap 15
.data
.align 2
1: .long 0
.text
2:
.endm
.macro loadacc2 acc guard hi lo
ldi r2, #\lo
mvtaclo r2, \acc
ldi r2, #\hi
mvtachi r2, \acc
ldi r2, #\guard
mvtacg r2, \acc
.endm
.macro checkacc2 exit acc guard hi lo
ldi r2, #\guard
mvfacg r3, \acc
cmpeq r2, r3
brf0f 0f
ldi r2, #\hi
mvfachi r3, \acc
cmpeq r2, r3
brf0f 0f
ldi r2, #\lo
mvfaclo r3, \acc
cmpeq r2, r3
brf0f 0f
bra 4f
0: ldi r4, 1
ldi r0, \exit
trap 15
4:
.endm
.macro loadpsw2 val
ldi r2, #\val
mvtc r2, cr0
.endm
.macro checkpsw2 exit val
mvfc r2, cr0
cmpeqi r2, #\val
brf0t 1f
ldi r4, 1
ldi r0, \exit
trap 15
1:
.endm
.macro hello
;; 4:write (1, string, strlen (string))
ldi r4, 4
ldi r0, 1
ldi r1, 1f
ldi r2, 2f-1f-1
trap 15
.section .rodata
1: .string "Hello World!\n"
2: .align 2
.text
.endm
;;; Blat our DMAP registers so that they point at on-chip imem
.macro point_dmap_at_imem
.text
ldi r2, MAP_INSN | 0xf
st r2, @(DMAP_REG,r0)
ldi r2, MAP_INSN
st r2, @(IMAP1_REG,r0)
.endm
;;; Patch VEC so that it jumps back to code that checks PSW
;;; and then exits with success.
.macro check_interrupt vec psw src
;;; Patch the interrupt vector's AE entry with a jmp to success
.text
ldi r4, #1f
ldi r5, \vec
;;
ld2w r2, @(0,r4)
st2w r2, @(0,r5)
ld2w r2, @(4,r4)
st2w r2, @(4,r5)
;;
bra 9f
nop
;;; Code that gets patched into the interrupt vector
.data
1: ldi r1, 2f@word
jmp r1
;;; Successfull trap jumps back to here
.text
;;; Verify the PSW
2: mvfc r2, cr0
cmpeqi r2, #\psw
brf0t 3f
nop
exit1
;;; Verify the original addr
3: mvfc r2, bpc
cmpeqi r2, #\src@word
brf0t 4f
exit2
4: exit0
;;; continue as normal
9:
.endm
PSW_SM = 0x8000
PSW_01 = 0x4000
PSW_EA = 0x2000
PSW_DB = 0x1000
PSW_DM = 0x0800
PSW_IE = 0x0400
PSW_RP = 0x0200
PSW_MD = 0x0100
PSW_FX = 0x0080
PSW_ST = 0x0040
PSW_10 = 0x0020
PSW_11 = 0x0010
PSW_F0 = 0x0008
PSW_F1 = 0x0004
PSW_14 = 0x0002
PSW_C = 0x0001
;;;
DMAP_MASK = 0x3fff
DMAP_BASE = 0x8000
DMAP_REG = 0xff04
IMAP0_REG = 0xff00
IMAP1_REG = 0xff02
MAP_INSN = 0x1000
;;;
VEC_RI = 0x3ff00
VEC_BAE = 0x3ff04
VEC_RIE = 0x3ff08
VEC_AE = 0x3ff0c
VEC_TRAP = 0x3ff10
VEC_DBT = 0x3ff50
VEC_SDBT = 0x3fff4
VEC_DBI = 0x3ff58
VEC_EI = 0x3ff5c