isel takes a CR bit, not a CR field
authorAnton Blanchard <anton@linux.ibm.com>
Thu, 17 Oct 2019 06:16:09 +0000 (17:16 +1100)
committerAnton Blanchard <anton@ozlabs.org>
Thu, 17 Oct 2019 06:16:09 +0000 (17:16 +1100)
Fix a GHDL assert in isel.

Signed-off-by: Anton Blanchard <anton@linux.ibm.com>
execute1.vhdl

index 3fd6ebab5472b2928409bf8b5b63618723e4c3fc..de18a3754cf075ca542935a73ab12b7751f5d8ee 100644 (file)
@@ -110,6 +110,7 @@ begin
        variable result_with_carry : std_ulogic_vector(64 downto 0);
        variable result_en : std_ulogic;
        variable crnum : crnum_t;
+       variable crbit : integer range 0 to 31;
        variable scrnum : crnum_t;
        variable lo, hi : integer;
        variable sh, mb, me : std_ulogic_vector(5 downto 0);
@@ -238,8 +239,8 @@ begin
                result := e_in.read_data3;
                result_en := '1';
            when OP_ISEL =>
-               crnum := to_integer(unsigned(insn_bc(e_in.insn)));
-               if e_in.cr(31-crnum) = '1' then
+               crbit := to_integer(unsigned(insn_bc(e_in.insn)));
+               if e_in.cr(31-crbit) = '1' then
                    result := e_in.read_data1;
                else
                    result := e_in.read_data2;