[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix disassembling of jalr

2020-08-27 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/33155 )


Change subject: arch-riscv: Fix disassembling of jalr
..

arch-riscv: Fix disassembling of jalr

The 'jalr' instruction of 'format Jump' should have an immediate as
offset, and the Rd register could not be always omitted. This patch
fixes the problem.

Example output:
  jalr ra, -168(ra)
  jalr zero, 0(ra)
  jalr ra, 0(a5)

Note that this does not apply to the other two instructions of the
same format: 'c.jr' and 'c.jalr'.

Change-Id: Ia656c2e8bfafd243bfec221ac291190a84684929
Signed-off-by: Ian Jiang 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/33155
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/arch/riscv/isa/formats/standard.isa
1 file changed, 5 insertions(+), 2 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/riscv/isa/formats/standard.isa  
b/src/arch/riscv/isa/formats/standard.isa

index 11c06aa..5c75695 100644
--- a/src/arch/riscv/isa/formats/standard.isa
+++ b/src/arch/riscv/isa/formats/standard.isa
@@ -283,10 +283,13 @@
 %(class_name)s::generateDisassembly(
 Addr pc, const Loader::SymbolTable *symtab) const
 {
-std::vector indices = {%(regs)s};
 std::stringstream ss;
 ss << mnemonic << ' ';
-ss << registerName(indices[0]);
+if (QUADRANT == 0x3)
+ss << registerName(_destRegIdx[0]) << ", "
+   << imm << "(" << registerName(_srcRegIdx[0]) << ")";
+else
+ss << registerName(_srcRegIdx[0]);
 return ss.str();
 }
 }};

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/33155
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ia656c2e8bfafd243bfec221ac291190a84684929
Gerrit-Change-Number: 33155
Gerrit-PatchSet: 4
Gerrit-Owner: Ian Jiang 
Gerrit-Reviewer: Alec Roelke 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Ian Jiang 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix bug in getting branch target of jalr

2020-08-23 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/33234 )



Change subject: arch-riscv: Fix bug in getting branch target of jalr
..

arch-riscv: Fix bug in getting branch target of jalr

The 'jalr' instruction is:
  jalr rd, offset(rs1)t=pc+4; pc=(x[rs1]+sext(offset))&~1; x[rd]=t
And the branch target address is
  pc=(x[rs1]+sext(offset))&~1
When rs1 == rd, x[rs1] will be updated after instruction execution. In
this situation the branch target computed with previous rule is not
correct.

For example, here is a piece of trace with --debug-flags=Exec,IntRegs:
  : Setting int reg 0 (0) to 0.
  : Reading int reg 1 (1) as 0x12d0f8.
  : Setting int reg 1 (1) to 0x1d100.
  : jalr ra, -168(ra)  : IntAlu :  D=0x0001d100
And the branch target expected should be (0x12d0f8-168), but not
(0x1d100-168).

This patch fix the problem. First detect if 'jalr' has been executed
or not by comparing the difference between pc and npc. Then, if
executed, use npc as the branch target, else compute branch target
with previous rule. It also applies to the compressed form 'c.jalr'.

Change-Id: I3ced4c259620763acde440bb876c9a2a8e43515c
Signed-off-by: Ian Jiang 
---
M src/arch/riscv/isa/formats/standard.isa
1 file changed, 7 insertions(+), 1 deletion(-)



diff --git a/src/arch/riscv/isa/formats/standard.isa  
b/src/arch/riscv/isa/formats/standard.isa

