diff options
Diffstat (limited to 'src/cmd/5g/gsubr.c')
-rw-r--r-- | src/cmd/5g/gsubr.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/cmd/5g/gsubr.c b/src/cmd/5g/gsubr.c index e9131b436..d22d4b468 100644 --- a/src/cmd/5g/gsubr.c +++ b/src/cmd/5g/gsubr.c @@ -965,15 +965,18 @@ gcmp(int as, Node *lhs, Node *rhs) } /* generate a constant shift + * arm encodes a shift by 32 as 0, thus asking for 0 shift is illegal. */ Prog* gshift(int as, Node *lhs, int32 stype, int32 sval, Node *rhs) { Prog *p; - if (sval < 0 || sval > 31) + if (sval <= 0 || sval > 32) fatal("bad shift value: %d", sval); + sval = sval&0x1f; + p = gins(as, N, rhs); p->from.type = D_SHIFT; p->from.offset = stype | sval<<7 | lhs->val.u.reg; |