cvw/tests/coverage/ebuArb.S
2025-04-27 13:18:52 -05:00

186 lines
5.1 KiB
ArmAsm

///////////////////////////////////////////
// ebuArb.S
//
// Written: Rose Thompson rose@rosethompson.net
//
// Purpose: Force EBU arbitration.
//
// A component of the CORE-V-WALLY configurable RISC-V project.
// https://github.com/openhwgroup/cvw
//
// Copyright (C) 2021-25 Harvey Mudd College & Oklahoma State University
//
// SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
//
// Licensed under the Solderpad Hardware License v 2.1 (the License); you may not use this file
// except in compliance with the License, or, at your option, the Apache License version 2.0. You
// may obtain a copy of the License at
//
// https://solderpad.org/licenses/SHL-2.1/
//
// Unless required by applicable law or agreed to in writing, any work distributed under the
// License is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
////////////////////////////////////////////////////////////////////////////////////////////////
// load code to initalize stack, handle interrupts, terminate
#include "WALLY-init-lib.h"
# cannot do this with a loop, must invalidate frequently to force as many possible lsu bus requests.
main:
la x31, data
addi x30, x31, 0x40
addi x29, x31, 0x80
addi x28, x31, 0xc0
addi x27, x31, 0x100
addi x26, x31, 0x140
addi x25, x31, 0x180
addi x24, x31, 0x1c0
ld x0, 0(x31)
cbo.inval (x31)
ld x1, 8(x31)
cbo.inval (x31)
ld x2, 0x10(x31)
cbo.inval (x31)
ld x3, 0x18(x31)
cbo.inval (x31)
ld x4, 0x20(x31)
cbo.inval (x31)
ld x5, 0x28(x31)
cbo.inval (x31)
ld x6, 0x30(x31)
cbo.inval (x31)
ld x7, 0x38(x31)
cbo.inval (x31)
ld x8, 0x40(x31)
cbo.inval (x30)
ld x9, 0x48(x31)
cbo.inval (x30)
ld x10, 0x50(x31)
cbo.inval (x30)
ld x11, 0x58(x31)
cbo.inval (x30)
ld x12, 0x60(x31)
cbo.inval (x30)
ld x13, 0x68(x31)
cbo.inval (x30)
ld x14, 0x70(x31)
cbo.inval (x30)
ld x15, 0x78(x31)
cbo.inval (x30)
ld x16, 0x80(x31)
cbo.inval (x29)
ld x17, 0x88(x31)
cbo.inval (x29)
ld x18, 0x90(x31)
cbo.inval (x29)
ld x19, 0x98(x31)
cbo.inval (x29)
ld x20, 0xa0(x31)
cbo.inval (x29)
ld x21, 0xa8(x31)
cbo.inval (x29)
ld x22, 0xb0(x31)
cbo.inval (x29)
ld x23, 0xb8(x31)
cbo.inval (x29)
ld x23, 0xc0(x31)
cbo.inval (x28)
ld x23, 0xc8(x31)
cbo.inval (x28)
ld x23, 0xd0(x31)
cbo.inval (x28)
ld x23, 0xd8(x31)
cbo.inval (x28)
ld x23, 0xe0(x31)
cbo.inval (x28)
ld x23, 0xe8(x31)
cbo.inval (x28)
ld x23, 0xf0(x31)
cbo.inval (x28)
ld x0, 0xf8(x31)
cbo.inval (x28)
ld x1, 0x100(x31)
cbo.inval (x27)
ld x1, 0x108(x31)
cbo.inval (x27)
ld x1, 0x110(x31)
cbo.inval (x27)
ld x1, 0x118(x31)
cbo.inval (x27)
ld x1, 0x120(x31)
cbo.inval (x27)
ld x1, 0x128(x31)
cbo.inval (x27)
ld x1, 0x130(x31)
cbo.inval (x27)
ld x1, 0x138(x31)
cbo.inval (x27)
ld x1, 0x140(x31)
cbo.inval (x26)
ld x1, 0x148(x31)
cbo.inval (x26)
ld x1, 0x150(x31)
cbo.inval (x26)
ld x1, 0x158(x31)
cbo.inval (x26)
ld x1, 0x160(x31)
cbo.inval (x26)
ld x1, 0x168(x31)
cbo.inval (x26)
ld x1, 0x170(x31)
cbo.inval (x26)
ld x1, 0x178(x31)
cbo.inval (x26)
ld x1, 0x180(x31)
cbo.inval (x25)
ld x1, 0x188(x31)
cbo.inval (x25)
ld x1, 0x190(x31)
cbo.inval (x25)
ld x1, 0x198(x31)
cbo.inval (x25)
ld x1, 0x1a0(x31)
cbo.inval (x25)
ld x1, 0x1a8(x31)
cbo.inval (x25)
ld x1, 0x1b0(x31)
cbo.inval (x25)
ld x1, 0x1b8(x31)
cbo.inval (x25)
ld x1, 0x1c0(x31)
cbo.inval (x24)
ld x1, 0x1c8(x31)
cbo.inval (x24)
ld x1, 0x1d0(x31)
cbo.inval (x24)
ld x1, 0x1d8(x31)
cbo.inval (x24)
ld x1, 0x1e0(x31)
cbo.inval (x24)
ld x1, 0x1e8(x31)
cbo.inval (x24)
ld x1, 0x1f0(x31)
cbo.inval (x24)
ld x1, 0x1f8(x31)
finished:
j done
.data
.align 3
data:
.8byte 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
.8byte 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf
.8byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
.8byte 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
.8byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27
.8byte 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f
.8byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37
.8byte 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f