[ { "BlackBox" :
    { "name"      : "GHC.Prim.gtChar#"
     , "type"     : "gtChar# :: Char# -> Char# -> Int#"
    , "templateE" : "(~ARG[0] > ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.geChar#"
    , "type"      : "geChar# :: Char# -> Char# -> Int#"
    , "templateE" : "(~ARG[0] >= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.eqChar#"
    , "type"      : "eqChar# :: Char# -> Char# -> Int#"
    , "templateE" : "(~ARG[0] == ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.neChar#"
    , "type"      : "neChar# :: Char# -> Char# -> Int#"
    , "templateE" : "(~ARG[0] != ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.ltChar#"
    , "type"      : "ltChar# :: Char# -> Char# -> Int#"
    , "templateE" : "(~ARG[0] < ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.leChar#"
    , "type"      : "leChar# :: Char# -> Char# -> Int#"
    , "templateE" : "(~ARG[0] <= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.ord#"
    , "type"      : "ord :: Char# -> Int#"
    , "templateD" : "assign ~RESULT = $unsigned(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.+#"
    , "type"      : "(+#) :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] + ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.-#"
    , "type"      : "(-#) :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] - ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.*#"
    , "type"      : "(*#) :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] * ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.quotInt#"
    , "type"      : "quotInt# :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] / ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.remInt#"
    , "type"      : "remInt# :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] % ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.quotRemInt#"
    , "type"      : "quotRemInt# :: Int# -> Int# -> (#Int#, Int##)"
    , "templateD" :
"// quotRemInt begin
~SIGD[~GENSYM[quot_res][0]][0];
~SIGD[~GENSYM[rem_res][1]][0];
assign ~SYM[0] = ~ARG[0] / ~ARG[1];
assign ~SYM[1] = ~ARG[0] % ~ARG[1];

assign ~RESULT = {~SYM[0],~SYM[1]};
// quotRemInt end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.andI#"
    , "type"      : "andI# :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] & ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.orI#"
    , "type"      : "orI# :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] | ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.xorI#"
    , "type"      : "xorI# :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] ^ ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.notI#"
    , "type"      : "notI# :: Int# -> Int#"
    , "templateE" : "~ ~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.negateInt#"
    , "type"      : "negateInt# :: Int# -> Int#"
    , "templateE" : "-(~ARG[0])"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.>#"
     , "type"     : "(>#) :: Int# -> Int# -> Int#"
    , "templateE" : "(~ARG[0] > ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.>=#"
    , "type"      : "(>=#) :: Int# -> Int# -> Int#"
    , "templateE" : "(~ARG[0] >= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.==#"
    , "type"      : "(==) :: Int# -> Int# -> Int#"
    , "templateE" : "(~ARG[0] == ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim./=#"
    , "type"      : "(/=#) :: Int# -> Int# -> Int#"
    , "templateE" : "(~ARG[0] != ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.<#"
    , "type"      : "(<#) :: Int# -> Int# -> Int#"
    , "templateE" : "(~ARG[0] < ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.<=#"
    , "type"      : "(<=#) :: Int# -> Int# -> Int#"
    , "templateE" : "(~ARG[0] <= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.chr#"
    , "type"      : "ord :: Int# -> Char#"
    , "templateD" : "assign ~RESULT = $unsigned(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.int2Word#"
    , "type"      : "int2Word# :: Int# -> Word#"
    , "templateE" : "$unsigned(~ARG[0])"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.uncheckedIShiftL#"
    , "type"      : "uncheckedIShiftL# :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] <<< ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.uncheckedIShiftRA#"
    , "type"      : "uncheckedIShiftRA# :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] >>> ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.uncheckedIShiftRL#"
    , "type"      : "uncheckedIShiftRL# :: Int# -> Int# -> Int#"
    , "templateE" : "~ARG[0] >> ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.plusWord#"
    , "type"      : "plusWord# :: Word# -> Word# -> Word#"
    , "templateE" : "~ARG[0] + ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.minusWord#"
    , "type"      : "minusWord# :: Word# -> Word# -> Word#"
    , "templateE" : "~ARG[0] - ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.timesWord#"
    , "type"      : "timesWord# :: Word# -> Word# -> Word#"
    , "templateE" : "~ARG[0] * ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.quotWord#"
    , "type"      : "quotWord# :: Word# -> Word# -> Word#"
    , "templateE" : "~ARG[0] / ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.remWord#"
    , "type"      : "remWord# :: Word# -> Word# -> Word#"
    , "templateE" : "~ARG[0] % ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.quotRemWord#"
    , "type"      : "quotRemWord# :: Word# -> Word# -> (#Word#, Word##)"
    , "templateD" :
"// quotRemWord begin
~SIGD[~GENSYM[quot_res][0]][0];
~SIGD[~GENSYM[rem_res][1]][0];
assign ~SYM[0] = ~ARG[0] / ~ARG[1];
assign ~SYM[1] = ~ARG[0] % ~ARG[1];

assign ~RESULT = {~SYM[0],~SYM[1]};
// quotRemWord end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.and#"
    , "type"      : "and# :: Word# -> Word# -> Word#"
    , "templateE" : "~ARG[0] & ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.or#"
    , "type"      : "or# :: Word# -> Word# -> Word#"
    , "templateE" : "~ARG[0] | ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.xor#"
    , "type"      : "xor# :: Word# -> Word# -> Word#"
    , "templateE" : "~ARG[0] ^ ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.not#"
    , "type"      : "not# :: Word# -> Word#"
    , "templateE" : "~ ~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.uncheckedShiftL#"
    , "type"      : "uncheckedShiftL# :: Word# -> Int# -> Word#"
    , "templateE" : "~ARG[0] << ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.uncheckedShiftRL#"
    , "type"      : "uncheckedShiftRL# :: Word# -> Int# -> Word#"
    , "templateE" : "~ARG[0] >> ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.word2Int#"
    , "type"      : "int2Word# :: Word# -> Int#"
    , "templateE" : "$signed(~ARG[0])"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.gtWord#"
     , "type"     : "gtWord# :: Word# -> Word# -> Int#"
    , "templateE" : "(~ARG[0] > ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.geWord#"
    , "type"      : "geWord# :: Word# -> Word# -> Int#"
    , "templateE" : "(~ARG[0] >= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.eqWord#"
    , "type"      : "eqWord# :: Word# -> Word# -> Int#"
    , "templateE" : "(~ARG[0] == ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.neWord#"
    , "type"      : "neWord# :: Word# -> Word# -> Int#"
    , "templateE" : "(~ARG[0] != ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.ltWord#"
    , "type"      : "ltWord# :: Word# -> Word# -> Int#"
    , "templateE" : "(~ARG[0] < ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.leWord#"
    , "type"      : "leWord# :: Word# -> Word# -> Int#"
    , "templateE" : "(~ARG[0] <= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.popCnt8#"
    , "type"      : "popCnt8# :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "depth2Index"
      , "extension" : "inc"
      , "content" :
"// given a level and a depth, calculate the corresponding index into the
// intermediate array
function integer ~INCLUDENAME;
  input integer levels;
  input integer depth;

  ~INCLUDENAME = (2 ** levels) - (2 ** depth);
endfunction"
      }
    , "templateD" :
"// popCnt8 begin
localparam ~GENSYM[width][0] = 8;

// depth of the tree
localparam ~GENSYM[levels][2] = $clog2(~SYM[0]);

logic [~SYM[2]:0] ~GENSYM[intermediate][3] [0:(2*~SYM[0])-2];

// put input into the first half of the intermediate array
genvar ~GENSYM[i][4];
~GENERATE
for (~SYM[4] = 0; ~SYM[4] < ~SYM[0]; ~SYM[4]=~SYM[4]+1) begin : ~GENSYM[mk_array][11]
  assign ~SYM[3][~SYM[4]] = $unsigned(~ARG[0][~SYM[4]]);
end
~ENDGENERATE

// Create the tree of instantiated components
genvar ~GENSYM[d][6];
genvar ~GENSYM[i][7];
~GENERATE
if (~SYM[2] != 0) begin : ~GENSYM[make_tree][8]
  for (~SYM[6] = (~SYM[2] - 1); ~SYM[6] >= 0; ~SYM[6]=~SYM[6]-1) begin : ~GENSYM[tree_depth][9]
    for (~SYM[7] = 0; ~SYM[7] < (2**~SYM[6]); ~SYM[7] = ~SYM[7]+1) begin : ~GENSYM[tree_depth_loop][10]
      assign ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+1)+~SYM[7]] =
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])] +
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])+1];
    end
  end
