Did shift of 32. Not allowed

This commit is contained in:
ceriel 1991-10-02 13:41:33 +00:00
parent 2b7aae3b44
commit 24a353f3e1
2 changed files with 4 additions and 2 deletions

View file

@ -420,7 +420,8 @@ add_field(szp, fd, fdtpp, idf, stp)
Sign extension could occur on some machines when shifting Sign extension could occur on some machines when shifting
the mask to the left. the mask to the left.
*/ */
fd->fd_mask = (1 << fd->fd_width) - 1; if (fd->fd_width >= 8*sizeof(arith)) fd->fd_mask = -1;
else fd->fd_mask = (1L << fd->fd_width) - 1;
if (options['r']) /* adjust the field at the right */ if (options['r']) /* adjust the field at the right */
fd->fd_shift = bits_declared - fd->fd_width; fd->fd_shift = bits_declared - fd->fd_width;

View file

@ -456,7 +456,8 @@ add_field(szp, fd, fdtpp, idf, stp)
Sign extension could occur on some machines when shifting Sign extension could occur on some machines when shifting
the mask to the left. the mask to the left.
*/ */
fd->fd_mask = (1 << fd->fd_width) - 1; if (fd->fd_width >= 8*sizeof(arith)) fd->fd_mask = -1;
else fd->fd_mask = (1L << fd->fd_width) - 1;
if (options['r']) /* adjust the field at the right */ if (options['r']) /* adjust the field at the right */
fd->fd_shift = bits_declared - fd->fd_width; fd->fd_shift = bits_declared - fd->fd_width;