index 11c06aa..e124ef1 100644
--- a/src/arch/riscv/isa/formats/standard.isa
+++ b/src/arch/riscv/isa/formats/standard.isa
@@ -275,7 +275,13 @@
 %(class_name)s::branchTarget(ThreadContext *tc) const
 {
 PCState pc = tc->pcState();
-pc.set((tc->readIntReg(_srcRegIdx[0].index()) + imm)&~0x1);
+Addr pc_addr = pc.pc();
+Addr npc_addr = pc.npc();
+if ((pc.compressed() && (npc_addr == pc_addr +  
sizeof(MachInst)/2)) ||

+(!pc.compressed() && (npc_addr == pc_addr + sizeof(MachInst
+pc.set((tc->readIntReg(_srcRegIdx[0].index()) + imm)&~0x1);
+else
+pc.set(npc_addr);
 return pc;
 }


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/33234
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I3ced4c259620763acde440bb876c9a2a8e43515c
Gerrit-Change-Number: 33234
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Jiang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix disassembling of jalr

2020-08-21 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/33155 )



Change subject: arch-riscv: Fix disassembling of jalr
..

arch-riscv: Fix disassembling of jalr

The 'jalr' instruction of 'format Jump' should have an immediate as
offset. This patch fixes the problem.

Note that this is not valid for the other two instructions of the
same format: 'c.jr' and 'c.jalr'.

Change-Id: Ia656c2e8bfafd243bfec221ac291190a84684929
Signed-off-by: Ian Jiang 
---
M src/arch/riscv/isa/formats/standard.isa
1 file changed, 4 insertions(+), 1 deletion(-)



diff --git a/src/arch/riscv/isa/formats/standard.isa  
b/src/arch/riscv/isa/formats/standard.isa

index 11c06aa..a0460b5 100644
--- a/src/arch/riscv/isa/formats/standard.isa
+++ b/src/arch/riscv/isa/formats/standard.isa
@@ -286,7 +286,10 @@
 std::vector indices = {%(regs)s};
 std::stringstream ss;
 ss << mnemonic << ' ';
-ss << registerName(indices[0]);
+if ((machInst & 0x3) == 0x3)
+ss << imm << '(' << registerName(indices[0]) << ')';
+else
+ss << registerName(indices[0]);
 return ss.str();
 }
 }};

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/33155
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ia656c2e8bfafd243bfec221ac291190a84684929
Gerrit-Change-Number: 33155
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Jiang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Add float registers in copyRegs

2020-08-20 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32934 )


Change subject: arch-riscv: Add float registers in copyRegs
..

arch-riscv: Add float registers in copyRegs

The origin copyRegs() does not include float registers.
This patch fixes the problem.

Change-Id: If4ad04b1eda6035486197879ff3e04ff32dd87bb
Signed-off-by: Ian Jiang 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32934
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/arch/riscv/utility.hh
1 file changed, 4 insertions(+), 0 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/riscv/utility.hh b/src/arch/riscv/utility.hh
index 32eaff6..d4cf221 100644
--- a/src/arch/riscv/utility.hh
+++ b/src/arch/riscv/utility.hh
@@ -127,6 +127,10 @@
 for (int i = 0; i < NumIntRegs; ++i)
 dest->setIntReg(i, src->readIntReg(i));

+// Second loop through the float registers.
+for (int i = 0; i < NumFloatRegs; ++i)
+dest->setFloatReg(i, src->readFloatReg(i));
+
 // Lastly copy PC/NPC
 dest->pcState(src->pcState());
 }

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32934
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: If4ad04b1eda6035486197879ff3e04ff32dd87bb
Gerrit-Change-Number: 32934
Gerrit-PatchSet: 2
Gerrit-Owner: Ian Jiang 
Gerrit-Reviewer: Alec Roelke 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Ian Jiang 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Add float registers in copyRegs

2020-08-19 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32934 )



Change subject: arch-riscv: Add float registers in copyRegs
..

arch-riscv: Add float registers in copyRegs

The origin copyRegs() does not include float registers.
This patch fixes the problem.

Change-Id: If4ad04b1eda6035486197879ff3e04ff32dd87bb
Signed-off-by: Ian Jiang 
---
M src/arch/riscv/utility.hh
1 file changed, 4 insertions(+), 0 deletions(-)