end
~ENDGENERATE

// The last element of the intermediate array holds the result
assign ~RESULT = $unsigned(~SYM[3][(2*~SYM[0])-2]);
// popCnt8 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.popCnt16#"
    , "type"      : "popCnt16# :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "depth2Index"
      , "extension" : "inc"
      , "content" :
"// given a level and a depth, calculate the corresponding index into the
// intermediate array
function integer ~INCLUDENAME;
  input integer levels;
  input integer depth;

  ~INCLUDENAME = (2 ** levels) - (2 ** depth);
endfunction"
      }
    , "templateD" :
"// popCnt16 begin
localparam ~GENSYM[width][0] = 16;

// depth of the tree
localparam ~GENSYM[levels][2] = $clog2(~SYM[0]);

logic [~SYM[2]:0] ~GENSYM[intermediate][3] [0:(2*~SYM[0])-2];

// put input into the first half of the intermediate array
genvar ~GENSYM[i][4];
~GENERATE
for (~SYM[4] = 0; ~SYM[4] < ~SYM[0]; ~SYM[4]=~SYM[4]+1) begin : ~GENSYM[mk_array][11]
  assign ~SYM[3][~SYM[4]] = $unsigned(~ARG[0][~SYM[4]]);
end
~ENDGENERATE

// Create the tree of instantiated components
genvar ~GENSYM[d][6];
genvar ~GENSYM[i][7];
~GENERATE
if (~SYM[2] != 0) begin : ~GENSYM[make_tree][8]
  for (~SYM[6] = (~SYM[2] - 1); ~SYM[6] >= 0; ~SYM[6]=~SYM[6]-1) begin : ~GENSYM[tree_depth][9]
    for (~SYM[7] = 0; ~SYM[7] < (2**~SYM[6]); ~SYM[7] = ~SYM[7]+1) begin : ~GENSYM[tree_depth_loop][10]
      assign ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+1)+~SYM[7]] =
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])] +
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])+1];
    end
  end
