interface for posit8, quire8, posit16, and quire16
[sfpy.git] / cposit.pxd
1 from libc.stdint cimport *
2
3 cdef extern from 'SoftPosit/source/include/softposit.h':
4
5 ctypedef struct posit8_t:
6 pass
7
8 ctypedef struct posit16_t:
9 pass
10
11 ctypedef struct posit32_t:
12 pass
13
14 ctypedef struct posit64_t:
15 pass
16
17 ctypedef struct posit128_t:
18 pass
19
20 ctypedef struct quire8_t:
21 pass
22
23 ctypedef struct quire16_t:
24 pass
25
26 ctypedef struct quire32_t:
27 pass
28
29 # /*----------------------------------------------------------------------------
30 # | Integer-to-posit conversion routines.
31 # *----------------------------------------------------------------------------*/
32
33 posit8_t ui32_to_p8( uint32_t );
34 posit16_t ui32_to_p16( uint32_t );
35 posit32_t ui32_to_p32( uint32_t );
36 posit64_t ui32_to_p64( uint32_t );
37
38 posit8_t ui64_to_p8( uint64_t );
39 posit16_t ui64_to_p16( uint64_t );
40 posit32_t ui64_to_p32( uint64_t );
41 posit64_t ui64_to_p64( uint64_t );
42
43 posit8_t i32_to_p8( int32_t );
44 posit16_t i32_to_p16( int32_t );
45 posit32_t i32_to_p32( int32_t );
46 posit64_t i32_to_p64( int32_t );
47
48 posit8_t i64_to_p8( int64_t );
49 posit16_t i64_to_p16( int64_t );
50 posit32_t i64_to_p32( int64_t );
51 posit64_t i64_to_p64( int64_t );
52
53 # /*----------------------------------------------------------------------------
54 # | 8-bit (quad-precision) posit operations.
55 # *----------------------------------------------------------------------------*/
56
57 bint isNaRP8UI( uint8_t );
58
59 uint_fast32_t p8_to_ui32( posit8_t );
60 uint_fast64_t p8_to_ui64( posit8_t );
61 int_fast32_t p8_to_i32( posit8_t );
62 int_fast64_t p8_to_i64( posit8_t );
63
64 posit16_t p8_to_p16( posit8_t );
65 #posit32_t p8_to_p32( posit8_t );
66 #posit64_t p8_to_p64( posit8_t );
67
68 posit8_t p8_roundToInt( posit8_t );
69 posit8_t p8_add( posit8_t, posit8_t );
70 posit8_t p8_sub( posit8_t, posit8_t );
71 posit8_t p8_mul( posit8_t, posit8_t );
72 posit8_t p8_mulAdd( posit8_t, posit8_t, posit8_t );
73 posit8_t p8_div( posit8_t, posit8_t );
74 posit8_t p8_sqrt( posit8_t );
75 bint p8_eq( posit8_t, posit8_t );
76 bint p8_le( posit8_t, posit8_t );
77 bint p8_lt( posit8_t, posit8_t );
78
79 # Quire 8
80 quire8_t q8_fdp_add( quire8_t, posit8_t, posit8_t );
81 quire8_t q8_fdp_sub( quire8_t, posit8_t, posit8_t );
82 posit8_t q8_to_p8( quire8_t );
83
84 bint isNaRQ8( quire8_t );
85 bint isQ8Zero( quire8_t );
86 quire8_t q8_clr( quire8_t );
87 quire8_t castQ8( uint32_t );
88 posit8_t castP8( uint8_t );
89 uint8_t castUI8( posit8_t );
90 posit8_t negP8( posit8_t );
91
92 # Helper
93 double convertP8ToDouble( posit8_t );
94 posit8_t convertDoubleToP8( double );
95
96 # /*----------------------------------------------------------------------------
97 # | 16-bit (half-precision) posit operations.
98 # *----------------------------------------------------------------------------*/
99
100 bint isNaRP16UI( uint16_t );
101
102 uint_fast32_t p16_to_ui32( posit16_t );
103 uint_fast64_t p16_to_ui64( posit16_t );
104 int_fast32_t p16_to_i32( posit16_t);
105 int_fast64_t p16_to_i64( posit16_t );
106 posit8_t p16_to_p8( posit16_t );
107 #posit32_t p16_to_p32( posit16_t );
108 #posit64_t p16_to_p64( posit16_t );
109
110 posit16_t p16_roundToInt( posit16_t);
111 posit16_t p16_add( posit16_t, posit16_t );
112 posit16_t p16_sub( posit16_t, posit16_t );
113 posit16_t p16_mul( posit16_t, posit16_t );
114 posit16_t p16_mulAdd( posit16_t, posit16_t, posit16_t );
115 posit16_t p16_div( posit16_t, posit16_t );
116 posit16_t p16_sqrt( posit16_t );
117 bint p16_eq( posit16_t, posit16_t );
118 bint p16_le( posit16_t, posit16_t );
119 bint p16_lt( posit16_t, posit16_t );
120
121 #Quire 16
122 quire16_t q16_fdp_add( quire16_t, posit16_t, posit16_t );
123 quire16_t q16_fdp_sub( quire16_t, posit16_t, posit16_t );
124 #posit16_t convertQ16ToP16( quire16_t );
125 posit16_t q16_to_p16( quire16_t );
126
127 bint isNaRQ16( quire16_t );
128 bint isQ16Zero( quire16_t );
129 #quire16_t q16_TwosComplement( quire16_t );
130
131 #void printBinary( uint64_t*, int );
132 #void printHex( uint64_t );
133
134 quire16_t q16_clr( quire16_t );
135 quire16_t castQ16( uint16_t, uint16_t );
136 posit16_t castP16( uint16_t );
137 uint16_t castUI16( posit16_t );
138 posit16_t negP16( posit16_t );
139
140 # Helper
141 double convertP16ToDouble( posit16_t );
142 #posit16_t convertFloatToP16( float );
143 posit16_t convertDoubleToP16( double );