[ { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.high"
    , "type"      : "high :: Bit"
    , "templateE" : "1'b1"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.low"
    , "type"      : "low :: Bit"
    , "templateE" : "1'b0"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.pack#"
    , "type"      : "pack# :: Bit -> BitVector 1"
    , "templateE" : "~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.unpack#"
    , "type"      : "unpack# :: BitVector 1 -> Bit"
    , "templateE" : "~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.reduceAnd#"
    , "type"      : "reduceAnd# :: KnownNat n => BitVector n -> Bit"
    , "templateE" : "& (~ARG[1])"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.reduceOr#"
    , "type"      : "reduceOr# :: BitVector n -> Bit"
    , "templateE" : "| (~ARG[0])"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.reduceXor#"
    , "type"      : "reduceXor# :: BitVector n -> Bit"
    , "templateE" : "^ (~ARG[0])"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.eq##"
    , "type"      : "eq## :: Bit -> Bit -> Bool"
    , "templateE" : "~ARG[0] == ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.neq##"
    , "type"      : "neq## :: Bit -> Bit -> Bool"
    , "templateE" : "~ARG[0] != ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.lt##"
    , "type"      : "lt## :: Bit -> Bit -> Bool"
    , "templateE" : "~ARG[0] < ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.ge##"
    , "type"      : "ge## :: Bit -> Bit -> Bool"
    , "templateE" : "~ARG[0] >= ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.gt##"
    , "type"      : "gt## :: Bit -> Bit -> Bool"
    , "templateE" : "~ARG[0] > ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.le##"
    , "type"      : "le## :: Bit -> Bit -> Bool"
    , "templateE" : "~ARG[0] <= ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.fromInteger##"
    , "type"      : "fromInteger# :: Integer -> Bit"
    , "templateE" : "~VAR[i][0][0]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.and##"
    , "type"      : "and## :: Bit -> Bit -> Bit"
    , "templateE" : "~ARG[0] & ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.or##"
    , "type"      : "or## :: Bit -> Bit -> Bit"
    , "templateE" : "~ARG[0] | ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.xor##"
    , "type"      : "xor## :: Bit -> Bit -> Bit"
    , "templateE" : "~ARG[0] ^ ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.complement##"
    , "type"      : "complement## :: Bit -> Bit"
    , "templateE" : "~ ~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.eq#"
    , "type"      : "eq# :: BitVector n -> BitVector n -> Bool"
    , "templateE" : "~IF~SIZE[~TYP[0]]~THEN~ARG[0] == ~ARG[1]~ELSE1'b1~FI"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.neq#"
    , "type"      : "neq# :: BitVector n -> BitVector n -> Bool"
    , "templateE" : "~IF~SIZE[~TYP[0]]~THEN~ARG[0] != ~ARG[1]~ELSE1'b0~FI"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.lt#"
    , "type"      : "lt# :: BitVector n -> BitVector n -> Bool"
    , "templateE" : "~IF~SIZE[~TYP[0]]~THEN~ARG[0] < ~ARG[1]~ELSE1'b0~FI"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.ge#"
    , "type"      : "ge# :: BitVector n -> BitVector n -> Bool"
    , "templateE" : "~IF~SIZE[~TYP[0]]~THEN~ARG[0] >= ~ARG[1]~ELSE1'b1~FI"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.gt#"
    , "type"      : "gt# :: BitVector n -> BitVector n -> Bool"
    , "templateE" : "~IF~SIZE[~TYP[0]]~THEN~ARG[0] > ~ARG[1]~ELSE1'b0~FI"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.le#"
    , "type"      : "le# :: BitVector n -> BitVector n -> Bool"
    , "templateE" : "~IF~SIZE[~TYP[0]]~THEN~ARG[0] <= ~ARG[1]~ELSE1'b1~FI"
    }
  }
, { "BlackBox" :
    { "name"      : "Clash.Sized.Internal.BitVector.toInteger#"
    , "type"      : "toInteger# :: BitVector n -> Integer"
    , "templateD" : "assign ~RESULT = ~IF~SIZE[~TYP[0]]~THEN$unsigned(~ARG[0])~ELSE64'sd0~FI;"
    }
  }
]