end
~ENDGENERATE

// The last element of the intermediate array holds the result
assign ~RESULT = $unsigned(~SYM[3][(2*~SYM[0])-2]);
// popCnt16 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.popCnt32#"
    , "type"      : "popCnt32# :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "depth2Index"
      , "extension" : "inc"
      , "content" :
"// given a level and a depth, calculate the corresponding index into the
// intermediate array
function integer ~INCLUDENAME;
  input integer levels;
  input integer depth;

  ~INCLUDENAME = (2 ** levels) - (2 ** depth);
endfunction"
      }
    , "templateD" :
"// popCnt32 begin
localparam ~GENSYM[width][0] = 32;

// depth of the tree
localparam ~GENSYM[levels][2] = $clog2(~SYM[0]);

logic [~SYM[2]:0] ~GENSYM[intermediate][3] [0:(2*~SYM[0])-2];

// put input into the first half of the intermediate array
genvar ~GENSYM[i][4];
~GENERATE
for (~SYM[4] = 0; ~SYM[4] < ~SYM[0]; ~SYM[4]=~SYM[4]+1) begin : ~GENSYM[mk_array][11]
  assign ~SYM[3][~SYM[4]] = $unsigned(~ARG[0][~SYM[4]]);
end
~ENDGENERATE

// Create the tree of instantiated components
genvar ~GENSYM[d][6];
genvar ~GENSYM[i][7];
~GENERATE
if (~SYM[2] != 0) begin : ~GENSYM[make_tree][8]
  for (~SYM[6] = (~SYM[2] - 1); ~SYM[6] >= 0; ~SYM[6]=~SYM[6]-1) begin : ~GENSYM[tree_depth][9]
    for (~SYM[7] = 0; ~SYM[7] < (2**~SYM[6]); ~SYM[7] = ~SYM[7]+1) begin : ~GENSYM[tree_depth_loop][10]
      assign ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+1)+~SYM[7]] =
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])] +
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])+1];
    end
  end
end
~ENDGENERATE

// The last element of the intermediate array holds the result
assign ~RESULT = $unsigned(~SYM[3][(2*~SYM[0])-2]);
// popCnt32 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.popCnt64#"
    , "type"      : "popCnt64# :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "depth2Index"
      , "extension" : "inc"
      , "content" :
"// given a level and a depth, calculate the corresponding index into the
// intermediate array
function integer ~INCLUDENAME;
  input integer levels;
  input integer depth;

  ~INCLUDENAME = (2 ** levels) - (2 ** depth);
endfunction"
      }
    , "templateD" :
"// popCnt64 begin
localparam ~GENSYM[width][0] = 64;

// depth of the tree
localparam ~GENSYM[levels][2] = $clog2(~SYM[0]);

logic [~SYM[2]:0] ~GENSYM[intermediate][3] [0:(2*~SYM[0])-2];

// put input into the first half of the intermediate array
genvar ~GENSYM[i][4];
~GENERATE
for (~SYM[4] = 0; ~SYM[4] < ~SYM[0]; ~SYM[4]=~SYM[4]+1) begin : ~GENSYM[mk_array][11]
  assign ~SYM[3][~SYM[4]] = $unsigned(~ARG[0][~SYM[4]]);
end
~ENDGENERATE

// Create the tree of instantiated components
genvar ~GENSYM[d][6];
genvar ~GENSYM[i][7];
~GENERATE
if (~SYM[2] != 0) begin : ~GENSYM[make_tree][8]
  for (~SYM[6] = (~SYM[2] - 1); ~SYM[6] >= 0; ~SYM[6]=~SYM[6]-1) begin : ~GENSYM[tree_depth][9]
    for (~SYM[7] = 0; ~SYM[7] < (2**~SYM[6]); ~SYM[7] = ~SYM[7]+1) begin : ~GENSYM[tree_depth_loop][10]
      assign ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+1)+~SYM[7]] =
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])] +
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])+1];
    end
  end
end
~ENDGENERATE

// The last element of the intermediate array holds the result
assign ~RESULT = $unsigned(~SYM[3][(2*~SYM[0])-2]);
// popCnt64 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.popCnt#"
    , "type"      : "popCnt8# :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "depth2Index"
      , "extension" : "inc"
      , "content" :
"// given a level and a depth, calculate the corresponding index into the
// intermediate array
function integer ~INCLUDENAME;
  input integer levels;
  input integer depth;

  ~INCLUDENAME = (2 ** levels) - (2 ** depth);
endfunction"
      }
    , "templateD" :
"// popCnt begin
localparam ~GENSYM[width][0] = ~SIZE[~TYPO];

// depth of the tree
localparam ~GENSYM[levels][2] = $clog2(~SYM[0]);

logic [~SYM[2]:0] ~GENSYM[intermediate][3] [0:(2*~SYM[0])-2];

// put input into the first half of the intermediate array
genvar ~GENSYM[i][4];
~GENERATE
for (~SYM[4] = 0; ~SYM[4] < ~SYM[0]; ~SYM[4]=~SYM[4]+1) begin : ~GENSYM[mk_array][11]
  assign ~SYM[3][~SYM[4]] = $unsigned(~ARG[0][~SYM[4]]);
end
~ENDGENERATE

// Create the tree of instantiated components
genvar ~GENSYM[d][6];
genvar ~GENSYM[i][7];
~GENERATE
if (~SYM[2] != 0) begin : ~GENSYM[make_tree][8]
  for (~SYM[6] = (~SYM[2] - 1); ~SYM[6] >= 0; ~SYM[6]=~SYM[6]-1) begin : ~GENSYM[tree_depth][9]
    for (~SYM[7] = 0; ~SYM[7] < (2**~SYM[6]); ~SYM[7] = ~SYM[7]+1) begin : ~GENSYM[tree_depth_loop][10]
      assign ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+1)+~SYM[7]] =
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])] +
             ~SYM[3][~INCLUDENAME(~SYM[2]+1,~SYM[6]+2)+(2*~SYM[7])+1];
    end
  end
end
~ENDGENERATE

// The last element of the intermediate array holds the result
assign ~RESULT = $unsigned(~SYM[3][(2*~SYM[0])-2]);
// popCnt end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.clz8#"
    , "type"      : "clz8 :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// clz8 begin
logic [0:7] ~GENSYM[v][1];
assign ~SYM[1] = ~ARG[0][7:0];

logic [0:7] ~GENSYM[e][2];
genvar ~GENSYM[n][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<4;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:5] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<2;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage1][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:3] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 3;
logic [5:0] i;
assign i = ~SYM[4][0:5];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE

assign ~RESULT = $unsigned(~SYM[7]);
// clz8 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.clz16#"
    , "type"      : "clz16 :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// clz16 begin
logic [0:15] ~GENSYM[v][1];
assign ~SYM[1] = ~ARG[0][15:0];

logic [0:15] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<8;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:11] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<4;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:7] ~GENSYM[b][9];
genvar ~GENSYM[i2][10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<2;~SYM[10]=~SYM[10]+1) begin : ~GENSYM[mux_stage2][11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:4] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 4;
logic [7:0] i;
assign i = ~SYM[9][0:7];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE

assign ~RESULT = $unsigned(~SYM[7]);
// clz16 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.clz32#"
    , "type"      : "clz32 :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// clz32 begin
logic [0:31] ~GENSYM[v][1];
assign ~SYM[1] = ~ARG[0][31:0];

logic [0:31] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<16;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:23] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<8;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:15] ~GENSYM[b][9];
genvar ~GENSYM[i2][10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<4;~SYM[10]=~SYM[10]+1) begin : ~GENSYM[mux_stage2][11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:9] ~GENSYM[c][12];
genvar ~GENSYM[i3][13];
~GENERATE
for (~SYM[13]=0;~SYM[13]<2;~SYM[13]=~SYM[13]+1) begin : ~GENSYM[mux_stage3][14]
  localparam n = 4;
  logic [7:0] i;
  assign i = ~SYM[9][~SYM[13]*8:~SYM[13]*8+7];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:5] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 5;
logic [9:0] i;
assign i = ~SYM[12][0:9];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE

assign ~RESULT = $unsigned(~SYM[7]);
// clz32 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.clz64#"
    , "type"      : "clz64 :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// clz64 begin
logic [0:63] ~GENSYM[v][1];
assign ~SYM[1] = ~ARG[0][63:0];

logic [0:63] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<32;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:47] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<16;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:31] ~GENSYM[b][9];
genvar ~GENSYM[i2][10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<8;~SYM[10]=~SYM[10]+1) begin : ~GENSYM[mux_stage2][11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:19] ~GENSYM[c][12];
genvar ~GENSYM[i3][13];
~GENERATE
for (~SYM[13]=0;~SYM[13]<4;~SYM[13]=~SYM[13]+1) begin : ~GENSYM[mux_stage3][14]
  localparam n = 4;
  logic [7:0] i;
  assign i = ~SYM[9][~SYM[13]*8:~SYM[13]*8+7];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:11] ~GENSYM[d][15];
genvar ~GENSYM[i4][16];
~GENERATE
for (~SYM[16]=0;~SYM[16]<2;~SYM[16]=~SYM[16]+1) begin : ~GENSYM[mux_stage4][17]
  localparam n = 5;
  logic [9:0] i;
  assign i = ~SYM[12][~SYM[16]*10:~SYM[16]*10+9];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[15][~SYM[16]*6:~SYM[16]*6+5] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[15][~SYM[16]*6:~SYM[16]*6+5] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:6] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 6;
logic [11:0] i;
assign i = ~SYM[15][0:11];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE

assign ~RESULT = $unsigned(~SYM[7]);
// clz64 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.clz#"
    , "type"      : "clz :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// clz begin
~IF ~IW64 ~THEN
logic [0:63] ~GENSYM[v][1];
assign ~SYM[1] = ~ARG[0][63:0];

logic [0:63] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<32;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:47] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<16;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:31] ~GENSYM[b][9];
genvar ~GENSYM[i2][10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<8;~SYM[10]=~SYM[10]+1) begin : ~GENSYM[mux_stage2][11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:19] ~GENSYM[c][12];
genvar ~GENSYM[i3][13];
~GENERATE
for (~SYM[13]=0;~SYM[13]<4;~SYM[13]=~SYM[13]+1) begin : ~GENSYM[mux_stage3][14]
  localparam n = 4;
  logic [7:0] i;
  assign i = ~SYM[9][~SYM[13]*8:~SYM[13]*8+7];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:11] ~GENSYM[d][15];
genvar ~GENSYM[i4][16];
~GENERATE
for (~SYM[16]=0;~SYM[16]<2;~SYM[16]=~SYM[16]+1) begin : ~GENSYM[mux_stage4][17]
  localparam n = 5;
  logic [9:0] i;
  assign i = ~SYM[12][~SYM[16]*10:~SYM[16]*10+9];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[15][~SYM[16]*6:~SYM[16]*6+5] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[15][~SYM[16]*6:~SYM[16]*6+5] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:6] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 6;
logic [11:0] i;
assign i = ~SYM[15][0:11];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE
~ELSE
logic [0:31] ~SYM[1];
assign ~SYM[1] = ~ARG[0][31:0];

logic [0:31] ~SYM[2];
genvar ~SYM[3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<16;~SYM[3]=~SYM[3]+1) begin : ~SYM[8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:23] ~SYM[4];
genvar ~SYM[5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<8;~SYM[5]=~SYM[5]+1) begin : ~SYM[6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:15] ~SYM[9];
genvar ~SYM[10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<4;~SYM[10]=~SYM[10]+1) begin : ~SYM[11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:9] ~SYM[12];
genvar ~SYM[13];
~GENERATE
for (~SYM[13]=0;~SYM[13]<2;~SYM[13]=~SYM[13]+1) begin : ~SYM[14]
  localparam n = 4;
  logic [7:0] i;
  assign i = ~SYM[9][~SYM[13]*8:~SYM[13]*8+7];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:5] ~SYM[7];
~GENERATE
if (1) begin
localparam n = 5;
logic [9:0] i;
assign i = ~SYM[12][0:9];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE
~FI
assign ~RESULT = $unsigned(~SYM[7]);
// clz end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.ctz8#"
    , "type"      : "ctz8 :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// ctz8 begin
