|
3 | 3 | ;;; Softposit platform, using David Thien's softposit-rkt package for |
4 | 4 | ;;; bindings. Provides operations like real->posit16 or +.p16. |
5 | 5 |
|
6 | | -(require softposit-rkt) |
| 6 | +(require math/bigfloat |
| 7 | + math/flonum |
| 8 | + softposit-rkt) |
7 | 9 |
|
8 | 10 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; utils ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
9 | 11 |
|
|
140 | 142 |
|
141 | 143 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BOOLEAN IMPLS ;;;;;;;;;;;;;;;;;;;;;;;;; |
142 | 144 |
|
143 | | -(define-representation <bool> #:cost boolean-move-cost) |
| 145 | +(define-representation <bool> #:cost 1) |
144 | 146 |
|
145 | 147 | (define-operations () <bool> |
146 | | - [TRUE #:spec (TRUE) #:impl (const true) #:fpcore TRUE #:cost boolean-move-cost] |
147 | | - [FALSE #:spec (FALSE) #:impl (const false) #:fpcore FALSE #:cost boolean-move-cost]) |
| 148 | + [TRUE #:spec (TRUE) #:impl (const true) #:fpcore TRUE #:cost 1] |
| 149 | + [FALSE #:spec (FALSE) #:impl (const false) #:fpcore FALSE #:cost 1]) |
148 | 150 |
|
149 | 151 | (define-operations ([x <bool>] [y <bool>]) <bool> |
150 | | - [and #:spec (and x y) #:impl (lambda v (andmap values v)) #:cost boolean-move-cost] |
151 | | - [or #:spec (or x y) #:impl (lambda v (ormap values v)) #:cost boolean-move-cost]) |
| 152 | + [and #:spec (and x y) #:impl (lambda v (andmap values v)) #:cost 1] |
| 153 | + [or #:spec (or x y) #:impl (lambda v (ormap values v)) #:cost 1]) |
152 | 154 |
|
153 | 155 | (define-operation (not [x <bool>]) <bool> |
154 | | - #:spec (not x) #:impl not #:cost boolean-move-cost) |
| 156 | + #:spec (not x) #:impl not #:cost 1) |
155 | 157 |
|
156 | 158 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; POSIT IMPLS ;;;;;;;;;;;;;;;;;;;;;;;;;;; |
157 | 159 |
|
158 | | -(define-representation <posit8> #:cost cost) |
159 | | -(define-representation <posit16> #:cost cost) |
160 | | -(define-representation <posit32> #:cost cost) |
| 160 | +(define-representation <posit8> #:cost 1) |
| 161 | +(define-representation <posit16> #:cost 1) |
| 162 | +(define-representation <posit32> #:cost 1) |
161 | 163 |
|
162 | 164 | (define-operations ([x <posit8>] [y <posit8>]) <bool> |
163 | 165 | [==.p8 #:spec (== x y) #:impl posit8= #:cost 1] |
|
168 | 170 |
|
169 | 171 | (parameterize ([fpcore-context '(:precision posit8)]) |
170 | 172 | (define-operations ([x <posit8>]) <posit8> |
171 | | - [neg.p8 #:spec (neg x) #:impl posit8-neg #:cost 1] |
| 173 | + [neg.p8 #:spec (neg x) #:impl posit8-neg #:fpcore (- x) #:cost 1] |
172 | 174 | [sqrt.p8 #:spec (sqrt x) #:impl posit8-sqrt #:cost 1]) |
173 | 175 |
|
174 | 176 | (define-operations ([x <posit8>] [y <posit8>]) <posit8> |
|
186 | 188 |
|
187 | 189 | (parameterize ([fpcore-context '(:precision posit16)]) |
188 | 190 | (define-operations ([x <posit16>]) <posit16> |
189 | | - [neg.p16 #:spec (neg x) #:impl posit16-neg #:cost 1] |
| 191 | + [neg.p16 #:spec (neg x) #:impl posit16-neg #:fpcore (- x) #:cost 1] |
190 | 192 | [sqrt.p16 #:spec (sqrt x) #:impl posit16-sqrt #:cost 1]) |
191 | 193 |
|
192 | 194 | (define-operations ([x <posit16>] [y <posit16>]) <posit16> |
|
204 | 206 |
|
205 | 207 | (parameterize ([fpcore-context '(:precision posit32)]) |
206 | 208 | (define-operations ([x <posit32>]) <posit32> |
207 | | - [neg.p32 #:spec (neg x) #:impl posit32-neg #:cost 1] |
| 209 | + [neg.p32 #:spec (neg x) #:impl posit32-neg #:fpcore (- x) #:cost 1] |
208 | 210 | [sqrt.p32 #:spec (sqrt x) #:impl posit32-sqrt #:cost 1]) |
209 | 211 |
|
210 | 212 | (define-operations ([x <posit32>] [y <posit32>]) <posit32> |
|
215 | 217 |
|
216 | 218 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QUIRE OPERATIONS ;;;;;;;;;;;;;;;;;;;;;;; |
217 | 219 |
|
218 | | -(define-representation <quire8> #:cost cost) |
219 | | -(define-representation <quire16> #:cost cost) |
220 | | -(define-representation <quire32> #:cost cost) |
| 220 | +(define-representation <quire8> #:cost 1) |
| 221 | +(define-representation <quire16> #:cost 1) |
| 222 | +(define-representation <quire32> #:cost 1) |
221 | 223 |
|
222 | 224 | (parameterize ([fpcore-context '(:precision quire8)]) |
223 | 225 | (define-operations ([x <quire8>] [y <posit8>] [z <posit8>]) <quire8> |
224 | | - [quire8-mul-add #:spec (+ x (* y z)) #:impl quire8-fdp-add #:fpcore (fma y z x) #:cost 1] |
225 | | - [quire8-mul-sub #:spec (- x (* y z)) #:impl quire8-fdp-sub #:fpcore (fma (- y) z x) #:cost 1])) |
| 226 | + [quire8-mul-add #:spec (+ x (* y z)) #:impl quire8-fdp-add #:fpcore (fdp x y z) #:cost 1] |
| 227 | + [quire8-mul-sub #:spec (- x (* y z)) #:impl quire8-fdp-sub #:fpcore (fds x y z) #:cost 1])) |
226 | 228 |
|
227 | 229 | (parameterize ([fpcore-context '(:precision quire16)]) |
228 | 230 | (define-operations ([x <quire16>] [y <posit16>] [z <posit16>]) <quire16> |
229 | | - [quire16-mul-add #:spec (+ x (* y z)) #:impl quire16-fdp-add #:fpcore (fma y z x) #:cost 1] |
230 | | - [quire16-mul-sub #:spec (- x (* y z)) #:impl quire16-fdp-sub #:fpcore (fma (- y) z x) #:cost 1])) |
| 231 | + [quire16-mul-add #:spec (+ x (* y z)) #:impl quire16-fdp-add #:fpcore (fdp x y z) #:cost 1] |
| 232 | + [quire16-mul-sub #:spec (- x (* y z)) #:impl quire16-fdp-sub #:fpcore (fds x y z) #:cost 1])) |
231 | 233 |
|
232 | 234 | (parameterize ([fpcore-context '(:precision quire32)]) |
233 | 235 | (define-operations ([x <quire32>] [y <posit32>] [z <posit32>]) <quire32> |
234 | | - [quire32-mul-add #:spec (+ x (* y z)) #:impl quire32-fdp-add #:fpcore (fma y z x) #:cost 1] |
235 | | - [quire32-mul-sub #:spec (- x (* y z)) #:impl quire32-fdp-sub #:fpcore (fma (- y) z x) #:cost 1])) |
| 236 | + [quire32-mul-add #:spec (+ x (* y z)) #:impl quire32-fdp-add #:fpcore (fdp x y z) #:cost 1] |
| 237 | + [quire32-mul-sub #:spec (- x (* y z)) #:impl quire32-fdp-sub #:fpcore (fds x y z) #:cost 1])) |
236 | 238 |
|
237 | 239 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CONVERTERS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
238 | 240 |
|
239 | | -(define-representation <binary64> #:cost cost) |
| 241 | +(define-representation <binary64> #:cost 1) |
240 | 242 |
|
241 | 243 | (define-operation (binary64->posit8 [x <binary64>]) <posit8> |
242 | | - #:spec x #:impl double->posit8 #:fpcore (! :precision posit8 (cast x)) #:cost cost] |
| 244 | + #:spec x #:impl double->posit8 #:fpcore (! :precision posit8 (cast x)) #:cost 1) |
243 | 245 | (define-operation (binary64->posit16 [x <binary64>]) <posit16> |
244 | | - #:spec x #:impl double->posit16 #:fpcore (! :precision posit16 (cast x)) #:cost cost] |
| 246 | + #:spec x #:impl double->posit16 #:fpcore (! :precision posit16 (cast x)) #:cost 1) |
245 | 247 | (define-operation (binary64->posit32 [x <binary64>]) <posit32> |
246 | | - #:spec x #:impl double->posit32 #:fpcore (! :precision posit32 (cast x)) #:cost cost] |
| 248 | + #:spec x #:impl double->posit32 #:fpcore (! :precision posit32 (cast x)) #:cost 1) |
247 | 249 | (define-operation (posit8->binary64 [x <posit8>]) <binary64> |
248 | | - #:spec x #:impl posit8->double #:fpcore (! :precision binary64 (cast x)) #:cost cost] |
| 250 | + #:spec x #:impl posit8->double #:fpcore (! :precision binary64 (cast x)) #:cost 1) |
249 | 251 | (define-operation (posit16->binary64 [x <posit16>]) <binary64> |
250 | | - #:spec x #:impl posit16->double #:fpcore (! :precision binary64 (cast x)) #:cost cost] |
| 252 | + #:spec x #:impl posit16->double #:fpcore (! :precision binary64 (cast x)) #:cost 1) |
251 | 253 | (define-operation (posit32->binary64 [x <posit32>]) <binary64> |
252 | | - #:spec x #:impl posit32->double #:fpcore (! :precision binary64 (cast x)) #:cost cost] |
| 254 | + #:spec x #:impl posit32->double #:fpcore (! :precision binary64 (cast x)) #:cost 1) |
253 | 255 |
|
254 | 256 | (define-operation (binary64->quire8 [x <binary64>]) <quire8> |
255 | | - #:spec x #:impl double->quire8 #:fpcore (! :precision quire8 (cast x)) #:cost cost] |
| 257 | + #:spec x #:impl double->quire8 #:fpcore (! :precision quire8 (cast x)) #:cost 1) |
256 | 258 | (define-operation (binary64->quire16 [x <binary64>]) <quire16> |
257 | | - #:spec x #:impl double->quire16 #:fpcore (! :precision quire16 (cast x)) #:cost cost] |
| 259 | + #:spec x #:impl double->quire16 #:fpcore (! :precision quire16 (cast x)) #:cost 1) |
258 | 260 | (define-operation (binary64->quire32 [x <binary64>]) <quire32> |
259 | | - #:spec x #:impl double->quire32 #:fpcore (! :precision quire32 (cast x)) #:cost cost] |
| 261 | + #:spec x #:impl double->quire32 #:fpcore (! :precision quire32 (cast x)) #:cost 1) |
260 | 262 | (define-operation (quire8->binary64 [x <quire8>]) <binary64> |
261 | | - #:spec x #:impl quire8->double #:fpcore (! :precision binary64 (cast x)) #:cost cost] |
| 263 | + #:spec x #:impl quire8->double #:fpcore (! :precision binary64 (cast x)) #:cost 1) |
262 | 264 | (define-operation (quire16->binary64 [x <quire16>]) <binary64> |
263 | | - #:spec x #:impl quire16->double #:fpcore (! :precision binary64 (cast x)) #:cost cost] |
| 265 | + #:spec x #:impl quire16->double #:fpcore (! :precision binary64 (cast x)) #:cost 1) |
264 | 266 | (define-operation (quire32->binary64 [x <quire32>]) <binary64> |
265 | | - #:spec x #:impl quire32->double #:fpcore (! :precision binary64 (cast x)) #:cost cost] |
| 267 | + #:spec x #:impl quire32->double #:fpcore (! :precision binary64 (cast x)) #:cost 1) |
266 | 268 |
|
267 | 269 | (define-operation (quire8->posit8 [x <quire8>]) <posit8> |
268 | | - #:spec x #:impl quire8->posit8 #:fpcore (! :precision posit8 (cast x)) #:cost cost] |
| 270 | + #:spec x #:impl quire8->posit8 #:fpcore (! :precision posit8 (cast x)) #:cost 1) |
269 | 271 | (define-operation (quire16->posit16 [x <quire16>]) <posit16> |
270 | | - #:spec x #:impl quire16->posit16 #:fpcore (! :precision posit16 (cast x)) #:cost cost] |
| 272 | + #:spec x #:impl quire16->posit16 #:fpcore (! :precision posit16 (cast x)) #:cost 1) |
271 | 273 | (define-operation (quire32->posit32 [x <quire32>]) <posit32> |
272 | | - #:spec x #:impl quire32->posit32 #:fpcore (! :precision posit32 (cast x)) #:cost cost] |
| 274 | + #:spec x #:impl quire32->posit32 #:fpcore (! :precision posit32 (cast x)) #:cost 1) |
273 | 275 | (define-operation (posit8->quire8 [x <posit8>]) <quire8> |
274 | | - #:spec x #:impl posit8->quire8 #:fpcore (! :precision quire8 (cast x)) #:cost cost] |
| 276 | + #:spec x #:impl posit8->quire8 #:fpcore (! :precision quire8 (cast x)) #:cost 1) |
275 | 277 | (define-operation (posit16->quire16 [x <posit16>]) <quire16> |
276 | | - #:spec x #:impl posit16->quire16 #:fpcore (! :precision quire16 (cast x)) #:cost cost] |
| 278 | + #:spec x #:impl posit16->quire16 #:fpcore (! :precision quire16 (cast x)) #:cost 1) |
277 | 279 | (define-operation (posit32->quire32 [x <posit32>]) <quire32> |
278 | | - #:spec x #:impl posit32->quire32 #:fpcore (! :precision quire32 (cast x)) #:cost cost])) |
| 280 | + #:spec x #:impl posit32->quire32 #:fpcore (! :precision quire32 (cast x)) #:cost 1) |
0 commit comments