[ { "BlackBox":
    { "name": "GHC.Num.Integer.integerToNatural"
    , "workInfo" : "Never"
    , "kind": "Expression"
    , "type": "integerToNatural :: Integer -> Natural"
    , "template": "$unsigned(~VAR[n][0][(~SIZE[~TYPO]-1):0])"
    , "warning": "GHC.Num.Integer.integerToNatural: Naturals are dynamically sized in simulation, but fixed-length after synthesis. Use carefully."
    }
  }
, { "BlackBox":
  { "name": "GHC.Num.Integer.integerToNaturalThrow"
  , "workInfo" : "Never"
  , "kind": "Expression"
  , "type": "integerToNaturalThrow :: Integer -> Natural"
  , "template": "(~ARG[0] < ~SIZE[~TYP[0]]'d0 ? ~ERRORO: $unsigned(~VAR[n][0][(~SIZE[~TYPO]-1):0]))"
  , "warning": "GHC.Num.Integer.integerToNaturalThrow: Naturals are dynamically sized in simulation, but fixed-length after synthesis. Use carefully."
  }
}
, { "BlackBox":
  { "name": "GHC.Num.Integer.integerToNaturalClamp"
  , "workInfo" : "Never"
  , "kind": "Expression"
  , "type": "integerToNatural :: Integer -> Natural"
  , "template": "(~ARG[0] < ~SIZE[~TYP[0]]'d0 ? ~SIZE[~TYPO]'d0 : $unsigned(~VAR[n][0][(~SIZE[~TYPO]-1):0]))"
  , "warning": "GHC.Num.Integer.integerToNaturalClamp: Naturals are dynamically sized in simulation, but fixed-length after synthesis. Use carefully."
  }
}
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerToInt#"
    , "workInfo"  : "Never"
    , "kind"      : "Declaration"
    , "type"      : "integerToInt :: Integer -> Int#"
    , "template"  : "assign ~RESULT = $signed(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerMul"
    , "kind"      : "Expression"
    , "type"      : "integerMul :: Integer -> Integer -> Integer"
    , "template"  : "~ARG[0] * ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerNegate"
    , "kind"      : "Expression"
    , "type"      : "integerNegate :: Integer -> Integer"
    , "template"  : "-~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerAbs"
    , "kind"      : "Expression"
    , "type"      : "integerAbs :: Integer -> Integer"
    , "template"  : "(~ARG[0] < ~SIZE[~TYPO]'sd0) ? -~ARG[0] : ~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerRem"
    , "kind"      : "Expression"
    , "type"      : "integerRem :: Integer -> Integer -> Integer"
    , "template"  : "~ARG[0] % ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerEq"
    , "kind"      : "Expression"
    , "type"      : "integerEq :: Integer -> Integer -> Bool"
    , "template"  : "~ARG[0] == ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerNe"
    , "kind"      : "Expression"
    , "type"      : "integerNe :: Integer -> Integer -> Bool"
    , "template"  : "~ARG[0] != ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerEq#"
    , "kind"      : "Expression"
    , "type"      : "integerEq :: Integer -> Integer -> Int#"
    , "template"  : "(~ARG[0] == ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerNe#"
    , "kind"      : "Expression"
    , "type"      : "integerNe# :: Integer -> Integer -> Int#"
    , "template"  : "(~ARG[0] != ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerLe#"
    , "kind"      : "Expression"
    , "type"      : "integerLe :: Integer -> Integer -> Int#"
    , "template"  : "(~ARG[0] <= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerGt#"
    , "kind"      : "Expression"
    , "type"      : "integerGt# :: Integer -> Integer -> Int#"
    , "template"  : "(~ARG[0] > ~ARG[1] ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerLt#"
    , "kind"      : "Expression"
    , "type"      : "integerLt# :: Integer -> Integer -> Int#"
    , "template"  : "(~ARG[0] < ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerGe#"
    , "kind"      : "Expression"
    , "type"      : "integerGe# :: Integer -> Integer -> Int#"
    , "template"  : "(~ARG[0] >= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerShiftR#"
    , "kind"      : "Expression"
    , "type"      : "integerShiftR :: Integer -> Word# -> Integer"
    , "template"  : "~ARG[0] >>> ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerShiftL#"
    , "kind"      : "Expression"
    , "type"      : "integerShiftL :: Integer -> Word# -> Integer"
    , "template"  : "~ARG[0] <<< ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerTestBit#"
    , "kind"      : "Expression"
    , "type"      : "integerTestBit :: Integer -> Word# -> Bool"
    , "template"  : "~VAR[input][0][~ARG[1]] == 1'b1"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerFromWord#"
    , "workInfo"  : "Never"
    , "kind"      : "Declaration"
    , "type"      : "integerFromWord# :: Word# -> Integer"
    , "template"  : "assign ~RESULT = $signed(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerToWord#"
    , "workInfo"  : "Never"
    , "kind"      : "Declaration"
    , "type"      : "integerToWord# :: Integer -> Word#"
    , "template"  : "assign ~RESULT = $unsigned(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerToWord64#"
    , "workInfo"  : "Never"
    , "kind"      : "Declaration"
    , "type"      : "integerToWord64# :: Integer -> Word64#"
    , "comment"   : "only used by 32 bit GHC"
    , "template"  : "assign ~RESULT = $unsigned(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerBit#"
    , "kind"      : "Expression"
    , "type"      : "integerBit# :: Word# -> Integer"
    , "template"  : "1 << ~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerComplement"
    , "kind"      : "Expression"
    , "type"      : "integerComplement :: Integer -> Integer"
    , "template"  : "~ ~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerXor"
    , "kind"      : "Expression"
    , "type"      : "integerXor :: Integer -> Integer -> Integer"
    , "template"  : "~ARG[0] ^ ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerOr"
    , "kind"      : "Expression"
    , "type"      : "integerOr :: Integer -> Integer -> Integer"
    , "template"  : "~ARG[0] | ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerAnd"
    , "kind"      : "Expression"
    , "type"      : "andInteger :: Integer -> Integer -> Integer"
    , "template"  : "~ARG[0] & ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerSignum"
    , "kind"      : "Expression"
    , "type"      : "integerSignum :: Integer -> Integer"
    , "template"  : "(~ARG[0] < ~SIZE[~TYPO]'sd0) ? -~SIZE[~TYPO]'sd1 : ((~ARG[0] == ~SIZE[~TYPO]'sd0) ? ~SIZE[~TYPO]'sd0 : ~SIZE[~TYPO]'sd1)"
    }
  }
  , { "BlackBox" :
    { "name"      : "GHC.Num.Integer.$wintegerSignum"
    , "kind"      : "Expression"
    , "type"      : "integerSignum :: Integer -> Int#"
    , "template"  : "(~ARG[0] < ~SIZE[~TYPO]'sd0) ? -~SIZE[~TYPO]'sd1 : ((~ARG[0] == ~SIZE[~TYPO]'sd0) ? ~SIZE[~TYPO]'sd0 : ~SIZE[~TYPO]'sd1)"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerLogBase#"
    , "kind"      : "Expression"
    , "type"      : "integerLogBase# :: Integer -> Integer -> Word#"
    , "imports"   : ["~INCLUDENAME[0].inc"]
    , "includes" :
      [ { "name" : "integerLogBase"
        , "extension" : "inc"
        , "template" :
"// integer logBase
function integer ~INCLUDENAME[0];
input integer base, value;
begin
  for (~INCLUDENAME[0] = 0; value >= base; ~INCLUDENAME[0]=~INCLUDENAME[0]+1)
    value = value / base;
end
endfunction"
        }
      ]
    , "template"  : "~INCLUDENAME[0](~ARG[0],~ARG[1])"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Num.Integer.integerCompare"
    , "kind"      : "Expression"
    , "type"      : "integerCompare :: Integer -> Integer -> Ordering"
    , "template"  : "(~ARG[0] < ~ARG[1]) ? -~SIZE[~TYPO]'d0 : ((~ARG[0] == ~ARG[1]) ? ~SIZE[~TYPO]'d1 : ~SIZE[~TYPO]'d2)"
    }
  }
]