PIPS
terasm.c
Go to the documentation of this file.
1 #define _OP(a,b) a##b
2 #define OP(a,b) _OP(a,b)
3 #define TYPE int
4 #define SUFF i
5 
6 TYPE OP(ref,SUFF)(TYPE *ptr, int index)
7 {
8  return *(ptr+index);
9 }
10 
11 TYPE OP(add,SUFF)(TYPE lhs, TYPE rhs0, TYPE rhs1)
12 {
13  return lhs=rhs0+rhs1;
14 }
15 TYPE OP(addr,SUFF)(TYPE lhs, TYPE *rhs)
16 {
17  return lhs=lhs+*rhs;
18 }
19 TYPE OP(sub,SUFF)(TYPE lhs, TYPE rhs0, TYPE rhs1)
20 {
21  return lhs=rhs0-rhs1;
22 }
23 TYPE OP(subr,SUFF)(TYPE lhs, TYPE *rhs)
24 {
25  return lhs=lhs-*rhs;
26 }
27 TYPE OP(lshift,SUFF)(TYPE lhs, TYPE rhs)
28 {
29  return lhs=lhs<<rhs;
30 }
31 TYPE OP(rshift,SUFF)(TYPE lhs, TYPE rhs)
32 {
33  return lhs=lhs>>rhs;
34 }
35 TYPE OP(prshift,SUFF)(TYPE *lhs, TYPE rhs)
36 {
37  return *lhs=*lhs>>rhs;
38 }
39 TYPE OP(mul,SUFF)(TYPE lhs, TYPE rhs)
40 {
41  return lhs=lhs*rhs;
42 }
43 TYPE OP(div,SUFF)(TYPE lhs, TYPE rhs)
44 {
45  return lhs=lhs/rhs;
46 }
47 TYPE OP(mulr,SUFF)(TYPE lhs, TYPE *rhs)
48 {
49  return lhs=lhs**rhs;
50 }
51 TYPE OP(set,SUFF)(TYPE lhs, TYPE rhs)
52 {
53  return lhs=rhs;
54 }
55 TYPE OP(pset,SUFF)(TYPE *lhs, TYPE rhs)
56 {
57  return *lhs=rhs;
58 }
59 TYPE OP(setp,SUFF)(TYPE lhs, TYPE *rhs)
60 {
61  return lhs=*rhs;
62 }
63 TYPE OP(psetp,SUFF)(TYPE *lhs, TYPE *rhs)
64 {
65  return *lhs=*rhs;
66 }
67 TYPE* OP(ppsetpp,SUFF)(TYPE *lhs, TYPE *rhs)
68 {
69  return lhs=rhs;
70 }
71 TYPE* OP(padd,SUFF)(TYPE *lhs, TYPE *rhs, int val)
72 {
73  return lhs=rhs+val;
74 }
75 TYPE* OP(psub,SUFF)(TYPE *lhs, int rhs)
76 {
77  return lhs=lhs-rhs;
78 }
79 
static reference ref
Current stmt (an integer)
Definition: adg_read_paf.c:163
FI: I do not understand why the type is duplicated at the set level.
Definition: set.c:59
#define OP(a, b)
Definition: terasm.c:2
#define TYPE
Definition: terasm.c:3
#define SUFF
Definition: terasm.c:4