diff --git a/src/arch/riscv/utility.hh b/src/arch/riscv/utility.hh
index 32eaff6..d4cf221 100644
--- a/src/arch/riscv/utility.hh
+++ b/src/arch/riscv/utility.hh
@@ -127,6 +127,10 @@
 for (int i = 0; i < NumIntRegs; ++i)
 dest->setIntReg(i, src->readIntReg(i));

+// Second loop through the float registers.
+for (int i = 0; i < NumFloatRegs; ++i)
+dest->setFloatReg(i, src->readFloatReg(i));
+
 // Lastly copy PC/NPC
 dest->pcState(src->pcState());
 }

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32934
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: If4ad04b1eda6035486197879ff3e04ff32dd87bb
Gerrit-Change-Number: 32934
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Jiang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix disassembling of CSR instructions

2020-08-18 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32814 )


Change subject: arch-riscv: Fix disassembling of CSR instructions
..

arch-riscv: Fix disassembling of CSR instructions

The correct formats of CSR instructions are:
- mnemonic rd, csr, rs1
- mnemonic rd, csr, uimm

This patch fixes the problem.

Change-Id: Ie34e67a523e3458b90c27ca19f8c660b4775da6f
Signed-off-by: Ian Jiang 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32814
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/arch/riscv/insts/standard.cc
1 file changed, 5 insertions(+), 3 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/riscv/insts/standard.cc  
b/src/arch/riscv/insts/standard.cc

index 9a9aa9d..35f9ccd 100644
--- a/src/arch/riscv/insts/standard.cc
+++ b/src/arch/riscv/insts/standard.cc
@@ -60,13 +60,15 @@
 {
 stringstream ss;
 ss << mnemonic << ' ' << registerName(_destRegIdx[0]) << ", ";
-if (_numSrcRegs > 0)
-ss << registerName(_srcRegIdx[0]) << ", ";
 auto data = CSRData.find(csr);
 if (data != CSRData.end())
 ss << data->second.name;
 else
-ss << "?? (" << hex << "0x" << csr << ")";
+ss << "?? (" << hex << "0x" << csr << dec << ")";
+if (_numSrcRegs > 0)
+ss << ", " << registerName(_srcRegIdx[0]);
+else
+ss << uimm;
 return ss.str();
 }


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32814
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ie34e67a523e3458b90c27ca19f8c660b4775da6f
Gerrit-Change-Number: 32814
Gerrit-PatchSet: 3
Gerrit-Owner: Ian Jiang 
Gerrit-Reviewer: Alec Roelke 
Gerrit-Reviewer: Ian Jiang 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix disassembling of CSR instructions

2020-08-18 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32814 )



Change subject: arch-riscv: Fix disassembling of CSR instructions
..

arch-riscv: Fix disassembling of CSR instructions

The correct formats of CSR instructions are:
- mnemonic rd, csr, rs1
- mnemonic rd, csr, uimm

This patch fixes the problem.

Change-Id: Ie34e67a523e3458b90c27ca19f8c660b4775da6f
Signed-off-by: Ian Jiang 
---
M src/arch/riscv/insts/standard.cc
1 file changed, 4 insertions(+), 2 deletions(-)



diff --git a/src/arch/riscv/insts/standard.cc  
b/src/arch/riscv/insts/standard.cc

index e6c2b67..42e0129 100644
--- a/src/arch/riscv/insts/standard.cc
+++ b/src/arch/riscv/insts/standard.cc
@@ -60,13 +60,15 @@
 {
 stringstream ss;
 ss << mnemonic << ' ' << registerName(_destRegIdx[0]) << ", ";
-if (_numSrcRegs > 0)
-ss << registerName(_srcRegIdx[0]) << ", ";
 auto data = CSRData.find(csr);
 if (data != CSRData.end())
 ss << data->second.name;
 else
 ss << "?? (" << hex << "0x" << csr << ")";
+if (_numSrcRegs > 0)
+ss << ", " << registerName(_srcRegIdx[0]);
+else
+ss << uimm;
 return ss.str();
 }


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32814
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ie34e67a523e3458b90c27ca19f8c660b4775da6f
Gerrit-Change-Number: 32814
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Jiang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix disassembling of all register instructions

