X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Ffr30-ibld.c;h=8cc70209d4f08a9e05c1ea1b132d905eaf3150f6;hb=a1e60a1bdce8f555f45b5f94c059d83abf883567;hp=6816154ab277fd484b461fe69eb9873f7bdfff82;hpb=ed2ed4dcf4ae20b9a7c38ffdf379fef383c6b8f9;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/fr30-ibld.c b/opcodes/fr30-ibld.c index 6816154ab2..8cc70209d4 100644 --- a/opcodes/fr30-ibld.c +++ b/opcodes/fr30-ibld.c @@ -85,13 +85,13 @@ insert_1 (CGEN_CPU_DESC cd, int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else @@ -131,13 +131,15 @@ insert_normal (CGEN_CPU_DESC cd, CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -314,7 +316,7 @@ put_insn_int_value (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -491,7 +493,7 @@ extract_normal (CGEN_CPU_DESC cd, #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */