projects
/
openpower-isa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
have to now add LD/ST-update instructions to list of explicit-allowed
[openpower-isa.git]
/
src
/
openpower
/
decoder
/
isa
/
test_caller_svp64_dd_ffirst.py
diff --git
a/src/openpower/decoder/isa/test_caller_svp64_dd_ffirst.py
b/src/openpower/decoder/isa/test_caller_svp64_dd_ffirst.py
index af5fb4702feea7043246038267bc3d30c2e2158b..c9e98e48478ececf463979f730c11a7765315664 100644
(file)
--- a/
src/openpower/decoder/isa/test_caller_svp64_dd_ffirst.py
+++ b/
src/openpower/decoder/isa/test_caller_svp64_dd_ffirst.py
@@
-1,22
+1,12
@@
-from nmigen import Module, Signal
-from nmigen.sim import Simulator, Delay, Settle
-from nmutil.formaltest import FHDLTestCase
import unittest
import unittest
-from
openpower.decoder.isa.caller import ISACaller
-from openpower.decoder.power_decoder import (create_pdecode)
-from
openpower.decoder.power_decoder2 import (PowerDecode2)
-from openpower.
simulator.program import Program
-from openpower.decoder.isa.
caller import ISACaller, SVP64State
+from
copy import deepcopy
+
+from
nmutil.formaltest import FHDLTestCase
+from openpower.
decoder.isa.caller import SVP64State
+from openpower.decoder.isa.
test_caller import run_tst
from openpower.decoder.selectable_int import SelectableInt
from openpower.decoder.selectable_int import SelectableInt
-from openpower.decoder.orderedset import OrderedSet
-from openpower.decoder.isa.all import ISA
-from openpower.decoder.isa.test_caller import Register, run_tst
+from openpower.simulator.program import Program
from openpower.sv.trans.svp64 import SVP64Asm
from openpower.sv.trans.svp64 import SVP64Asm
-from openpower.consts import SVP64CROffs
-from copy import deepcopy
-from openpower.decoder.helpers import fp64toselectable
-from functools import reduce
-import operator
class DecoderTestCase(FHDLTestCase):
class DecoderTestCase(FHDLTestCase):
@@
-26,42
+16,54
@@
class DecoderTestCase(FHDLTestCase):
self.assertEqual(sim.gpr(i), SelectableInt(expected[i], 64))
def test_sv_addi_ffirst_le(self):
self.assertEqual(sim.gpr(i), SelectableInt(expected[i], 64))
def test_sv_addi_ffirst_le(self):
- lst = SVP64Asm([
"sv.subf./ff=le *0,8,*0"
+ lst = SVP64Asm(["sv.subf./ff=le *0,8,*0"
])
lst = list(lst)
# SVSTATE
svstate = SVP64State()
])
lst = list(lst)
# SVSTATE
svstate = SVP64State()
- svstate.vl = 4 # VL
- svstate.maxvl = 4 # MAXVL
- print
("SVSTATE", bin(svstate.asint()))
+ svstate.vl = 4
# VL
+ svstate.maxvl = 4
# MAXVL
+ print("SVSTATE", bin(svstate.asint()))
gprs = [0] * 64
gprs[8] = 3
vec = [9, 8, 3, 4]
res = []
gprs = [0] * 64
gprs[8] = 3
vec = [9, 8, 3, 4]
res = []
+ cr_res = []
# store GPRs
for i, x in enumerate(vec):
gprs[i] = x
with Program(lst, bigendian=False) as program:
sim = self.run_tst_program(program, initial_regs=gprs,
# store GPRs
for i, x in enumerate(vec):
gprs[i] = x
with Program(lst, bigendian=False) as program:
sim = self.run_tst_program(program, initial_regs=gprs,
-
svstate=svstate)
+ svstate=svstate)
for i in range(4):
val = sim.gpr(i).value
res.append(val)
for i in range(4):
val = sim.gpr(i).value
res.append(val)
- print ("i", i, val)
+ cr_res.append(0)
+ print("i", i, val)
# confirm that the results are as expected
expected = deepcopy(vec)
expected_vl = 0
for i in range(4):
# confirm that the results are as expected
expected = deepcopy(vec)
expected_vl = 0
for i in range(4):
- result = expected[i] - gprs[8]
- expected[i] = result
+ # calculate expected result and expected CR field
+ result = vec[i] - gprs[8]
+ crf = ((result==0)<<1) | ((result > 0)<<2) | ((result < 0) << 3)
+ cr_res[i] = crf
if result <= 0:
break
if result <= 0:
break
+ # VLi=0 - test comes FIRST!
+ expected[i] = result
# only write out if successful
expected_vl += 1
# only write out if successful
expected_vl += 1
+
+ for i, v in enumerate(cr_res):
+ crf = sim.crl[i].get_range().value
+ print ("crf", i, res[i], bin(crf), bin(v))
+ self.assertEqual(crf, v)
+
for i, v in enumerate(res):
self.assertEqual(v, expected[i])
for i, v in enumerate(res):
self.assertEqual(v, expected[i])
@@
-71,39
+73,49
@@
class DecoderTestCase(FHDLTestCase):
self.assertEqual(sim.svstate.dststep, 0)
def test_sv_addi_ffirst(self):
self.assertEqual(sim.svstate.dststep, 0)
def test_sv_addi_ffirst(self):
- lst = SVP64Asm([
"sv.subf./ff=eq *0,8,*0"
+ lst = SVP64Asm(["sv.subf./ff=eq *0,8,*0"
])
lst = list(lst)
# SVSTATE
svstate = SVP64State()
])
lst = list(lst)
# SVSTATE
svstate = SVP64State()
- svstate.vl = 4 # VL
- svstate.maxvl = 4 # MAXVL
- print
("SVSTATE", bin(svstate.asint()))
+ svstate.vl = 4
# VL
+ svstate.maxvl = 4
# MAXVL
+ print("SVSTATE", bin(svstate.asint()))
gprs = [0] * 64
gprs[8] = 3
vec = [9, 8, 3, 4]
res = []
gprs = [0] * 64
gprs[8] = 3
vec = [9, 8, 3, 4]
res = []
+ cr_res = []
# store GPRs
for i, x in enumerate(vec):
gprs[i] = x
with Program(lst, bigendian=False) as program:
sim = self.run_tst_program(program, initial_regs=gprs,
# store GPRs
for i, x in enumerate(vec):
gprs[i] = x
with Program(lst, bigendian=False) as program:
sim = self.run_tst_program(program, initial_regs=gprs,
-
svstate=svstate)
+ svstate=svstate)
for i in range(4):
val = sim.gpr(i).value
res.append(val)
for i in range(4):
val = sim.gpr(i).value
res.append(val)
- print ("i", i, val)
+ cr_res.append(0)
+ print("i", i, val)
# confirm that the results are as expected
expected = deepcopy(vec)
for i in range(4):
# confirm that the results are as expected
expected = deepcopy(vec)
for i in range(4):
- result = expected[i] - gprs[8]
- expected[i] = result
+ result = vec[i] - gprs[8]
+ crf = ((result==0)<<1) | ((result > 0)<<2) | ((result < 0) << 3)
+ cr_res[i] = crf
if result == 0:
break
if result == 0:
break
+ # VLi=0 - test comes FIRST!
+ expected[i] = result
+ for i, v in enumerate(cr_res):
+ crf = sim.crl[i].get_range().value
+ print ("crf", i, res[i], bin(crf), bin(v))
+ self.assertEqual(crf, v)
+
for i, v in enumerate(res):
self.assertEqual(v, expected[i])
for i, v in enumerate(res):
self.assertEqual(v, expected[i])
@@
-113,15
+125,15
@@
class DecoderTestCase(FHDLTestCase):
self.assertEqual(sim.svstate.dststep, 0)
def test_sv_addi_ffirst_rc1(self):
self.assertEqual(sim.svstate.dststep, 0)
def test_sv_addi_ffirst_rc1(self):
- lst = SVP64Asm([
"sv.subf/ff=RC1 *0,8,*0"
# RC1 auto-sets EQ (and Rc=1)
+ lst = SVP64Asm([
"sv.subf/ff=RC1 *0,8,*0"
# RC1 auto-sets EQ (and Rc=1)
])
lst = list(lst)
# SVSTATE
svstate = SVP64State()
])
lst = list(lst)
# SVSTATE
svstate = SVP64State()
- svstate.vl = 4 # VL
- svstate.maxvl = 4 # MAXVL
- print
("SVSTATE", bin(svstate.asint()))
+ svstate.vl = 4
# VL
+ svstate.maxvl = 4
# MAXVL
+ print("SVSTATE", bin(svstate.asint()))
gprs = [0] * 64
gprs[8] = 3
gprs = [0] * 64
gprs[8] = 3
@@
-134,18
+146,19
@@
class DecoderTestCase(FHDLTestCase):
with Program(lst, bigendian=False) as program:
sim = self.run_tst_program(program, initial_regs=gprs,
with Program(lst, bigendian=False) as program:
sim = self.run_tst_program(program, initial_regs=gprs,
-
svstate=svstate)
+ svstate=svstate)
for i in range(4):
val = sim.gpr(i).value
res.append(val)
for i in range(4):
val = sim.gpr(i).value
res.append(val)
- print
("i", i, val)
+ print("i", i, val)
# confirm that the results are as expected
expected = deepcopy(vec)
for i in range(4):
result = expected[i] - gprs[8]
# confirm that the results are as expected
expected = deepcopy(vec)
for i in range(4):
result = expected[i] - gprs[8]
- expected[i] = result
if result == 0:
break
if result == 0:
break
+ # VLi=0 - test comes FIRST!
+ expected[i] = result
for i, v in enumerate(res):
self.assertEqual(v, expected[i])
for i, v in enumerate(res):
self.assertEqual(v, expected[i])
@@
-155,15
+168,17
@@
class DecoderTestCase(FHDLTestCase):
self.assertEqual(sim.svstate.dststep, 0)
def test_sv_addi_ffirst_vli(self):
self.assertEqual(sim.svstate.dststep, 0)
def test_sv_addi_ffirst_vli(self):
- lst = SVP64Asm([ "sv.subf/ff=RC1/vli *0,8,*0"
+ """data-dependent fail-first with VLi=1, the test comes *after* write
+ """
+ lst = SVP64Asm(["sv.subf/ff=RC1/vli *0,8,*0"
])
lst = list(lst)
# SVSTATE
svstate = SVP64State()
])
lst = list(lst)
# SVSTATE
svstate = SVP64State()
- svstate.vl = 4 # VL
- svstate.maxvl = 4 # MAXVL
- print
("SVSTATE", bin(svstate.asint()))
+ svstate.vl = 4
# VL
+ svstate.maxvl = 4
# MAXVL
+ print("SVSTATE", bin(svstate.asint()))
gprs = [0] * 64
gprs[8] = 3
gprs = [0] * 64
gprs[8] = 3
@@
-176,14
+191,15
@@
class DecoderTestCase(FHDLTestCase):
with Program(lst, bigendian=False) as program:
sim = self.run_tst_program(program, initial_regs=gprs,
with Program(lst, bigendian=False) as program:
sim = self.run_tst_program(program, initial_regs=gprs,
-
svstate=svstate)
+ svstate=svstate)
for i in range(4):
val = sim.gpr(i).value
res.append(val)
for i in range(4):
val = sim.gpr(i).value
res.append(val)
- print
("i", i, val)
+ print("i", i, val)
# confirm that the results are as expected
expected = deepcopy(vec)
for i in range(4):
# confirm that the results are as expected
expected = deepcopy(vec)
for i in range(4):
+ # VLi=1 - test comes AFTER write!
expected[i] -= gprs[8]
if expected[i] == 0:
break
expected[i] -= gprs[8]
if expected[i] == 0:
break
@@
-196,18
+212,18
@@
class DecoderTestCase(FHDLTestCase):
self.assertEqual(sim.svstate.dststep, 0)
def run_tst_program(self, prog, initial_regs=None,
self.assertEqual(sim.svstate.dststep, 0)
def run_tst_program(self, prog, initial_regs=None,
-
svstate=None,
-
initial_mem=None,
-
initial_fprs=None):
+ svstate=None,
+ initial_mem=None,
+ initial_fprs=None):
if initial_regs is None:
initial_regs = [0] * 32
simulator = run_tst(prog, initial_regs, mem=initial_mem,
if initial_regs is None:
initial_regs = [0] * 32
simulator = run_tst(prog, initial_regs, mem=initial_mem,
-
initial_fprs=initial_fprs,
-
svstate=svstate)
+ initial_fprs=initial_fprs,
+ svstate=svstate)
- print
("GPRs")
+ print("GPRs")
simulator.gpr.dump()
simulator.gpr.dump()
- print
("FPRs")
+ print("FPRs")
simulator.fpr.dump()
return simulator
simulator.fpr.dump()
return simulator