{-# LANGUAGE OverloadedStrings #-}

module Funcons.Core.Values.Primitive.BitsBuiltin where

import Funcons.EDSL
import qualified Funcons.Operations as VAL

library :: FunconLibrary
library = [(Name, EvalFunction)] -> FunconLibrary
libFromList [
        (Name
"bit-vector-not", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_not_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_not_)
    ,   (Name
"bit-vector-and", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_and_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_and_)
    ,   (Name
"bit-vector-or", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_or_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_or_)
    ,   (Name
"bit-vector-xor", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_xor_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_xor_)
    ,   (Name
"bit-vector-shift-left", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_shift_left_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_shift_left_)
    ,   (Name
"bit-vector-logical-shift-right", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_logical_shift_right_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_logical_shift_right_)
    ,   (Name
"bit-vector-arithmetic-shift-right", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_arithmetical_shift_right_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_arithmetical_shift_right_)
    ,   (Name
"integer-to-bit-vector", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
integer_to_bit_vector_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.integer_to_bit_vector_)
    ,   (Name
"bit-vector-to-integer", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_to_integer_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_to_integer_)
    ,   (Name
"bit-vector-to-natural", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromValOp [Funcons] -> Funcons
bit_vector_to_natural_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.bit_vector_to_natural_)
    ]

bit_vector_not_ :: [Funcons] -> Funcons
bit_vector_not_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-not"
bit_vector_and_ :: [Funcons] -> Funcons
bit_vector_and_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-and"
bit_vector_or_ :: [Funcons] -> Funcons
bit_vector_or_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-or"
bit_vector_xor_ :: [Funcons] -> Funcons
bit_vector_xor_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-xor"
bit_vector_shift_left_ :: [Funcons] -> Funcons
bit_vector_shift_left_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-shift-left"
bit_vector_logical_shift_right_ :: [Funcons] -> Funcons
bit_vector_logical_shift_right_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-logical-shift-right"
bit_vector_arithmetical_shift_right_ :: [Funcons] -> Funcons
bit_vector_arithmetical_shift_right_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-arithmetical-shift-right"
integer_to_bit_vector_ :: [Funcons] -> Funcons
integer_to_bit_vector_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"integer-to-bit-vector"
bit_vector_to_integer_ :: [Funcons] -> Funcons
bit_vector_to_integer_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-to-integer"
bit_vector_to_natural_ :: [Funcons] -> Funcons
bit_vector_to_natural_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"bit-vector-to-natural"