Skip to content

Commit

Permalink
Always use unsigned long.
Browse files Browse the repository at this point in the history
Traditional C compilers had long but not unsigned long.  I now assume
that everyone can compile unsigned long.  Remove macro UNSIGNED_ARITH
and act like it is always defined.  The type `unsigned arith` works
because arith is a macro for long.
  • Loading branch information
kernigh committed Oct 28, 2017
1 parent 9a965ef commit 649410b
Show file tree
Hide file tree
Showing 4 changed files with 3 additions and 59 deletions.
4 changes: 0 additions & 4 deletions lang/m2/comp/BigPars
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,3 @@
#define USE_INSERT 1 /* use C_insertpart mechanism */


!File: uns_arith.h
/*#define UNSIGNED_ARITH unsigned arith /* when it is supported */


4 changes: 0 additions & 4 deletions lang/m2/comp/SmallPars
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,3 @@
/*#define USE_INSERT 1 /* use C_insertpart mechanism */


!File: uns_arith.h
/*#define UNSIGNED_ARITH unsigned arith /* when it is supported */


45 changes: 2 additions & 43 deletions lang/m2/comp/cstoper.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,49 +117,8 @@ divide(pdiv, prem)
register arith o1 = *pdiv;
register arith o2 = *prem;

#ifndef UNSIGNED_ARITH
/* this is more of a problem than you might
think on C compilers which do not have
unsigned long.
*/
if (o2 & arith_sign) {/* o2 > max_arith */
if (! (o1 >= 0 || o1 < o2)) {
/* this is the unsigned test
o1 < o2 for o2 > max_arith
*/
*prem = o2 - o1;
*pdiv = 1;
}
else {
*pdiv = 0;
}
}
else { /* o2 <= max_arith */
arith half, bit, hdiv, hrem, rem;

half = (o1 >> 1) & ~arith_sign;
bit = o1 & 01;
/* now o1 == 2 * half + bit
and half <= max_arith
and bit <= max_arith
*/
hdiv = half / o2;
hrem = half % o2;
rem = 2 * hrem + bit;
*pdiv = 2*hdiv;
*prem = rem;
if (rem < 0 || rem >= o2) {
/* that is the unsigned compare
rem >= o2 for o2 <= max_arith
*/
*pdiv += 1;
*prem -= o2;
}
}
#else
*pdiv = (UNSIGNED_ARITH) o1 / (UNSIGNED_ARITH) o2;
*prem = (UNSIGNED_ARITH) o1 % (UNSIGNED_ARITH) o2;
#endif
*pdiv = (unsigned arith) o1 / (unsigned arith) o2;
*prem = (unsigned arith) o1 % (unsigned arith) o2;
}

void
Expand Down
9 changes: 1 addition & 8 deletions lang/m2/comp/type.c
Original file line number Diff line number Diff line change
Expand Up @@ -306,14 +306,7 @@ chk_bounds(l1, l2, fund)
if (fund == T_INTEGER) {
return l2 >= l1;
}
#ifdef UNSIGNED_ARITH
return (UNSIGNED_ARITH) l2 >= (UNSIGNED_ARITH) l1;
#else
return (l2 & arith_sign ?
(l1 & arith_sign ? l2 >= l1 : 1) :
(l1 & arith_sign ? 0 : l2 >= l1)
);
#endif
return (unsigned arith) l2 >= (unsigned arith) l1;
}

int
Expand Down

0 comments on commit 649410b

Please sign in to comment.