logic [0:7] ~GENSYM[v][1];
genvar ~GENSYM[k][18];
~GENERATE
for (~SYM[18]=0;~SYM[18]<8;~SYM[18]=~SYM[18]+1) begin : ~GENSYM[reverse][19]
  assign ~SYM[1][~SYM[18]] = ~ARG[0][~SYM[18]];
end
~ENDGENERATE

logic [0:7] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<4;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:5] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<2;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:3] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 3;
logic [5:0] i;
assign i = ~SYM[4][0:5];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE

assign ~RESULT = $unsigned(~SYM[7]);
// ctz8 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.ctz16#"
    , "type"      : "ctz16 :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// ctz16 begin
logic [0:15] ~GENSYM[v][1];
genvar ~GENSYM[k][18];
~GENERATE
for (~SYM[18]=0;~SYM[18]<16;~SYM[18]=~SYM[18]+1) begin : ~GENSYM[reverse][19]
  assign ~SYM[1][~SYM[18]] = ~ARG[0][~SYM[18]];
end
~ENDGENERATE

logic [0:15] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<8;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:11] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<4;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:7] ~GENSYM[b][9];
genvar ~GENSYM[i2][10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<2;~SYM[10]=~SYM[10]+1) begin : ~GENSYM[mux_stage2][11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:4] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 4;
logic [7:0] i;
assign i = ~SYM[9][0:7];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE

assign ~RESULT = $unsigned(~SYM[7]);
// ctz16 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.ctz32#"
    , "type"      : "ctz32 :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// ctz32 begin
logic [0:31] ~GENSYM[v][1];
genvar ~GENSYM[k][18];
~GENERATE
for (~SYM[18]=0;~SYM[18]<32;~SYM[18]=~SYM[18]+1) begin : ~GENSYM[reverse][19]
  assign ~SYM[1][~SYM[18]] = ~ARG[0][~SYM[18]];
end
~ENDGENERATE

logic [0:31] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<16;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:23] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<8;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:15] ~GENSYM[b][9];
genvar ~GENSYM[i2][10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<4;~SYM[10]=~SYM[10]+1) begin : ~GENSYM[mux_stage2][11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:9] ~GENSYM[c][12];
genvar ~GENSYM[i3][13];
~GENERATE
for (~SYM[13]=0;~SYM[13]<2;~SYM[13]=~SYM[13]+1) begin : ~GENSYM[mux_stage3][14]
  localparam n = 4;
  logic [7:0] i;
  assign i = ~SYM[9][~SYM[13]*8:~SYM[13]*8+7];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:5] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 5;
logic [9:0] i;
assign i = ~SYM[12][0:9];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE

assign ~RESULT = $unsigned(~SYM[7]);
// ctz32 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.ctz64#"
    , "type"      : "ctz64 :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// ctz64 begin
logic [0:63] ~GENSYM[v][1];
genvar ~GENSYM[k][18];
~GENERATE
for (~SYM[18]=0;~SYM[18]<64;~SYM[18]=~SYM[18]+1) begin : ~GENSYM[reverse][19]
  assign ~SYM[1][~SYM[18]] = ~ARG[0][~SYM[18]];
end
~ENDGENERATE

logic [0:63] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<32;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:47] a;
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<16;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:31] ~GENSYM[b][9];
genvar ~GENSYM[i2][10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<8;~SYM[10]=~SYM[10]+1) begin : ~GENSYM[mux_stage2][11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:19] ~GENSYM[c][12];
genvar ~GENSYM[i3][13];
~GENERATE
for (~SYM[13]=0;~SYM[13]<4;~SYM[13]=~SYM[13]+1) begin : ~GENSYM[mux_stage3][14]
  localparam n = 4;
  logic [7:0] i;
  assign i = ~SYM[9][~SYM[13]*8:~SYM[13]*8+7];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:11] ~GENSYM[d][15];
genvar ~GENSYM[i4][16];
~GENERATE
for (~SYM[16]=0;~SYM[16]<2;~SYM[16]=~SYM[16]+1) begin : ~GENSYM[mux_stage4][17]
  localparam n = 5;
  logic [9:0] i;
  assign i = ~SYM[12][~SYM[16]*10:~SYM[16]*10+9];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[15][~SYM[16]*6:~SYM[16]*6+5] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[15][~SYM[16]*6:~SYM[16]*6+5] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:6] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 6;
logic [11:0] i;
assign i = ~SYM[15][0:11];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE

assign ~RESULT = $unsigned(~SYM[7]);
// ctz64 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.ctz#"
    , "type"      : "ctz :: Word# -> Word#"
    , "imports"   : ["~INCLUDENAME.inc"]
    , "include" :
      { "name" : "enc"
      , "extension" : "inc"
      , "content" :
"function [1:0] ~INCLUDENAME;
  input [1:0] a;
  case (a)
    2'b00:   ~INCLUDENAME = 2'b10;
    2'b01:   ~INCLUDENAME = 2'b01;
    2'b10:   ~INCLUDENAME = 2'b00;
    default: ~INCLUDENAME = 2'b00;
  endcase
endfunction"
      }
    , "templateD" :
