decoder.cc (11723:0596db108c53) | decoder.cc (12120:133620bfc43b) |
---|---|
1/* 2 * Copyright (c) 2012 Google | 1/* 2 * Copyright (c) 2012 Google |
3 * Copyright (c) The University of Virginia |
|
3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; 9 * redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the --- 10 unchanged lines hidden (view full) --- 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Gabe Black | 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 9 * notice, this list of conditions and the following disclaimer; 10 * redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the --- 10 unchanged lines hidden (view full) --- 22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * 29 * Authors: Gabe Black |
30 * Alec Roelke |
|
29 */ 30 31#include "arch/riscv/decoder.hh" | 31 */ 32 33#include "arch/riscv/decoder.hh" |
34#include "arch/riscv/types.hh" 35#include "debug/Decode.hh" |
|
32 33namespace RiscvISA 34{ 35 | 36 37namespace RiscvISA 38{ 39 |
36GenericISA::BasicDecodeCache Decoder::defaultCache; | 40void 41Decoder::moreBytes(const PCState &pc, Addr fetchPC, MachInst inst) 42{ 43 DPRINTF(Decode, "Getting bytes 0x%08x from address %#x\n", 44 inst, pc.pc()); |
37 | 45 |
46 bool aligned = pc.pc() % sizeof(MachInst) == 0; 47 if (mid) { 48 assert(!aligned); 49 emi |= (inst & 0xFFFF) << 16; 50 instDone = true; 51 } else { 52 MachInst instChunk = aligned ? inst & 0xFFFF : 53 (inst & 0xFFFF0000) >> 16; 54 if (aligned) { 55 emi = (inst & 0x3) < 0x3 ? instChunk : inst; 56 instDone = true; 57 } else { 58 emi = instChunk; 59 instDone = (instChunk & 0x3) < 0x3; 60 } 61 } 62 mid = !instDone; |
|
38} | 63} |
64 65StaticInstPtr 66Decoder::decode(ExtMachInst mach_inst, Addr addr) 67{ 68 DPRINTF(Decode, "Decoding instruction 0x%08x at address %#x\n", 69 mach_inst, addr); 70 if (instMap.find(mach_inst) != instMap.end()) 71 return instMap[mach_inst]; 72 else { 73 StaticInstPtr si = decodeInst(mach_inst); 74 instMap[mach_inst] = si; 75 return si; 76 } 77} 78 79StaticInstPtr 80Decoder::decode(RiscvISA::PCState &nextPC) 81{ 82 if (!instDone) 83 return nullptr; 84 instDone = false; 85 86 if ((emi & 0x3) < 0x3) { 87 nextPC.compressed(true); 88 nextPC.npc(nextPC.pc() + sizeof(MachInst)/2); 89 } else { 90 nextPC.compressed(false); 91 nextPC.npc(nextPC.pc() + sizeof(MachInst)); 92 } 93 94 return decode(emi, nextPC.instAddr()); 95} 96 97} |
|