Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove old-style arithmetic primitives #292

Merged
merged 19 commits into from
Mar 21, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions basis-library/primitive/basis-ffi.sml
Original file line number Diff line number Diff line change
Expand Up @@ -1307,6 +1307,7 @@ val rem = _import "WordU16_rem" private : Word16.t * Word16.t -> Word16.t;
val rndToReal32 = _import "WordU16_rndToReal32" private : Word16.t -> Real32.t;
val rndToReal64 = _import "WordU16_rndToReal64" private : Word16.t -> Real64.t;
val rshift = _import "WordU16_rshift" private : Word16.t * Word32.t -> Word16.t;
val subCheckP = _import "WordU16_subCheckP" private : Word16.t * Word16.t -> Bool.t;
end
structure WordU32 =
struct
Expand All @@ -1326,6 +1327,7 @@ val rem = _import "WordU32_rem" private : Word32.t * Word32.t -> Word32.t;
val rndToReal32 = _import "WordU32_rndToReal32" private : Word32.t -> Real32.t;
val rndToReal64 = _import "WordU32_rndToReal64" private : Word32.t -> Real64.t;
val rshift = _import "WordU32_rshift" private : Word32.t * Word32.t -> Word32.t;
val subCheckP = _import "WordU32_subCheckP" private : Word32.t * Word32.t -> Bool.t;
end
structure WordU64 =
struct
Expand All @@ -1345,6 +1347,7 @@ val rem = _import "WordU64_rem" private : Word64.t * Word64.t -> Word64.t;
val rndToReal32 = _import "WordU64_rndToReal32" private : Word64.t -> Real32.t;
val rndToReal64 = _import "WordU64_rndToReal64" private : Word64.t -> Real64.t;
val rshift = _import "WordU64_rshift" private : Word64.t * Word32.t -> Word64.t;
val subCheckP = _import "WordU64_subCheckP" private : Word64.t * Word64.t -> Bool.t;
end
structure WordU8 =
struct
Expand All @@ -1364,6 +1367,7 @@ val rem = _import "WordU8_rem" private : Word8.t * Word8.t -> Word8.t;
val rndToReal32 = _import "WordU8_rndToReal32" private : Word8.t -> Real32.t;
val rndToReal64 = _import "WordU8_rndToReal64" private : Word8.t -> Real64.t;
val rshift = _import "WordU8_rshift" private : Word8.t * Word32.t -> Word8.t;
val subCheckP = _import "WordU8_subCheckP" private : Word8.t * Word8.t -> Bool.t;
end
end
end
1 change: 0 additions & 1 deletion basis-library/primitive/prim-basis.sml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ structure Exn =
type exn = t
exception Bind = Bind
exception Match = Match
exception PrimOverflow = Overflow
end
structure List =
struct
Expand Down
80 changes: 16 additions & 64 deletions basis-library/primitive/prim-int.sml
Original file line number Diff line number Diff line change
Expand Up @@ -116,36 +116,24 @@ structure Int8 =

val +? = _prim "WordS8_addCheckP": int * int -> bool;
val +! = _prim "Word8_add": int * int -> int;
val +$ = if Controls.newOverflow then
Exn.mkOverflow (+!, +?)
else
Exn.wrapOverflow (_prim "WordS8_addCheck": int * int -> int;)
val +$ = Exn.mkOverflow (+!, +?)
val + = if Controls.detectOverflow then +$ else +!

val *? = _prim "WordS8_mulCheckP": int * int -> bool;
val *! = _prim "WordS8_mul": int * int -> int;
val *$ = if Controls.newOverflow then
Exn.mkOverflow ( *!, *? )
else
Exn.wrapOverflow (_prim "WordS8_mulCheck": int * int -> int;)
val *$ = Exn.mkOverflow ( *!, *? )
val * = if Controls.detectOverflow then *$ else *!

val ~? = _prim "Word8_negCheckP": int -> bool;
val ~! = _prim "Word8_neg": int -> int;
val ~$ = if Controls.newOverflow then
Exn.mkOverflow (~!, ~?)
else
Exn.wrapOverflow (_prim "Word8_negCheck": int -> int;)
val ~$ = Exn.mkOverflow (~!, ~?)
val ~ = if Controls.detectOverflow then ~$ else ~!

val quotUnsafe = _prim "WordS8_quot": int * int -> int;

val -? = _prim "WordS8_subCheckP": int * int -> bool;
val -! = _prim "Word8_sub": int * int -> int;
val -$ = if Controls.newOverflow then
Exn.mkOverflow (-!, -?)
else
Exn.wrapOverflow (_prim "WordS8_subCheck": int * int -> int;)
val -$ = Exn.mkOverflow (-!, -?)
val - = if Controls.detectOverflow then -$ else -!

