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

Subversion Repositories amber

[/] [amber/] [trunk/] [hw/] [tests/] [teq.S] - Diff between revs 82 and 87

Show entire file | Details | Blame | View Log

Rev 82 Rev 87
Line 39... Line 39...
*****************************************************************/
*****************************************************************/
 
 
// Test "Strange issue with r12 after TEQLSP"
// Test "Strange issue with r12 after TEQLSP"
// Tests for bug where testlsp command would switch the core
// Tests for bug where testlsp command would switch the core
// from supervisor into FIRQ mode if it were executed. However the condition is not
// from supervisor into FIRQ mode if it were executed. However the condition is not
// met so it is not executed. Thje bug is the next instrument works in FIRQ mode anyway.
// met so it is not executed. The bug is the next instrument works in FIRQ mode anyway.
// This was caused because the mode bits used in the ececute stage were not conditional on the
// This was caused because the mode bits used in the ececute stage were not conditional on the
// teq instrumention being executed.
// teq instrumention being executed.
 
 
 
// Also tests correct setting of carry flag when second operand is a constant
 
 
 
 
#include "amber_registers.h"
#include "amber_registers.h"
#include "amber_macros.h"
#include "amber_macros.h"
 
 
        .section .text
        .section .text
        .globl  main
        .globl  main
Line 64... Line 67...
        mov     r12, r6 // user r12 or FIRQ r12 ?
        mov     r12, r6 // user r12 or FIRQ r12 ?
 
 
        cmp     r12, r6 // error if user mode r12 was not updated with new value
        cmp     r12, r6 // error if user mode r12 was not updated with new value
        bne     testfail
        bne     testfail
 
 
 
        // check the carry flag
 
        // When a flexible second operand constant is used with the instructions MOVS, MVNS, ANDS, ORRS, ORNS, EORS, BICS,
 
        // TEQ or TST, the carry flag is updated to bit[31] of the constant, if the constant is greater than 255
 
        // and can be produced by shifting an 8-bit value. These instructions do not affect the carry flag if
 
        // Operand2 is any other constant.
 
        teq     r4, #0x80000000
 
        bcc     testfail
 
 
 
        // keeps carry flag the same
 
        teq     r4, #0x00000000
 
        bcc     testfail
 
 
 
        // sets the carry flag back to zero
 
        teq     r4, #0x40000000
 
        bcs     testfail
 
 
 
        // set the carry flag and verify that teq with register for operand 2 does not clear it
 
        teq     r4, #0x80000000
 
        mov     r4, #0
 
        mov     r5, #0x40000000
 
        teq     r4, r5
 
        bcc     testfail
 
 
        b       testpass
        b       testpass
 
 
testfail:
testfail:
        ldr     r11, AdrTestStatus
        ldr     r11, AdrTestStatus
        str     r10, [r11]
        str     r10, [r11]

powered by: WebSVN 2.1.0

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