OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [sim/] [testsuite/] [d10v-elf/] [t-macros.i] - Rev 26

Compare with Previous | Blame | View Log

        .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


Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.