2020-08-17 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32694 )


Change subject: arch-riscv: Fix disassembling of all register instructions
..

arch-riscv: Fix disassembling of all register instructions

How many Rs to output in disassembling register instructions? It does
not depend on wheather the register index is zero, but on the count
of source registers.

This patch fixes the problem.

Change-Id: I9a770722003bc6f4a259589a7471a506494d4c86
Signed-off-by: Ian Jiang 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32694
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/arch/riscv/insts/standard.cc
1 file changed, 2 insertions(+), 2 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/riscv/insts/standard.cc  
b/src/arch/riscv/insts/standard.cc

index e6c2b67..9a9aa9d 100644
--- a/src/arch/riscv/insts/standard.cc
+++ b/src/arch/riscv/insts/standard.cc
@@ -48,9 +48,9 @@
 stringstream ss;
 ss << mnemonic << ' ' << registerName(_destRegIdx[0]) << ", " <<
 registerName(_srcRegIdx[0]);
-if (_srcRegIdx[1].index() != 0)
+if (_numSrcRegs >= 2)
 ss << ", " << registerName(_srcRegIdx[1]);
-if (_srcRegIdx[2].index() != 0)
+if (_numSrcRegs >= 3)
 ss << ", " << registerName(_srcRegIdx[2]);
 return ss.str();
 }

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32694
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I9a770722003bc6f4a259589a7471a506494d4c86
Gerrit-Change-Number: 32694
Gerrit-PatchSet: 2
Gerrit-Owner: Ian Jiang 
Gerrit-Reviewer: Alec Roelke 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Ian Jiang 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix disassembling of all register instructions

2020-08-13 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32694 )



Change subject: arch-riscv: Fix disassembling of all register instructions
..

arch-riscv: Fix disassembling of all register instructions

How many Rs to output in disassembling register instructions? It does
not depend on wheather the register index is zero, but on the count
of source registers.

This patch fixes the problem.

Change-Id: I9a770722003bc6f4a259589a7471a506494d4c86
Signed-off-by: Ian Jiang 
---
M src/arch/riscv/insts/standard.cc
1 file changed, 2 insertions(+), 2 deletions(-)



diff --git a/src/arch/riscv/insts/standard.cc  
b/src/arch/riscv/insts/standard.cc

index e6c2b67..9a9aa9d 100644
--- a/src/arch/riscv/insts/standard.cc
+++ b/src/arch/riscv/insts/standard.cc
@@ -48,9 +48,9 @@
 stringstream ss;
 ss << mnemonic << ' ' << registerName(_destRegIdx[0]) << ", " <<
 registerName(_srcRegIdx[0]);
-if (_srcRegIdx[1].index() != 0)
+if (_numSrcRegs >= 2)
 ss << ", " << registerName(_srcRegIdx[1]);
-if (_srcRegIdx[2].index() != 0)
+if (_numSrcRegs >= 3)
 ss << ", " << registerName(_srcRegIdx[2]);
 return ss.str();
 }

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32694
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I9a770722003bc6f4a259589a7471a506494d4c86
Gerrit-Change-Number: 32694
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Jiang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: sim: Add checkpoint parameters for VMA list

2020-08-06 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/31875 )


Change subject: sim: Add checkpoint parameters for VMA list
..

sim: Add checkpoint parameters for VMA list

Add checkpoint parameters (together with corresponding serialization
and unserialization) for VMA list of class MemState into a separate
section named 'vmalist'.

Without these VMA list parameters, a page table fault will occur when
running with --restore-simpoint-checkpoint, because of an empty VMA
list. For example:

  $ ./build/RISCV/gem5.debug --debug-flags=Exec configs/example/se.py \
  -c tests/test-progs/hello/bin/riscv/linux/hello \
  --cpu-type=NonCachingSimpleCPU --restore-simpoint-checkpoint \
  --checkpoint-dir m5out/ -r 2
  ...
  2404000: system.switch_cpus: T0 : @_int_malloc+3392: sd a5, 8(a0) \
  : MemWrite :  D=0x0001ed21 A=0x862e8
  panic: Page table fault when accessing virtual address 0x862e8
  ...

