decoder.isa (8695:d947b5887b1b) decoder.isa (8738:66bf413b0d5b)
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

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

158 NNPC = Rs;
159 }}, IsCall);
160 }
161 }
162
163 format BasicOp {
164 0x2: movz({{ Rd = (Rt == 0) ? Rs : Rd; }});
165 0x3: movn({{ Rd = (Rt != 0) ? Rs : Rd; }});
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

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

158 NNPC = Rs;
159 }}, IsCall);
160 }
161 }
162
163 format BasicOp {
164 0x2: movz({{ Rd = (Rt == 0) ? Rs : Rd; }});
165 0x3: movn({{ Rd = (Rt != 0) ? Rs : Rd; }});
166 0x4: decode FULL_SYSTEM {
166 0x4: decode FullSystem {
167 0: syscall_se({{ xc->syscall(R2); }},
168 IsSerializeAfter, IsNonSpeculative);
169 default: syscall({{ fault = new SystemCallFault(); }});
170 }
171 0x7: sync({{ ; }}, IsMemBarrier);
172 0x5: break({{fault = new BreakpointFault();}});
173 }
174

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

207 }
208
209 0x4: decode HINT {
210 0x0: decode FUNCTION_LO {
211 format IntOp {
212 0x0: add({{
213 IntReg result;
214 Rd = result = Rs + Rt;
167 0: syscall_se({{ xc->syscall(R2); }},
168 IsSerializeAfter, IsNonSpeculative);
169 default: syscall({{ fault = new SystemCallFault(); }});
170 }
171 0x7: sync({{ ; }}, IsMemBarrier);
172 0x5: break({{fault = new BreakpointFault();}});
173 }
174

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

207 }
208
209 0x4: decode HINT {
210 0x0: decode FUNCTION_LO {
211 format IntOp {
212 0x0: add({{
213 IntReg result;
214 Rd = result = Rs + Rt;
215 if (FULL_SYSTEM &&
215 if (FullSystem &&
216 findOverflow(32, result, Rs, Rt)) {
217 fault = new IntegerOverflowFault();
218 }
219 }});
220 0x1: addu({{ Rd_sw = Rs_sw + Rt_sw;}});
221 0x2: sub({{
222 IntReg result;
223 Rd = result = Rs - Rt;
216 findOverflow(32, result, Rs, Rt)) {
217 fault = new IntegerOverflowFault();
218 }
219 }});
220 0x1: addu({{ Rd_sw = Rs_sw + Rt_sw;}});
221 0x2: sub({{
222 IntReg result;
223 Rd = result = Rs - Rt;
224 if (FULL_SYSTEM &&
224 if (FullSystem &&
225 findOverflow(32, result, Rs, ~Rt)) {
226 fault = new IntegerOverflowFault();
227 }
228 }});
229 0x3: subu({{ Rd_sw = Rs_sw - Rt_sw; }});
230 0x4: and({{ Rd = Rs & Rt; }});
231 0x5: or({{ Rd = Rs | Rt; }});
232 0x6: xor({{ Rd = Rs ^ Rt; }});

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

320 }
321 }
322
323 0x1: decode OPCODE_LO {
324 format IntImmOp {
325 0x0: addi({{
326 IntReg result;
327 Rt = result = Rs + imm;
225 findOverflow(32, result, Rs, ~Rt)) {
226 fault = new IntegerOverflowFault();
227 }
228 }});
229 0x3: subu({{ Rd_sw = Rs_sw - Rt_sw; }});
230 0x4: and({{ Rd = Rs & Rt; }});
231 0x5: or({{ Rd = Rs | Rt; }});
232 0x6: xor({{ Rd = Rs ^ Rt; }});

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

320 }
321 }
322
323 0x1: decode OPCODE_LO {
324 format IntImmOp {
325 0x0: addi({{
326 IntReg result;
327 Rt = result = Rs + imm;
328 if (FULL_SYSTEM &&
328 if (FullSystem &&
329 findOverflow(32, result, Rs, imm)) {
330 fault = new IntegerOverflowFault();
331 }
332 }});
333 0x1: addiu({{ Rt_sw = Rs_sw + imm; }});
334 0x2: slti({{ Rt_sw = (Rs_sw < imm) ? 1 : 0 }});
335 0x3: sltiu({{ Rt_uw = (Rs_uw < (uint32_t)sextImm) ? 1 : 0;}});
336 0x4: andi({{ Rt_sw = Rs_sw & zextImm; }});

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

492 }});
493 0x16: mttdsp({{ xc->setRegOtherThread(INTREG_DSP_CONTROL, Rt); }});
494 default: CP0Unimpl::unknown();
495
496 }
497 0x2: mttc1({{
498 uint64_t data = xc->readRegOtherThread(RD +
499 FP_Base_DepTag);
329 findOverflow(32, result, Rs, imm)) {
330 fault = new IntegerOverflowFault();
331 }
332 }});
333 0x1: addiu({{ Rt_sw = Rs_sw + imm; }});
334 0x2: slti({{ Rt_sw = (Rs_sw < imm) ? 1 : 0 }});
335 0x3: sltiu({{ Rt_uw = (Rs_uw < (uint32_t)sextImm) ? 1 : 0;}});
336 0x4: andi({{ Rt_sw = Rs_sw & zextImm; }});

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

492 }});
493 0x16: mttdsp({{ xc->setRegOtherThread(INTREG_DSP_CONTROL, Rt); }});
494 default: CP0Unimpl::unknown();
495
496 }
497 0x2: mttc1({{
498 uint64_t data = xc->readRegOtherThread(RD +
499 FP_Base_DepTag);
500 data = insertBits(data, MT_H ? 63 : 31,
501 MT_H ? 32 : 0, Rt);
500 data = insertBits(data, top_bit,
501 bottom_bit, Rt);
502 xc->setRegOtherThread(RD + FP_Base_DepTag,
503 data);
504 }});
505 0x3: cttc1({{
506 uint32_t data;
507 switch (RD) {
508 case 25:
509 data = (Rt_uw<7:1> << 25) | // move 31-25

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

527 break;
528 case 31:
529 data = Rt_uw;
530 break;
531 default:
532 panic("FP Control Value (%d) "
533 "Not Available. Ignoring "
534 "Access to Floating Control "
502 xc->setRegOtherThread(RD + FP_Base_DepTag,
503 data);
504 }});
505 0x3: cttc1({{
506 uint32_t data;
507 switch (RD) {
508 case 25:
509 data = (Rt_uw<7:1> << 25) | // move 31-25

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

527 break;
528 case 31:
529 data = Rt_uw;
530 break;
531 default:
532 panic("FP Control Value (%d) "
533 "Not Available. Ignoring "
534 "Access to Floating Control "
535 "S""tatus Register", FS);
535 "Status Register", FS);
536 }
537 xc->setRegOtherThread(FLOATREG_FCSR + FP_Base_DepTag, data);
538 }});
539 default: CP0Unimpl::unknown();
540 }
541 }
542 }
543 0xB: decode RD {

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

771 MipsISA::TLB *Ptr = xc->tcBase()->getITBPtr();
772 Config3Reg config3 = Config3;
773 PageGrainReg pageGrain = PageGrain;
774 int SP = 0;
775 if (bits(config3, config3.sp) == 1 &&
776 bits(pageGrain, pageGrain.esp) == 1) {
777 SP = 1;
778 }
536 }
537 xc->setRegOtherThread(FLOATREG_FCSR + FP_Base_DepTag, data);
538 }});
539 default: CP0Unimpl::unknown();
540 }
541 }
542 }
543 0xB: decode RD {

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

771 MipsISA::TLB *Ptr = xc->tcBase()->getITBPtr();
772 Config3Reg config3 = Config3;
773 PageGrainReg pageGrain = PageGrain;
774 int SP = 0;
775 if (bits(config3, config3.sp) == 1 &&
776 bits(pageGrain, pageGrain.esp) == 1) {
777 SP = 1;
778 }
779 IndexReg index = Index;
779 Ptr->insertAt(newEntry, Index & 0x7FFFFFFF, SP);
780 }});
781 0x06: tlbwr({{
782 //Create PTE
783 MipsISA::PTE newEntry;
784 //Write PTE
785 newEntry.Mask = (Addr)(PageMask >> 11);
786 newEntry.VPN = (Addr)(EntryHi >> 11);

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

836 MipsISA::TLB *Ptr = xc->tcBase()->getITBPtr();
837 Config3Reg config3 = Config3;
838 PageGrainReg pageGrain = PageGrain;
839 int SP = 0;
840 if (bits(config3, config3.sp) == 1 &&
841 bits(pageGrain, pageGrain.esp) == 1) {
842 SP = 1;
843 }
780 Ptr->insertAt(newEntry, Index & 0x7FFFFFFF, SP);
781 }});
782 0x06: tlbwr({{
783 //Create PTE
784 MipsISA::PTE newEntry;
785 //Write PTE
786 newEntry.Mask = (Addr)(PageMask >> 11);
787 newEntry.VPN = (Addr)(EntryHi >> 11);

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

837 MipsISA::TLB *Ptr = xc->tcBase()->getITBPtr();
838 Config3Reg config3 = Config3;
839 PageGrainReg pageGrain = PageGrain;
840 int SP = 0;
841 if (bits(config3, config3.sp) == 1 &&
842 bits(pageGrain, pageGrain.esp) == 1) {
843 SP = 1;
844 }
845 IndexReg index = Index;
844 Ptr->insertAt(newEntry, Random, SP);
845 }});
846
847 0x08: tlbp({{
848 Config3Reg config3 = Config3;
849 PageGrainReg pageGrain = PageGrain;
850 EntryHiReg entryHi = EntryHi;
851 int tlbIndex;

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

1248 }
1249 default: CP1Unimpl::unknown();
1250 }
1251
1252 //Table A-16 MIPS32 COP1 Encoding of Function Field
1253 //When rs=L1
1254 //Note: "1. Format type L is legal only if 64-bit
1255 //floating point operations are enabled."
846 Ptr->insertAt(newEntry, Random, SP);
847 }});
848
849 0x08: tlbp({{
850 Config3Reg config3 = Config3;
851 PageGrainReg pageGrain = PageGrain;
852 EntryHiReg entryHi = EntryHi;
853 int tlbIndex;

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

1250 }
1251 default: CP1Unimpl::unknown();
1252 }
1253
1254 //Table A-16 MIPS32 COP1 Encoding of Function Field
1255 //When rs=L1
1256 //Note: "1. Format type L is legal only if 64-bit
1257 //floating point operations are enabled."
1256 0x5: decode FUNCTION {
1258 0x5: decode FUNCTION_HI {
1257 format FloatConvertOp {
1258 0x20: cvt_s_l({{ val = Fs_ud; }}, ToSingle);
1259 0x21: cvt_d_l({{ val = Fs_ud; }}, ToDouble);
1260 0x26: CP1Unimpl::cvt_ps_l();
1261 }
1262 default: CP1Unimpl::unknown();
1263 }
1264

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

2426 dspac |= Rs_uw;
2427 dspctl = insertBits(dspctl, 5, 0,
2428 dspctl<5:0> + 32);
2429 }});
2430 }
2431 }
2432 }
2433 0x3: decode OP default FailUnimpl::rdhwr() {
1259 format FloatConvertOp {
1260 0x20: cvt_s_l({{ val = Fs_ud; }}, ToSingle);
1261 0x21: cvt_d_l({{ val = Fs_ud; }}, ToDouble);
1262 0x26: CP1Unimpl::cvt_ps_l();
1263 }
1264 default: CP1Unimpl::unknown();
1265 }
1266

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

2428 dspac |= Rs_uw;
2429 dspctl = insertBits(dspctl, 5, 0,
2430 dspctl<5:0> + 32);
2431 }});
2432 }
2433 }
2434 }
2435 0x3: decode OP default FailUnimpl::rdhwr() {
2434 0x0: decode FULL_SYSTEM {
2436 0x0: decode FullSystem {
2435 0: decode RD {
2436 29: BasicOp::rdhwr_se({{ Rt = TpValue; }});
2437 }
2438 }
2439 }
2440 }
2441 }
2442 }

--- 79 unchanged lines hidden ---
2437 0: decode RD {
2438 29: BasicOp::rdhwr_se({{ Rt = TpValue; }});
2439 }
2440 }
2441 }
2442 }
2443 }
2444 }

--- 79 unchanged lines hidden ---