2 * Sources of the "POINTER ARITHMETIC" group instructions
5 /* $Id: do_ptrar.c,v 2.5 1994/06/24 10:46:49 ceriel Exp $ */
17 #define adp(p,w) ((p) + (w))
18 #define sbs(t,s) ((s) - (t))
22 #define check_seg(s1,s2,w) if (s1 != s2) { warning(w); }
26 #define check_seg(s1,s2,w)
33 /* ADP f: Add f to pointer on top of stack */
34 register ptr p, t = st_lddp(SP);
36 LOG(("@R6 DoADP(%ld)", l));
43 check_seg(ptr2seg(t), ptr2seg(p), WSEGADP);
50 /* ADS w: Add w-byte value and pointer */
51 register long t = spop(arg_wi(l));
52 register ptr p, s = st_lddp(SP);
54 LOG(("@R6 DoADS(%ld)", l));
61 check_seg(ptr2seg(s), ptr2seg(p), WSEGADP);
68 /* SBS w: Subtract pointers in same fragment and push diff as size w integer */
69 register ptr t = st_lddp(SP);
70 register ptr s = st_lddp(SP + psize);
73 LOG(("@R6 DoSBS(%ld)", l));
76 check_seg(ptr2seg(t), ptr2seg(s), WSEGSBS);
78 if (must_test && !(IgnMask&BIT(EIOVFL))) {
79 if (l == 2 && (w < I_MINS2 || w > I_MAXS2))