1
(***********************************************************************)
5
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
7
(* Copyright 1996 Institut National de Recherche en Informatique et *)
8
(* en Automatique. All rights reserved. This file is distributed *)
9
(* under the terms of the Q Public License version 1.0. *)
11
(***********************************************************************)
13
(* $Id: arith.cmm 3218 2000-06-29 11:45:24Z xleroy $ *)
15
(* Regression test for arithmetic instructions *)
17
(function "testarith" ()
22
(let f (load float "F")
23
(let g (load float "G")
29
(addraset r 5 16777216)
32
(addraset r 8 -16777216)
34
(addraset r 9 (+ x y))
35
(addraset r 10 (+ x 1))
36
(addraset r 11 (+ x -1))
38
(addraset r 12 (+a "R" 8))
39
(addraset r 13 (+a "R" y))
41
(addraset r 14 (- x y))
42
(addraset r 15 (- x 1))
43
(addraset r 16 (- x -1))
45
(addraset r 17 (-a "R" 8))
46
(addraset r 18 (-a "R" y))
48
(addraset r 19 ( * x 2))
49
(addraset r 20 ( * 2 x))
50
(addraset r 21 ( * x 16))
51
(addraset r 22 ( * 16 x))
52
(addraset r 23 ( * x 12345))
53
(addraset r 24 ( * 12345 x))
54
(addraset r 25 ( * x y))
56
(addraset r 26 (/ x 2))
57
(addraset r 27 (/ x 16))
58
(addraset r 28 (/ x 7))
59
(addraset r 29 (if (!= y 0) (/ x y) 0))
61
(addraset r 30 (mod x 2))
62
(addraset r 31 (mod x 16))
63
(addraset r 32 (if (!= y 0) (mod x y) 0))
65
(addraset r 33 (and x y))
66
(addraset r 34 (and x 3))
67
(addraset r 35 (and 3 x))
69
(addraset r 36 (or x y))
70
(addraset r 37 (or x 3))
71
(addraset r 38 (or 3 x))
73
(addraset r 39 (xor x y))
74
(addraset r 40 (xor x 3))
75
(addraset r 41 (xor 3 x))
77
(addraset r 42 (<< x y))
78
(addraset r 43 (<< x 1))
79
(addraset r 44 (<< x 8))
81
(addraset r 45 (>>u x y))
82
(addraset r 46 (>>u x 1))
83
(addraset r 47 (>>u x 8))
85
(addraset r 48 (>>s x y))
86
(addraset r 49 (>>s x 1))
87
(addraset r 50 (>>s x 8))
89
(addraset r 51 (== x y))
90
(addraset r 52 (!= x y))
91
(addraset r 53 (< x y))
92
(addraset r 54 (> x y))
93
(addraset r 55 (<= x y))
94
(addraset r 56 (>= x y))
95
(addraset r 57 (== x 1))
96
(addraset r 58 (!= x 1))
97
(addraset r 59 (< x 1))
98
(addraset r 60 (> x 1))
99
(addraset r 61 (<= x 1))
100
(addraset r 62 (>= x 1))
102
(addraset r 63 (==a x y))
103
(addraset r 64 (!=a x y))
104
(addraset r 65 (<a x y))
105
(addraset r 66 (>a x y))
106
(addraset r 67 (<=a x y))
107
(addraset r 68 (>=a x y))
108
(addraset r 69 (==a x 1))
109
(addraset r 70 (!=a x 1))
110
(addraset r 71 (<a x 1))
111
(addraset r 72 (>a x 1))
112
(addraset r 73 (<=a x 1))
113
(addraset r 74 (>=a x 1))
115
(addraset r 75 (+ x (<< y 1)))
116
(addraset r 76 (+ x (<< y 2)))
117
(addraset r 77 (+ x (<< y 3)))
118
(addraset r 78 (- x (<< y 1)))
119
(addraset r 79 (- x (<< y 2)))
120
(addraset r 80 (- x (<< y 3)))
125
(floataset d 3 (+f f g))
126
(floataset d 4 (-f f g))
127
(floataset d 5 ( *f f g))
128
(floataset d 6 (/f f g))
130
(floataset d 7 (+f f (+f g 1.0)))
131
(floataset d 8 (-f f (+f g 1.0)))
132
(floataset d 9 ( *f f (+f g 1.0)))
133
(floataset d 10 (/f f (+f g 1.0)))
135
(floataset d 11 (+f (+f f 1.0) g))
136
(floataset d 12 (-f (+f f 1.0) g))
137
(floataset d 13 ( *f (+f f 1.0) g))
138
(floataset d 14 (/f (+f f 1.0) g))
140
(floataset d 15 (+f (+f f 1.0) (+f g 1.0)))
141
(floataset d 16 (-f (+f f 1.0) (+f g 1.0)))
142
(floataset d 17 ( *f (+f f 1.0) (+f g 1.0)))
143
(floataset d 18 (/f (+f f 1.0) (+f g 1.0)))
145
(addraset r 81 (==f f g))
146
(addraset r 82 (!=f f g))
147
(addraset r 83 (<f f g))
148
(addraset r 84 (>f f g))
149
(addraset r 85 (<=f f g))
150
(addraset r 86 (>=f f g))
152
(floataset d 19 (floatofint x))
153
(addraset r 87 (intoffloat f))
155
(if (and (>= x 0) (< x y))
156
(seq (checkbound y x) (addraset r 88 1))
160
(seq (checkbound y 0) (addraset r 89 1))
164
(seq (checkbound y 5) (addraset r 90 1))
167
(addraset r 91 (let res 1 (if (==f f g) [] (assign res 0)) res))
168
(addraset r 92 (let res 1 (if (!=f f g) [] (assign res 0)) res))
169
(addraset r 93 (let res 1 (if (<f f g) [] (assign res 0)) res))
170
(addraset r 94 (let res 1 (if (>f f g) [] (assign res 0)) res))
171
(addraset r 95 (let res 1 (if (<=f f g) [] (assign res 0)) res))
172
(addraset r 96 (let res 1 (if (>=f f g) [] (assign res 0)) res))
174
(addraset r 97 (==f (+f f 1.0) (+f g 1.0)))
175
(addraset r 98 (!=f (+f f 1.0) (+f g 1.0)))
176
(addraset r 99 (<f (+f f 1.0) (+f g 1.0)))
177
(addraset r 100 (>f (+f f 1.0) (+f g 1.0)))
178
(addraset r 101 (<=f (+f f 1.0) (+f g 1.0)))
179
(addraset r 102 (>=f (+f f 1.0) (+f g 1.0)))
181
(addraset r 103 (==f f (+f g 1.0)))
182
(addraset r 104 (!=f f (+f g 1.0)))
183
(addraset r 105 (<f f (+f g 1.0)))
184
(addraset r 106 (>f f (+f g 1.0)))
185
(addraset r 107 (<=f f (+f g 1.0)))
186
(addraset r 108 (>=f f (+f g 1.0)))
188
(addraset r 109 (==f (+f f 1.0) g))
189
(addraset r 110 (!=f (+f f 1.0) g))
190
(addraset r 111 (<f (+f f 1.0) g))
191
(addraset r 112 (>f (+f f 1.0) g))
192
(addraset r 113 (<=f (+f f 1.0) g))
193
(addraset r 114 (>=f (+f f 1.0) g))
195
(floataset d 20 (+f (floatofint x) 1.0))
196
(addraset r 115 (intoffloat (+f f 1.0)))
198
(floataset d 21 (+f f (load float "G")))
199
(floataset d 22 (+f (load float "G") f))
200
(floataset d 23 (-f f (load float "G")))
201
(floataset d 24 (-f (load float "G") f))
202
(floataset d 25 ( *f f (load float "G")))
203
(floataset d 26 ( *f (load float "G") f))
204
(floataset d 27 (/f f (load float "G")))
205
(floataset d 28 (/f (load float "G") f))
207
(floataset d 29 (+f ( *f f 2.0) (load float "G")))
208
(floataset d 30 (+f (load float "G") ( *f f 2.0)))
209
(floataset d 31 (-f ( *f f 2.0) (load float "G")))
210
(floataset d 32 (-f (load float "G") ( *f f 2.0)))
211
(floataset d 33 ( *f ( +f f 2.0) (load float "G")))
212
(floataset d 34 ( *f (load float "G") ( +f f 2.0)))
213
(floataset d 35 (/f ( *f f 2.0) (load float "G")))
214
(floataset d 36 (/f (load float "G") ( *f f 2.0)))
216
(floataset d 37 (-f f))
217
(floataset d 38 (absf f))