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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-6.8/] [sim/] [testsuite/] [sim/] [frv/] [interrupts/] [badalign.cgs] - Rev 157

Go to most recent revision | Compare with Previous | Blame | View Log

# frv testcase to generate interrupt for st $GRk,@($GRi,$GRj)
# mach: fr500 frv
        .include "testutils.inc"

        start

        .global align
align:
        and_spr_immed   -4081,tbr               ; clear tbr.tt
        set_gr_spr      tbr,gr17
        inc_gr_immed    0x100,gr17              ; address of exception handler
        set_bctrlr_0_0  gr17
        set_spr_immed   128,lcr
        set_spr_addr    ok1,lr
        set_psr_et      1
        set_gr_immed    0xdeadbeef,gr17
        set_gr_immed    0,gr15
        inc_gr_immed    2,sp            ; out of alignment

        test_spr_bits   1,0,1,isr       ; mem_address_not_aligned is masked
        sti             gr17,@(sp,0)    ; no exception
        ldi             @(sp,-2),gr18   ; stored at aligned address
        test_gr_immed   0xdeadbeef,gr18
        ldi             @(sp,0),gr19    ; no exception
        test_gr_immed   0xdeadbeef,gr19

        and_spr_immed   0xfffffffe,isr  ; turn off ISR.EMAM
        set_gr_addr     bad1,gr16
bad1:   sti             gr17,@(sp,0)    ; misaligned write in slot I1
        test_gr_immed   1,gr15

        set_gr_addr     bad3,gr16
        set_gr_gr       sp,gr20
        set_gr_immed    1,gr21
        set_gr_immed    0x10101010,gr10
bad2:   nop.p
bad3:   ldu             @(sp,gr21),gr10 ; misaligned read in slot I2
        test_gr_immed   2,gr15          ; handler was called
        test_gr_immed   0x10101010,gr10 ; gr10 not updated
        test_gr_immed   1,gr21          ; gr21 not updated
        inc_gr_immed    1,gr20
        test_gr_gr      gr20,sp         ; sp updated

        pass

; exception handler
ok1:
        cmpi            gr15,0,icc0
        bne             icc0,0,load
        ; handle interrupt on store
        test_spr_immed  0x100,esfr1             ; esr8 is active
        test_spr_gr     epcr8,gr16
        test_spr_bits   0x0001,0,0x1,esr8       ; esr8 is valid
        test_spr_bits   0x003e,1,0xb,esr8       ; esr8.ec is set
        test_spr_bits   0x0800,11,0x1,esr8      ; esr8.eav is set
        test_spr_gr     ear8,sp
        test_spr_bits   0x01000,12,0x1,esr8     ; esr8.edv is set
        test_spr_bits   0x1e000,13,0x3,esr8     ; esr8.edn is 3
        test_spr_gr     edr3,gr17               ; edr3 is set
        bra             ret
load:
        ; handle interrupt on load
        test_spr_immed  0x200,esfr1             ; esr9 is active
        test_spr_gr     epcr9,gr16
        test_spr_bits   0x0001,0,0x1,esr9       ; esr9 is valid
        test_spr_bits   0x003e,1,0xb,esr9       ; esr9.ec is set
        test_spr_bits   0x0800,11,0x1,esr9      ; esr9.eav is set
        test_spr_gr     ear9,sp
        test_spr_bits   0x1000,12,0x0,esr9      ; esr9.edv is not set
ret:
        inc_gr_immed    1,gr15
        rett            0
        fail

Go to most recent revision | 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.