source: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/SPR_access_mode_read_write.cpp @ 72

Last change on this file since 72 was 72, checked in by rosiere, 16 years ago
  • SystemC de l'unite fonctionnelle.
  • gestion des groupes / instructions custom
File size: 1.7 KB
Line 
1#include "Behavioural/include/SPR_access_mode.h"
2
3namespace morpheo {
4namespace behavioural {
5
6
7    // SM    : Supervisor Mode
8    //           * 0 : User Mode
9    //           * 1 : Supervisor Mode
10    // SUMRA : SPRs User Mode Read Access
11    //           * 0 : All SPRs are inaccessible in user mode
12    //           * 1 : Certain SPRs can be read in user mode
13   
14  bool SPR_access_mode::read (spr_address_t address, Tcontrol_t SM, Tcontrol_t SUMRA)
15    {
16      if (not valid(address))
17        return false;
18
19      spr_access_mode_t mode = _spr_generic [address._group][address._register];
20
21      return (((SM == 1) and ( (mode._supervisor_access_mode == SPR_ACCESS_MODE_READ_ONLY     ) or
22                               (mode._supervisor_access_mode == SPR_ACCESS_MODE_READ_WRITE    ))) or
23              ((SM == 0) and ( (mode._user_access_mode       == SPR_ACCESS_MODE_READ_ONLY     ) or
24                               (mode._user_access_mode       == SPR_ACCESS_MODE_READ_WRITE    ) or
25                              ((mode._user_access_mode       == SPR_ACCESS_MODE_READ_ONLY_COND) and (SUMRA == 1)))));
26    }
27
28  bool SPR_access_mode::write(spr_address_t address, Tcontrol_t SM, Tcontrol_t SUMRA)
29    {
30      if (not valid(address))
31        return false;
32
33      spr_access_mode_t mode = _spr_generic [address._group][address._register];
34     
35      return (((SM == 1) and ( (mode._supervisor_access_mode == SPR_ACCESS_MODE_WRITE_ONLY    ) or
36                               (mode._supervisor_access_mode == SPR_ACCESS_MODE_READ_WRITE    ))) or
37              ((SM == 0) and ( (mode._user_access_mode       == SPR_ACCESS_MODE_WRITE_ONLY    ) or
38                               (mode._user_access_mode       == SPR_ACCESS_MODE_READ_WRITE    )))) ;
39    }
40
41}; // end namespace behavioural
42}; // end namespace morpheo             
43
Note: See TracBrowser for help on using the repository browser.