- BlackBox:
    name: GHC.Classes.eqInt
    kind: Expression
    type: 'eqInt :: Int ->
      Int -> Bool'
    template: ~ARG[0] = ~ARG[1]
- BlackBox:
    name: GHC.Classes.neInt
    kind: Expression
    type: 'neInt :: Int ->
      Int -> Bool'
    template: ~ARG[0] /= ~ARG[1]
- BlackBox:
    name: GHC.Classes.&&
    kind: Expression
    type: '(&&) :: Bool ->
      Bool -> Bool'
    template: ~ARG[0] and ~ARG[1]
- BlackBox:
    name: GHC.Classes.||
    kind: Expression
    type: '(::) :: Bool ->
      Bool -> Bool'
    template: ~ARG[0] or ~ARG[1]
- BlackBox:
    name: GHC.Classes.not
    kind: Expression
    type: 'not :: Bool ->
      Bool'
    template: not ~ARG[0]
- BlackBox:
    name: GHC.Classes.divInt#
    kind: Declaration
    type: 'divInt# :: Int#
      -> Int# -> Int#'
    template: |-
      -- divInt# begin
      ~GENSYM[divInt][0] : block
        signal ~GENSYM[resultPos][1] : boolean;
        signal ~GENSYM[dividerNeg][2] : boolean;
        signal ~GENSYM[dividend2][3] : signed(~SIZE[~TYPO] downto 0);
        signal ~GENSYM[quot_res][4] : signed(~SIZE[~TYPO] downto 0);
      begin
        ~SYM[1] <= ~VAR[dividend][0](~VAR[dividend][0]'high) = ~VAR[divider][1](~VAR[divider][1]'high);
        ~SYM[2] <= ~VAR[divider][1](~VAR[divider][1]'high) = '1';
        ~SYM[3] <= resize(~VAR[dividend][0],~SIZE[~TYPO]+1)   when ~SYM[1] else
                   (resize(~VAR[dividend][0],~SIZE[~TYPO]+1) - resize(~VAR[divider][1],~SIZE[~TYPO]+1) - 1)   when ~SYM[2] else
                   (resize(~VAR[dividend][0],~SIZE[~TYPO]+1) - resize(~VAR[divider][1],~SIZE[~TYPO]+1) + 1);
        ~SYM[4] <= ~SYM[3] / ~VAR[divider][1]
            -- pragma translate_off
            when (~VAR[divider][1] /= 0) else (others => 'X')
            -- pragma translate_on
            ;
        ~RESULT <= signed(~SYM[4](~SIZE[~TYPO]-1 downto 0));
      end block;
      -- divInt# end
- BlackBox:
    name: GHC.Classes.modInt#
    kind: Expression
    type: 'modInt# :: Int#
      -> Int# -> Int#'
    template: ~ARG[0] mod ~ARG[1]
