From befa603c46b72128ba1ddb0b32a72dae9cb7b425 Mon Sep 17 00:00:00 2001 From: Jacob Lifshay Date: Thu, 8 Oct 2020 20:21:51 -0700 Subject: [PATCH] move pia_res_to_output to common test helpers --- src/soc/fu/div/test/helper.py | 32 +------------------------------- src/soc/fu/test/pia.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 31 deletions(-) create mode 100644 src/soc/fu/test/pia.py diff --git a/src/soc/fu/div/test/helper.py b/src/soc/fu/div/test/helper.py index a11b3494..5be75e64 100644 --- a/src/soc/fu/div/test/helper.py +++ b/src/soc/fu/div/test/helper.py @@ -14,6 +14,7 @@ from soc.decoder.isa.all import ISA from soc.config.endian import bigendian from soc.fu.test.common import ALUHelpers +from soc.fu.test.pia import pia_res_to_output from soc.fu.div.pipeline import DivBasePipe from soc.fu.div.pipe_data import DivPipeSpec @@ -37,37 +38,6 @@ def get_cu_inputs(dec2, sim): return res -def pia_res_to_output(pia_res): - retval = {} - if pia_res.rt is not None: - retval["o"] = pia_res.rt - if pia_res.cr0 is not None: - cr0 = pia_res.cr0 - v = 0 - if cr0.lt: - v |= 8 - if cr0.gt: - v |= 4 - if cr0.eq: - v |= 2 - if cr0.so: - v |= 1 - retval["cr_a"] = v - if pia_res.overflow is not None: - overflow = pia_res.overflow - v = 0 - if overflow.ov: - v |= 1 - if overflow.ov32: - v |= 2 - retval["xer_ov"] = v - retval["xer_so"] = overflow.so - else: - retval["xer_ov"] = 0 - retval["xer_so"] = 0 - return retval - - def set_alu_inputs(alu, dec2, sim): # TODO: see https://bugs.libre-soc.org/show_bug.cgi?id=305#c43 # detect the immediate here (with m.If(self.i.ctx.op.imm_data.imm_ok)) diff --git a/src/soc/fu/test/pia.py b/src/soc/fu/test/pia.py new file mode 100644 index 00000000..b51ab7db --- /dev/null +++ b/src/soc/fu/test/pia.py @@ -0,0 +1,33 @@ +import power_instruction_analyzer as pia + + +def pia_res_to_output(pia_res): + assert isinstance(pia_res, pia.InstructionOutput) + retval = {} + if pia_res.rt is not None: + retval["o"] = pia_res.rt + if pia_res.cr0 is not None: + cr0 = pia_res.cr0 + v = 0 + if cr0.lt: + v |= 8 + if cr0.gt: + v |= 4 + if cr0.eq: + v |= 2 + if cr0.so: + v |= 1 + retval["cr_a"] = v + if pia_res.overflow is not None: + overflow = pia_res.overflow + v = 0 + if overflow.ov: + v |= 1 + if overflow.ov32: + v |= 2 + retval["xer_ov"] = v + retval["xer_so"] = overflow.so + else: + retval["xer_ov"] = 0 + retval["xer_so"] = 0 + return retval -- 2.30.2