"// ctz begin
~IF ~IW64 ~THEN
logic [0:63] ~GENSYM[v][1];
genvar ~GENSYM[k][18];
~GENERATE
for (~SYM[18]=0;~SYM[18]<64;~SYM[18]=~SYM[18]+1) begin : ~GENSYM[reverse][19]
  assign ~SYM[1][~SYM[18]] = ~ARG[0][~SYM[18]];
end
~ENDGENERATE

logic [0:63] ~GENSYM[e][2];
genvar ~GENSYM[i][3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<32;~SYM[3]=~SYM[3]+1) begin : ~GENSYM[enc_stage][8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:47] ~GENSYM[a][4];
genvar ~GENSYM[i1][5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<16;~SYM[5]=~SYM[5]+1) begin : ~GENSYM[mux_stage][6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:31] ~GENSYM[b][9];
genvar ~GENSYM[i2][10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<8;~SYM[10]=~SYM[10]+1) begin : ~GENSYM[mux_stage2][11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:19] ~GENSYM[c][12];
genvar ~GENSYM[i3][13];
~GENERATE
for (~SYM[13]=0;~SYM[13]<4;~SYM[13]=~SYM[13]+1) begin : ~GENSYM[mux_stage3][14]
  localparam n = 4;
  logic [7:0] i;
  assign i = ~SYM[9][~SYM[13]*8:~SYM[13]*8+7];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:11] ~GENSYM[d][15];
genvar ~GENSYM[i4][16];
~GENERATE
for (~SYM[16]=0;~SYM[16]<2;~SYM[16]=~SYM[16]+1) begin : ~GENSYM[mux_stage4][17]
  localparam n = 5;
  logic [9:0] i;
  assign i = ~SYM[12][~SYM[16]*10:~SYM[16]*10+9];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[15][~SYM[16]*6:~SYM[16]*6+5] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[15][~SYM[16]*6:~SYM[16]*6+5] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:6] ~GENSYM[res][7];
~GENERATE
if (1) begin
localparam n = 6;
logic [11:0] i;
assign i = ~SYM[15][0:11];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE
~ELSE
logic [0:31] ~SYM[1];
genvar ~SYM[18];
~GENERATE
for (~SYM[18]=0;~SYM[18]<32;~SYM[18]=~SYM[18]+1) begin : ~SYM[19]
  assign ~SYM[1][~SYM[18]] = ~ARG[0][~SYM[18]];
end
~ENDGENERATE

logic [0:31] ~SYM[2];
genvar ~SYM[3];
~GENERATE
for (~SYM[3]=0;~SYM[3]<16;~SYM[3]=~SYM[3]+1) begin : ~SYM[8]
  assign ~SYM[2][~SYM[3]*2:~SYM[3]*2+1] = ~INCLUDENAME(~SYM[1][~SYM[3]*2:~SYM[3]*2+1]);
end
~ENDGENERATE

logic [0:23] ~SYM[4];
genvar ~SYM[5];
~GENERATE
for (~SYM[5]=0;~SYM[5]<8;~SYM[5]=~SYM[5]+1) begin : ~SYM[6]
  localparam n = 2;
  logic [3:0] i;
  assign i = ~SYM[2][~SYM[5]*4:~SYM[5]*4+3];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[4][~SYM[5]*3:~SYM[5]*3+2] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:15] ~SYM[9];
genvar ~SYM[10];
~GENERATE
for (~SYM[10]=0;~SYM[10]<4;~SYM[10]=~SYM[10]+1) begin : ~SYM[11]
  localparam n = 3;
  logic [5:0] i;
  assign i = ~SYM[4][~SYM[10]*6:~SYM[10]*6+5];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[9][~SYM[10]*4:~SYM[10]*4+3] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:9] ~SYM[12];
genvar ~SYM[13];
~GENERATE
for (~SYM[13]=0;~SYM[13]<2;~SYM[13]=~SYM[13]+1) begin : ~SYM[14]
  localparam n = 4;
  logic [7:0] i;
  assign i = ~SYM[9][~SYM[13]*8:~SYM[13]*8+7];
  always_comb begin
    case (i[n-1+n])
      1'b0    : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
      default : ~SYM[12][~SYM[13]*5:~SYM[13]*5+4] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
    endcase
  end
end
~ENDGENERATE