val remUnsafe = _prim "WordS8_rem": int * int -> int;
Expand Down Expand Up @@ -228,36 +216,24 @@ structure Int16 =

val +? = _prim "WordS16_addCheckP": int * int -> bool;
val +! = _prim "Word16_add": int * int -> int;
val +$ = if Controls.newOverflow then
Exn.mkOverflow (+!, +?)
else
Exn.wrapOverflow (_prim "WordS16_addCheck": int * int -> int;)
val +$ = Exn.mkOverflow (+!, +?)
val + = if Controls.detectOverflow then +$ else +!

val *? = _prim "WordS16_mulCheckP": int * int -> bool;
val *! = _prim "WordS16_mul": int * int -> int;
val *$ = if Controls.newOverflow then
Exn.mkOverflow ( *!, *? )
else
Exn.wrapOverflow (_prim "WordS16_mulCheck": int * int -> int;)
val *$ = Exn.mkOverflow ( *!, *? )
val * = if Controls.detectOverflow then *$ else *!

val ~? = _prim "Word16_negCheckP": int -> bool;
val ~! = _prim "Word16_neg": int -> int;
val ~$ = if Controls.newOverflow then
Exn.mkOverflow (~!, ~?)
else
Exn.wrapOverflow (_prim "Word16_negCheck": int -> int;)
val ~$ = Exn.mkOverflow (~!, ~?)
val ~ = if Controls.detectOverflow then ~$ else ~!

val quotUnsafe = _prim "WordS16_quot": int * int -> int;

val -? = _prim "WordS16_subCheckP": int * int -> bool;
val -! = _prim "Word16_sub": int * int -> int;
val -$ = if Controls.newOverflow then
Exn.mkOverflow (-!, -?)
else
Exn.wrapOverflow (_prim "WordS16_subCheck": int * int -> int;)
val -$ = Exn.mkOverflow (-!, -?)
val - = if Controls.detectOverflow then -$ else -!

val remUnsafe = _prim "WordS16_rem": int * int -> int;
Expand Down Expand Up @@ -404,36 +380,24 @@ structure Int32 =

val +? = _prim "WordS32_addCheckP": int * int -> bool;
val +! = _prim "Word32_add": int * int -> int;
val +$ = if Controls.newOverflow then
Exn.mkOverflow (+!, +?)
else
Exn.wrapOverflow (_prim "WordS32_addCheck": int * int -> int;)
val +$ = Exn.mkOverflow (+!, +?)
val + = if Controls.detectOverflow then +$ else +!

val *? = _prim "WordS32_mulCheckP": int * int -> bool;
val *! = _prim "WordS32_mul": int * int -> int;
val *$ = if Controls.newOverflow then
Exn.mkOverflow ( *!, *? )
else
Exn.wrapOverflow (_prim "WordS32_mulCheck": int * int -> int;)
val *$ = Exn.mkOverflow ( *!, *? )
val * = if Controls.detectOverflow then *$ else *!

val ~? = _prim "Word32_negCheckP": int -> bool;
val ~! = _prim "Word32_neg": int -> int;
val ~$ = if Controls.newOverflow then
Exn.mkOverflow (~!, ~?)
else
Exn.wrapOverflow (_prim "Word32_negCheck": int -> int;)
val ~$ = Exn.mkOverflow (~!, ~?)
val ~ = if Controls.detectOverflow then ~$ else ~!

val quotUnsafe = _prim "WordS32_quot": int * int -> int;

val -? = _prim "WordS32_subCheckP": int * int -> bool;
val -! = _prim "Word32_sub": int * int -> int;
val -$ = if Controls.newOverflow then
Exn.mkOverflow (-!, -?)
else
Exn.wrapOverflow (_prim "WordS32_subCheck": int * int -> int;)
val -$ = Exn.mkOverflow (-!, -?)
val - = if Controls.detectOverflow then -$ else -!

val remUnsafe = _prim "WordS32_rem": int * int -> int;
Expand All @@ -460,36 +424,24 @@ structure Int64 =

val +? = _prim "WordS64_addCheckP": int * int -> bool;
val +! = _prim "Word64_add": int * int -> int;
val +$ = if Controls.newOverflow then
Exn.mkOverflow (+!, +?)
else
Exn.wrapOverflow (_prim "WordS64_addCheck": int * int -> int;)
val +$ = Exn.mkOverflow (+!, +?)
val + = if Controls.detectOverflow then +$ else +!

