1 /*
2   Arith
3   Simple arithmetic opcodes
4   JBS 15 June 1994
5 */
6 
7 #ifndef _ARITH_
8 
9 #define _ARITH_
10 
11 #include "types.h"
12 
13 #define plus(a,b)       store((a)+(b))
14 #define minus(a,b)      store((a)-(b))
15 #define multiply(a,b)   store((signed_word)(a) * (signed_word)(b))
16 #define divide(a,b)     store((signed_word)(a) / (signed_word)(b))
17 #define mod(a,b)        store((signed_word)(a) % (signed_word)(b))
18 #define or(a,b)         store((a)|(b))
19 #define and(a,b)        store((a)&(b))
20 #define not(a)          store(~(a))
21 
22 #define less_than(a,b)     ret_value((signed_word) (a) < (signed_word) (b))
23 #define greater_than(a,b)  ret_value((signed_word) (a) > (signed_word) (b))
24 
25 #define cp_zero(a)      ret_value((a) == 0)
26 #define bit(a,b)        ret_value(((b) & ~(a)) == 0)
27 
28 void logical_shift(word, word);
29 void arithmetic_shift(word, word);
30 
31 #endif
32