xref: /aosp_15_r20/external/libgsm/add-test/add_test.dta (revision 8ec969cea971fe25ff2d3933a5a9f8504f8e86c9)
1*8ec969ceSTreehugger Robot;
2*8ec969ceSTreehugger Robot; Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
3*8ec969ceSTreehugger Robot; Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
4*8ec969ceSTreehugger Robot; details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
5*8ec969ceSTreehugger Robot;
6*8ec969ceSTreehugger Robot;
7*8ec969ceSTreehugger Robot;	Lines starting with ' (in the first col) are echoed.
8*8ec969ceSTreehugger Robot;	Lines starting with " (in the first col) are echoed to stderr.
9*8ec969ceSTreehugger Robot;	Lines starting with ; or empty lines are ignored.
10*8ec969ceSTreehugger Robot;
11*8ec969ceSTreehugger Robot;	The part after (including) a trailing '=' is what you expect;
12*8ec969ceSTreehugger Robot;	there will be output if the result is different.
13*8ec969ceSTreehugger Robot;
14*8ec969ceSTreehugger Robot;	-  and +  by itself mean MIN_WORD and MAX_WORD, respectively;
15*8ec969ceSTreehugger Robot;	-- and ++ mean MIN_LONGWORD and MAX_LONGWORD.
16*8ec969ceSTreehugger Robot;
17*8ec969ceSTreehugger Robot
18*8ec969ceSTreehugger Robot'test the basic arithmetic operations used for the rpe-ltd filtering.
19*8ec969ceSTreehugger Robot'
20*8ec969ceSTreehugger Robot'add ================
21*8ec969ceSTreehugger Robot'  basic
22*8ec969ceSTreehugger Robot
23*8ec969ceSTreehugger Robot	add  0  0 	=  0
24*8ec969ceSTreehugger Robot	add  7  4	= 11
25*8ec969ceSTreehugger Robot	add  4  6 	= 10
26*8ec969ceSTreehugger Robot	add  1  1 	=  2
27*8ec969ceSTreehugger Robot
28*8ec969ceSTreehugger Robot'  negative operands
29*8ec969ceSTreehugger Robot
30*8ec969ceSTreehugger Robot	add  -7  4	= -3
31*8ec969ceSTreehugger Robot	add   4 -6 	= -2
32*8ec969ceSTreehugger Robot	add  -1 -3 	= -4
33*8ec969ceSTreehugger Robot	add   7 -4	=  3
34*8ec969ceSTreehugger Robot	add  -4  6 	=  2
35*8ec969ceSTreehugger Robot
36*8ec969ceSTreehugger Robot'  positive overflow
37*8ec969ceSTreehugger Robot; (max-word = 32767)
38*8ec969ceSTreehugger Robot	add  + 1	= +
39*8ec969ceSTreehugger Robot	add  + +	= +
40*8ec969ceSTreehugger Robot	add  -1 + 	= 32766
41*8ec969ceSTreehugger Robot	add  32766 2	= +
42*8ec969ceSTreehugger Robot	add  1 32766  	= +
43*8ec969ceSTreehugger Robot
44*8ec969ceSTreehugger Robot'  underflow
45*8ec969ceSTreehugger Robot; (min-word = 32768)
46*8ec969ceSTreehugger Robot
47*8ec969ceSTreehugger Robot	add  - -1	= -
48*8ec969ceSTreehugger Robot	add  - -	= -
49*8ec969ceSTreehugger Robot	add  1 -	= -32767
50*8ec969ceSTreehugger Robot	add  -32767 -2	= -
51*8ec969ceSTreehugger Robot	add  -1 -32766 	= -32767
52*8ec969ceSTreehugger Robot	add  -32767 -1	= -
53*8ec969ceSTreehugger Robot	add  - +	= -1
54*8ec969ceSTreehugger Robot	add  + -	= -1
55*8ec969ceSTreehugger Robot	add  0 -	= -
56*8ec969ceSTreehugger Robot	add  0 +	= +
57*8ec969ceSTreehugger Robot'
58*8ec969ceSTreehugger Robot
59*8ec969ceSTreehugger Robot'L_add ================
60*8ec969ceSTreehugger Robot'  basic
61*8ec969ceSTreehugger Robot
62*8ec969ceSTreehugger Robot	L_add  0  0 	=  0
63*8ec969ceSTreehugger Robot	L_add  7  4	= 11
64*8ec969ceSTreehugger Robot	L_add  4  6 	= 10
65*8ec969ceSTreehugger Robot	L_add  1  1 	=  2
66*8ec969ceSTreehugger Robot
67*8ec969ceSTreehugger Robot'  negative operands
68*8ec969ceSTreehugger Robot
69*8ec969ceSTreehugger Robot	L_add  -7  4	= -3
70*8ec969ceSTreehugger Robot	L_add   4 -6 	= -2
71*8ec969ceSTreehugger Robot	L_add  -1 -3 	= -4
72*8ec969ceSTreehugger Robot	L_add   7 -4	=  3
73*8ec969ceSTreehugger Robot	L_add  -4  6 	=  2
74*8ec969ceSTreehugger Robot	L_add   0 -1 	= -1
75*8ec969ceSTreehugger Robot
76*8ec969ceSTreehugger Robot'  positive overflow
77*8ec969ceSTreehugger Robot; (max-longword = 2147483647)
78*8ec969ceSTreehugger Robot	L_add  ++ 1	= ++
79*8ec969ceSTreehugger Robot	L_add  ++ ++	= ++
80*8ec969ceSTreehugger Robot	L_add  -1 ++ 	= 2147483646
81*8ec969ceSTreehugger Robot	L_add  2147483646 2 = ++
82*8ec969ceSTreehugger Robot	L_add  1 2147483645 = 2147483646
83*8ec969ceSTreehugger Robot
84*8ec969ceSTreehugger Robot'  underflow
85*8ec969ceSTreehugger Robot; (min-longword = -2147483648)
86*8ec969ceSTreehugger Robot
87*8ec969ceSTreehugger Robot	L_add  -- -1	= --
88*8ec969ceSTreehugger Robot	L_add  -- --	= --
89*8ec969ceSTreehugger Robot	L_add  1 --	= -2147483647
90*8ec969ceSTreehugger Robot	L_add  -2147483647 -2	= --
91*8ec969ceSTreehugger Robot	L_add  -1 -2147483646 	= -2147483647
92*8ec969ceSTreehugger Robot	L_add  -2147483647 -1	= --
93*8ec969ceSTreehugger Robot	L_add  -- ++	= -1
94*8ec969ceSTreehugger Robot	L_add  ++ --	= -1
95*8ec969ceSTreehugger Robot	L_add  0 --	= --
96*8ec969ceSTreehugger Robot	L_add  0 ++	= ++
97*8ec969ceSTreehugger Robot'
98*8ec969ceSTreehugger Robot
99*8ec969ceSTreehugger Robot'sub ================
100*8ec969ceSTreehugger Robot'  basic
101*8ec969ceSTreehugger Robot
102*8ec969ceSTreehugger Robot	sub  0  0 	=  0
103*8ec969ceSTreehugger Robot	sub  7  4	=  3
104*8ec969ceSTreehugger Robot	sub  4  6 	= -2
105*8ec969ceSTreehugger Robot	sub  1  0 	=  1
106*8ec969ceSTreehugger Robot
107*8ec969ceSTreehugger Robot'  negative operands
108*8ec969ceSTreehugger Robot
109*8ec969ceSTreehugger Robot	sub  -7  4	= -11
110*8ec969ceSTreehugger Robot	sub   4 -6 	=  10
111*8ec969ceSTreehugger Robot	sub  -1 -3 	=  2
112*8ec969ceSTreehugger Robot	sub   7 -4	=  11
113*8ec969ceSTreehugger Robot	sub  -4  6 	= -10
114*8ec969ceSTreehugger Robot
115*8ec969ceSTreehugger Robot'  positive overflow
116*8ec969ceSTreehugger Robot; (max-word = 32767)
117*8ec969ceSTreehugger Robot	sub  1 -	= +
118*8ec969ceSTreehugger Robot	sub  + +	= 0
119*8ec969ceSTreehugger Robot	sub  + 0	= +
120*8ec969ceSTreehugger Robot	sub  + -1 	= +
121*8ec969ceSTreehugger Robot	sub  + 1 	= 32766
122*8ec969ceSTreehugger Robot	sub  1 + 	= -32766
123*8ec969ceSTreehugger Robot	sub  0 +  	= -32767
124*8ec969ceSTreehugger Robot
125*8ec969ceSTreehugger Robot'  underflow
126*8ec969ceSTreehugger Robot; (min-word = 32768)
127*8ec969ceSTreehugger Robot
128*8ec969ceSTreehugger Robot	sub  - -1	= -32767
129*8ec969ceSTreehugger Robot	sub  - 1	= -
130*8ec969ceSTreehugger Robot	sub  - -	= 0
131*8ec969ceSTreehugger Robot	sub  - +	= -
132*8ec969ceSTreehugger Robot	sub  + -	= +
133*8ec969ceSTreehugger Robot	sub  1 -	= +
134*8ec969ceSTreehugger Robot	sub  -1 -	= +
135*8ec969ceSTreehugger Robot	sub  -32767 2	= -
136*8ec969ceSTreehugger Robot	sub  0 -	= +
137*8ec969ceSTreehugger Robot'
138*8ec969ceSTreehugger Robot
139*8ec969ceSTreehugger Robot'L_sub ================
140*8ec969ceSTreehugger Robot'  basic
141*8ec969ceSTreehugger Robot
142*8ec969ceSTreehugger Robot	L_sub  0  0 	=  0
143*8ec969ceSTreehugger Robot	L_sub  7  4	=  3
144*8ec969ceSTreehugger Robot	L_sub  4  6 	= -2
145*8ec969ceSTreehugger Robot	L_sub  1  0 	=  1
146*8ec969ceSTreehugger Robot
147*8ec969ceSTreehugger Robot'  negative operands
148*8ec969ceSTreehugger Robot
149*8ec969ceSTreehugger Robot	L_sub  -7  4	= -11
150*8ec969ceSTreehugger Robot	L_sub   4 -6 	=  10
151*8ec969ceSTreehugger Robot	L_sub  -1 -3 	=  2
152*8ec969ceSTreehugger Robot	L_sub   7 -4	=  11
153*8ec969ceSTreehugger Robot	L_sub  -4  6 	= -10
154*8ec969ceSTreehugger Robot
155*8ec969ceSTreehugger Robot'  positive overflow
156*8ec969ceSTreehugger Robot	L_sub  1 --	= ++
157*8ec969ceSTreehugger Robot	L_sub  ++ ++	= 0
158*8ec969ceSTreehugger Robot	L_sub  ++ 0	= ++
159*8ec969ceSTreehugger Robot	L_sub  ++ -1 	= ++
160*8ec969ceSTreehugger Robot	L_sub  ++ 1 	=  2147483646
161*8ec969ceSTreehugger Robot	L_sub  1 ++ 	= -2147483646
162*8ec969ceSTreehugger Robot	L_sub  0 ++  	= -2147483647
163*8ec969ceSTreehugger Robot
164*8ec969ceSTreehugger Robot'  underflow
165*8ec969ceSTreehugger Robot
166*8ec969ceSTreehugger Robot	L_sub  -- -1	= -2147483647
167*8ec969ceSTreehugger Robot	L_sub  -- 1	= --
168*8ec969ceSTreehugger Robot	L_sub  -- --	= 0
169*8ec969ceSTreehugger Robot	L_sub  -- ++	= --
170*8ec969ceSTreehugger Robot	L_sub  + --	= ++
171*8ec969ceSTreehugger Robot	L_sub  1 --	= ++
172*8ec969ceSTreehugger Robot	L_sub  -1 --	= ++
173*8ec969ceSTreehugger Robot	L_sub  -2147483647 2 = --
174*8ec969ceSTreehugger Robot	L_sub  0 --	= ++
175*8ec969ceSTreehugger Robot
176*8ec969ceSTreehugger Robot'
177*8ec969ceSTreehugger Robot'abs ================
178*8ec969ceSTreehugger Robot'  basic
179*8ec969ceSTreehugger Robot
180*8ec969ceSTreehugger Robot	abs	   0	=   0
181*8ec969ceSTreehugger Robot	abs	   2	=   2
182*8ec969ceSTreehugger Robot	abs	-459	= 459
183*8ec969ceSTreehugger Robot
184*8ec969ceSTreehugger Robot'  overflow
185*8ec969ceSTreehugger Robot
186*8ec969ceSTreehugger Robot	abs	 +	=   +
187*8ec969ceSTreehugger Robot	abs	 -	=   +
188*8ec969ceSTreehugger Robot	abs 	-32767  =   +
189*8ec969ceSTreehugger Robot	abs 	 32766  = 32766
190*8ec969ceSTreehugger Robot	abs 	-32766  = 32766
191*8ec969ceSTreehugger Robot
192*8ec969ceSTreehugger Robot'
193*8ec969ceSTreehugger Robot'mult ================
194*8ec969ceSTreehugger Robot;  actually, a * b >> 15
195*8ec969ceSTreehugger Robot
196*8ec969ceSTreehugger Robot'  basic
197*8ec969ceSTreehugger Robot	mult	0  0		= 0
198*8ec969ceSTreehugger Robot	mult	0x100 0x100	= 2
199*8ec969ceSTreehugger Robot	mult	4711 0x4000	= 2355
200*8ec969ceSTreehugger Robot
201*8ec969ceSTreehugger Robot'  negative operands
202*8ec969ceSTreehugger Robot	mult	-1  0		=  0
203*8ec969ceSTreehugger Robot
204*8ec969ceSTreehugger Robot	mult	-0x100   0x100	= -2
205*8ec969ceSTreehugger Robot	mult	 0x100  -0x100	= -2
206*8ec969ceSTreehugger Robot	mult	-0x100  -0x100	=  2
207*8ec969ceSTreehugger Robot
208*8ec969ceSTreehugger Robot	mult	-4711   0x4000	= -2356
209*8ec969ceSTreehugger Robot	mult	 4711  -0x4000	= -2356
210*8ec969ceSTreehugger Robot	mult	-4711  -0x4000	=  2355
211*8ec969ceSTreehugger Robot
212*8ec969ceSTreehugger Robot'  overflow
213*8ec969ceSTreehugger Robot	mult	+ + 	 = 32766
214*8ec969ceSTreehugger Robot	mult	+ 0x4000 = 0x3fff
215*8ec969ceSTreehugger Robot	mult	0x4000 + = 0x3fff
216*8ec969ceSTreehugger Robot	mult	+ 1	 = 0
217*8ec969ceSTreehugger Robot	mult	+ 2	 = 1
218*8ec969ceSTreehugger Robot	mult	+ 3	 = 2
219*8ec969ceSTreehugger Robot
220*8ec969ceSTreehugger Robot'  underflow
221*8ec969ceSTreehugger Robot	mult	- - 	 = +
222*8ec969ceSTreehugger Robot	mult	- + 	 = -32767
223*8ec969ceSTreehugger Robot	mult	+ - 	 = -32767
224*8ec969ceSTreehugger Robot	mult	- 1	 = -1
225*8ec969ceSTreehugger Robot	mult	- 2	 = -2
226*8ec969ceSTreehugger Robot	mult	- 3	 = -3
227*8ec969ceSTreehugger Robot
228*8ec969ceSTreehugger Robot'
229*8ec969ceSTreehugger Robot'mult_r ================
230*8ec969ceSTreehugger Robot;  actually, (a * b + 16384) >> 15
231*8ec969ceSTreehugger Robot
232*8ec969ceSTreehugger Robot'  basic
233*8ec969ceSTreehugger Robot	mult_r	0  0		= 0
234*8ec969ceSTreehugger Robot	mult_r	0x100 0x100	= 2
235*8ec969ceSTreehugger Robot	mult_r	4711 0x4000	= 2356
236*8ec969ceSTreehugger Robot
237*8ec969ceSTreehugger Robot'  negative operands
238*8ec969ceSTreehugger Robot	mult_r	-1  0		=  0
239*8ec969ceSTreehugger Robot
240*8ec969ceSTreehugger Robot	mult_r	-0x100   0x100	= -2
241*8ec969ceSTreehugger Robot	mult_r	 0x100  -0x100	= -2
242*8ec969ceSTreehugger Robot	mult_r	-0x100  -0x100	=  2
243*8ec969ceSTreehugger Robot
244*8ec969ceSTreehugger Robot	mult_r	-4711   0x4000	= -2355
245*8ec969ceSTreehugger Robot	mult_r	 4711  -0x4000	= -2355
246*8ec969ceSTreehugger Robot	mult_r	-4711  -0x4000	=  2356
247*8ec969ceSTreehugger Robot
248*8ec969ceSTreehugger Robot'  overflow
249*8ec969ceSTreehugger Robot	mult_r	+ + 	 = 32766
250*8ec969ceSTreehugger Robot	mult_r	+ 32766	 = 32765
251*8ec969ceSTreehugger Robot	mult_r	32766 +	 = 32765
252*8ec969ceSTreehugger Robot	mult_r	+ 0x4000 = 0x4000
253*8ec969ceSTreehugger Robot	mult_r	0x4000 + = 0x4000
254*8ec969ceSTreehugger Robot	mult_r	+ 0x4001 = 0x4000
255*8ec969ceSTreehugger Robot	mult_r	0x4001 + = 0x4000
256*8ec969ceSTreehugger Robot	mult_r	+ 2	 = 2
257*8ec969ceSTreehugger Robot	mult_r	+ 1	 = 1
258*8ec969ceSTreehugger Robot	mult_r	1 +	 = 1
259*8ec969ceSTreehugger Robot	mult_r	+ 0	 = 0
260*8ec969ceSTreehugger Robot	mult_r	0 +	 = 0
261*8ec969ceSTreehugger Robot
262*8ec969ceSTreehugger Robot'  underflow
263*8ec969ceSTreehugger Robot	mult_r	- - 	 = +
264*8ec969ceSTreehugger Robot	mult_r	- + 	 = -32767
265*8ec969ceSTreehugger Robot	mult_r	+ - 	 = -32767
266*8ec969ceSTreehugger Robot	mult_r	- 1	 = -1
267*8ec969ceSTreehugger Robot	mult_r	- 2	 = -2
268*8ec969ceSTreehugger Robot	mult_r	- 3	 = -3
269*8ec969ceSTreehugger Robot
270*8ec969ceSTreehugger Robot'
271*8ec969ceSTreehugger Robot'L_mult ================
272*8ec969ceSTreehugger Robot;  actually, (a * b) << 1
273*8ec969ceSTreehugger Robot;  assert (a != MIN_WORD && b != MIN_WORD)
274*8ec969ceSTreehugger Robot
275*8ec969ceSTreehugger Robot'  basic
276*8ec969ceSTreehugger Robot	L_mult	0  0	= 0
277*8ec969ceSTreehugger Robot	L_mult	2  3	= 12
278*8ec969ceSTreehugger Robot	L_mult	4711 5	= 47110
279*8ec969ceSTreehugger Robot
280*8ec969ceSTreehugger Robot'  negative operands
281*8ec969ceSTreehugger Robot
282*8ec969ceSTreehugger Robot	L_mult	-2  3	= -12
283*8ec969ceSTreehugger Robot	L_mult	 2 -3	= -12
284*8ec969ceSTreehugger Robot	L_mult	-2 -3	=  12
285*8ec969ceSTreehugger Robot	L_mult -4711  5	= -47110
286*8ec969ceSTreehugger Robot	L_mult	4711 -5	= -47110
287*8ec969ceSTreehugger Robot	L_mult -4711 -5	=  47110
288*8ec969ceSTreehugger Robot
289*8ec969ceSTreehugger Robot'  overflow
290*8ec969ceSTreehugger Robot	L_mult	+ + 	 = 2147352578
291*8ec969ceSTreehugger Robot	L_mult	+ -32767 = -2147352578
292*8ec969ceSTreehugger Robot	L_mult	-32767 + = -2147352578
293*8ec969ceSTreehugger Robot	L_mult	+ 2	 = 131068
294*8ec969ceSTreehugger Robot	L_mult	+ 1	 = 65534
295*8ec969ceSTreehugger Robot	L_mult	1 +	 = 65534
296*8ec969ceSTreehugger Robot	L_mult	+ 0	 = 0
297*8ec969ceSTreehugger Robot	L_mult	0 +	 = 0
298*8ec969ceSTreehugger Robot
299*8ec969ceSTreehugger Robot'
300*8ec969ceSTreehugger Robot'div ================
301*8ec969ceSTreehugger Robot;  actually, (32767 * a) / b
302*8ec969ceSTreehugger Robot;  assert (a > 0 && b >= a)
303*8ec969ceSTreehugger Robot
304*8ec969ceSTreehugger Robot'  basic
305*8ec969ceSTreehugger Robot	div	1 1		= +
306*8ec969ceSTreehugger Robot	div	4711 4711 	= +
307*8ec969ceSTreehugger Robot	div	5 10		= 0x4000
308*8ec969ceSTreehugger Robot	div	5 20		= 0x2000
309*8ec969ceSTreehugger Robot	div	5 40		= 0x1000
310*8ec969ceSTreehugger Robot
311*8ec969ceSTreehugger Robot'  overflow
312*8ec969ceSTreehugger Robot	div	+ + 		= +
313*8ec969ceSTreehugger Robot	div	0x4000 +	= 0x4000
314*8ec969ceSTreehugger Robot	div	1 +		= 1
315*8ec969ceSTreehugger Robot	div	1 2		= 0x4000
316*8ec969ceSTreehugger Robot'
317*8ec969ceSTreehugger Robot'norm ================
318*8ec969ceSTreehugger Robot
319*8ec969ceSTreehugger Robot'  positive
320*8ec969ceSTreehugger Robot	norm	1		= 30
321*8ec969ceSTreehugger Robot	norm	2		= 29
322*8ec969ceSTreehugger Robot	norm	3		= 29
323*8ec969ceSTreehugger Robot	norm	4		= 28
324*8ec969ceSTreehugger Robot	norm	5		= 28
325*8ec969ceSTreehugger Robot; etc, etc...
326*8ec969ceSTreehugger Robot	norm	0x08000000	= 3
327*8ec969ceSTreehugger Robot	norm	0x10000000	= 2
328*8ec969ceSTreehugger Robot	norm	0x20000000	= 1
329*8ec969ceSTreehugger Robot	norm	0x20000001	= 1
330*8ec969ceSTreehugger Robot	norm	0x3fffffff	= 1
331*8ec969ceSTreehugger Robot	norm	0x40000000	= 0
332*8ec969ceSTreehugger Robot	norm	0x40000001	= 0
333*8ec969ceSTreehugger Robot	norm	0x4ffffffe	= 0
334*8ec969ceSTreehugger Robot	norm	++		= 0
335*8ec969ceSTreehugger Robot
336*8ec969ceSTreehugger Robot'  negative
337*8ec969ceSTreehugger Robot	norm	-1		= 31
338*8ec969ceSTreehugger Robot	norm	-2		= 30
339*8ec969ceSTreehugger Robot	norm	-3		= 29
340*8ec969ceSTreehugger Robot	norm	-4		= 29
341*8ec969ceSTreehugger Robot	norm	-5		= 28
342*8ec969ceSTreehugger Robot; etc, etc...
343*8ec969ceSTreehugger Robot	norm	0x4fffffff	= 0
344*8ec969ceSTreehugger Robot	norm	--		= 0
345*8ec969ceSTreehugger Robot'
346*8ec969ceSTreehugger Robot'>> ================
347*8ec969ceSTreehugger Robot
348*8ec969ceSTreehugger Robot'  basic
349*8ec969ceSTreehugger Robot	>>	1 1		= 0
350*8ec969ceSTreehugger Robot	>>	4 2		= 1
351*8ec969ceSTreehugger Robot	>>	0x1100 5	= 0x88
352*8ec969ceSTreehugger Robot
353*8ec969ceSTreehugger Robot'  negative operand
354*8ec969ceSTreehugger Robot
355*8ec969ceSTreehugger Robot	>>	1 -1		= 2
356*8ec969ceSTreehugger Robot	>>	1 -2		= 4
357*8ec969ceSTreehugger Robot	>>	0x88 -5		= 0x1100
358*8ec969ceSTreehugger Robot
359*8ec969ceSTreehugger Robot'  overflow
360*8ec969ceSTreehugger Robot	>>	-1 4711		= -1
361*8ec969ceSTreehugger Robot	>>	1  4711		= 0
362*8ec969ceSTreehugger Robot	>>	-4711 4711 	= -1
363*8ec969ceSTreehugger Robot	>>	4711 4711 	= 0
364*8ec969ceSTreehugger Robot	>>	+ 1		=  16383
365*8ec969ceSTreehugger Robot	>>	- 1		= -16384
366*8ec969ceSTreehugger Robot'
367*8ec969ceSTreehugger Robot'L_>> ================
368*8ec969ceSTreehugger Robot
369*8ec969ceSTreehugger Robot'  basic
370*8ec969ceSTreehugger Robot	L_>>	1 1		= 0
371*8ec969ceSTreehugger Robot	L_>>	4 2		= 1
372*8ec969ceSTreehugger Robot	L_>>	0x1100 5	= 0x88
373*8ec969ceSTreehugger Robot
374*8ec969ceSTreehugger Robot'  negative operand
375*8ec969ceSTreehugger Robot
376*8ec969ceSTreehugger Robot	L_>>	1 -1		= 2
377*8ec969ceSTreehugger Robot	L_>>	1 -2		= 4
378*8ec969ceSTreehugger Robot	L_>>	0x88 -5		= 0x1100
379*8ec969ceSTreehugger Robot
380*8ec969ceSTreehugger Robot'  overflow
381*8ec969ceSTreehugger Robot	L_>>	-1 4711		= -1
382*8ec969ceSTreehugger Robot	L_>>	1  4711		= 0
383*8ec969ceSTreehugger Robot	L_>>	-4711 4711 	= -1
384*8ec969ceSTreehugger Robot	L_>>	4711 4711 	= 0
385*8ec969ceSTreehugger Robot	L_>>	++ 1		=  1073741823
386*8ec969ceSTreehugger Robot	L_>>	-- 1		= -1073741824
387*8ec969ceSTreehugger Robot
388*8ec969ceSTreehugger Robot'
389*8ec969ceSTreehugger Robot'<< ================
390*8ec969ceSTreehugger Robot
391*8ec969ceSTreehugger Robot'  basic
392*8ec969ceSTreehugger Robot	<<	1 1		= 2
393*8ec969ceSTreehugger Robot	<<	4 2		= 16
394*8ec969ceSTreehugger Robot	<<	0x0088 5	= 0x1100
395*8ec969ceSTreehugger Robot
396*8ec969ceSTreehugger Robot'  negative operand
397*8ec969ceSTreehugger Robot
398*8ec969ceSTreehugger Robot	<<	1 -1		= 0
399*8ec969ceSTreehugger Robot	<<	4 -2		= 1
400*8ec969ceSTreehugger Robot	<<	0x1100 -5	= 0x0088
401*8ec969ceSTreehugger Robot
402*8ec969ceSTreehugger Robot'  overflow
403*8ec969ceSTreehugger Robot	<<	-1 4711		= 0
404*8ec969ceSTreehugger Robot	<<	1  4711		= 0
405*8ec969ceSTreehugger Robot	<<	-4711 4711 	= 0
406*8ec969ceSTreehugger Robot	<<	4711 4711 	= 0
407*8ec969ceSTreehugger Robot	<<	4711 -4711 	= 0
408*8ec969ceSTreehugger Robot	<<	-4711 -4711 	= -1
409*8ec969ceSTreehugger Robot	<<	+ 1		= 0xfffe
410*8ec969ceSTreehugger Robot	<<	-1 1		= 0xfffe
411*8ec969ceSTreehugger Robot	<<	- 1		= 0
412*8ec969ceSTreehugger Robot'
413*8ec969ceSTreehugger Robot'L_<< ================
414*8ec969ceSTreehugger Robot
415*8ec969ceSTreehugger Robot'  basic
416*8ec969ceSTreehugger Robot	L_<<	1 1		= 2
417*8ec969ceSTreehugger Robot	L_<<	4 2		= 16
418*8ec969ceSTreehugger Robot	L_<<	0x0088 5	= 0x1100
419*8ec969ceSTreehugger Robot
420*8ec969ceSTreehugger Robot'  negative operand
421*8ec969ceSTreehugger Robot
422*8ec969ceSTreehugger Robot	L_<<	1 -1		= 0
423*8ec969ceSTreehugger Robot	L_<<	4 -2		= 1
424*8ec969ceSTreehugger Robot	L_<<	0x1100 -5	= 0x0088
425*8ec969ceSTreehugger Robot
426*8ec969ceSTreehugger Robot'  overflow
427*8ec969ceSTreehugger Robot	L_<<	-1 4711		= 0
428*8ec969ceSTreehugger Robot	L_<<	1  4711		= 0
429*8ec969ceSTreehugger Robot	L_<<	-4711 4711 	= 0
430*8ec969ceSTreehugger Robot	L_<<	4711 4711 	= 0
431*8ec969ceSTreehugger Robot	L_<<	4711 -4711 	= 0
432*8ec969ceSTreehugger Robot	L_<<	-4711 -4711 	= -1
433*8ec969ceSTreehugger Robot	L_<<	++ 1		= -2
434*8ec969ceSTreehugger Robot	L_<<	-1 1		= -2
435*8ec969ceSTreehugger Robot	L_<<	-- 1		= 0
436*8ec969ceSTreehugger Robot
437*8ec969ceSTreehugger Robot'macros
438*8ec969ceSTreehugger Robot'
439*8ec969ceSTreehugger Robot'add ================
440*8ec969ceSTreehugger Robot'  basic
441*8ec969ceSTreehugger Robot
442*8ec969ceSTreehugger Robot	M_add  0  0 	=  0
443*8ec969ceSTreehugger Robot	M_add  7  4	= 11
444*8ec969ceSTreehugger Robot	M_add  4  6 	= 10
445*8ec969ceSTreehugger Robot	M_add  1  1 	=  2
446*8ec969ceSTreehugger Robot
447*8ec969ceSTreehugger Robot'  negative operands
448*8ec969ceSTreehugger Robot
449*8ec969ceSTreehugger Robot	M_add  -7  4	= -3
450*8ec969ceSTreehugger Robot	M_add   4 -6 	= -2
451*8ec969ceSTreehugger Robot	M_add  -1 -3 	= -4
452*8ec969ceSTreehugger Robot	M_add   7 -4	=  3
453*8ec969ceSTreehugger Robot	M_add  -4  6 	=  2
454*8ec969ceSTreehugger Robot
455*8ec969ceSTreehugger Robot'  positive overflow
456*8ec969ceSTreehugger Robot; (max-word = 32767)
457*8ec969ceSTreehugger Robot	M_add  + 1	= +
458*8ec969ceSTreehugger Robot	M_add  + +	= +
459*8ec969ceSTreehugger Robot	M_add  -1 + 	= 32766
460*8ec969ceSTreehugger Robot	M_add  32766 2	= +
461*8ec969ceSTreehugger Robot	M_add  1 32766  	= +
462*8ec969ceSTreehugger Robot
463*8ec969ceSTreehugger Robot'  underflow
464*8ec969ceSTreehugger Robot; (min-word = 32768)
465*8ec969ceSTreehugger Robot
466*8ec969ceSTreehugger Robot	M_add  - -1	= -
467*8ec969ceSTreehugger Robot	M_add  - -	= -
468*8ec969ceSTreehugger Robot	M_add  1 -	= -32767
469*8ec969ceSTreehugger Robot	M_add  -32767 -2 = -
470*8ec969ceSTreehugger Robot	M_add  -1 -32766 = -32767
471*8ec969ceSTreehugger Robot	M_add  -32767 -1 = -
472*8ec969ceSTreehugger Robot	M_add  - +	= -1
473*8ec969ceSTreehugger Robot	M_add  + -	= -1
474*8ec969ceSTreehugger Robot	M_add  0 -	= -
475*8ec969ceSTreehugger Robot	M_add  0 +	= +
476*8ec969ceSTreehugger Robot'
477*8ec969ceSTreehugger Robot
478*8ec969ceSTreehugger Robot'L_add ================
479*8ec969ceSTreehugger Robot'  basic
480*8ec969ceSTreehugger Robot
481*8ec969ceSTreehugger Robot	M_L_add  0  0 	=  0
482*8ec969ceSTreehugger Robot	M_L_add  7  4	= 11
483*8ec969ceSTreehugger Robot	M_L_add  4  6 	= 10
484*8ec969ceSTreehugger Robot	M_L_add  1  1 	=  2
485*8ec969ceSTreehugger Robot
486*8ec969ceSTreehugger Robot'  negative operands
487*8ec969ceSTreehugger Robot
488*8ec969ceSTreehugger Robot	M_L_add  -7  4	= -3
489*8ec969ceSTreehugger Robot	M_L_add   4 -6 	= -2
490*8ec969ceSTreehugger Robot	M_L_add  -1 -3 	= -4
491*8ec969ceSTreehugger Robot	M_L_add   7 -4	=  3
492*8ec969ceSTreehugger Robot	M_L_add  -4  6 	=  2
493*8ec969ceSTreehugger Robot	M_L_add   0 -1 	= -1
494*8ec969ceSTreehugger Robot
495*8ec969ceSTreehugger Robot'  positive overflow
496*8ec969ceSTreehugger Robot; (max-longword = 2147483647)
497*8ec969ceSTreehugger Robot	M_L_add  ++ 1	= ++
498*8ec969ceSTreehugger Robot	M_L_add  ++ ++	= ++
499*8ec969ceSTreehugger Robot	M_L_add  -1 ++ 	= 2147483646
500*8ec969ceSTreehugger Robot	M_L_add  2147483646 2 = ++
501*8ec969ceSTreehugger Robot	M_L_add  1 2147483645 = 2147483646
502*8ec969ceSTreehugger Robot
503*8ec969ceSTreehugger Robot'  underflow
504*8ec969ceSTreehugger Robot; (min-longword = -2147483648)
505*8ec969ceSTreehugger Robot
506*8ec969ceSTreehugger Robot	M_L_add  -- -1	= --
507*8ec969ceSTreehugger Robot	M_L_add  -- --	= --
508*8ec969ceSTreehugger Robot	M_L_add  1 --	= -2147483647
509*8ec969ceSTreehugger Robot	M_L_add  -2147483647 -2	= --
510*8ec969ceSTreehugger Robot	M_L_add  -1 -2147483646 	= -2147483647
511*8ec969ceSTreehugger Robot	M_L_add  -2147483647 -1	= --
512*8ec969ceSTreehugger Robot	M_L_add  -- ++	= -1
513*8ec969ceSTreehugger Robot	M_L_add  ++ --	= -1
514*8ec969ceSTreehugger Robot	M_L_add  0 --	= --
515*8ec969ceSTreehugger Robot	M_L_add  0 ++	= ++
516*8ec969ceSTreehugger Robot'
517*8ec969ceSTreehugger Robot
518*8ec969ceSTreehugger Robot'sub ================
519*8ec969ceSTreehugger Robot'  basic
520*8ec969ceSTreehugger Robot
521*8ec969ceSTreehugger Robot	M_sub  0  0 	=  0
522*8ec969ceSTreehugger Robot	M_sub  7  4	=  3
523*8ec969ceSTreehugger Robot	M_sub  4  6 	= -2
524*8ec969ceSTreehugger Robot	M_sub  1  0 	=  1
525*8ec969ceSTreehugger Robot
526*8ec969ceSTreehugger Robot'  negative operands
527*8ec969ceSTreehugger Robot
528*8ec969ceSTreehugger Robot	M_sub  -7  4	= -11
529*8ec969ceSTreehugger Robot	M_sub   4 -6 	=  10
530*8ec969ceSTreehugger Robot	M_sub  -1 -3 	=  2
531*8ec969ceSTreehugger Robot	M_sub   7 -4	=  11
532*8ec969ceSTreehugger Robot	M_sub  -4  6 	= -10
533*8ec969ceSTreehugger Robot
534*8ec969ceSTreehugger Robot'  positive overflow
535*8ec969ceSTreehugger Robot; (max-word = 32767)
536*8ec969ceSTreehugger Robot	M_sub  1 -	= +
537*8ec969ceSTreehugger Robot	M_sub  + +	= 0
538*8ec969ceSTreehugger Robot	M_sub  + 0	= +
539*8ec969ceSTreehugger Robot	M_sub  + -1 	= +
540*8ec969ceSTreehugger Robot	M_sub  + 1 	= 32766
541*8ec969ceSTreehugger Robot	M_sub  1 + 	= -32766
542*8ec969ceSTreehugger Robot	M_sub  0 +  	= -32767
543*8ec969ceSTreehugger Robot
544*8ec969ceSTreehugger Robot'  underflow
545*8ec969ceSTreehugger Robot; (min-word = 32768)
546*8ec969ceSTreehugger Robot
547*8ec969ceSTreehugger Robot	M_sub  - -1	= -32767
548*8ec969ceSTreehugger Robot	M_sub  - 1	= -
549*8ec969ceSTreehugger Robot	M_sub  - -	= 0
550*8ec969ceSTreehugger Robot	M_sub  - +	= -
551*8ec969ceSTreehugger Robot	M_sub  + -	= +
552*8ec969ceSTreehugger Robot	M_sub  1 -	= +
553*8ec969ceSTreehugger Robot	M_sub  -1 -	= +
554*8ec969ceSTreehugger Robot	M_sub  -32767 2	= -
555*8ec969ceSTreehugger Robot	M_sub  0 -	= +
556*8ec969ceSTreehugger Robot'
557*8ec969ceSTreehugger Robot'
558*8ec969ceSTreehugger Robot'abs ================
559*8ec969ceSTreehugger Robot'  basic
560*8ec969ceSTreehugger Robot
561*8ec969ceSTreehugger Robot	M_abs	   0	=   0
562*8ec969ceSTreehugger Robot	M_abs	   2	=   2
563*8ec969ceSTreehugger Robot	M_abs	-459	= 459
564*8ec969ceSTreehugger Robot
565*8ec969ceSTreehugger Robot'  overflow
566*8ec969ceSTreehugger Robot
567*8ec969ceSTreehugger Robot	M_abs	 +	=   +
568*8ec969ceSTreehugger Robot	M_abs	 -	=   +
569*8ec969ceSTreehugger Robot	M_abs 	-32767  =   +
570*8ec969ceSTreehugger Robot	M_abs 	 32766  = 32766
571*8ec969ceSTreehugger Robot	M_abs 	-32766  = 32766
572*8ec969ceSTreehugger Robot
573*8ec969ceSTreehugger Robot'
574*8ec969ceSTreehugger Robot'mult ================
575*8ec969ceSTreehugger Robot;  actually, a * b >> 15
576*8ec969ceSTreehugger Robot
577*8ec969ceSTreehugger Robot'  basic
578*8ec969ceSTreehugger Robot	M_mult	0  0		= 0
579*8ec969ceSTreehugger Robot	M_mult	0x100 0x100	= 2
580*8ec969ceSTreehugger Robot	M_mult	4711 0x4000	= 2355
581*8ec969ceSTreehugger Robot
582*8ec969ceSTreehugger Robot'  negative operands
583*8ec969ceSTreehugger Robot	M_mult	-1  0		=  0
584*8ec969ceSTreehugger Robot
585*8ec969ceSTreehugger Robot	M_mult	-0x100   0x100	= -2
586*8ec969ceSTreehugger Robot	M_mult	 0x100  -0x100	= -2
587*8ec969ceSTreehugger Robot	M_mult	-0x100  -0x100	=  2
588*8ec969ceSTreehugger Robot
589*8ec969ceSTreehugger Robot	M_mult	-4711   0x4000	= -2356
590*8ec969ceSTreehugger Robot	M_mult	 4711  -0x4000	= -2356
591*8ec969ceSTreehugger Robot	M_mult	-4711  -0x4000	=  2355
592*8ec969ceSTreehugger Robot
593*8ec969ceSTreehugger Robot'  overflow
594*8ec969ceSTreehugger Robot	M_mult	+ + 	 = 32766
595*8ec969ceSTreehugger Robot	M_mult	+ 0x4000 = 0x3fff
596*8ec969ceSTreehugger Robot	M_mult	0x4000 + = 0x3fff
597*8ec969ceSTreehugger Robot	M_mult	+ 1	 = 0
598*8ec969ceSTreehugger Robot	M_mult	+ 2	 = 1
599*8ec969ceSTreehugger Robot	M_mult	+ 3	 = 2
600*8ec969ceSTreehugger Robot
601*8ec969ceSTreehugger Robot'  underflow
602*8ec969ceSTreehugger Robot;	M_mult - - 	= +			assert !(a == b && b == MIN_WORD)
603*8ec969ceSTreehugger Robot 	M_mult - -32767	= +
604*8ec969ceSTreehugger Robot 	M_mult -32767 -	= +
605*8ec969ceSTreehugger Robot	M_mult	- + 	= -32767
606*8ec969ceSTreehugger Robot	M_mult	+ - 	= -32767
607*8ec969ceSTreehugger Robot	M_mult	- 1	= -1
608*8ec969ceSTreehugger Robot	M_mult	- 2	= -2
609*8ec969ceSTreehugger Robot	M_mult	- 3	= -3
610*8ec969ceSTreehugger Robot
611*8ec969ceSTreehugger Robot'
612*8ec969ceSTreehugger Robot'mult_r ================
613*8ec969ceSTreehugger Robot;  actually, (a * b + 16384) >> 15
614*8ec969ceSTreehugger Robot
615*8ec969ceSTreehugger Robot'  basic
616*8ec969ceSTreehugger Robot	M_mult_r 0  0		= 0
617*8ec969ceSTreehugger Robot	M_mult_r 0x100 0x100	= 2
618*8ec969ceSTreehugger Robot	M_mult_r 4711 0x4000	= 2356
619*8ec969ceSTreehugger Robot
620*8ec969ceSTreehugger Robot'  negative operands
621*8ec969ceSTreehugger Robot	M_mult_r -1  0		=  0
622*8ec969ceSTreehugger Robot
623*8ec969ceSTreehugger Robot	M_mult_r -0x100   0x100	= -2
624*8ec969ceSTreehugger Robot	M_mult_r  0x100  -0x100	= -2
625*8ec969ceSTreehugger Robot	M_mult_r -0x100  -0x100	=  2
626*8ec969ceSTreehugger Robot
627*8ec969ceSTreehugger Robot	M_mult_r -4711   0x4000	= -2355
628*8ec969ceSTreehugger Robot	M_mult_r  4711  -0x4000	= -2355
629*8ec969ceSTreehugger Robot	M_mult_r -4711  -0x4000	=  2356
630*8ec969ceSTreehugger Robot
631*8ec969ceSTreehugger Robot'  overflow
632*8ec969ceSTreehugger Robot	M_mult_r + + 	 = 32766
633*8ec969ceSTreehugger Robot	M_mult_r + 32766  = 32765
634*8ec969ceSTreehugger Robot	M_mult_r 32766 +  = 32765
635*8ec969ceSTreehugger Robot	M_mult_r + 0x4000 = 0x4000
636*8ec969ceSTreehugger Robot	M_mult_r 0x4000 + = 0x4000
637*8ec969ceSTreehugger Robot	M_mult_r + 0x4001 = 0x4000
638*8ec969ceSTreehugger Robot	M_mult_r 0x4001 + = 0x4000
639*8ec969ceSTreehugger Robot	M_mult_r + 2	 = 2
640*8ec969ceSTreehugger Robot	M_mult_r + 1	 = 1
641*8ec969ceSTreehugger Robot	M_mult_r 1 +	 = 1
642*8ec969ceSTreehugger Robot	M_mult_r + 0	 = 0
643*8ec969ceSTreehugger Robot	M_mult_r 0 +	 = 0
644*8ec969ceSTreehugger Robot
645*8ec969ceSTreehugger Robot'  underflow
646*8ec969ceSTreehugger Robot;	M_mult_r - - 	 = +			assert !(a == b && b == MIN_WORD)
647*8ec969ceSTreehugger Robot 	M_mult_r - -32767 = +
648*8ec969ceSTreehugger Robot 	M_mult_r -32767 - = +
649*8ec969ceSTreehugger Robot	M_mult_r - + 	 = -32767
650*8ec969ceSTreehugger Robot	M_mult_r + - 	 = -32767
651*8ec969ceSTreehugger Robot	M_mult_r - 1	 = -1
652*8ec969ceSTreehugger Robot	M_mult_r - 2	 = -2
653*8ec969ceSTreehugger Robot	M_mult_r - 3	 = -3
654*8ec969ceSTreehugger Robot
655*8ec969ceSTreehugger Robot'
656*8ec969ceSTreehugger Robot'L_mult ================
657*8ec969ceSTreehugger Robot;  actually, (a * b) << 1
658*8ec969ceSTreehugger Robot;  assert (a != MIN_WORD && b != MIN_WORD)
659*8ec969ceSTreehugger Robot
660*8ec969ceSTreehugger Robot'  basic
661*8ec969ceSTreehugger Robot	M_L_mult	0  0	= 0
662*8ec969ceSTreehugger Robot	M_L_mult	2  3	= 12
663*8ec969ceSTreehugger Robot	M_L_mult	4711 5	= 47110
664*8ec969ceSTreehugger Robot
665*8ec969ceSTreehugger Robot'  negative operands
666*8ec969ceSTreehugger Robot
667*8ec969ceSTreehugger Robot	M_L_mult	-2  3	= -12
668*8ec969ceSTreehugger Robot	M_L_mult	 2 -3	= -12
669*8ec969ceSTreehugger Robot	M_L_mult	-2 -3	=  12
670*8ec969ceSTreehugger Robot	M_L_mult -4711  5	= -47110
671*8ec969ceSTreehugger Robot	M_L_mult	4711 -5	= -47110
672*8ec969ceSTreehugger Robot	M_L_mult -4711 -5	=  47110
673*8ec969ceSTreehugger Robot
674*8ec969ceSTreehugger Robot'  overflow
675*8ec969ceSTreehugger Robot 	M_L_mult	+ + 	 = 2147352578
676*8ec969ceSTreehugger Robot	M_L_mult	+ -32767 = -2147352578
677*8ec969ceSTreehugger Robot	M_L_mult	-32767 + = -2147352578
678*8ec969ceSTreehugger Robot	M_L_mult	+ 2	 = 131068
679*8ec969ceSTreehugger Robot	M_L_mult	+ 1	 = 65534
680*8ec969ceSTreehugger Robot	M_L_mult	1 +	 = 65534
681*8ec969ceSTreehugger Robot	M_L_mult	+ 0	 = 0
682*8ec969ceSTreehugger Robot	M_L_mult	0 +	 = 0
683*8ec969ceSTreehugger Robot
684