summaryrefslogtreecommitdiff
path: root/lisp/ouat/macros.lisp
blob: 82df7498f358895efd944d3d2f3c84071aab7504 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
(in-package :ouat)

(macrolet 
    ((def-unary-op (name generic)
       `(defmacro ,name (arg)
	  `(,',generic (the fixnum ,arg))))
           
     (def-unary-32-op (name generic)
       `(defmacro! ,name (arg)
	  `(,',generic (the (unsigned-byte 32) ,arg))))
     
     (def-unary-fixnum-op (name generic)
       `(defmacro ,name (arg)
	  `(the fixnum (,',generic (the fixnum ,arg)))))
           
     (def-binary-op (name generic)
       `(defmacro ,name (left right)
	  `(,',generic (the fixnum ,left) (the fixnum ,right))))
           
     (def-binary-fixnum-op (name generic)
       `(defmacro ,name (left right)
	  `(the fixnum (,',generic (the fixnum ,left) (the fixnum ,right)))))
           
     (def-nary-op (name generic)
       `(defmacro ,name (&rest args)
	  `(,',generic ,@(mapcar (lambda (arg) `(the fixnum ,arg)) args))))
     
     (def-nary-fixnum-op (name generic)
       `(defmacro ,name (&rest args)
	  `(the fixnum (,',generic ,@(mapcar (lambda (arg) `(the fixnum ,arg)) args))))))

  (def-unary-op ievenp evenp)
  (def-unary-op ilogcount logcount)
  (def-unary-op ioddp oddp)
  (def-unary-op izerop zerop)
  (def-unary-op iplusp plusp)
  (def-unary-op iminusp minusp)

  (def-unary-fixnum-op i1+ 1+)
  (def-unary-fixnum-op i1- 1-)
  (def-unary-fixnum-op inegate -)
  (def-unary-fixnum-op iabs abs)
  (def-unary-fixnum-op ilognot lognot)

  (def-nary-op i= =)
  (def-nary-op i/= /=)
  (def-nary-op i< <)
  (def-nary-op i> >)
  (def-nary-op i<= <=)
  (def-nary-op i>= >=)
  (def-binary-op ilogtest logtest)

  (def-binary-fixnum-op i- -)
  (def-binary-fixnum-op i/ floor)
  (def-nary-fixnum-op i+ +)
  (def-nary-fixnum-op i* *)
  (def-nary-fixnum-op iincf incf)
  (def-nary-fixnum-op idecf decf)

  (def-binary-fixnum-op iash ash)
  (def-binary-fixnum-op ilogandc1 logandc1)
  (def-binary-fixnum-op ilogandc2 logandc2)
  (def-binary-fixnum-op ilognand lognand)
  (def-binary-fixnum-op ilognor lognor)
  (def-binary-fixnum-op ilogorc1 logorc1)
  (def-binary-fixnum-op ilogorc2 logorc2)

  (def-nary-fixnum-op ilogand logand)
  (def-nary-fixnum-op ilogior logior)
  (def-nary-fixnum-op ilogxor logxor)
  (def-nary-fixnum-op imax max)
  (def-nary-fixnum-op imin min)

  (def-binary-fixnum-op irem rem)
  (def-binary-fixnum-op iround round)
  (def-binary-fixnum-op itruncate truncate))