xref: /XiangShan/src/main/scala/utils/MathUtils.scala (revision 62a2cb19efdae1016ff547165e2ed1389451ac14)
15aa3b6a6SXuan Hupackage utils
25aa3b6a6SXuan Hu
35aa3b6a6SXuan Huobject MathUtils {
45aa3b6a6SXuan Hu  def IntToOH(n: Int): BigInt = {
55aa3b6a6SXuan Hu    BigInt(1) << n
65aa3b6a6SXuan Hu  }
7*62a2cb19SXuan Hu
8*62a2cb19SXuan Hu  object BigIntGenMask {
9*62a2cb19SXuan Hu    // generate w/r mask
10*62a2cb19SXuan Hu    def apply(high: Int, low: Int): BigInt = {
11*62a2cb19SXuan Hu      require(high > low)
12*62a2cb19SXuan Hu      val maskLen = high - low + 1
13*62a2cb19SXuan Hu      ((BigInt(1) << maskLen) - 1) << low
14*62a2cb19SXuan Hu    }
15*62a2cb19SXuan Hu
16*62a2cb19SXuan Hu    def apply(pos: Int): BigInt = {
17*62a2cb19SXuan Hu      BigInt(1) << pos
18*62a2cb19SXuan Hu    }
19*62a2cb19SXuan Hu  }
20*62a2cb19SXuan Hu
21*62a2cb19SXuan Hu  object BigIntNot {
22*62a2cb19SXuan Hu    def apply(bigInt: BigInt): BigInt = {
23*62a2cb19SXuan Hu      var res = bigInt
24*62a2cb19SXuan Hu      val len = bigInt.bitLength
25*62a2cb19SXuan Hu      for (i <- 0 until len) {
26*62a2cb19SXuan Hu        res = res.flipBit(i)
27*62a2cb19SXuan Hu      }
28*62a2cb19SXuan Hu      res
29*62a2cb19SXuan Hu    }
30*62a2cb19SXuan Hu  }
315aa3b6a6SXuan Hu}
32