unsigned but-fields were sometimes sign-extended when converted to int

This commit is contained in:
ceriel
1990-05-18 10:29:57 +00:00
parent 74147d2b4a
commit c4dabcd9a4
2 changed files with 6 additions and 8 deletions

View File

@@ -82,7 +82,7 @@ eval_field(expr, code)
StoreLocal(tmpvar, pointer_size);
C_loi(word_size);
}
if (atype->tp_unsigned) {
if (tp->tp_unsigned) {
C_loc((arith)fd->fd_shift);
C_sru(word_size);
C_loc(fd->fd_mask);
@@ -117,7 +117,7 @@ eval_field(expr, code)
the bit field (i.e. the value that is got on
retrieval) is on top of stack.
*/
if (atype->tp_unsigned == 0) { /* sign extension */
if (tp->tp_unsigned == 0) { /* sign extension */
register arith shift = word_size * 8 - fd->fd_width;
C_loc(shift);