Example checkpoint output:

  [system.cpu.workload.vmalist]
  size=3

  [system.cpu.workload.vmalist.Vma0]
  name=stack
  addrRangeStart=...
  addrRangeEnd=...

  [system.cpu.workload.vmalist.Vma1]
  name=heap
  addrRangeStart=...
  addrRangeEnd=...

  [system.cpu.workload.vmalist.Vma2]
  ...

Change-Id: Ib2fa7ad2c34fe667ce95bc4b10a1affcf60d9c1f
Signed-off-by: Ian Jiang 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31875
Reviewed-by: Daniel Carvalho 
Reviewed-by: Bobby R. Bruce 
Reviewed-by: Alexandru Duțu 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/sim/mem_state.hh
1 file changed, 25 insertions(+), 0 deletions(-)

Approvals:
  Alexandru Duțu: Looks good to me, approved
  Daniel Carvalho: Looks good to me, but someone else must approve
  Bobby R. Bruce: Looks good to me, approved
  Jason Lowe-Power: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/sim/mem_state.hh b/src/sim/mem_state.hh
index 1ca80da..c052389 100644
--- a/src/sim/mem_state.hh
+++ b/src/sim/mem_state.hh
@@ -190,7 +190,18 @@
 paramOut(cp, "stackMin", _stackMin);
 paramOut(cp, "nextThreadStackBase", _nextThreadStackBase);
 paramOut(cp, "mmapEnd", _mmapEnd);
+
+ScopedCheckpointSection sec(cp, "vmalist");
+paramOut(cp, "size", _vmaList.size());
+int count = 0;
+for (auto vma : _vmaList) {
+ScopedCheckpointSection sec(cp, csprintf("Vma%d", count++));
+paramOut(cp, "name", vma.getName());
+paramOut(cp, "addrRangeStart", vma.start());
+paramOut(cp, "addrRangeEnd", vma.end());
+}
 }
