URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [or1ksim/] [testsuite/] [test-code-or1k/] [cache/] [cache-asm.S] - Rev 90
Go to most recent revision | Compare with Previous | Blame | View Log
/* cache_asm.S. Machine code support for cache test of Or1ksimCopyright (C) 1999-2006 OpenCoresCopyright (C) 2010 Embecosm LimitedContributors various OpenCores participantsContributor Jeremy Bennett <jeremy.bennett@embecosm.com>This file is part of OpenRISC 1000 Architectural Simulator.This program is free software; you can redistribute it and/or modify itunder the terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 3 of the License, or (at your option)any later version.This program is distributed in the hope that it will be useful, but WITHOUTANY WARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License formore details.You should have received a copy of the GNU General Public License alongwith this program. If not, see <http: www.gnu.org/licenses/>. *//* ----------------------------------------------------------------------------This code is commented throughout for use with Doxygen.--------------------------------------------------------------------------*/#include "spr-defs.h"#include "board.h"#define IC_ENABLE 0#define DC_ENABLE 0#define MC_CSR (0x00)#define MC_POC (0x04)#define MC_BA_MASK (0x08)#define MC_CSC(i) (0x10 + (i) * 8)#define MC_TMS(i) (0x14 + (i) * 8).extern _main.global _ic_enable.global _ic_disable.global _dc_enable.global _dc_disable.global _dc_inv.global _ic_inv_test.global _dc_inv_test.section .stack.space 0x1000_stack:.section .reset, "ax".org 0x100_reset_vector:l.addi r2,r0,0x0l.addi r3,r0,0x0l.addi r4,r0,0x0l.addi r5,r0,0x0l.addi r6,r0,0x0l.addi r7,r0,0x0l.addi r8,r0,0x0l.addi r9,r0,0x0l.addi r10,r0,0x0l.addi r11,r0,0x0l.addi r12,r0,0x0l.addi r13,r0,0x0l.addi r14,r0,0x0l.addi r15,r0,0x0l.addi r16,r0,0x0l.addi r17,r0,0x0l.addi r18,r0,0x0l.addi r19,r0,0x0l.addi r20,r0,0x0l.addi r21,r0,0x0l.addi r22,r0,0x0l.addi r23,r0,0x0l.addi r24,r0,0x0l.addi r25,r0,0x0l.addi r26,r0,0x0l.addi r27,r0,0x0l.addi r28,r0,0x0l.addi r29,r0,0x0l.addi r30,r0,0x0l.addi r31,r0,0x0l.movhi r3,hi(start)l.ori r3,r3,lo(start)l.jr r3l.nopstart:l.jal _init_mcl.nopl.movhi r1,hi(_stack)l.ori r1,r1,lo(_stack)/* Copy data section */l.movhi r3,hi(_src_beg)l.ori r3,r3,lo(_src_beg)l.movhi r4,hi(_dst_beg)l.ori r4,r4,lo(_dst_beg)l.movhi r5,hi(_dst_end)l.ori r5,r5,lo(_dst_end)l.sub r5,r5,r4l.sfeqi r5,0l.bf 2fl.nop1: l.lwz r6,0(r3)l.sw 0(r4),r6l.addi r3,r3,4l.addi r4,r4,4l.addi r5,r5,-4l.sfgtsi r5,0l.bf 1bl.nop2:l.movhi r2,hi(_main)l.ori r2,r2,lo(_main)l.jr r2l.nop_init_mc:l.movhi r3,hi(MC_BASE_ADDR)l.ori r3,r3,lo(MC_BASE_ADDR)l.addi r4,r3,MC_CSC(0)l.movhi r5,hi(FLASH_BASE_ADDR)l.srai r5,r5,6l.ori r5,r5,0x0025l.sw 0(r4),r5l.addi r4,r3,MC_TMS(0)l.movhi r5,hi(FLASH_TMS_VAL)l.ori r5,r5,lo(FLASH_TMS_VAL)l.sw 0(r4),r5l.addi r4,r3,MC_BA_MASKl.addi r5,r0,MC_MASK_VALl.sw 0(r4),r5l.addi r4,r3,MC_CSRl.movhi r5,hi(MC_CSR_VAL)l.ori r5,r5,lo(MC_CSR_VAL)l.sw 0(r4),r5l.addi r4,r3,MC_TMS(1)l.movhi r5,hi(SDRAM_TMS_VAL)l.ori r5,r5,lo(SDRAM_TMS_VAL)l.sw 0(r4),r5l.addi r4,r3,MC_CSC(1)l.movhi r5,hi(SDRAM_BASE_ADDR)l.srai r5,r5,6l.ori r5,r5,0x0411l.sw 0(r4),r5l.jr r9l.nop.section .text_ic_enable:/* Disable IC */l.mfspr r13,r0,SPR_SRl.addi r11,r0,-1l.xori r11,r11,SPR_SR_ICEl.and r11,r13,r11l.mtspr r0,r11,SPR_SR/* Invalidate IC */l.addi r13,r0,0l.addi r11,r0,81921:l.mtspr r0,r13,SPR_ICBIRl.sfne r13,r11l.bf 1bl.addi r13,r13,16/* Enable IC */l.mfspr r13,r0,SPR_SRl.ori r13,r13,SPR_SR_ICEl.mtspr r0,r13,SPR_SRl.nopl.nopl.nopl.nopl.nopl.jr r9l.nop_ic_disable:/* Disable IC */l.mfspr r13,r0,SPR_SRl.addi r11,r0,-1l.xori r11,r11,SPR_SR_ICEl.and r11,r13,r11l.mtspr r0,r11,SPR_SRl.jr r9l.nop_dc_enable:/* Disable DC */l.mfspr r13,r0,SPR_SRl.addi r11,r0,-1l.xori r11,r11,SPR_SR_DCEl.and r11,r13,r11l.mtspr r0,r11,SPR_SR/* Flush DC */l.addi r13,r0,0l.addi r11,r0,81921:l.mtspr r0,r13,SPR_DCBIRl.sfne r13,r11l.bf 1bl.addi r13,r13,16/* Enable DC */l.mfspr r13,r0,SPR_SRl.ori r13,r13,SPR_SR_DCEl.mtspr r0,r13,SPR_SRl.jr r9l.nop_dc_disable:/* Disable DC */l.mfspr r13,r0,SPR_SRl.addi r11,r0,-1l.xori r11,r11,SPR_SR_DCEl.and r11,r13,r11l.mtspr r0,r11,SPR_SRl.jr r9l.nop_dc_inv:l.mfspr r4,r0,SPR_SRl.addi r5,r0,-1l.xori r5,r5,SPR_SR_DCEl.and r5,r4,r5l.mtspr r0,r5,SPR_SRl.mtspr r0,r3,SPR_DCBIRl.mtspr r0,r4,SPR_SRl.jr r9l.nop.align 0x10_ic_inv_test:l.movhi r7,hi(_ic_test_1)l.ori r7,r7,lo(_ic_test_1)l.addi r3,r0,0l.addi r4,r0,0l.addi r5,r0,0l.nopl.nopl.nop_ic_test_1:3: l.addi r3,r3,1l.sfeqi r4,0x01l.bnf 1fl.nopl.mfspr r8,r0,SPR_SRl.addi r11,r0,-1l.xori r11,r11,SPR_SR_ICEl.and r11,r8,r11l.mtspr r0,r11,SPR_SRl.mtspr r0,r7,SPR_ICBIRl.mtspr r0,r8,SPR_SRl.bf 2fl.nop1: l.lwz r6,0(r7)l.addi r6,r6,1l.sw 0(r7),r62: l.addi r5,r5,1l.sfeqi r5,10l.bnf 3bl.xori r4,r4,0x01l.addi r11,r3,0l.jr r9l.nop_dc_inv_test:l.movhi r4,hi(0x08040201)l.ori r4,r4,lo(0x08040201)l.sw 0x00(r3),r4l.slli r4,r4,1l.sw 0x14(r3),r4l.slli r4,r4,1l.sw 0x28(r3),r4l.addi r8,r9,0l.jal _dc_enablel.nopl.addi r9,r8,0l.lbz r4,0x03(r3)l.lhz r5,0x16(r3)l.add r4,r4,r5l.lwz r5,0x28(r3)l.add r4,r4,r5l.mfspr r6,r0,SPR_SRl.addi r5,r0,-1l.xori r5,r5,SPR_SR_DCEl.and r5,r6,r5l.mtspr r0,r5,SPR_SRl.addi r7,r3,0x10l.mtspr r0,r7,SPR_DCBIRl.lwz r5,0(r3)l.slli r5,r5,3l.sw 0x00(r3),r5l.slli r5,r5,1l.sw 0x14(r3),r5l.slli r5,r5,1l.sw 0x28(r3),r5l.mtspr r0,r6,SPR_SRl.lbz r5,0x03(r3)l.add r4,r4,r5l.lhz r5,0x16(r3)l.add r4,r4,r5l.lwz r5,0x28(r3)l.add r4,r4,r5l.addi r5,r0,-1l.xori r5,r5,SPR_SR_DCEl.and r5,r6,r5l.mtspr r0,r5,SPR_SRl.addi r11,r4,0x01:l.jr r9l.nop
Go to most recent revision | Compare with Previous | Blame | View Log
