Sys.Signals module for a Variant type of signals (and a set_signal function that...
[ocaml.git] / testasmcomp / arith.cmm
blobf4efefdbefff1aec111e0afac4b2e95c4303627d
1 (***********************************************************************)
2 (*                                                                     *)
3 (*                           Objective Caml                            *)
4 (*                                                                     *)
5 (*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
6 (*                                                                     *)
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.               *)
10 (*                                                                     *)
11 (***********************************************************************)
13 (* $Id$ *)
15 (* Regression test for arithmetic instructions *)
17 (function "testarith" ()
18    (let r "R"
19    (let d "D"
20    (let x (load int "X")
21    (let y (load int "Y")
22    (let f (load float "F")
23    (let g (load float "G")
24       (addraset r 0 0)
25       (addraset r 1 1)
26       (addraset r 2 -1)
27       (addraset r 3 256)
28       (addraset r 4 65536)
29       (addraset r 5 16777216)
30       (addraset r 6 -256)
31       (addraset r 7 -65536)
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)))
122       (floataset d 0 0.0)
123       (floataset d 1 1.0)
124       (floataset d 2 -1.0)
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))
157         (addraset r 88 0))
159       (if (< 0 y)
160           (seq (checkbound y 0) (addraset r 89 1))
161         (addraset r 89 0))
163       (if (< 5 y)
164           (seq (checkbound y 5) (addraset r 90 1))
165         (addraset r 90 0))
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))
219 )))))))