vec = [9, 8, 3, 4]
res = []
+ cr_res = []
# store GPRs
for i, x in enumerate(vec):
gprs[i] = x
for i in range(4):
val = sim.gpr(i).value
res.append(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):
- 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
+ # VLi=0 - test comes FIRST!
+ expected[i] = result
# 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])
vec = [9, 8, 3, 4]
res = []
+ cr_res = []
# store GPRs
for i, x in enumerate(vec):
gprs[i] = x
for i in range(4):
val = sim.gpr(i).value
res.append(val)
+ cr_res.append(0)
print("i", i, val)
# 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
+ # 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])
expected = deepcopy(vec)
for i in range(4):
result = expected[i] - gprs[8]
- expected[i] = result
if result == 0:
break
+ # VLi=0 - test comes FIRST!
+ expected[i] = result
for i, v in enumerate(res):
self.assertEqual(v, expected[i])
self.assertEqual(sim.svstate.dststep, 0)
def test_sv_addi_ffirst_vli(self):
+ """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)
# 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