fix to bitfield code: contained non-portable shift
authorceriel <none@none>
Mon, 9 Oct 1989 13:42:39 +0000 (13:42 +0000)
committerceriel <none@none>
Mon, 9 Oct 1989 13:42:39 +0000 (13:42 +0000)
lang/cem/cemcom/field.c

index 3b94431..1970ef2 100644 (file)
@@ -28,6 +28,7 @@
 
 arith NewLocal();              /* util.c       */
 char *symbol2str();            /* symbol2str.c */
+extern long full_mask[];       /* cstoper.c    */
 
 /*     Eval_field() evaluates expressions involving bit fields.
        The various instructions are not yet optimised in the expression
@@ -72,7 +73,7 @@ eval_field(expr, code)
                        C_slu(asize);
                else
                        C_sli(asize);
-               C_loc(~((fd->fd_mask << fd->fd_shift) | (~0 << (8 * asize))));
+               C_loc(~((fd->fd_mask << fd->fd_shift) | ~full_mask[asize]));
                if (leftop->ex_depth == 0)      {       /* simple case  */
                        load_val(leftop, RVAL);
                        C_and(asize);
@@ -142,7 +143,7 @@ eval_field(expr, code)
                        C_slu(asize);
                else
                        C_sli(asize);
-               C_loc(~((fd->fd_mask << fd->fd_shift) | (~0 << (8 * asize))));
+               C_loc(~((fd->fd_mask << fd->fd_shift) | ~full_mask[asize]));
                if (leftop->ex_depth == 0)      {
                        load_val(leftop, RVAL);
                        C_and(asize);