bignums and native back end

Top Pagina
Bijlagen:
Bericht als e-mail
+ (text/plain)
Delete this message
Reply to this message
Auteur: Stephen Weeks
Datum:  
Aan: MLton
Onderwerp: bignums and native back end

>    If you are comparing (i.e., polymorphic  equality)  an  IntInf.int  to  a
>        constant  IntInf.int, and the constant is small enough to be a fixnum
>        (i.e., in the range [-2^31, 2^31)), then the comparison  should  just
>        be a direct 32-bit compare.


This is already being done in cps/poly-equal.fun.

>    If  you are doing arithmetic and you use the IntInf_areSmall(x, y) macro,
>        if both x and y are small constants then the answer is  true.   If  x
>        (or  y)  is a small constant, then don't bother with the bitwise and,
>        just test y (or x) for being small.


I added both of these into the CPS shrinker. In the process I wented ahead and
added all the other algebraic laws I could think of.

x * 1 = 1 * x = x
x * ~1 = ~1 * x = ~x
x * 0 = 0 * x = 0
x + 0 = 0 + x = x
x - 0 = x
0 - x = ~x
x > x = x < x = false
x >= x = x <= x = true
equal(x, x) = true