mirror of
https://github.com/GaloisInc/cryptol.git
synced 2024-09-21 02:48:14 +03:00
4f8bc653e0
Fixes #1442
59 lines
1.6 KiB
Plaintext
59 lines
1.6 KiB
Plaintext
import Float
|
|
|
|
// Basic integral types
|
|
foreign add8 : [8] -> [8] -> [8]
|
|
foreign sub16 : [16] -> [16] -> [16]
|
|
foreign mul32 : [32] -> [32] -> [32]
|
|
foreign div64 : [64] -> [64] -> [64]
|
|
|
|
// Non-machine integer sizes
|
|
foreign extendInput : [3] -> [8]
|
|
foreign maskOutput : [8] -> [3]
|
|
foreign noBits : [0] -> [0]
|
|
|
|
// Bit
|
|
foreign not : Bit -> Bit
|
|
|
|
// Float
|
|
foreign addFloat32 : Float32 -> Float32 -> Float32
|
|
foreign subFloat64 : Float64 -> Float64 -> Float64
|
|
foreign specialFloats : [2] -> Float32
|
|
|
|
// Type synonyms
|
|
type Word32 = [32]
|
|
type MyFunc = Word32 -> Float32 -> Bit
|
|
foreign usesTypeSynonym : MyFunc
|
|
|
|
// Sequences
|
|
foreign sum10 : [10]Word32 -> Word32
|
|
foreign reverse5 : [5]Float64 -> [5]Float64
|
|
|
|
// Tuples and records
|
|
foreign compoundTypes : ([32], { x : [10], y : [3][20] }) -> { z : [5][20] }
|
|
-> { a : ([16], [16]), b : { c : [8][20], d : [5], e : [5] } }
|
|
|
|
// Polymorphic sizes
|
|
foreign typeToValue : {n} (fin n) => () -> [64]
|
|
foreign sumPoly : {n} (fin n) => [n]Word32 -> Word32
|
|
foreign inits : {n} (fin n) => [n][8] -> [n * (n + 1) / 2][8]
|
|
foreign zipMul3 : {n, m, p} (fin n, fin m, fin p) =>
|
|
[n]Float32 -> [m]Float32 -> [p]Float32 -> [min n (min m p)]Float32
|
|
|
|
// Nested sequences
|
|
foreign nestedSeq : {n, m, p} (fin n, fin m, fin p, n * m * p == 4 * 3 * 2) =>
|
|
[n][m][p][8] -> [4][3][2][8]
|
|
|
|
// Integers, Rationals, Z
|
|
foreign i2Q : Integer -> Rational
|
|
foreign i2Qs : Integer -> [2]Rational
|
|
foreign iQ2Qi : (Integer,Rational) -> (Rational,Integer)
|
|
foreign i2Z5 : Integer -> Z 5
|
|
foreign i2Z : {n} (fin n, n >= 1) => Integer -> Z n
|
|
|
|
// In a nested module
|
|
submodule A where
|
|
foreign nested : () -> [8]
|
|
|
|
|
|
|