-/* asexpr.c */
+ /* asexpr.c */
/*
* (C) Copyright 1989-1995
#include <stdio.h>
#include <setjmp.h>
#include <string.h>
-#include <alloc.h>
#include "asm.h"
/*)Module asexpr.c
*
* asexpr.c contains the following functions:
* VOID abscheck()
- * addr_t absexpr()
+ * Addr_T absexpr()
* VOID clrexpr()
* int digit()
* VOID expr()
esp->e_rlcf |= R_MSB ;
break;
}
+ else if (esp->e_base.e_ap && re.e_addr == 16)
+ {
+ if (flat24Mode)
+ {
+ esp->e_rlcf |= R_HIB;
+ }
+ else
+ {
+ warnBanner();
+ fprintf(stderr,
+ "(expr >> 16) is only meaningful in "
+ ".flat24 mode.\n");
+ qerr();
+ }
+
+ break;
+ }
/* else continue with the normal processing */
abscheck(esp);
esp->e_addr >>= re.e_addr;
unget(c);
}
-/*)Function addr_t absexpr()
+/*)Function Addr_T absexpr()
*
* The function absexpr() evaluates an expression, verifies it
* is absolute (i.e. not position dependent or relocatable), and
* a 'r' error is reported.
*/
-addr_t
+Addr_T
absexpr()
{
struct expr e;
if (c == '-') {
expr(esp, 100);
abscheck(esp);
- esp->e_addr = -esp->e_addr;
+ esp->e_addr = 0-esp->e_addr;
return;
}
if (c == '~') {