From 3ac246ae6a1b8d3af79e15b45b85d2484825677c Mon Sep 17 00:00:00 2001 From: felsabbagh3 Date: Mon, 11 Feb 2019 01:02:09 -0500 Subject: [PATCH] PASSING ALL TEST CASES --- src/enc.cpp | 3 ++- src/instruction.cpp | 29 ++++++++++++++++++++++------- src/results.txt | 10 +++++----- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/enc.cpp b/src/enc.cpp index 52eef15b..a19ca5b0 100644 --- a/src/enc.cpp +++ b/src/enc.cpp @@ -313,12 +313,13 @@ Instruction *WordDecoder::decode(const std::vector &v, Size &idx) { case InstType::I_TYPE: inst.setDestReg((code>>shift_rd) & reg_mask); inst.setSrcReg((code>>shift_rs1) & reg_mask); - + inst.setFunc7 ((code>>shift_func7) & func7_mask); func3 = (code>>shift_func3) & func3_mask; inst.setFunc3 (func3); if ((func3 == 5) && (op != L_INST)) { + // std::cout << "func7: " << func7 << "\n"; inst.setSrcImm(signExt(((code>>shift_rs2)®_mask), 5, reg_mask)); } else diff --git a/src/instruction.cpp b/src/instruction.cpp index 182b33de..221451ce 100644 --- a/src/instruction.cpp +++ b/src/instruction.cpp @@ -292,18 +292,33 @@ void Instruction::executeOn(Warp &c) { reg[rdest].trunc(wordSz); break; case 5: - if (!func7) + if ((func7 == 0)) { - // SRAI - op1 = reg[rsrc[0]]; - op2 = immsrc; - reg[rdest] = op1 >> op2; + // SRLI + // std::cout << "WTF\n"; + bool isNeg = ((0x80000000 & reg[rsrc[0]])) > 0; + Word result = Word_u(reg[rsrc[0]]) >> Word_u(immsrc); + // if (isNeg) + // { + // Word mask = 0x80000000; + // for (int i = 32; i < Word_u(immsrc); i++) + // { + // result |= mask; + // mask = mask >> 1; + // } + // } + + reg[rdest] = result; + reg[rdest].trunc(wordSz); } else { - // SRLI - reg[rdest] = Word_u(reg[rsrc[0]]) >> Word_u(immsrc); + // SRAI + // std::cout << "WOHOOOOO\n"; + op1 = reg[rsrc[0]]; + op2 = immsrc; + reg[rdest] = op1 >> op2; reg[rdest].trunc(wordSz); } break; diff --git a/src/results.txt b/src/results.txt index 943bfdd1..da1388f0 100644 --- a/src/results.txt +++ b/src/results.txt @@ -342,14 +342,14 @@ GRADE: PASSED ./riscv_tests/rv32ui-p-srai.hex INTERRUPT ECALL/EBREAK -Total steps: 41 -Total insts: 41 +Total steps: 244 +Total insts: 244 === Warp 0 === -Steps : 41 -Insts : 41 +Steps : 244 +Insts : 244 Loads : 0 Stores: 0 -GRADE: FAILED 3 +GRADE: PASSED ./riscv_tests/rv32ui-p-srl.hex INTERRUPT ECALL/EBREAK