packages feed

clash-lib-0.99: prims/systemverilog/GHC_Integer_Type.json

[ { "BlackBox" :
    { "name"      : "GHC.Integer.Type.smallInteger"
    , "type"      : "smallInteger :: Int# -> Integer"
    , "templateD" : "assign ~RESULT = $signed(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.integerToInt"
    , "type"      : "integerToInt :: Integer -> Int#"
    , "templateD" : "assign ~RESULT = $signed(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.plusInteger"
    , "type"      : "plusInteger :: Integer -> Integer -> Integer"
    , "templateE" : "~ARG[0] + ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.minusInteger"
    , "type"      : "minusInteger :: Integer -> Integer -> Integer"
    , "templateE" : "~ARG[0] - ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.timesInteger"
    , "type"      : "timesInteger :: Integer -> Integer -> Integer"
    , "templateE" : "~ARG[0] * ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.negateInteger"
    , "type"      : "negateInteger :: Integer -> Integer"
    , "templateE" : "-~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.absInteger"
    , "type"      : "absInteger :: Integer -> Integer"
    , "templateE" : "(~ARG[0] < ~SIZE[~TYPO]'sd0) ? -~ARG[0] : ~ARG[0]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.divInteger"
    , "type"      : "divInteger :: Integer -> Integer -> Integer"
    , "templateD" :
"// divInteger begin
// divide (rounds towards zero)
~SIGD[~GENSYM[quot_res][0]][0];
assign ~SYM[0] = ~VAR[dividend][0] / ~VAR[divider][1];

// round toward minus infinity
assign ~RESULT = (~VAR[dividend][0][~SIZE[~TYPO]-1] == ~VAR[divider][1][~SIZE[~TYPO]-1]) ? ~SYM[0] : ~SYM[0] - ~SIZE[~TYPO]'sd1;
// divInteger end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.modInteger"
    , "type"      : "modInteger :: Integer -> Integer -> Integer"
    , "templateD" :
"// modInteger begin
// remainder
~SIGD[~GENSYM[rem_res][0]][0];
assign ~SYM[0] = ~VAR[dividend][0] % ~VAR[divider][1];

// modulo
assign ~RESULT = (~VAR[dividend][0][~SIZE[~TYPO]-1] == ~VAR[divider][1][~SIZE[~TYPO]-1]) ?
                 ~SYM[0] :
                 ((~VAR[dividend][0] == ~SIZE[~TYPO]'sd0) ? ~SIZE[~TYPO]'sd0 : ~SYM[0] + ~VAR[divider][1]);
// modInteger end"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.quotInteger"
    , "type"      : "quotInteger :: Integer -> Integer -> Integer"
    , "templateE" : "~ARG[0] / ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.remInteger"
    , "type"      : "remInteger :: Integer -> Integer -> Integer"
    , "templateE" : "~ARG[0] % ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.eqInteger"
    , "type"      : "eqInteger :: Integer -> Integer -> Bool"
    , "templateE" : "~ARG[0] == ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.neqInteger"
    , "type"      : "neqInteger :: Integer -> Integer -> Bool"
    , "templateE" : "~ARG[0] != ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.leInteger"
    , "type"      : "leInteger :: Integer -> Integer -> Bool"
    , "templateE" : "~ARG[0] <= ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.gtInteger"
    , "type"      : "gtInteger :: Integer -> Integer -> Bool"
    , "templateE" : "~ARG[0] > ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.ltInteger"
    , "type"      : "ltInteger :: Integer -> Integer -> Bool"
    , "templateE" : "~ARG[0] < ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.geInteger"
    , "type"      : "geInteger :: Integer -> Integer -> Bool"
    , "templateE" : "~ARG[0] >= ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.eqInteger#"
    , "type"      : "eqInteger :: Integer -> Integer -> Bool"
    , "templateE" : "(~ARG[0] == ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.neqInteger#"
    , "type"      : "neqInteger :: Integer -> Integer -> Bool"
    , "templateE" : "(~ARG[0] != ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.leInteger#"
    , "type"      : "leInteger :: Integer -> Integer -> Bool"
    , "templateE" : "(~ARG[0] <= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.gtInteger#"
    , "type"      : "gtInteger :: Integer -> Integer -> Bool"
    , "templateE" : "(~ARG[0] > ~ARG[1] ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.ltInteger#"
    , "type"      : "ltInteger :: Integer -> Integer -> Bool"
    , "templateE" : "(~ARG[0] < ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.geInteger#"
    , "type"      : "geInteger :: Integer -> Integer -> Bool"
    , "templateE" : "(~ARG[0] >= ~ARG[1]) ? ~SIZE[~TYPO]'sd1 : ~SIZE[~TYPO]'sd0"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.shiftRInteger"
    , "type"      : "shiftRInteger :: Integer -> Int# -> Integer"
    , "templateE" : "~ARG[0] >>> ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.shiftLInteger"
    , "type"      : "shiftLInteger :: Integer -> Int# -> Integer"
    , "templateE" : "~ARG[0] <<< ~ARG[1]"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.wordToInteger"
    , "type"      : "wordToInteger :: Word# -> Integer"
    , "templateD" : "assign ~RESULT = $signed(~ARG[0]);"
    }
  }
, { "BlackBox" :
    { "name"      : "GHC.Integer.Type.integerToWord"
    , "type"      : "integerToWord :: Integer -> Word#"
    , "templateD" : "assign ~RESULT = $unsigned(~ARG[0]);"
    }
  }
]