val *? = _prim "WordS64_mulCheckP": int * int -> bool;
val *! = _prim "WordS64_mul": int * int -> int;
val *$ = if Controls.newOverflow then
Exn.mkOverflow ( *!, *? )
else
Exn.wrapOverflow (_prim "WordS64_mulCheck": int * int -> int;)
val *$ = Exn.mkOverflow ( *!, *? )
val * = if Controls.detectOverflow then *$ else *!

val ~? = _prim "Word64_negCheckP": int -> bool;
val ~! = _prim "Word64_neg": int -> int;
val ~$ = if Controls.newOverflow then
Exn.mkOverflow (~!, ~?)
else
Exn.wrapOverflow (_prim "Word64_negCheck": int -> int;)
val ~$ = Exn.mkOverflow (~!, ~?)
val ~ = if Controls.detectOverflow then ~$ else ~!

val quotUnsafe = _prim "WordS64_quot": int * int -> int;

val -? = _prim "WordS64_subCheckP": int * int -> bool;
val -! = _prim "Word64_sub": int * int -> int;
val -$ = if Controls.newOverflow then
Exn.mkOverflow (-!, -?)
else
Exn.wrapOverflow (_prim "WordS64_subCheck": int * int -> int;)
val -$ = Exn.mkOverflow (-!, -?)
val - = if Controls.detectOverflow then -$ else -!

val remUnsafe = _prim "WordS64_rem": int * int -> int;
Expand Down
3 changes: 0 additions & 3 deletions basis-library/primitive/prim1.sml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ structure Controls =
struct
val debug = _command_line_const "MLton.debug": bool = false;
val detectOverflow = _command_line_const "MLton.detectOverflow": bool = true;
val newOverflow = _command_line_const "MLton.newOverflow": bool = false;
val safe = _command_line_const "MLton.safe": bool = true;
val bufSize = _command_line_const "TextIO.bufSize": Int32.int = 4096;
end
Expand All @@ -58,8 +57,6 @@ structure Exn =
let val r = ! a
in if ? a then raise Overflow else r
end
val wrapOverflow: ('a -> 'b) -> ('a -> 'b) =
fn f => fn a => f a handle PrimOverflow => raise Overflow
end

structure Order =
Expand Down
110 changes: 0 additions & 110 deletions include/c-chunk.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,115 +219,5 @@ MLTON_CODEGEN_MEMCPY(void * memcpy(void *, const void*, size_t);)
#include "basis/Real/Math-fns.h"
#include "basis/Word/Word-ops.h"
#include "basis/Word/Word-consts.h"
#include "basis/Word/Word-check.h"

/* ------------------------------------------------- */
/* Word */
/* ------------------------------------------------- */

#define WordS_addCheckCX(size, dst, cW, xW, l) \
do { \
WordS##size c = cW; \
WordS##size x = xW; \
WordS_addCheckBodyCX(size, c, x, goto l, dst = c + x); \
} while (0)
#define WordS8_addCheckCX(dst, c, x, l) WordS_addCheckCX(8, dst, c, x, l)
#define WordS16_addCheckCX(dst, c, x, l) WordS_addCheckCX(16, dst, c, x, l)
#define WordS32_addCheckCX(dst, c, x, l) WordS_addCheckCX(32, dst, c, x, l)
#define WordS64_addCheckCX(dst, c, x, l) WordS_addCheckCX(64, dst, c, x, l)

#define WordS8_addCheckXC(dst, x, c, l) WordS8_addCheckCX(dst, c, x, l)
#define WordS16_addCheckXC(dst, x, c, l) WordS16_addCheckCX(dst, c, x, l)
#define WordS32_addCheckXC(dst, x, c, l) WordS32_addCheckCX(dst, c, x, l)
#define WordS64_addCheckXC(dst, x, c, l) WordS64_addCheckCX(dst, c, x, l)

#define WordS8_addCheck WordS8_addCheckXC
#define WordS16_addCheck WordS16_addCheckXC
#define WordS32_addCheck WordS32_addCheckXC
#define WordS64_addCheck WordS64_addCheckXC


#define WordU_addCheckCX(size, dst, cW, xW, l) \
do { \
WordU##size c = cW; \
WordU##size x = xW; \
WordU_addCheckBodyCX(size, c, x, goto l, dst = c + x); \
} while (0)
#define WordU8_addCheckCX(dst, c, x, l) WordU_addCheckCX(8, dst, c, x, l)
#define WordU16_addCheckCX(dst, c, x, l) WordU_addCheckCX(16, dst, c, x, l)
#define WordU32_addCheckCX(dst, c, x, l) WordU_addCheckCX(32, dst, c, x, l)
#define WordU64_addCheckCX(dst, c, x, l) WordU_addCheckCX(64, dst, c, x, l)

