[
  {
    "BlackBox": {
      "name": "Clash.Class.Exp.expIndex#",
      "kind": "Expression",
      "type": "expIndex# :: KnownNat m => Index m -> SNat n -> Index (m^n)",
      "template": "~DEVNULL[~ARG[0]]to_unsigned(to_integer(~ARG[1]) ** ~LIT[2], ~SIZE[~TYPO])",
      "warning": "Exponentiation is only supported on relatively small constructs (< 32 bits). Ideally, Clash should have constant folded your expression. See https://github.com/clash-lang/clash-compiler/issues/593."
    }
  },
  {
    "BlackBox": {
      "name": "Clash.Class.Exp.expSigned#",
      "kind": "Expression",
      "type": "expSigned# :: KnownNat m => Signed m -> SNat n -> Signed (m*n)",
      "template": "~DEVNULL[~ARG[0]]to_signed(to_integer(~ARG[1]) ** ~LIT[2], ~SIZE[~TYPO])",
      "warning": "Exponentiation is only supported on relatively small constructs (< 32 bits). Ideally, Clash should have constant folded your expression. See https://github.com/clash-lang/clash-compiler/issues/593."
    }
  },
  {
    "BlackBox": {
      "name": "Clash.Class.Exp.expUnsigned#",
      "kind": "Expression",
      "type": "expUnsigned# :: KnownNat m => Unsigned m -> SNat n -> Unsigned (m*n)",
      "template": "~DEVNULL[~ARG[0]]to_unsigned(to_integer(~ARG[1]) ** ~LIT[2], ~SIZE[~TYPO])",
      "warning": "Exponentiation is only supported on relatively small constructs (< 32 bits). Ideally, Clash should have constant folded your expression. See https://github.com/clash-lang/clash-compiler/issues/593."
    }
  }
]