prevent sign-extension in unpack when needed
This commit is contained in:
parent
d16c25fc80
commit
07092a19ca
|
@ -1023,6 +1023,7 @@ CodeStd(nd)
|
||||||
case R_PACK: {
|
case R_PACK: {
|
||||||
label lba = tp->arr_ardescr;
|
label lba = tp->arr_ardescr;
|
||||||
|
|
||||||
|
|
||||||
CodeDAddress(left);
|
CodeDAddress(left);
|
||||||
arg = arg->nd_right;
|
arg = arg->nd_right;
|
||||||
left = arg->nd_left;
|
left = arg->nd_left;
|
||||||
|
@ -1043,6 +1044,12 @@ CodeStd(nd)
|
||||||
*/
|
*/
|
||||||
label lba, lbz = tp->arr_ardescr;
|
label lba, lbz = tp->arr_ardescr;
|
||||||
|
|
||||||
|
tp = tp->arr_elem;
|
||||||
|
if (tp->tp_fund == T_SUBRANGE &&
|
||||||
|
tp->sub_lb >= 0) {
|
||||||
|
C_loc((arith) 1);
|
||||||
|
}
|
||||||
|
else C_loc((arith) 0);
|
||||||
CodeDAddress(left);
|
CodeDAddress(left);
|
||||||
arg = arg->nd_right;
|
arg = arg->nd_right;
|
||||||
left = arg->nd_left;
|
left = arg->nd_left;
|
||||||
|
@ -1054,7 +1061,7 @@ CodeStd(nd)
|
||||||
C_lae_dlb(lbz, (arith) 0);
|
C_lae_dlb(lbz, (arith) 0);
|
||||||
C_lae_dlb(lba, (arith) 0);
|
C_lae_dlb(lba, (arith) 0);
|
||||||
C_cal("_unp");
|
C_cal("_unp");
|
||||||
C_asp(4 * pointer_size + word_size);
|
C_asp(4 * pointer_size + 2 * word_size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue