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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [or1ksim/] [cpu/] [or32/] [op-1t-op.h] - Blame information for rev 308

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

Line No. Rev Author Line
1 19 jeremybenn
/* op-1t-op.h -- Micro operations useing only one temporary
2
   Copyright (C) 2005 György `nog' Jeney, nog@sdf.lonestar.org
3
 
4
This file is part of OpenRISC 1000 Architectural Simulator.
5
 
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
10
 
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
GNU General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
 
20
__or_dynop void glue(op_imm, T)(void)
21
{
22
  T0 = OP_PARAM1;
23
}
24
 
25
__or_dynop void glue(op_clear, T)(void)
26
{
27
  T0 = 0;
28
}
29
 
30
__or_dynop void glue(op_check_null_except_delay, T)(void)
31
{
32
  if(!T0) {
33
    /* Do exception */
34
    env->sprs[SPR_EEAR_BASE] = env->pc - 4;
35
    env->delay_insn = 0;
36
    do_jump(EXCEPT_ILLEGAL);
37
  }
38
}
39
 
40
__or_dynop void glue(op_check_null_except, T)(void)
41
{
42
  if(!T0) {
43
    /* Do exception */
44
    env->sprs[SPR_EEAR_BASE] = env->pc;
45
    do_jump(EXCEPT_ILLEGAL);
46
  }
47
}
48
 
49
__or_dynop void glue(op_calc_insn_ea, T)(void)
50
{
51
  env->insn_ea = T0 + OP_PARAM1;
52
}
53
 
54
__or_dynop void glue(op_macrc, T)(void)
55
{
56
  /* FIXME: How is this supposed to work?  The architechture manual says that
57
   * the low 32-bits shall be saved into rD.  I have just copied this code from
58
   * insnset.c to make testbench/mul pass */
59
  int64_t temp = env->sprs[SPR_MACLO] | ((int64_t)env->sprs[SPR_MACHI] << 32);
60
 
61
  T0 = (orreg_t)(temp >> 28);
62
  env->sprs[SPR_MACLO] = 0;
63
  env->sprs[SPR_MACHI] = 0;
64
}
65
 
66
__or_dynop void glue(op_mac_imm, T)(void)
67
{
68
  int64_t temp = env->sprs[SPR_MACLO] | ((int64_t)env->sprs[SPR_MACHI] << 32);
69
 
70
  temp += (int64_t)T0 * (int64_t)OP_PARAM1;
71
 
72
  env->sprs[SPR_MACLO] = temp & 0xffffffff;
73
  env->sprs[SPR_MACHI] = temp >> 32;
74
}
75
 

powered by: WebSVN 2.1.0

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