projects
/
soc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
75793a7
)
Begin adding PC to caller.py
author
Michael Nolan
<mtnolan2640@gmail.com>
Mon, 6 Apr 2020 13:15:08 +0000
(09:15 -0400)
committer
Michael Nolan
<mtnolan2640@gmail.com>
Mon, 6 Apr 2020 13:15:08 +0000
(09:15 -0400)
src/soc/decoder/isa/caller.py
patch
|
blob
|
history
diff --git
a/src/soc/decoder/isa/caller.py
b/src/soc/decoder/isa/caller.py
index 39d99d5e4fbe4d6fec12999e48e0514e6835bdfe..245fa2f8a10a7ecfef7c020a3458c881f2c12323 100644
(file)
--- a/
src/soc/decoder/isa/caller.py
+++ b/
src/soc/decoder/isa/caller.py
@@
-107,6
+107,17
@@
class GPR(dict):
s = ' '.join(s)
print("reg", "%2d" % i, s)
s = ' '.join(s)
print("reg", "%2d" % i, s)
+class PC:
+ def __init__(self, pc_init=0):
+ self.CIA = SelectableInt(pc_init, 64)
+ self.NIA = self.CIA + SelectableInt(4, 64)
+
+ def update(self, namespace):
+ self.CIA = self.NIA
+ self.NIA = self.CIA + SelectableInt(4, 64)
+ namespace['CIA'] = self.CIA
+ namespace['NIA'] = self.NIA
+
class ISACaller:
# decoder2 - an instance of power_decoder2
class ISACaller:
# decoder2 - an instance of power_decoder2
@@
-114,10
+125,14
@@
class ISACaller:
def __init__(self, decoder2, regfile):
self.gpr = GPR(decoder2, regfile)
self.mem = Mem()
def __init__(self, decoder2, regfile):
self.gpr = GPR(decoder2, regfile)
self.mem = Mem()
+ self.pc = PC()
self.namespace = {'GPR': self.gpr,
'MEM': self.mem,
self.namespace = {'GPR': self.gpr,
'MEM': self.mem,
- 'memassign': self.memassign
+ 'memassign': self.memassign,
+ 'NIA': self.pc.NIA,
+ 'CIA': self.pc.CIA,
}
}
+
self.decoder = decoder2
def memassign(self, ea, sz, val):
self.decoder = decoder2
def memassign(self, ea, sz, val):
@@
-165,6
+180,7
@@
class ISACaller:
if output.bits > 64:
output = SelectableInt(output.value, 64)
self.gpr[regnum] = output
if output.bits > 64:
output = SelectableInt(output.value, 64)
self.gpr[regnum] = output
+ self.pc.update(self.namespace)
def inject():
def inject():