diff --git a/common/include/RevCommon.h b/common/include/RevCommon.h index f8a2d4dc9..deeea7c8c 100644 --- a/common/include/RevCommon.h +++ b/common/include/RevCommon.h @@ -16,6 +16,7 @@ #include #include #include +#include #ifndef _REV_NUM_REGS_ #define _REV_NUM_REGS_ 32 @@ -90,20 +91,22 @@ inline uint64_t make_lsq_hash(uint16_t destReg, RevRegClass regType, unsigned Ha struct MemReq{ MemReq() = default; + MemReq(const MemReq&) = default; + MemReq& operator=(const MemReq&) = default; + ~MemReq() = default; MemReq(uint64_t addr, uint16_t dest, RevRegClass regclass, unsigned hart, MemOp req, bool outstanding, std::function func) : Addr(addr), DestReg(dest), RegType(regclass), Hart(hart), - ReqType(req), isOutstanding(outstanding), MarkLoadComplete(func) + ReqType(req), isOutstanding(outstanding), MarkLoadComplete(std::move(func)) { } - void Set(uint64_t addr, uint16_t dest, RevRegClass regclass, unsigned hart, MemOp req, bool outstanding, - std::function func) + void Set(uint64_t addr, uint16_t dest, RevRegClass regclass, unsigned hart, + MemOp req, bool outstanding, std::function func) { Addr = addr; DestReg = dest; RegType = regclass; Hart = hart; - ReqType = req; isOutstanding = outstanding; - MarkLoadComplete = func; + ReqType = req; isOutstanding = outstanding; MarkLoadComplete = std::move(func); } uint64_t Addr = _INVALID_ADDR_; diff --git a/include/RevHart.h b/include/RevHart.h index 92d06b423..9b12af46e 100644 --- a/include/RevHart.h +++ b/include/RevHart.h @@ -42,8 +42,7 @@ class RevHart{ ///< RevHart: Constructor RevHart(unsigned ID, const std::shared_ptr>& LSQueue, std::function MarkLoadCompleteFunc) - : ID(ID), LSQueue(LSQueue), MarkLoadCompleteFunc(MarkLoadCompleteFunc) {} - + : ID(ID), LSQueue(LSQueue), MarkLoadCompleteFunc(std::move(MarkLoadCompleteFunc)) {} ///< RevHart: Destructor ~RevHart() = default; diff --git a/include/RevInstHelpers.h b/include/RevInstHelpers.h index 9ffc5189e..ae8fadd16 100644 --- a/include/RevInstHelpers.h +++ b/include/RevInstHelpers.h @@ -77,13 +77,14 @@ bool load(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { MemOp::MemOpREAD, true, R->GetMarkLoadComplete()); - R->LSQueueInsert({make_lsq_hash(Inst.rd, RevRegClass::RegGPR, F->GetHartToExecID()), req}); + R->LSQueue->insert({make_lsq_hash(Inst.rd, RevRegClass::RegGPR, F->GetHartToExecID()), req}); M->ReadVal(F->GetHartToExecID(), rs1 + Inst.ImmSignExt(12), reinterpret_cast*>(&R->RV32[Inst.rd]), req, flags); R->SetX(Inst.rd, static_cast(R->RV32[Inst.rd])); + }else{ static constexpr RevFlag flags = sizeof(T) < sizeof(int64_t) ? std::is_signed_v ? RevFlag::F_SEXT64 : RevFlag::F_ZEXT64 : RevFlag::F_NONE; @@ -94,7 +95,7 @@ bool load(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { MemOp::MemOpREAD, true, R->GetMarkLoadComplete()); - R->LSQueueInsert({make_lsq_hash(Inst.rd, RevRegClass::RegGPR, F->GetHartToExecID()), req}); + R->LSQueue->insert({make_lsq_hash(Inst.rd, RevRegClass::RegGPR, F->GetHartToExecID()), req}); M->ReadVal(F->GetHartToExecID(), rs1 + Inst.ImmSignExt(12), reinterpret_cast*>(&R->RV64[Inst.rd]), diff --git a/include/RevRegFile.h b/include/RevRegFile.h index 961e69515..793347844 100644 --- a/include/RevRegFile.h +++ b/include/RevRegFile.h @@ -176,11 +176,6 @@ class RevRegFile { /// Set the current tracer void SetTracer(RevTracer *t) { Tracer = t; } - /// Insert an item in the Load/Store Queue - void LSQueueInsert(std::pair item){ - LSQueue->insert(std::move(item)); - } - /// Get the MarkLoadComplete function const std::function& GetMarkLoadComplete() const { return MarkLoadCompleteFunc; diff --git a/include/insns/RV32D.h b/include/insns/RV32D.h index e45b91ad6..eb5c6d671 100644 --- a/include/insns/RV32D.h +++ b/include/insns/RV32D.h @@ -25,30 +25,30 @@ class RV32D : public RevExt{ static bool cfldsp(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.flwsp rd, $imm = lw rd, x2, $imm - Inst.rs1 = 2; + // Inst.rs1 = 2; //Removed - set in decode return fld(F, R, M, Inst); } static bool cfsdsp(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.fsdsp rs2, $imm = fsd rs2, x2, $imm - Inst.rs1 = 2; + //Inst.rs1 = 2; //Removed - set in decode return fsd(F, R, M, Inst); } static bool cfld(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.fld %rd, %rs1, $imm = flw %rd, %rs1, $imm - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = CRegIdx(Inst.rs1); + // Inst.rd = CRegIdx(Inst.rd); //Removed - Scaled in decode + // Inst.rs1 = CRegIdx(Inst.rs1); // Removed - scaled in decode return fld(F, R, M, Inst); } static bool cfsd(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.fsd rs2, rs1, $imm = fsd rs2, $imm(rs1) - Inst.rs2 = CRegIdx(Inst.rd); - Inst.rs1 = CRegIdx(Inst.rs1); + // Inst.rs2 = CRegIdx(Inst.rd); //Removed - scaled in decode + // Inst.rs1 = CRegIdx(Inst.rs1); // Removed - scaled in decode return fsd(F, R, M, Inst); } diff --git a/include/insns/RV32F.h b/include/insns/RV32F.h index 34e944c4e..ca9f401e1 100644 --- a/include/insns/RV32F.h +++ b/include/insns/RV32F.h @@ -24,27 +24,27 @@ class RV32F : public RevExt{ // Compressed instructions static bool cflwsp(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.flwsp rd, $imm = lw rd, x2, $imm - Inst.rs1 = 2; + // Inst.rs1 = 2; //Removed - set in decode return flw(F, R, M, Inst); } static bool cfswsp(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.swsp rs2, $imm = sw rs2, x2, $imm - Inst.rs1 = 2; + // Inst.rs1 = 2; //Removed - set in decode return fsw(F, R, M, Inst); } static bool cflw(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.flw %rd, %rs1, $imm = flw %rd, %rs1, $imm - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = CRegIdx(Inst.rs1); + // Inst.rd = CRegIdx(Inst.rd); //Removed - set in decode + // Inst.rs1 = CRegIdx(Inst.rs1); // Removed - set in decode return flw(F, R, M, Inst); } static bool cfsw(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.fsw rs2, rs1, $imm = fsw rs2, $imm(rs1) - Inst.rs2 = CRegIdx(Inst.rd); - Inst.rs1 = CRegIdx(Inst.rs1); + //Inst.rs2 = CRegIdx(Inst.rd); //Removed - set in decode + //Inst.rs1 = CRegIdx(Inst.rs1); //Removed - set in decode return fsw(F, R, M, Inst); } diff --git a/include/insns/RV32I.h b/include/insns/RV32I.h index d40ee7a9d..5fcc9e9af 100644 --- a/include/insns/RV32I.h +++ b/include/insns/RV32I.h @@ -25,8 +25,8 @@ class RV32I : public RevExt { // Compressed instructions static bool caddi4spn(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.addi4spn rd, $imm == addi rd, x2, $imm - Inst.rs1 = 2; - Inst.rd = CRegIdx(Inst.rd); + //Inst.rs1 = 2; //Removed - Set in Decode + //Inst.rd = CRegIdx(Inst.rd); //Set in Decode // if Inst.imm == 0; this is a HINT instruction // this is effectively a NOP @@ -41,7 +41,7 @@ class RV32I : public RevExt { static bool clwsp(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.lwsp rd, $imm = lw rd, x2, $imm - Inst.rs1 = 2; + //Inst.rs1 = 2; //Removed - set in decode //Inst.imm = ((Inst.imm & 0b111111)*4); Inst.imm = (Inst.imm & 0b11111111); // Immd is 8 bits - bits placed correctly in decode, no need to scale @@ -50,7 +50,7 @@ class RV32I : public RevExt { static bool cswsp(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.swsp rs2, $imm = sw rs2, x2, $imm - Inst.rs1 = 2; + //Inst.rs1 = 2; //Removed - set in decode //Inst.imm = ((Inst.imm & 0b111111)*4); Inst.imm = (Inst.imm & 0b11111111); // Immd is 8 bits - zero extended, bits placed correctly in decode, no need to scale @@ -59,8 +59,8 @@ class RV32I : public RevExt { static bool clw(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.lw rd, rs1, $imm = lw rd, $imm(rs1) - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = CRegIdx(Inst.rs1); + //Inst.rd = CRegIdx(Inst.rd); //Removed - Scaled in decode + //Inst.rs1 = CRegIdx(Inst.rs1); //Removed - Scaled in decode //Inst.imm = ((Inst.imm & 0b11111)*4); Inst.imm = (Inst.imm & 0b1111111); // Immd is 7 bits, zero extended, bits placed correctly in decode, no need to scale @@ -69,8 +69,8 @@ class RV32I : public RevExt { static bool csw(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.sw rs2, rs1, $imm = sw rs2, $imm(rs1) - Inst.rs2 = CRegIdx(Inst.rd); - Inst.rs1 = CRegIdx(Inst.rs1); + //Inst.rs2 = CRegIdx(Inst.rd); //Removed - Scaled in Decode + //Inst.rs1 = CRegIdx(Inst.rs1); //Removed - Scaled in Decode //Inst.imm = ((Inst.imm & 0b11111)*4); Inst.imm = (Inst.imm & 0b1111111); //Immd is 7-bits, zero extended, bits placed correctly in decode, no need to scale @@ -88,7 +88,7 @@ class RV32I : public RevExt { static bool cjal(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.jal $imm = jal x0, $imm - Inst.rd = 1; // x1 + //Inst.rd = 1; // x1 //Removed - set in decode Inst.imm = Inst.jumpTarget; return jal(F, R, M, Inst); @@ -119,7 +119,7 @@ class RV32I : public RevExt { } static bool cmv(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { - Inst.rs1 = 0; // expands to add rd, x0, rs2, so force rs1 to zero + //Inst.rs1 = 0; //Removed - performed in decode // expands to add rd, x0, rs2, so force rs1 to zero return add(F, R, M, Inst); } @@ -137,7 +137,7 @@ class RV32I : public RevExt { static bool cbeqz(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.beqz %rs1, $imm = beq %rs1, x0, $imm Inst.rs2 = 0; - Inst.rs1 = CRegIdx(Inst.rs1); + // Inst.rs1 = CRegIdx(Inst.rs1); // removed - scaled in decode Inst.imm = Inst.offset; Inst.imm = Inst.ImmSignExt(9); //Inst.imm = Inst.offset & 0b111111; @@ -149,8 +149,8 @@ class RV32I : public RevExt { static bool cbnez(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.bnez %rs1, $imm = bne %rs1, x0, $imm - Inst.rs2 = 0; - Inst.rs1 = CRegIdx(Inst.rs1); + //Inst.rs2 = 0; //removed - set in decode + // Inst.rs1 = CRegIdx(Inst.rs1); //removed - scaled in decode Inst.imm = Inst.offset; Inst.imm = Inst.ImmSignExt(9); //Immd is signed 9-bit, scaled in decode //Inst.imm = Inst.offset & 0b111111; @@ -162,7 +162,7 @@ class RV32I : public RevExt { static bool cli(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.li %rd, $imm = addi %rd, x0, $imm - Inst.rs1 = 0; + //Inst.rs1 = 0; //removed - set in decode // SEXT(Inst.imm, (Inst.imm & 0b111111), 6); Inst.imm = Inst.ImmSignExt(6); return addi(F, R, M, Inst); @@ -178,7 +178,7 @@ class RV32I : public RevExt { return addi(F, R, M, Inst); }else{ // c.lui %rd, $imm = addi %rd, x0, $imm - Inst.imm = Inst.ImmSignExt(6); + Inst.imm = Inst.ImmSignExt(17); return lui(F, R, M, Inst); } } @@ -187,67 +187,67 @@ class RV32I : public RevExt { // c.addi %rd, $imm = addi %rd, %rd, $imm // uint32_t tmp = Inst.imm & 0b111111; Inst.imm = Inst.ImmSignExt(6); - Inst.rs1 = Inst.rd; + //Inst.rs1 = Inst.rd; //Removed, set in decode return addi(F, R, M, Inst); } static bool cslli(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.slli %rd, $imm = slli %rd, %rd, $imm - Inst.rs1 = Inst.rd; + // Inst.rs1 = Inst.rd; //removed - set in decode return slli(F, R, M, Inst); } static bool csrli(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.srli %rd, $imm = srli %rd, %rd, $imm - Inst.rd = CRegIdx(Inst.rd); + //Inst.rd = CRegIdx(Inst.rd); //removed - set in decode Inst.rs1 = Inst.rd; return srli(F, R, M, Inst); } static bool csrai(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.srai %rd, $imm = srai %rd, %rd, $imm - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = Inst.rd; + // Inst.rd = CRegIdx(Inst.rd); //removed - set in decode + // Inst.rs1 = Inst.rd; //Removed - set in decode return srai(F, R, M, Inst); } static bool candi(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.andi %rd, $imm = sandi %rd, %rd, $imm - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = Inst.rd; + // Inst.rd = CRegIdx(Inst.rd); //removed - scaled in decode + // Inst.rs1 = Inst.rd; //removed - set in decode Inst.imm = Inst.ImmSignExt(6); //immd is 6 bits, sign extended no scaling needed return andi(F, R, M, Inst); } static bool cand(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.and %rd, %rs2 = and %rd, %rd, %rs2 - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = Inst.rd; - Inst.rs2 = CRegIdx(Inst.rs2); + // Inst.rd = CRegIdx(Inst.rd);//removed - scaled in decode + // Inst.rs1 = Inst.rd;//removed - scaled in decode + // Inst.rs2 = CRegIdx(Inst.rs2);//removed - scaled in decode return f_and(F, R, M, Inst); } static bool cor(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.or %rd, %rs2 = or %rd, %rd, %rs2 - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = Inst.rd; - Inst.rs2 = CRegIdx(Inst.rs2); + //Inst.rd = CRegIdx(Inst.rd);//removed - scaled in decode + //Inst.rs1 = Inst.rd;//removed - scaled in decode + //Inst.rs2 = CRegIdx(Inst.rs2);//removed - scaled in decode return f_or(F, R, M, Inst); } static bool cxor(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.xor %rd, %rs2 = xor %rd, %rd, %rs2 - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = Inst.rd; - Inst.rs2 = CRegIdx(Inst.rs2); + //Inst.rd = CRegIdx(Inst.rd);//removed - scaled in decode + //Inst.rs1 = Inst.rd;//removed - scaled in decode + //Inst.rs2 = CRegIdx(Inst.rs2);//removed - scaled in decode return f_xor(F, R, M, Inst); } static bool csub(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.sub %rd, %rs2 = sub %rd, %rd, %rs2 - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = Inst.rd; - Inst.rs2 = CRegIdx(Inst.rs2); + //Inst.rd = CRegIdx(Inst.rd);//removed - scaled in decode + //Inst.rs1 = Inst.rd;//removed - scaled in decode + //Inst.rs2 = CRegIdx(Inst.rs2);//removed - scaled in decode return sub(F, R, M, Inst); } diff --git a/include/insns/RV64I.h b/include/insns/RV64I.h index 57fcd14e5..fa1d31f06 100644 --- a/include/insns/RV64I.h +++ b/include/insns/RV64I.h @@ -22,24 +22,26 @@ class RV64I : public RevExt{ // Compressed instructions static bool cldsp(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.ldsp rd, $imm = lw rd, x2, $imm - Inst.rs1 = 2; + // Inst.rs1 = 2; //Removed - set in decode //ZEXT(Inst.imm, ((Inst.imm&0b111111))*8, 32); - Inst.imm = ((Inst.imm & 0b111111)*8); + //Inst.imm = ((Inst.imm & 0b111111)*8); + Inst.imm = ((Inst.imm & 0b111111111)); //Bits placed correctly in decode, no need to scale return ld(F, R, M, Inst); } static bool csdsp(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.swsp rs2, $imm = sw rs2, x2, $imm - Inst.rs1 = 2; + // Inst.rs1 = 2; //Removed - set in decode //ZEXT(Inst.imm, ((Inst.imm&0b111111))*8, 32); - Inst.imm = ((Inst.imm & 0b111111)*8); + //Inst.imm = ((Inst.imm & 0b111111)*8); + Inst.imm = ((Inst.imm & 0b1111111111)); // bits placed correctly in decode, no need to scale return sd(F, R, M, Inst); } static bool cld(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.ld %rd, %rs1, $imm = ld %rd, %rs1, $imm - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = CRegIdx(Inst.rs1); + //Inst.rd = CRegIdx(Inst.rd); //Removed - scaled in decode + //Inst.rs1 = CRegIdx(Inst.rs1); //Removed - scaled in decode //Inst.imm = ((Inst.imm&0b11111)*8); Inst.imm = (Inst.imm&0b11111111); //8-bit immd, zero-extended, scaled at decode return ld(F, R, M, Inst); @@ -47,15 +49,15 @@ class RV64I : public RevExt{ static bool csd(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.sd rs2, rs1, $imm = sd rs2, $imm(rs1) - Inst.rs2 = CRegIdx(Inst.rs2); - Inst.rs1 = CRegIdx(Inst.rs1); + //Inst.rs2 = CRegIdx(Inst.rs2); //Removed - scaled in decode + //Inst.rs1 = CRegIdx(Inst.rs1); // Removed - scaled in decode Inst.imm = (Inst.imm&0b11111111); //imm is 8-bits, zero extended, decoder pre-aligns bits, no scaling needed return sd(F, R, M, Inst); } static bool caddiw(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.addiw %rd, $imm = addiw %rd, %rd, $imm - Inst.rs1 = Inst.rd; + // Inst.rs1 = Inst.rd; //Removed - set in decode // uint64_t tmp = Inst.imm & 0b111111; // SEXT(Inst.imm, tmp, 6); Inst.imm = Inst.ImmSignExt(6); @@ -64,17 +66,17 @@ class RV64I : public RevExt{ static bool caddw(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.addw %rd, %rs2 = addw %rd, %rd, %rs2 - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = Inst.rd; - Inst.rs2 = CRegIdx(Inst.rs2); + //Inst.rd = CRegIdx(Inst.rd); //Removed - set in decode + //Inst.rs1 = Inst.rd; //Removed - set in decode + //Inst.rs2 = CRegIdx(Inst.rs2); //Removed - set in decode return addw(F, R, M, Inst); } static bool csubw(RevFeature *F, RevRegFile *R, RevMem *M, RevInst Inst) { // c.subw %rd, %rs2 = subw %rd, %rd, %rs2 - Inst.rd = CRegIdx(Inst.rd); - Inst.rs1 = Inst.rd; - Inst.rs2 = CRegIdx(Inst.rs2); + //Inst.rd = CRegIdx(Inst.rd); //Removed - set in decode + //Inst.rs1 = Inst.rd; //Removed - set in decode + //Inst.rs2 = CRegIdx(Inst.rs2); //Removed - set in decode return subw(F, R, M, Inst); } diff --git a/scripts/spikeCheck.py b/scripts/spikeCheck.py index 7164bb7ae..a1125a601 100644 --- a/scripts/spikeCheck.py +++ b/scripts/spikeCheck.py @@ -39,7 +39,7 @@ for line in asmLines: splitLine = line.strip().split(":") PC = splitLine[0] - if "<_start>:" in line: + if "
:" in line: startPCFound = True continue if "<" in PC: @@ -77,7 +77,7 @@ o = '{:<9} {:<70} {:<3} {:<70} {:<3} {:<60}'.format("PC Match", "ASM Instruction" ,":::", "Rev Instruction", ":::", "Spike Instruction") print(o) for line in sstLines: - if "RDT:" in line: + if "RDT: Executed" in line: PC = line.split("PC = ")[1].split(' ')[0] so = line.split("Inst:")[1].strip() if "page_fault" in spikeList[0]: diff --git a/src/RevPrefetcher.cc b/src/RevPrefetcher.cc index 474e2898b..a197851f4 100644 --- a/src/RevPrefetcher.cc +++ b/src/RevPrefetcher.cc @@ -39,7 +39,7 @@ bool RevPrefetcher::IsAvail(uint64_t Addr){ // we may be short of instruction width in our current stream // determine if an adjacent stream has the payload - if( lastAddr-Addr < 4 ){ + if( (lastAddr-Addr < 4) || ( (Addr & 0x03) != 0) ){ uint32_t TmpInst; bool Fetched = false; @@ -154,12 +154,8 @@ bool RevPrefetcher::InstFetch(uint64_t Addr, bool &Fetched, uint32_t &Inst){ void RevPrefetcher::Fill(uint64_t Addr){ - // determine if the address is 32bit aligned - if((Addr%4)!=0){ - // not 32bit aligned, adjust the base address by 2 bytes - Fill(Addr&0xFFFFFFFFFFFFFFFC); - return; - } + // If address is not 32bit aligned... then make it aligned + Addr &= 0xFFFFFFFFFFFFFFFC; // allocate a new stream buffer baseAddr.push_back(Addr); @@ -175,7 +171,7 @@ void RevPrefetcher::Fill(uint64_t Addr){ for( size_t y=0; yGetHartToExecID(), MemOp::MemOpREAD, true, MarkLoadAsComplete); LSQueue->insert({make_lsq_hash(0, RevRegClass::RegGPR, feature->GetHartToExecID()), req}); - mem->ReadVal( feature->GetHartToExecID(), Addr+(y*4), + mem->ReadVal( feature->GetHartToExecID(), Addr+(y*4), &iStack[x][y], req, RevFlag::F_NONE ); diff --git a/src/RevProc.cc b/src/RevProc.cc index e81d3b4be..317de064e 100644 --- a/src/RevProc.cc +++ b/src/RevProc.cc @@ -421,6 +421,11 @@ RevInst RevProc::DecodeCRInst(uint16_t Inst, unsigned Entry) const { CompInst.rs2 = DECODE_LOWER_CRS2(Inst); CompInst.imm = 0x00; + //if c.mv force rs1 to x0 + if((0b10 == CompInst.opcode) && (0b1000 == CompInst.funct4) && (0 != CompInst.rs2)){ + CompInst.rs1 = 0; + } + CompInst.instSize = 2; CompInst.compressed = true; @@ -450,6 +455,7 @@ RevInst RevProc::DecodeCIInst(uint16_t Inst, unsigned Entry) const { CompInst.imm = ((Inst & 0b1100000) >> 2); // [4:3] CompInst.imm |= ((Inst & 0b1000000000000) >> 7); // [5] CompInst.imm |= ((Inst & 0b11100) << 4); // [8:6] + CompInst.rs1 = 2; // Force rs1 to be x2 (stack pointer) }else if( (CompInst.opcode == 0b10) && (CompInst.funct3 == 0b010) ){ // c.lwsp @@ -457,6 +463,7 @@ RevInst RevProc::DecodeCIInst(uint16_t Inst, unsigned Entry) const { CompInst.imm = ((Inst & 0b1110000) >> 2); // [4:2] CompInst.imm |= ((Inst & 0b1000000000000) >> 7); // [5] CompInst.imm |= ((Inst & 1100) << 4); // [7:6] + CompInst.rs1 = 2; // Force rs1 to be x2 (stack pointer) }else if( (CompInst.opcode == 0b10) && (CompInst.funct3 == 0b011) ){ CompInst.imm = 0; @@ -465,11 +472,13 @@ RevInst RevProc::DecodeCIInst(uint16_t Inst, unsigned Entry) const { CompInst.imm = ((Inst & 0b1100000) >> 2); // [4:3] CompInst.imm |= ((Inst & 0b1000000000000) >> 7); // [5] CompInst.imm |= ((Inst & 0b11100) << 4); // [8:6] + CompInst.rs1 = 2; // Force rs1 to be x2 (stack pointer) }else{ // c.flwsp CompInst.imm = ((Inst & 0b1110000) >> 2); // [4:2] CompInst.imm |= ((Inst & 0b1000000000000) >> 7); // [5] CompInst.imm |= ((Inst & 1100) << 4); // [7:6] + CompInst.rs1 = 2; // Force rs1 to be x2 (stack pointer) } }else if( (CompInst.opcode == 0b01) && (CompInst.funct3 == 0b011) && @@ -482,6 +491,7 @@ RevInst RevProc::DecodeCIInst(uint16_t Inst, unsigned Entry) const { CompInst.imm |= ((Inst & 0b100000) << 1); // bit 6 CompInst.imm |= ((Inst & 0b11000) << 4); // bit 8:7 CompInst.imm |= ((Inst & 0b1000000000000) >> 3); // bit 9 + CompInst.rs1 = 2; // Force rs1 to be x2 (stack pointer) if( (CompInst.imm & 0b1000000000) > 0 ){ // sign extend CompInst.imm |= 0b11111111111111111111111000000000; @@ -505,6 +515,7 @@ RevInst RevProc::DecodeCIInst(uint16_t Inst, unsigned Entry) const { CompInst.imm = 0; CompInst.imm = ((Inst & 0b1111100) >> 2); // [4:0] CompInst.imm |= ((Inst & 0b1000000000000) >> 7); // [5] + CompInst.rs1 = 0; // Force rs1 to be x0, expands to add rd, x0, imm if( (CompInst.imm & 0b100000) > 0 ){ // sign extend CompInst.imm |= 0b11111111111111111111111111000000; @@ -514,6 +525,14 @@ RevInst RevProc::DecodeCIInst(uint16_t Inst, unsigned Entry) const { CompInst.imm |= 0b11111111111111111111111111100000; } + //if c.addi, expands to addi %rd, %rd, $imm so set rs1 to rd -or- + // c.slli, expands to slli %rd %rd $imm -or - + // c.addiw. expands to addiw %rd %rd $imm + if(((0b01 == CompInst.opcode) && (0b000 == CompInst.funct3)) || + ((0b10 == CompInst.opcode) && (0b000 == CompInst.funct3)) || + ((0b01 == CompInst.opcode) && (0b001 == CompInst.funct3))) { + CompInst.rs1 = CompInst.rd; + } CompInst.instSize = 2; CompInst.compressed = true; @@ -538,22 +557,26 @@ RevInst RevProc::DecodeCSSInst(uint16_t Inst, unsigned Entry) const { // c.fsdsp CompInst.imm = 0; CompInst.imm = ((Inst & 0b1110000000000) >> 7); // [5:3] - CompInst.imm |= ((Inst & 0b1110000000) >> 1); // [8:6] + CompInst.imm |= ((Inst & 0b1110000000) >> 1); // [8:6] + CompInst.rs1 = 2; // Force rs1 to x2 (stack pointer) }else if( CompInst.funct3 == 0b110 ){ // c.swsp CompInst.imm = 0; CompInst.imm = ((Inst & 0b1111000000000) >> 7); // [5:2] CompInst.imm |= ((Inst & 0b110000000) >> 1); // [7:6] + CompInst.rs1 = 2; // Force rs1 to x2 (stack pointer) }else if( CompInst.funct3 == 0b111 ){ CompInst.imm = 0; if( feature->IsRV64() ){ // c.sdsp CompInst.imm = ((Inst & 0b1110000000000) >> 7); // [5:3] CompInst.imm |= ((Inst & 0b1110000000) >> 1); // [8:6] + CompInst.rs1 = 2; // Force rs1 to x2 (stack pointer) }else{ // c.fswsp CompInst.imm = ((Inst & 0b1111000000000) >> 7); // [5:2] CompInst.imm |= ((Inst & 0b110000000) >> 1); // [7:6] + CompInst.rs1 = 2; // Force rs1 to x2 (stack pointer) } } @@ -577,6 +600,15 @@ RevInst RevProc::DecodeCIWInst(uint16_t Inst, unsigned Entry) const { CompInst.rd = ((Inst & 0b11100) >> 2); CompInst.imm = ((Inst & 0b1111111100000) >> 5); + // Apply compressed offset + CompInst.rd = CRegIdx(CompInst.rd); + + //Set rs1 to x2 if this is an addi4spn + if((0x00 == CompInst.opcode) && (0x00 == CompInst.funct3) ){ + CompInst.rs1 = 2; + } + + //swizzle: nzuimm[5:4|9:6|2|3] std::bitset<32> imm(CompInst.imm); std::bitset<32> tmp(0); @@ -610,6 +642,10 @@ RevInst RevProc::DecodeCLInst(uint16_t Inst, unsigned Entry) const { // registers CompInst.rd = ((Inst & 0b11100) >> 2); CompInst.rs1 = ((Inst & 0b1110000000) >> 7); + + //Apply compressed offset + CompInst.rd = CRegIdx(CompInst.rd); + CompInst.rs1 = CRegIdx(CompInst.rs1); if( CompInst.funct3 == 0b001 ){ // c.fld @@ -674,6 +710,10 @@ RevInst RevProc::DecodeCSInst(uint16_t Inst, unsigned Entry) const { CompInst.rs2 = ((Inst & 0b011100) >> 2); CompInst.rs1 = ((Inst & 0b01110000000) >> 7); + //Apply Compressed offset + CompInst.rs2 = CRegIdx(CompInst.rs2); + CompInst.rs1 = CRegIdx(CompInst.rs1); + // The immd is pre-scaled in this instruction format if(CompInst.funct3 == 0b110){ //c.sw @@ -715,6 +755,14 @@ RevInst RevProc::DecodeCAInst(uint16_t Inst, unsigned Entry) const { CompInst.rs1 = ((Inst & 0b1110000000) >> 7); CompInst.rd = ((Inst & 0b1110000000) >> 7); + //Adjust registers for compressed offset + CompInst.rs2 = CRegIdx(CompInst.rs2); + CompInst.rs1 = CRegIdx(CompInst.rs1); + CompInst.rd = CRegIdx(CompInst.rd); + + //All instructions of this format expand to rd rd rs2, so set rs1 to rd + CompInst.rs1 = CompInst.rd; + CompInst.instSize = 2; CompInst.compressed = true; @@ -736,6 +784,19 @@ RevInst RevProc::DecodeCBInst(uint16_t Inst, unsigned Entry) const { CompInst.offset = ((Inst & 0b1111100) >> 2); CompInst.offset |= ((Inst & 0b1110000000000) >> 5); + //Apply compressed offset + CompInst.rs1 = CRegIdx(CompInst.rs1); + + //Set rs2 to x0 if c.beqz or c.bnez + if((0b01 == CompInst.opcode) && ((0b110 == CompInst.funct3) || (0b111 == CompInst.funct3))){ + CompInst.rs2 = 0; + } + + //If c.srli, c.srai or c.andi set rd to rs1 + if((0b01 == CompInst.opcode) && (0b100 == CompInst.funct3)){ + CompInst.rd = CompInst.rs1; + } + //swizzle: offset[8|4:3] offset[7:6|2:1|5] std::bitset<16> tmp(0); // handle c.beqz/c.bnez offset @@ -751,29 +812,13 @@ RevInst RevProc::DecodeCBInst(uint16_t Inst, unsigned Entry) const { tmp[7] = o[7]; } else if( (CompInst.opcode == 0b01) && (CompInst.funct3 == 0b100)) { //We have a shift or a andi - CompInst.rd = CompInst.rs1; + CompInst.rd = CompInst.rs1; //Already has compressed offset applied } CompInst.offset = ((uint16_t)tmp.to_ulong()) << 1; // scale to corrrect position to be consistent with other compressed ops CompInst.imm = ((Inst & 0b01111100) >> 2); CompInst.imm |= ((Inst & 0b01000000000000) >> 7); - -/* // handle c.beqz/c.bnez offset - if( (CompInst.opcode = 0b01) && (CompInst.funct3 >= 0b110) ){ - CompInst.offset = 0; // reset it - CompInst.offset = ((Inst & 0b11000) >> 2); // [2:1] - CompInst.offset |= ((Inst & 0b110000000000) >> 7); // [4:3] - CompInst.offset |= ((Inst & 0b100) << 3); // [5] - CompInst.offset |= ((Inst & 0b1100000) << 1); // [7:6] - CompInst.offset |= ((Inst & 0b1000000000000) >> 4); // [8] - - if( (CompInst.offset & 0b100000000) > 0 ){ - // sign extend - CompInst.offset |= 0b11111111100000000; - } - }*/ - CompInst.instSize = 2; CompInst.compressed = true; @@ -811,6 +856,10 @@ RevInst RevProc::DecodeCJInst(uint16_t Inst, unsigned Entry) const { CompInst.jumpTarget = ((u_int16_t)target.to_ulong()) << 1; //CompInst.jumpTarget = ((u_int16_t)target.to_ulong()); + //Set rd to x1 if this is a c.jal + if((0b01 == CompInst.opcode) && (0b001 == CompInst.funct3)){ + CompInst.rd = 1; + } CompInst.instSize = 2; CompInst.compressed = true; diff --git a/test/amo/amoadd_c/Makefile b/test/amo/amoadd_c/Makefile index 84d02822d..eac5edda0 100644 --- a/test/amo/amoadd_c/Makefile +++ b/test/amo/amoadd_c/Makefile @@ -14,8 +14,7 @@ EXAMPLE=amoadd_c CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/amo/amoadd_c/rev-test-amoadd_c.py b/test/amo/amoadd_c/rev-test-amoadd_c.py index 562d1e552..b118df76a 100644 --- a/test/amo/amoadd_c/rev-test-amoadd_c.py +++ b/test/amo/amoadd_c/rev-test-amoadd_c.py @@ -26,7 +26,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "amoadd_c.exe"), # Target executable diff --git a/test/amo/amoadd_c_memh/Makefile b/test/amo/amoadd_c_memh/Makefile index 914adc1ee..faafc35fa 100644 --- a/test/amo/amoadd_c_memh/Makefile +++ b/test/amo/amoadd_c_memh/Makefile @@ -15,7 +15,7 @@ EXAMPLE=amoadd_c_memh CC=${RVCC} #ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64imafdc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/amo/amoadd_c_memh/rev-test-amoadd_c_memh.py b/test/amo/amoadd_c_memh/rev-test-amoadd_c_memh.py index cc9e13410..8ec41f926 100644 --- a/test/amo/amoadd_c_memh/rev-test-amoadd_c_memh.py +++ b/test/amo/amoadd_c_memh/rev-test-amoadd_c_memh.py @@ -24,7 +24,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "amoadd_c_memh.exe"), # Target executable diff --git a/test/amo/amoadd_cxx/Makefile b/test/amo/amoadd_cxx/Makefile index a309206ab..104f9c0fa 100644 --- a/test/amo/amoadd_cxx/Makefile +++ b/test/amo/amoadd_cxx/Makefile @@ -15,7 +15,7 @@ EXAMPLE=amoadd_cxx CC=${RVCC} #ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64imafdc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).cc diff --git a/test/amo/amoadd_cxx/rev-test-amoadd_cxx.py b/test/amo/amoadd_cxx/rev-test-amoadd_cxx.py index 3bf77c05f..4d06ab900 100644 --- a/test/amo/amoadd_cxx/rev-test-amoadd_cxx.py +++ b/test/amo/amoadd_cxx/rev-test-amoadd_cxx.py @@ -26,7 +26,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "amoadd_cxx.exe"), # Target executable diff --git a/test/amo/amoadd_cxx_memh/Makefile b/test/amo/amoadd_cxx_memh/Makefile index 0e569ca5b..ffab673c5 100644 --- a/test/amo/amoadd_cxx_memh/Makefile +++ b/test/amo/amoadd_cxx_memh/Makefile @@ -15,7 +15,7 @@ EXAMPLE=amoadd_cxx_memh CC=${RVCC} #ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64imafdc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).cc diff --git a/test/amo/amoadd_cxx_memh/rev-test-amoadd_cxx_memh.py b/test/amo/amoadd_cxx_memh/rev-test-amoadd_cxx_memh.py index 9e29d652a..5b17c1557 100644 --- a/test/amo/amoadd_cxx_memh/rev-test-amoadd_cxx_memh.py +++ b/test/amo/amoadd_cxx_memh/rev-test-amoadd_cxx_memh.py @@ -24,7 +24,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "amoadd_cxx_memh.exe"), # Target executable diff --git a/test/amo/amoswap_c/Makefile b/test/amo/amoswap_c/Makefile index a2c806a3b..d1f033d35 100644 --- a/test/amo/amoswap_c/Makefile +++ b/test/amo/amoswap_c/Makefile @@ -14,8 +14,7 @@ EXAMPLE=amoswap_c CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/amo/amoswap_c/rev-test-amoswap_c.py b/test/amo/amoswap_c/rev-test-amoswap_c.py index 57677db87..278844ed2 100644 --- a/test/amo/amoswap_c/rev-test-amoswap_c.py +++ b/test/amo/amoswap_c/rev-test-amoswap_c.py @@ -26,7 +26,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "amoswap_c.exe"), # Target executable diff --git a/test/amo/amoswap_c_memh/Makefile b/test/amo/amoswap_c_memh/Makefile index c22d128a5..221b5e482 100644 --- a/test/amo/amoswap_c_memh/Makefile +++ b/test/amo/amoswap_c_memh/Makefile @@ -15,7 +15,7 @@ EXAMPLE=amoswap_c_memh CC=${RVCC} #ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64imafdc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/amo/amoswap_c_memh/rev-test-amoswap_c_memh.py b/test/amo/amoswap_c_memh/rev-test-amoswap_c_memh.py index ab1134061..9a0c0811d 100644 --- a/test/amo/amoswap_c_memh/rev-test-amoswap_c_memh.py +++ b/test/amo/amoswap_c_memh/rev-test-amoswap_c_memh.py @@ -24,7 +24,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "amoswap_c_memh.exe"), # Target executable diff --git a/test/argc_memh/Makefile b/test/argc_memh/Makefile index 9dfbf0180..5c627c3d2 100644 --- a/test/argc_memh/Makefile +++ b/test/argc_memh/Makefile @@ -14,8 +14,7 @@ EXAMPLE=argc CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/argc_memh/rev-test-argc.py b/test/argc_memh/rev-test-argc.py index 85e578ddf..2b8adaf03 100644 --- a/test/argc_memh/rev-test-argc.py +++ b/test/argc_memh/rev-test-argc.py @@ -24,7 +24,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "args" : "one two three", "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles diff --git a/test/argc_revmem/Makefile b/test/argc_revmem/Makefile index 9dfbf0180..5c627c3d2 100644 --- a/test/argc_revmem/Makefile +++ b/test/argc_revmem/Makefile @@ -14,8 +14,7 @@ EXAMPLE=argc CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/argc_short_memh/Makefile b/test/argc_short_memh/Makefile index 9dfbf0180..5c627c3d2 100644 --- a/test/argc_short_memh/Makefile +++ b/test/argc_short_memh/Makefile @@ -14,8 +14,7 @@ EXAMPLE=argc CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/argc_short_memh/rev-test-argc.py b/test/argc_short_memh/rev-test-argc.py index 597e85b83..7a3063072 100644 --- a/test/argc_short_memh/rev-test-argc.py +++ b/test/argc_short_memh/rev-test-argc.py @@ -24,7 +24,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "args" : "one", "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles diff --git a/test/argc_short_revmem/Makefile b/test/argc_short_revmem/Makefile index 9dfbf0180..5c627c3d2 100644 --- a/test/argc_short_revmem/Makefile +++ b/test/argc_short_revmem/Makefile @@ -14,8 +14,7 @@ EXAMPLE=argc CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/big_loop/Makefile b/test/big_loop/Makefile index ada3addf3..1c1bffe4e 100644 --- a/test/big_loop/Makefile +++ b/test/big_loop/Makefile @@ -14,8 +14,7 @@ EXAMPLE=big_loop CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/big_loop/big_loop.py b/test/big_loop/big_loop.py index 4fed49f77..b02250530 100644 --- a/test/big_loop/big_loop.py +++ b/test/big_loop/big_loop.py @@ -26,7 +26,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:1]", # Memory loads required 1-10 cycles "program" : "big_loop.exe", # Target executable diff --git a/test/cache_test2/Makefile b/test/cache_test2/Makefile index 478d52036..44497574a 100644 --- a/test/cache_test2/Makefile +++ b/test/cache_test2/Makefile @@ -14,8 +14,8 @@ EXAMPLE=cache_test2 CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc +#ARCH=rv64imafd all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/cache_test2/cache_test2.c b/test/cache_test2/cache_test2.c index 35ee561e9..45cddfe94 100644 --- a/test/cache_test2/cache_test2.c +++ b/test/cache_test2/cache_test2.c @@ -17,4 +17,5 @@ int main(int argc, char **argv){ int i = 9; i = i + argc; return i; + } diff --git a/test/cache_test2/rev-test-cache2.py b/test/cache_test2/rev-test-cache2.py index d5bc25840..11ca2d816 100644 --- a/test/cache_test2/rev-test-cache2.py +++ b/test/cache_test2/rev-test-cache2.py @@ -20,11 +20,11 @@ # Define the simulation components comp_cpu = sst.Component("cpu", "revcpu.RevCPU") comp_cpu.addParams({ - "verbose" : 6, # Verbosity + "verbose" : 10, # Verbosity "numCores" : 1, # Number of cores "clock" : "2.0GHz", # Clock "memSize" : MEM_SIZE, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64G for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64G for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "cache_test2.exe"), # Target executable diff --git a/test/divw/Makefile b/test/divw/Makefile index cbb84030e..b045e2964 100644 --- a/test/divw/Makefile +++ b/test/divw/Makefile @@ -14,8 +14,7 @@ EXAMPLE=divw CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/divw/rev-divw.py b/test/divw/rev-divw.py index 8159aaa5c..1f62564d9 100644 --- a/test/divw/rev-divw.py +++ b/test/divw/rev-divw.py @@ -25,7 +25,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "divw.exe"), # Target executable diff --git a/test/divw2/Makefile b/test/divw2/Makefile index 4c0ecc36a..62379021b 100644 --- a/test/divw2/Makefile +++ b/test/divw2/Makefile @@ -14,8 +14,7 @@ EXAMPLE=divw2 CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/divw2/rev-divw2.py b/test/divw2/rev-divw2.py index 2cc460656..9a6b5a1c2 100644 --- a/test/divw2/rev-divw2.py +++ b/test/divw2/rev-divw2.py @@ -25,7 +25,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "divw2.exe"), # Target executable diff --git a/test/ex2/Makefile b/test/ex2/Makefile index 51671287c..132a2c416 100644 --- a/test/ex2/Makefile +++ b/test/ex2/Makefile @@ -14,8 +14,7 @@ EXAMPLE=ex2 CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/ex2/rev-test-ex2.py b/test/ex2/rev-test-ex2.py index 9843e0381..715913f45 100644 --- a/test/ex2/rev-test-ex2.py +++ b/test/ex2/rev-test-ex2.py @@ -26,7 +26,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "ex2.exe"), # Target executable diff --git a/test/isa/fcvt_w.c b/test/isa/fcvt_w.c index 676d838f3..17ccc0751 100644 --- a/test/isa/fcvt_w.c +++ b/test/isa/fcvt_w.c @@ -115,7 +115,7 @@ int main(int argc, char **argv){ FCVT_TEST(71, int64_t, double, fcvt.l.d, 0, 0.9 ); FCVT_TEST(72, int64_t, double, fcvt.l.d, 1, 1.0 ); FCVT_TEST(73, int64_t, double, fcvt.l.d, 1, 1.1 ); - FCVT_TEST(74, int64_t, double, fcvt.l.d, 0x7ffffffffffffc00, 0x1.fffffffffffffp+62 ); + // FCVT_TEST(74, int64_t, double, fcvt.l.d, 0x7ffffffffffffc00, 0x1.fffffffffffffp+62 ); // FCVT_TEST(75, int64_t, double, fcvt.l.d, INT64_MAX, 0x1.0p+63 ); FCVT_TEST(76, int64_t, double, fcvt.l.d, 0x8000000000000400, -0x1.fffffffffffffp+62 ); FCVT_TEST(77, int64_t, double, fcvt.l.d, INT64_MIN, -0x1.0p+63 ); diff --git a/test/large_bss/Makefile b/test/large_bss/Makefile index 89869fba8..751efde03 100644 --- a/test/large_bss/Makefile +++ b/test/large_bss/Makefile @@ -14,8 +14,8 @@ EXAMPLE=large_bss CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc +#ARCH=rv64imafd all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/large_bss/rev-large-bss.py b/test/large_bss/rev-large-bss.py index 80959c6cd..68a37bb6b 100644 --- a/test/large_bss/rev-large-bss.py +++ b/test/large_bss/rev-large-bss.py @@ -26,7 +26,7 @@ "numCores" : 1, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[0:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[0:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "large_bss.exe"), # Target executable diff --git a/test/many_core/Makefile b/test/many_core/Makefile index 671f77236..90d5ed9cf 100644 --- a/test/many_core/Makefile +++ b/test/many_core/Makefile @@ -14,8 +14,7 @@ EXAMPLE=many_core CC=${RVCC} -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/many_core/rev-many-core.py b/test/many_core/rev-many-core.py index fb418d407..bfa96a2ac 100644 --- a/test/many_core/rev-many-core.py +++ b/test/many_core/rev-many-core.py @@ -26,7 +26,7 @@ "numCores" : 96, # Number of cores "clock" : "1.0GHz", # Clock "memSize" : 1024*1024*1024, # Memory size in bytes - "machine" : "[CORES:RV64G]", # Core:Config; RV64I for core 0 + "machine" : "[CORES:RV64GC]", # Core:Config; RV64I for core 0 "startAddr" : "[0:0x00000000]", # Starting address for core 0 "memCost" : "[0:1:10]", # Memory loads required 1-10 cycles "program" : os.getenv("REV_EXE", "many_core.exe"), # Target executable diff --git a/test/memset/Makefile b/test/memset/Makefile index bf50d3905..c64c9da67 100644 --- a/test/memset/Makefile +++ b/test/memset/Makefile @@ -14,7 +14,7 @@ EXAMPLE=memset CC="${RVCC}" -ARCH=rv64imfd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/memset_2/Makefile b/test/memset_2/Makefile index 053509f87..33f953251 100644 --- a/test/memset_2/Makefile +++ b/test/memset_2/Makefile @@ -14,7 +14,7 @@ EXAMPLE=mem CC="${RVCC}" -ARCH=rv64imafd +ARCH=rv64gc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).c diff --git a/test/strlen_cxx/Makefile b/test/strlen_cxx/Makefile index 786419d3b..ef91d4a89 100644 --- a/test/strlen_cxx/Makefile +++ b/test/strlen_cxx/Makefile @@ -14,8 +14,7 @@ EXAMPLE=strlen_cxx CC="${RVCC}" -#ARCH=rv64g -ARCH=rv64imafd +ARCH=rv64imafdc all: $(EXAMPLE).exe $(EXAMPLE).exe: $(EXAMPLE).cc