logic [0:5] ~SYM[7];
~GENERATE
if (1) begin
localparam n = 5;
logic [9:0] i;
assign i = ~SYM[12][0:9];
always_comb begin
  case (i[n-1+n])
    1'b0    : ~SYM[7] = {i[n-1+n] && i[n-1],1'b0,i[2*n-2:n]};
    default : ~SYM[7] = {i[n-1+n] && i[n-1],~ i[n-1],i[n-2:0]};
  endcase
end
end
~ENDGENERATE
~FI
assign ~RESULT = $unsigned(~SYM[7]);
// ctz end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.byteSwap16#"
    , "type"      : "byteSwap16# :: Word# -> Word#"
    , "templateD" :
"// byteSwap16 begin~IF ~IW64 ~THEN
assign ~RESULT = {~VAR[w][0][63:16],~VAR[w][0][7:0],~VAR[w][0][15:8]};~ELSE
assign ~RESULT = {~VAR[w][0][31:16],~VAR[w][0][7:0],~VAR[w][0][15:8]};~FI
// byteSwap16 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.byteSwap32#"
    , "type"      : "byteSwap32# :: Word# -> Word#"
    , "templateD" :
"// byteSwap32 begin~IF ~IW64 ~THEN
assign ~RESULT = {~VAR[w][0][63:32],~VAR[w][0][7:0],~VAR[w][0][15:8],~VAR[w][0][23:16],~VAR[w][0][31:24]};~ELSE
assign ~RESULT = {~VAR[w][0][7:0],~VAR[w][0][15:8],~VAR[w][0][23:16],~VAR[w][0][31:24]};~FI
// byteSwap32 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.byteSwap64#"
    , "type"      : "byteSwap64# :: Word# -> Word#"
    , "templateD" :
"// byteSwap64 begin
assign ~RESULT = {~VAR[w][0][7:0],~VAR[w][0][15:8],~VAR[w][0][23:16],~VAR[w][0][31:24]
                 ,~VAR[w][0][39:32],~VAR[w][0][47:40],~VAR[w][0][55:48],~VAR[w][0][63:56]};
// byteSwap64 end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.byteSwap#"
    , "type"      : "byteSwap# :: Word# -> Word#"
    , "templateD" :
"// byteSwap begin~IF ~IW64 ~THEN
assign ~RESULT = {~VAR[w][0][7:0],~VAR[w][0][15:8],~VAR[w][0][23:16],~VAR[w][0][31:24]
                 ,~VAR[w][0][39:32],~VAR[w][0][47:40],~VAR[w][0][55:48],~VAR[w][0][63:56]};~ELSE
assign ~RESULT = {~VAR[w][0][7:0],~VAR[w][0][15:8],~VAR[w][0][23:16],~VAR[w][0][31:24]};~FI
// byteSwap end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.narrow8Int#"
    , "type"      : "narrow8Int# :: Int# -> Int#"
    , "templateD" :
"// narrow8Int begin
assign ~RESULT = $signed(~VAR[i][0][7:0]);
// narrow8Int end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.narrow16Int#"
    , "type"      : "narrow16Int# :: Int# -> Int#"
    , "templateD" :
"// narrow16Int begin
assign ~RESULT = $signed(~VAR[i][0][15:0]);
// narrow16Int end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.narrow32Int#"
    , "type"      : "narrow32Int# :: Int# -> Int#"
    , "templateD" :
"// narrow32Int begin
assign ~RESULT = $signed(~VAR[i][0][31:0]);
// narrow32Int end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.narrow8Word#"
    , "type"      : "narrow8Int# :: Word# -> Word#"
    , "templateD" :
"// narrow8Word begin
assign ~RESULT = $unsigned(~VAR[w][0][7:0]);
// narrow8Word end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.narrow16Word#"
    , "type"      : "narrow16Word# :: Word# -> Word#"
    , "templateD" :
"// narrow16Word begin
assign ~RESULT = $unsigned(~VAR[w][0][15:0]);
// narrow16Word end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.narrow32Word#"
    , "type"      : "narrow32Int# :: Word# -> Word#"
    , "templateD" :
"// narrow32Word begin
assign ~RESULT = $unsigned(~VAR[w][0][31:0]);
// narrow32Word end"
    }
  }
, { "Primitive" :
    { "name"     : "GHC.Prim.dataToTag#"
    , "primType" : "Function"
    }
  }
, { "Primitive" :
    { "name"     : "GHC.Prim.tagToEnum#"
    , "primType" : "Function"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Prim.unsafeCoerce#"
    , "type"      : "unsafeCoerce# :: a -> b"
    , "templateE" : "~ARG[0]"
    }
  }
]
