1// -*- mode:c++ -*- 2 3// Copyright (c) 2007 MIPS Technologies, Inc. 4// All rights reserved. 5// 6// Redistribution and use in source and binary forms, with or without 7// modification, are permitted provided that the following conditions are 8// met: redistributions of source code must retain the above copyright --- 71 unchanged lines hidden (view full) --- 80 ccprintf(ss, "%-10s r%d, r%d", mnemonic, RT, RD); 81 } 82 83 return ss.str(); 84 } 85}}; 86 87output exec {{ |
88 void getThrRegExValues(%(CPU_exec_context)s *xc, 89 VPEConf0Reg &vpe_conf0, TCBindReg &tc_bind_mt, 90 TCBindReg &tc_bind, VPEControlReg &vpe_control, 91 MVPConf0Reg &mvp_conf0) |
92 { 93 vpe_conf0 = xc->readMiscReg(VPEConf0); 94 tc_bind_mt = xc->readRegOtherThread(TCBind + Ctrl_Base_DepTag); 95 tc_bind = xc->readMiscReg(TCBind); 96 vpe_control = xc->readMiscReg(VPEControl); 97 mvp_conf0 = xc->readMiscReg(MVPConf0); 98 } 99 |
100 void getMTExValues(%(CPU_exec_context)s *xc, Config3Reg &config3) |
101 { 102 config3 = xc->readMiscReg(Config3); 103 } 104}}; 105 106def template ThreadRegisterExecute {{ 107 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 108 { 109 Fault fault = NoFault; 110 int64_t data; 111 %(op_decl)s; 112 %(op_rd)s; 113 |
114 VPEConf0Reg vpeConf0; 115 TCBindReg tcBindMT; 116 TCBindReg tcBind; 117 VPEControlReg vpeControl; 118 MVPConf0Reg mvpConf0; |
119 |
120 getThrRegExValues(xc, vpeConf0, tcBindMT, 121 tcBind, vpeControl, mvpConf0); |
122 123 if (isCoprocessorEnabled(xc, 0)) { |
124 if (vpeConf0.mvp == 0 && tcBindMT.curVPE != tcBind.curVPE) { |
125 data = -1; |
126 } else if (vpeControl.targTC > mvpConf0.ptc) { |
127 data = -1; 128 } else { 129 int top_bit = 0; 130 int bottom_bit = 0; 131 132 if (MT_H == 1) { 133 top_bit = 63; 134 bottom_bit = 32; --- 19 unchanged lines hidden (view full) --- 154 155def template MTExecute{{ 156 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 157 { 158 Fault fault = NoFault; 159 %(op_decl)s; 160 %(op_rd)s; 161 |
162 Config3Reg config3; |
163 164 getMTExValues(xc, config3); 165 166 if (isCoprocessorEnabled(xc, 0)) { |
167 if (config3.mt == 1) { |
168 %(code)s; 169 } else { 170 fault = new ReservedInstructionFault(); 171 } 172 } else { 173 fault = new CoprocessorUnusableFault(0); 174 } 175 --- 51 unchanged lines hidden --- |