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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [sim/] [testsuite/] [sim/] [arm/] [iwmmxt/] [testutils.inc] - Rev 26

Compare with Previous | Blame | View Log

# r0-r3 are used as tmps, consider them call clobbered by these macros.
# This uses the angel rom monitor calls.
# ??? How do we use the \@ facility of .macros ???
# @ is the comment char!

        .macro mvi_h_gr reg, val
        ldr \reg,[pc]
        b . + 8
        .word \val
        .endm

        .macro mvaddr_h_gr reg, addr
        ldr \reg,[pc]
        b . + 8
        .word \addr
        .endm

        .macro start
        .data
failmsg:
        .asciz "fail\n"
passmsg:
        .asciz "pass\n"
        .text

do_pass:
        ldr r1, passmsg_addr
        mov r0, #4
        swi #0x123456
        exit 0
passmsg_addr:
        .word passmsg

do_fail:
        ldr r1, failmsg_addr
        mov r0, #4
        swi #0x123456
        exit 1
failmsg_addr:
        .word failmsg

        .global _start
_start:
        .endm

# *** Other macros know pass/fail are 4 bytes in size!  Yuck.

        .macro pass
        b do_pass
        .endm

        .macro fail
        b do_fail
        .endm

        .macro exit rc
        # ??? This works with the ARMulator but maybe not others.
        #mov r0, #\rc
        #swi #1
        # This seems to be portable (though it ignores rc).
        mov r0,#0x18
        mvi_h_gr r1, 0x20026
        swi #0x123456
        # If that returns, punt with a sigill.
        stc 0,cr0,[r0]
        .endm

# Other macros know this only clobbers r0.
# WARNING: It also clobbers the condition codes (FIXME).
        .macro test_h_gr reg, val
        mvaddr_h_gr r0, \val
        cmp \reg, r0
        beq . + 8
        fail
        .endm

        .macro mvi_h_cnvz c, n, v, z
        mov r0, #0
        .if \c
        orr r0, r0, #0x20000000
        .endif
        .if \n
        orr r0, r0, #0x80000000
        .endif
        .if \v
        orr r0, r0, #0x10000000
        .endif
        .if \z
        orr r0, r0, #0x40000000
        .endif
        mrs r1, cpsr
        bic r1, r1, #0xf0000000
        orr r1, r1, r0
        msr cpsr, r1
        # ??? nops needed
        .endm

# ??? Preserve condition codes?
        .macro test_h_cnvz c, n, v, z
        mov r0, #0
        .if \c
        orr r0, r0, #0x20000000
        .endif
        .if \n
        orr r0, r0, #0x80000000
        .endif
        .if \v
        orr r0, r0, #0x10000000
        .endif
        .if \z
        orr r0, r0, #0x40000000
        .endif
        mrs r1, cpsr
        and r1, r1, #0xf0000000
        cmp r0, r1
        beq . + 8
        fail
        .endm

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.