Skip to content

Commit 5b97a69

Browse files
committed
Fix bugs in converted posit platform
1 parent c7d1f12 commit 5b97a69

File tree

1 file changed

+43
-41
lines changed

1 file changed

+43
-41
lines changed

infra/softposit.rkt

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
;;; Softposit platform, using David Thien's softposit-rkt package for
44
;;; bindings. Provides operations like real->posit16 or +.p16.
55

6-
(require softposit-rkt)
6+
(require math/bigfloat
7+
math/flonum
8+
softposit-rkt)
79

810
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; utils ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
911

@@ -140,24 +142,24 @@
140142

141143
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BOOLEAN IMPLS ;;;;;;;;;;;;;;;;;;;;;;;;;
142144

143-
(define-representation <bool> #:cost boolean-move-cost)
145+
(define-representation <bool> #:cost 1)
144146

145147
(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])
148150

149151
(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])
152154

153155
(define-operation (not [x <bool>]) <bool>
154-
#:spec (not x) #:impl not #:cost boolean-move-cost)
156+
#:spec (not x) #:impl not #:cost 1)
155157

156158
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; POSIT IMPLS ;;;;;;;;;;;;;;;;;;;;;;;;;;;
157159

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)
161163

162164
(define-operations ([x <posit8>] [y <posit8>]) <bool>
163165
[==.p8 #:spec (== x y) #:impl posit8= #:cost 1]
@@ -168,7 +170,7 @@
168170

169171
(parameterize ([fpcore-context '(:precision posit8)])
170172
(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]
172174
[sqrt.p8 #:spec (sqrt x) #:impl posit8-sqrt #:cost 1])
173175

174176
(define-operations ([x <posit8>] [y <posit8>]) <posit8>
@@ -186,7 +188,7 @@
186188

187189
(parameterize ([fpcore-context '(:precision posit16)])
188190
(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]
190192
[sqrt.p16 #:spec (sqrt x) #:impl posit16-sqrt #:cost 1])
191193

192194
(define-operations ([x <posit16>] [y <posit16>]) <posit16>
@@ -204,7 +206,7 @@
204206

205207
(parameterize ([fpcore-context '(:precision posit32)])
206208
(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]
208210
[sqrt.p32 #:spec (sqrt x) #:impl posit32-sqrt #:cost 1])
209211

210212
(define-operations ([x <posit32>] [y <posit32>]) <posit32>
@@ -215,64 +217,64 @@
215217

216218
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QUIRE OPERATIONS ;;;;;;;;;;;;;;;;;;;;;;;
217219

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)
221223

222224
(parameterize ([fpcore-context '(:precision quire8)])
223225
(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]))
226228

227229
(parameterize ([fpcore-context '(:precision quire16)])
228230
(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]))
231233

232234
(parameterize ([fpcore-context '(:precision quire32)])
233235
(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]))
236238

237239
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CONVERTERS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
238240

239-
(define-representation <binary64> #:cost cost)
241+
(define-representation <binary64> #:cost 1)
240242

241243
(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)
243245
(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)
245247
(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)
247249
(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)
249251
(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)
251253
(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)
253255

254256
(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)
256258
(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)
258260
(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)
260262
(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)
262264
(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)
264266
(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)
266268

267269
(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)
269271
(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)
271273
(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)
273275
(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)
275277
(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)
277279
(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

Comments
 (0)