mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-04-24 19:00:23 +08:00
Clear up WRITE macros causing compile failures with Watcom
The OpenWatcom compiler warns about invalid shifts (correctly, it appears) due to the non-X86_MEMORY versions of the various WRITE macros. Fix.
This commit is contained in:
parent
848dbc8ff8
commit
338a3b6882
68
nasmlib.h
68
nasmlib.h
@ -213,38 +213,50 @@ void standard_extension(char *inname, char *outname, char *extension,
|
||||
|
||||
#else /* !X86_MEMORY */
|
||||
|
||||
#define WRITECHAR(p,v) \
|
||||
do { \
|
||||
*(p)++ = (v) & 0xFF; \
|
||||
} while (0)
|
||||
#define WRITECHAR(p,v) \
|
||||
do { \
|
||||
uint8_t *_p = (uint8_t *)(p); \
|
||||
uint8_t _v = (v); \
|
||||
_p[0] = _v; \
|
||||
(p) = (void *)(_p + 1); \
|
||||
} while (0)
|
||||
|
||||
#define WRITESHORT(p,v) \
|
||||
do { \
|
||||
WRITECHAR(p,v); \
|
||||
WRITECHAR(p,(v) >> 8); \
|
||||
} while (0)
|
||||
#define WRITESHORT(p,v) \
|
||||
do { \
|
||||
uint8_t *_p = (uint8_t *)(p); \
|
||||
uint16_t _v = (v); \
|
||||
_p[0] = _v; \
|
||||
_p[1] = _v >> 8; \
|
||||
(p) = (void *)(_p + 2); \
|
||||
} while (0)
|
||||
|
||||
#define WRITELONG(p,v) \
|
||||
do { \
|
||||
WRITECHAR(p,v); \
|
||||
WRITECHAR(p,(v) >> 8); \
|
||||
WRITECHAR(p,(v) >> 16); \
|
||||
WRITECHAR(p,(v) >> 24); \
|
||||
} while (0)
|
||||
#define WRITELONG(p,v) \
|
||||
do { \
|
||||
uint8_t *_p = (uint8_t *)(p); \
|
||||
uint32_t _v = (v); \
|
||||
_p[0] = _v; \
|
||||
_p[1] = _v >> 8; \
|
||||
_p[2] = _v >> 16; \
|
||||
_p[3] = _v >> 24; \
|
||||
(p) = (void *)(_p + 4); \
|
||||
} while (0)
|
||||
|
||||
#define WRITEDLONG(p,v) \
|
||||
do { \
|
||||
WRITECHAR(p,v); \
|
||||
WRITECHAR(p,(v) >> 8); \
|
||||
WRITECHAR(p,(v) >> 16); \
|
||||
WRITECHAR(p,(v) >> 24); \
|
||||
WRITECHAR(p,(v) >> 32); \
|
||||
WRITECHAR(p,(v) >> 40); \
|
||||
WRITECHAR(p,(v) >> 48); \
|
||||
WRITECHAR(p,(v) >> 56); \
|
||||
} while (0)
|
||||
#define WRITEDLONG(p,v) \
|
||||
do { \
|
||||
uint8_t *_p = (uint8_t *)(p); \
|
||||
uint64_t _v = (v); \
|
||||
_p[0] = _v; \
|
||||
_p[1] = _v >> 8; \
|
||||
_p[2] = _v >> 16; \
|
||||
_p[3] = _v >> 24; \
|
||||
_p[4] = _v >> 32; \
|
||||
_p[5] = _v >> 40; \
|
||||
_p[6] = _v >> 48; \
|
||||
_p[7] = _v >> 56; \
|
||||
(p) = (void *)(_p + 8); \
|
||||
} while (0)
|
||||
|
||||
#define WRITEADDR(p,v,s) \
|
||||
#define WRITEADDR(p,v,s) \
|
||||
do { \
|
||||
int _s = (s); \
|
||||
uint64_t _v = (v); \
|
||||
|
@ -74,77 +74,91 @@
|
||||
#define WSAACHAR(s,p,v) \
|
||||
do { \
|
||||
*(uint8_t *)(p) = (v); \
|
||||
saa_wbytes(s, p, 1); \
|
||||
saa_wbytes(s, p, 1); \
|
||||
} while (0)
|
||||
|
||||
#define WSAASHORT(s,p,v) \
|
||||
#define WSAASHORT(s,p,v) \
|
||||
do { \
|
||||
*(uint16_t *)(p) = (v); \
|
||||
saa_wbytes(s, p, 2); \
|
||||
saa_wbytes(s, p, 2); \
|
||||
} while (0)
|
||||
|
||||
#define WSAALONG(s,p,v) \
|
||||
do { \
|
||||
*(uint32_t *)(p) = (v); \
|
||||
saa_wbytes(s, p, 4); \
|
||||
saa_wbytes(s, p, 4); \
|
||||
} while (0)
|
||||
|
||||
#define WSAADLONG(s,p,v) \
|
||||
#define WSAADLONG(s,p,v) \
|
||||
do { \
|
||||
*(uint64_t *)(p) = (v); \
|
||||
saa_wbytes(s, p, 8); \
|
||||
saa_wbytes(s, p, 8); \
|
||||
} while (0)
|
||||
|
||||
#define WSAAADDR(a,p,v,s) \
|
||||
do { \
|
||||
uint64_t _v = (v); \
|
||||
memcpy((p), &_v, (s)); \
|
||||
saa_wbytes(a, p, s); \
|
||||
saa_wbytes(a, p, s); \
|
||||
} while (0)
|
||||
|
||||
#else /* !X86_MEMORY */
|
||||
|
||||
#define WSAACHAR(s,p,v) \
|
||||
do { \
|
||||
*(p) = (v) & 0xFF; \
|
||||
saa_wbytes(s, p, 1); \
|
||||
} while (0)
|
||||
|
||||
#define WSAASHORT(s,p,v) \
|
||||
do { \
|
||||
WSAACHAR(s,p,v); \
|
||||
WSAACHAR(p+1,(v) >> 8); \
|
||||
} while (0)
|
||||
|
||||
#define WSAALONG(s,p,v) \
|
||||
do { \
|
||||
WSAACHAR(s,p,v); \
|
||||
WSAACHAR(p+1,(v) >> 8); \
|
||||
WSAACHAR(p+2,(v) >> 16); \
|
||||
WSAACHAR(p+3,(v) >> 24); \
|
||||
} while (0)
|
||||
|
||||
#define WSAADLONG(s,p,v) \
|
||||
do { \
|
||||
WSAACHAR(s,p,v); \
|
||||
WSAACHAR(p+1,(v) >> 8); \
|
||||
WSAACHAR(p+2,(v) >> 16); \
|
||||
WSAACHAR(p+3,(v) >> 24); \
|
||||
WSAACHAR(p+4,(v) >> 32); \
|
||||
WSAACHAR(p+5,(v) >> 40); \
|
||||
WSAACHAR(p+6,(v) >> 48); \
|
||||
WSAACHAR(p+7,(v) >> 56); \
|
||||
} while (0)
|
||||
|
||||
#define WSAAADDR(a,p,v,s) \
|
||||
#define WSAACHAR(s,p,v) \
|
||||
do { \
|
||||
*(uint8_t *)p = (v); \
|
||||
saa_wbytes(s, p, 1); \
|
||||
} while (0)
|
||||
|
||||
#define WSAASHORT(s,p,v) \
|
||||
do { \
|
||||
uint16_t _v = (v); \
|
||||
uint8_t *_p = (uint8_t *)(p); \
|
||||
_p[0] = _v; \
|
||||
_p[1] = _v >> 8; \
|
||||
saa_wbytes(s, _p, 2); \
|
||||
} while (0)
|
||||
|
||||
#define WSAALONG(s,p,v) \
|
||||
do { \
|
||||
uint32_t _v = (v); \
|
||||
uint8_t *_p = (uint8_t *)(p); \
|
||||
_p[0] = _v; \
|
||||
_p[1] = _v >> 8; \
|
||||
_p[2] = _v >> 16; \
|
||||
_p[3] = _v >> 24; \
|
||||
saa_wbytes(s, _p, 4); \
|
||||
} while (0)
|
||||
|
||||
#define WSAADLONG(s,p,v) \
|
||||
do { \
|
||||
int _s = (s); \
|
||||
uint64_t _v = (v); \
|
||||
while (_s--) { \
|
||||
WSAACHAR(a,p,_v); \
|
||||
_v >>= 8; \
|
||||
} \
|
||||
} while(0)
|
||||
uint8_t *_p = (uint8_t *)(p); \
|
||||
_p[0] = _v; \
|
||||
_p[1] = _v >> 8; \
|
||||
_p[2] = _v >> 16; \
|
||||
_p[3] = _v >> 24; \
|
||||
_p[4] = _v >> 32; \
|
||||
_p[5] = _v >> 40; \
|
||||
_p[6] = _v >> 48; \
|
||||
_p[7] = _v >> 56; \
|
||||
saa_wbytes(s, _p, 8); \
|
||||
} while (0)
|
||||
|
||||
#define WSAAADDR(a,p,v,s) \
|
||||
do { \
|
||||
uint64_t _v = (v); \
|
||||
uint8_t *_p = (uint8_t *)(p); \
|
||||
_p[0] = _v; \
|
||||
_p[1] = _v >> 8; \
|
||||
_p[2] = _v >> 16; \
|
||||
_p[3] = _v >> 24; \
|
||||
_p[4] = _v >> 32; \
|
||||
_p[5] = _v >> 40; \
|
||||
_p[6] = _v >> 48; \
|
||||
_p[7] = _v >> 56; \
|
||||
saa_wbytes(a, _p, s); \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
||||
@ -2006,12 +2020,13 @@ void dwarf64_typevalue(int32_t type)
|
||||
/* called from elf_out with type == TY_STABSSYMLIN */
|
||||
void dwarf64_output(int type, void *param)
|
||||
{
|
||||
(void)type;
|
||||
int ln, aa, inx, maxln, soc;
|
||||
struct symlininfo *s;
|
||||
struct SAA *plinep;
|
||||
|
||||
s = (struct symlininfo *)param;
|
||||
(void)type;
|
||||
|
||||
s = (struct symlininfo *)param;
|
||||
/* line number info is only gathered for executable sections */
|
||||
if (!(sects[s->section]->flags & SHF_EXECINSTR))
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user