#define WordU8_addCheckXC(dst, x, c, l) WordU8_addCheckCX(dst, c, x, l)
#define WordU16_addCheckXC(dst, x, c, l) WordU16_addCheckCX(dst, c, x, l)
#define WordU32_addCheckXC(dst, x, c, l) WordU32_addCheckCX(dst, c, x, l)
#define WordU64_addCheckXC(dst, x, c, l) WordU64_addCheckCX(dst, c, x, l)

#define WordU8_addCheck WordU8_addCheckXC
#define WordU16_addCheck WordU16_addCheckXC
#define WordU32_addCheck WordU32_addCheckXC
#define WordU64_addCheck WordU64_addCheckXC


#define WordS_negCheck(size, dst, xW, l) \
do { \
WordS##size x = xW; \
WordS_negCheckBody(size, x, goto l, dst = -x); \
} while (0)
#define Word8_negCheck(dst, x, l) WordS_negCheck(8, dst, x, l)
#define Word16_negCheck(dst, x, l) WordS_negCheck(16, dst, x, l)
#define Word32_negCheck(dst, x, l) WordS_negCheck(32, dst, x, l)
#define Word64_negCheck(dst, x, l) WordS_negCheck(64, dst, x, l)


#define WordS_subCheckCX(size, dst, cW, xW, l) \
do { \
WordS##size c = cW; \
WordS##size x = xW; \
WordS_subCheckBodyCX(size, c, x, goto l, dst = c - x); \
} while (0)
#define WordS8_subCheckCX(dst, c, x, l) WordS_subCheckCX(8, dst, c, x, l)
#define WordS16_subCheckCX(dst, c, x, l) WordS_subCheckCX(16, dst, c, x, l)
#define WordS32_subCheckCX(dst, c, x, l) WordS_subCheckCX(32, dst, c, x, l)
#define WordS64_subCheckCX(dst, c, x, l) WordS_subCheckCX(64, dst, c, x, l)

#define WordS_subCheckXC(size, dst, xW, cW, l) \
do { \
WordS##size x = xW; \
WordS##size c = cW; \
WordS_subCheckBodyXC(size, x, c, goto l, dst = x - c); \
} while (0)
#define WordS8_subCheckXC(dst, x, c, l) WordS_subCheckXC(8, dst, x, c, l)
#define WordS16_subCheckXC(dst, x, c, l) WordS_subCheckXC(16, dst, x, c, l)
#define WordS32_subCheckXC(dst, x, c, l) WordS_subCheckXC(32, dst, x, c, l)
#define WordS64_subCheckXC(dst, x, c, l) WordS_subCheckXC(64, dst, x, c, l)

#define WordS8_subCheck WordS8_subCheckXC
#define WordS16_subCheck WordS16_subCheckXC
#define WordS32_subCheck WordS32_subCheckXC
#define WordS64_subCheck WordS64_subCheckXC


#define WordS_mulCheck(size, dst, xW, yW, l) \
do { \
WordS##size x = xW; \
WordS##size y = yW; \
WordS_mulCheckBody(size, x, y, goto l, dst = x * y); \
} while (0)
#define WordS8_mulCheck(dst, x, y, l) WordS_mulCheck(8, dst, x, y, l)
#define WordS16_mulCheck(dst, x, y, l) WordS_mulCheck(16, dst, x, y, l)
#define WordS32_mulCheck(dst, x, y, l) WordS_mulCheck(32, dst, x, y, l)
#define WordS64_mulCheck(dst, x, y, l) WordS_mulCheck(64, dst, x, y, l)

#define WordU_mulCheck(size, dst, xW, yW, l) \
do { \
WordU##size x = xW; \
WordU##size y = yW; \
WordU_mulCheckBody(size, x, y, goto l, dst = x * y); \
} while (0)
#define WordU8_mulCheck(dst, x, y, l) WordU_mulCheck(8, dst, x, y, l)
#define WordU16_mulCheck(dst, x, y, l) WordU_mulCheck(16, dst, x, y, l)
#define WordU32_mulCheck(dst, x, y, l) WordU_mulCheck(32, dst, x, y, l)
#define WordU64_mulCheck(dst, x, y, l) WordU_mulCheck(64, dst, x, y, l)

#endif /* #ifndef _C_CHUNK_H_ */
1 change: 0 additions & 1 deletion mlton/atoms/prim-cons.fun
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,5 @@ val truee = fromString "true"
(* exception constructors *)
val bind = fromString "Bind"
val match = fromString "Match"
val overflow = fromString "Overflow"

end
1 change: 0 additions & 1 deletion mlton/atoms/prim-cons.sig
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ signature PRIM_CONS =
val falsee: con
val match: con
val nill: con
val overflow: con
val reff: con
val truee: con
end
Loading