Deleted Added
sdiff udiff text old ( 5715:e8c1d4e669a7 ) new ( 6376:eaf61ef6a8f2 )
full compact
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, unsigned &vpe_conf0, unsigned &tc_bind_mt, unsigned &tc_bind, unsigned &vpe_control, unsigned &mvp_conf0)
89 {
90 vpe_conf0 = xc->readMiscReg(VPEConf0);
91 tc_bind_mt = xc->readRegOtherThread(TCBind + Ctrl_Base_DepTag);
92 tc_bind = xc->readMiscReg(TCBind);
93 vpe_control = xc->readMiscReg(VPEControl);
94 mvp_conf0 = xc->readMiscReg(MVPConf0);
95 }
96
97 void getMTExValues(%(CPU_exec_context)s *xc, unsigned &config3)
98 {
99 config3 = xc->readMiscReg(Config3);
100 }
101}};
102
103def template ThreadRegisterExecute {{
104 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
105 {
106 Fault fault = NoFault;
107 int64_t data;
108 %(op_decl)s;
109 %(op_rd)s;
110
111 unsigned vpe_conf0, tc_bind_mt, tc_bind, vpe_control, mvp_conf0;
112
113 getThrRegExValues(xc, vpe_conf0, tc_bind_mt, tc_bind, vpe_control, mvp_conf0);
114
115 if (isCoprocessorEnabled(xc, 0)) {
116 if (bits(vpe_conf0, VPEC0_MVP) == 0 &&
117 bits(tc_bind_mt, TCB_CUR_VPE_HI, TCB_CUR_VPE_LO) !=
118 bits(tc_bind, TCB_CUR_VPE_HI, TCB_CUR_VPE_LO)) {
119 data = -1;
120 } else if (bits(vpe_control, VPEC_TARG_TC_HI, VPEC_TARG_TC_LO) >
121 bits(mvp_conf0, MVPC0_PTC_HI, MVPC0_PTC_LO)) {
122 data = -1;
123 } else {
124 int top_bit = 0;
125 int bottom_bit = 0;
126
127 if (MT_H == 1) {
128 top_bit = 63;
129 bottom_bit = 32;

--- 19 unchanged lines hidden (view full) ---

149
150def template MTExecute{{
151 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
152 {
153 Fault fault = NoFault;
154 %(op_decl)s;
155 %(op_rd)s;
156
157 unsigned config3;
158
159 getMTExValues(xc, config3);
160
161 if (isCoprocessorEnabled(xc, 0)) {
162 if (bits(config3, CFG3_MT) == 1) {
163 %(code)s;
164 } else {
165 fault = new ReservedInstructionFault();
166 }
167 } else {
168 fault = new CoprocessorUnusableFault(0);
169 }
170

--- 51 unchanged lines hidden ---