+
 void
 unserialize(CheckpointIn ) override
 {
@@ -201,6 +212,20 @@
 paramIn(cp, "stackMin", _stackMin);
 paramIn(cp, "nextThreadStackBase", _nextThreadStackBase);
 paramIn(cp, "mmapEnd", _mmapEnd);
+
+int count;
+ScopedCheckpointSection sec(cp, "vmalist");
+paramIn(cp, "size", count);
+for (int i = 0; i < count; ++i) {
+ScopedCheckpointSection sec(cp, csprintf("Vma%d", i));
+std::string name;
+Addr start;
+Addr end;
+paramIn(cp, "name", name);
+paramIn(cp, "addrRangeStart", start);
+paramIn(cp, "addrRangeEnd", end);
+_vmaList.emplace_back(AddrRange(start, end), _pageBytes, name);
+}
 }

 /**

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/31875
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ib2fa7ad2c34fe667ce95bc4b10a1affcf60d9c1f
Gerrit-Change-Number: 31875
Gerrit-PatchSet: 3
Gerrit-Owner: Ian Jiang 
Gerrit-Reviewer: Alexandru Duțu 
Gerrit-Reviewer: Bobby R. Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Ian Jiang 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix disassembling of float register instructions

2020-07-31 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32054 )


Change subject: arch-riscv: Fix disassembling of float register instructions
..

arch-riscv: Fix disassembling of float register instructions

In disassembling of float register instructions, Gem5 always gives 2
source registers rs1 and rs2. However, this is not correct for Mul-Add
instructions which have three rs1, rs2, and rs3, and for Move, Convert
instructions which have only rs1.

For example: (Gem5  output  vs Expected)
- fmadd.d fa0,fa0,fa4 vs  fmadd.d fa0,fa0,fa4,fa5
- fcvt.d.l fa4,a6,zero  vs  fcvt.d.l fa4,a6

This patch fixes the problem.

Change-Id: I02d840eab602ac4a9782911b3cdff2935dfe5e68
Signed-off-by: Ian Jiang 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32054
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/arch/riscv/insts/standard.cc
1 file changed, 5 insertions(+), 2 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/riscv/insts/standard.cc  
b/src/arch/riscv/insts/standard.cc

index bb621ae..e6c2b67 100644
--- a/src/arch/riscv/insts/standard.cc
+++ b/src/arch/riscv/insts/standard.cc
@@ -47,8 +47,11 @@
 {
 stringstream ss;
 ss << mnemonic << ' ' << registerName(_destRegIdx[0]) << ", " <<
-registerName(_srcRegIdx[0]) << ", " <<
-registerName(_srcRegIdx[1]);
+registerName(_srcRegIdx[0]);
+if (_srcRegIdx[1].index() != 0)
+ss << ", " << registerName(_srcRegIdx[1]);
+if (_srcRegIdx[2].index() != 0)
+ss << ", " << registerName(_srcRegIdx[2]);
 return ss.str();
 }


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32054
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I02d840eab602ac4a9782911b3cdff2935dfe5e68
Gerrit-Change-Number: 32054
Gerrit-PatchSet: 2
Gerrit-Owner: Ian Jiang 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Ian Jiang 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-riscv: Fix disassembling of float register instructions

2020-07-31 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32054 )



Change subject: arch-riscv: Fix disassembling of float register instructions
..

arch-riscv: Fix disassembling of float register instructions

In disassembling of float register instructions, Gem5 always gives 2
source registers rs1 and rs2. However, this is not correct for Mul-Add
instructions which have three rs1, rs2, and rs3, and for Move, Convert
instructions which have only rs1.

For example: (Gem5  output  vs Expected)
- fmadd.d fa0,fa0,fa4 vs  fmadd.d fa0,fa0,fa4,fa5
- fcvt.d.l fa4,a6,zero  vs  fcvt.d.l fa4,a6

This patch fixes the problem.

Change-Id: I02d840eab602ac4a9782911b3cdff2935dfe5e68
Signed-off-by: Ian Jiang 
---
M src/arch/riscv/insts/standard.cc
1 file changed, 5 insertions(+), 2 deletions(-)



diff --git a/src/arch/riscv/insts/standard.cc  
b/src/arch/riscv/insts/standard.cc

index bb621ae..e6c2b67 100644
--- a/src/arch/riscv/insts/standard.cc
+++ b/src/arch/riscv/insts/standard.cc
@@ -47,8 +47,11 @@
 {
 stringstream ss;
 ss << mnemonic << ' ' << registerName(_destRegIdx[0]) << ", " <<
-registerName(_srcRegIdx[0]) << ", " <<
-registerName(_srcRegIdx[1]);
+registerName(_srcRegIdx[0]);
+if (_srcRegIdx[1].index() != 0)
+ss << ", " << registerName(_srcRegIdx[1]);
+if (_srcRegIdx[2].index() != 0)
+ss << ", " << registerName(_srcRegIdx[2]);
 return ss.str();
 }


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32054
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I02d840eab602ac4a9782911b3cdff2935dfe5e68
Gerrit-Change-Number: 32054
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Jiang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: sim: Move checkpoint parameters for ptable into seperate section

2020-07-30 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/31874 )


Change subject: sim: Move checkpoint parameters for ptable into seperate  
section

..

sim: Move checkpoint parameters for ptable into seperate section

In checkpoint output files, the parameters for page table including
size and entries are organized not very clearly. For example:

  [system.cpu.workload]
  ...
  ptable.size=...

  [system.cpu.workload.Entry0]
  vaddr=...
  paddr=...
  flags=...

  [system.cpu.workload.Entry1]
  ...

This commit moves these parameters into a separate section named
'ptable'. For example:

  [system.cpu.workload.ptable]
  size=...

  [system.cpu.workload.ptable.Entry0]
  vaddr=...
  paddr=...
  flags=...

  [system.cpu.workload.ptable.Entry1]
  ...

Change-Id: Iaa4129b3f4f090e8c3651bde90524abba0999c7f
Signed-off-by: Ian Jiang 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31874
Reviewed-by: Daniel Carvalho 
Reviewed-by: Gabe Black 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M src/mem/page_table.cc
1 file changed, 4 insertions(+), 2 deletions(-)

Approvals:
  Gabe Black: Looks good to me, approved; Looks good to me, approved
  Daniel Carvalho: Looks good to me, but someone else must approve
  kokoro: Regressions pass



diff --git a/src/mem/page_table.cc b/src/mem/page_table.cc
index 400500b..601b9c5 100644
--- a/src/mem/page_table.cc
+++ b/src/mem/page_table.cc
@@ -168,7 +168,8 @@
 void
 EmulationPageTable::serialize(CheckpointOut ) const
 {
-paramOut(cp, "ptable.size", pTable.size());
+ScopedCheckpointSection sec(cp, "ptable");
+paramOut(cp, "size", pTable.size());

 PTable::size_type count = 0;
 for (auto  : pTable) {
@@ -185,7 +186,8 @@
 EmulationPageTable::unserialize(CheckpointIn )
 {
 int count;
-paramIn(cp, "ptable.size", count);
+ScopedCheckpointSection sec(cp, "ptable");
+paramIn(cp, "size", count);

 for (int i = 0; i < count; ++i) {
 ScopedCheckpointSection sec(cp, csprintf("Entry%d", i));

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/31874
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Iaa4129b3f4f090e8c3651bde90524abba0999c7f
Gerrit-Change-Number: 31874
Gerrit-PatchSet: 3
Gerrit-Owner: Ian Jiang 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Ian Jiang 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: sim: Add checkpoint parameters for VMA list

2020-07-28 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/31875 )



Change subject: sim: Add checkpoint parameters for VMA list
..

sim: Add checkpoint parameters for VMA list

Add checkpoint parameters (together with corresponding serialization
and unserialization) for VMA list of class MemState into a separate
section named 'vmalist'.

Without these VMA list parameters, a page table fault will occur when
running with --restore-simpoint-checkpoint, because of an empty VMA
list. For example:

  $ ./build/RISCV/gem5.debug --debug-flags=Exec configs/example/se.py \
  -c tests/test-progs/hello/bin/riscv/linux/hello \
  --cpu-type=NonCachingSimpleCPU --restore-simpoint-checkpoint \
  --checkpoint-dir m5out/ -r 2
  ...
  2404000: system.switch_cpus: T0 : @_int_malloc+3392: sd a5, 8(a0) \
  : MemWrite :  D=0x0001ed21 A=0x862e8
  panic: Page table fault when accessing virtual address 0x862e8
  ...

Example checkpoint output:

  [system.cpu.workload.vmalist]
  size=3

  [system.cpu.workload.vmalist.Vma0]
  vmaName=stack
  addrRangeStart=...
  addrRangeEnd=...

  [system.cpu.workload.vmalist.Vma1]
  vmaName=heap
  addrRangeStart=...
  addrRangeEnd=...

  [system.cpu.workload.vmalist.Vma2]
  ...

Change-Id: Ib2fa7ad2c34fe667ce95bc4b10a1affcf60d9c1f
Signed-off-by: Ian Jiang 
---
M src/sim/mem_state.hh
1 file changed, 25 insertions(+), 0 deletions(-)



diff --git a/src/sim/mem_state.hh b/src/sim/mem_state.hh
index 1ca80da..bb4fab3 100644
--- a/src/sim/mem_state.hh
+++ b/src/sim/mem_state.hh
@@ -190,7 +190,18 @@
 paramOut(cp, "stackMin", _stackMin);
 paramOut(cp, "nextThreadStackBase", _nextThreadStackBase);
 paramOut(cp, "mmapEnd", _mmapEnd);
+
+ScopedCheckpointSection sec(cp, csprintf("vmalist"));
+paramOut(cp, "size", _vmaList.size());
+int count = 0;
+for (auto vma : _vmaList) {
+ScopedCheckpointSection sec(cp, csprintf("Vma%d", count++));
+paramOut(cp, "vmaName", vma.getName());
+paramOut(cp, "addrRangeStart", vma.start());
+paramOut(cp, "addrRangeEnd", vma.end());
+}
 }
+
 void
 unserialize(CheckpointIn ) override
 {
@@ -201,6 +212,20 @@
 paramIn(cp, "stackMin", _stackMin);
 paramIn(cp, "nextThreadStackBase", _nextThreadStackBase);
 paramIn(cp, "mmapEnd", _mmapEnd);
+
+int count;
+ScopedCheckpointSection sec(cp, csprintf("vmalist"));
+paramIn(cp, "size", count);
+for (int i = 0; i < count; ++i) {
+ScopedCheckpointSection sec(cp, csprintf("Vma%d", i));
+std::string name;
+Addr start;
+Addr end;
+paramIn(cp, "vmaName", name);
+paramIn(cp, "addrRangeStart", start);
+paramIn(cp, "addrRangeEnd", end);
+_vmaList.emplace_back(AddrRange(start, end), _pageBytes, name);
+}
 }

 /**

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/31875
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ib2fa7ad2c34fe667ce95bc4b10a1affcf60d9c1f
Gerrit-Change-Number: 31875
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Jiang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: sim: Move checkpoint parameters for ptable into seperate section

2020-07-28 Thread Ian Jiang (Gerrit) via gem5-dev
Ian Jiang has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/31874 )



Change subject: sim: Move checkpoint parameters for ptable into seperate  
section

..

sim: Move checkpoint parameters for ptable into seperate section

In checkpoint output files, the parameters for page table including
size and entries are organized not very clearly. For example:

  [system.cpu.workload]
  ...
  ptable.size=...

  [system.cpu.workload.Entry0]
  vaddr=...
  paddr=...
  flags=...

  [system.cpu.workload.Entry1]
  ...

This commit moves these parameters into a separate section named
'ptable'. For example:

  [system.cpu.workload.ptable]
  size=...

  [system.cpu.workload.ptable.Entry0]
  vaddr=...
  paddr=...
  flags=...

  [system.cpu.workload.ptable.Entry1]
  ...

Change-Id: Iaa4129b3f4f090e8c3651bde90524abba0999c7f
Signed-off-by: Ian Jiang 
---
M src/mem/page_table.cc
1 file changed, 4 insertions(+), 2 deletions(-)



diff --git a/src/mem/page_table.cc b/src/mem/page_table.cc
index 400500b..20faf9b 100644
--- a/src/mem/page_table.cc
+++ b/src/mem/page_table.cc
@@ -168,7 +168,8 @@
 void
 EmulationPageTable::serialize(CheckpointOut ) const
 {
-paramOut(cp, "ptable.size", pTable.size());
+ScopedCheckpointSection sec(cp, csprintf("ptable"));
+paramOut(cp, "size", pTable.size());

 PTable::size_type count = 0;
 for (auto  : pTable) {
@@ -185,7 +186,8 @@
 EmulationPageTable::unserialize(CheckpointIn )
 {
 int count;
-paramIn(cp, "ptable.size", count);
+ScopedCheckpointSection sec(cp, csprintf("ptable"));
+paramIn(cp, "size", count);

 for (int i = 0; i < count; ++i) {
 ScopedCheckpointSection sec(cp, csprintf("Entry%d", i));

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/31874
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Iaa4129b3f4f090e8c3651bde90524abba0999c7f
Gerrit-Change-Number: 31874
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Jiang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s