ddc-code-0.4.1.1: salt/primitive64/Int.dcs
-- | Int primitives for 64-bit machines.
module Int
export value
boxInt : [r : Region]. Int# -> Ptr# r Obj
unboxInt : [r : Region]. Ptr# r Obj -> Int#
addInt : [r1 r2 r3 : Region]. Ptr# r1 Obj -> Ptr# r2 Obj -> Ptr# r3 Obj
subInt : [r1 r2 r3 : Region]. Ptr# r1 Obj -> Ptr# r2 Obj -> Ptr# r3 Obj
mulInt : [r1 r2 r3 : Region]. Ptr# r1 Obj -> Ptr# r2 Obj -> Ptr# r3 Obj
import value
allocRawSmall :: [r : Region]. Tag# -> Nat# -> Ptr# r Obj
with letrec
boxInt [r : Region] (x : Int#) : Ptr# r Obj
= do obj = allocRawSmall TAG0# 8#
addr = takePtr# obj
write# addr 4# x
obj
unboxInt [r : Region] (obj : Ptr# r Obj) : Int#
= do addr = takePtr# obj
read# addr 4#
addInt [r1 r2 r3 : Region] (x : Ptr# r1 Obj) (y : Ptr# r2 Obj) : Ptr# r3 Obj
= boxInt (add# (unboxInt x) (unboxInt y))
subInt [r1 r2 r3 : Region] (x : Ptr# r1 Obj) (y : Ptr# r2 Obj) : Ptr# r3 Obj
= boxInt (sub# (unboxInt x) (unboxInt y))
mulInt [r1 r2 r3 : Region] (x : Ptr# r1 Obj) (y : Ptr# r2 Obj) : Ptr# r3 Obj
= boxInt (mul# (unboxInt x) (unboxInt y))