URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [or1ksim/] [testsuite/] [test-code-or1k/] [ext/] [ext.S] - Rev 90
Go to most recent revision | Compare with Previous | Blame | View Log
/* ext.S -- Tests the l.ext{b,h}{s,z} instructionsCopyright (C) 2010 Embecosm LimitedContributor 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".org 0x100l.j start_testl.nop.org 0x200l.jal unhandled_exceptl.nop.org 0x300l.jal unhandled_exceptl.nop.org 0x400l.jal unhandled_exceptl.nop.org 0x500l.jal unhandled_exceptl.nop.org 0x600l.jal unhandled_exceptl.nop.org 0x700l.jal unhandled_exceptl.nop.org 0x800l.jal unhandled_exceptl.nop.org 0x900l.jal unhandled_exceptl.nop.org 0xa00l.jal unhandled_exceptl.nop.org 0xb00l.jal unhandled_exceptl.nop.org 0xc00l.jal unhandled_exceptl.nop.org 0xd00l.jal unhandled_exceptl.nop.org 0xe00l.jal unhandled_exceptl.nop.org 0xf00l.jal unhandled_exceptl.nop#define CHECK_EXT(insn, val, mask, high_mask) \l.movhi r4,hi(val); \l.ori r4,r4,lo(val); \l.ori r3,r4,0; \l.nop NOP_REPORT; \insn r5,r4; \l.ori r3,r5,0; \l.nop NOP_REPORT; \\l.movhi r6,hi(mask); \l.ori r6,r6,lo(mask); \l.xori r7,r6,-1; \\l.and r8,r4,r6; \l.and r9,r5,r6; \l.sfne r8,r9; \l.bf ext_fail; \l.nop; \l.and r8,r5,r7; \\l.movhi r7,hi(high_mask); \l.ori r7,r7,lo(high_mask); \\l.sfne r8,r7; \l.bf ext_fail; \l.nop;#define CHECK_HIGH3_CLEAR(insn, val) CHECK_EXT(insn, val, 0x000000ff, 0)#define CHECK_HIGH3_SET(val) CHECK_EXT(l.extbs, val, 0x000000ff, 0xffffff00)#define CHECK_HIGH2_CLEAR(insn, val) CHECK_EXT(insn, val, 0x0000ffff, 0)#define CHECK_HIGH2_SET(val) CHECK_EXT(l.exths, val, 0x0000ffff, 0xffff0000)#define CHECK_MOVE(insn, val) \l.movhi r4,hi(val); \l.ori r4,r4,lo(val); \l.ori r3,r4,0; \l.nop NOP_REPORT; \insn r5,r4; \l.ori r3,r5,0; \l.nop NOP_REPORT; \l.sfne r5,r4; \l.bf ext_fail; \l.nop;start_test:/* Test l.extbs */CHECK_HIGH3_CLEAR(l.extbs, 0x7f)CHECK_HIGH3_CLEAR(l.extbs, 0x53)CHECK_HIGH3_CLEAR(l.extbs, 0xff53)CHECK_HIGH3_CLEAR(l.extbs, 0x1234)CHECK_HIGH3_SET(0xff)CHECK_HIGH3_SET(0x80)CHECK_HIGH3_SET(0xff80)CHECK_HIGH3_SET(0x7f80)CHECK_HIGH3_SET(0x7fff)/* Test l.extbz */CHECK_HIGH3_CLEAR(l.extbz, 0x7f)CHECK_HIGH3_CLEAR(l.extbz, 0x53)CHECK_HIGH3_CLEAR(l.extbz, 0xff53)CHECK_HIGH3_CLEAR(l.extbz, 0x1234)CHECK_HIGH3_CLEAR(l.extbz, 0xff)CHECK_HIGH3_CLEAR(l.extbz, 0x80)CHECK_HIGH3_CLEAR(l.extbz, 0xff80)CHECK_HIGH3_CLEAR(l.extbz, 0x7f80)CHECK_HIGH3_CLEAR(l.extbz, 0x7fff)/* Test l.exths */CHECK_HIGH2_CLEAR(l.exths, 0x7fff)CHECK_HIGH2_CLEAR(l.exths, 0x5233)CHECK_HIGH2_CLEAR(l.exths, 0xffff2f53)CHECK_HIGH2_CLEAR(l.exths, 0x12345678)CHECK_HIGH2_SET(0xffff)CHECK_HIGH2_SET(0x8000)CHECK_HIGH2_SET(0xff80)CHECK_HIGH2_SET(0x80008000)CHECK_HIGH2_SET(0x7fffffff)/* Test l.exthz */CHECK_HIGH2_CLEAR(l.exthz, 0x7fff)CHECK_HIGH2_CLEAR(l.exthz, 0x5233)CHECK_HIGH2_CLEAR(l.exthz, 0xffff2f53)CHECK_HIGH2_CLEAR(l.exthz, 0x12345678)CHECK_HIGH2_CLEAR(l.exthz, 0xffff)CHECK_HIGH2_CLEAR(l.exthz, 0x8000)CHECK_HIGH2_CLEAR(l.exthz, 0xff80)CHECK_HIGH2_CLEAR(l.exthz, 0x80008000)CHECK_HIGH2_CLEAR(l.exthz, 0x7fffffff)/* Test l.extws */CHECK_MOVE(l.extws, 0xffffffff)CHECK_MOVE(l.extws, 0x7fffffff)CHECK_MOVE(l.extws, 0x7fff7fff)CHECK_MOVE(l.extws, 0xffff7f7f)CHECK_MOVE(l.extws, 0xffffff7f)CHECK_MOVE(l.extws, 0xffff7fff)CHECK_MOVE(l.extws, 0x7fff7f7f)CHECK_MOVE(l.extws, 0x12345678)/* Test l.extwz */CHECK_MOVE(l.extwz, 0xffffffff)CHECK_MOVE(l.extwz, 0x7fffffff)CHECK_MOVE(l.extwz, 0x7fff7fff)CHECK_MOVE(l.extwz, 0xffff7f7f)CHECK_MOVE(l.extwz, 0xffffff7f)CHECK_MOVE(l.extwz, 0xffff7fff)CHECK_MOVE(l.extwz, 0x7fff7f7f)CHECK_MOVE(l.extwz, 0x12345678)l.movhi r3,0xdeadl.ori r3,r3,0xdeadl.nop NOP_REPORTl.ori r3,r0,0l.nop NOP_EXIText_fail:l.ori r3,r0,0x1234l.nop NOP_EXITunhandled_except:l.addi r3,r9,-8l.nop NOP_REPORTl.nop NOP_EXIT
Go to most recent revision | Compare with Previous | Blame | View Log
