diff options
author | Alan Modra <amodra@gmail.com> | 2020-08-28 23:43:16 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-08-28 23:52:26 +0930 |
commit | a1e60a1bdce8f555f45b5f94c059d83abf883567 (patch) | |
tree | 5537dd112ecf11c9b73f5e87023915a73846177a | |
parent | ed2ed4dcf4ae20b9a7c38ffdf379fef383c6b8f9 (diff) | |
download | gdb-a1e60a1bdce8f555f45b5f94c059d83abf883567.zip gdb-a1e60a1bdce8f555f45b5f94c059d83abf883567.tar.gz gdb-a1e60a1bdce8f555f45b5f94c059d83abf883567.tar.bz2 |
PR26449, PR26450 UBSAN: frv-ibld.c:135 left shift
Eh well, I guess the code didn't quite live up to the comment.
PR 26449
PR 26450
* cgen-ibld.in (insert_1): Use 1UL in forming mask.
(extract_normal): Likewise.
(insert_normal): Likewise, and move past zero length test.
(put_insn_int_value): Handle mask for zero length, use 1UL.
* bpf-ibld.c, * epiphany-ibld.c, * fr30-ibld.c, * frv-ibld.c,
* ip2k-ibld.c, * iq2000-ibld.c, * lm32-ibld.c, * m32c-ibld.c,
* m32r-ibld.c, * mep-ibld.c, * mt-ibld.c, * or1k-ibld.c,
* xc16x-ibld.c, * xstormy16-ibld.c: Regenerate.
-rw-r--r-- | opcodes/ChangeLog | 13 | ||||
-rw-r--r-- | opcodes/bpf-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/cgen-ibld.in | 14 | ||||
-rw-r--r-- | opcodes/epiphany-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/fr30-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/frv-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/ip2k-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/iq2000-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/lm32-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/m32c-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/m32r-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/mep-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/mt-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/or1k-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/xc16x-ibld.c | 14 | ||||
-rw-r--r-- | opcodes/xstormy16-ibld.c | 14 |
16 files changed, 133 insertions, 90 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 71826bd..6e7b8f4 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,16 @@ +2020-08-28 Alan Modra <amodra@gmail.com> + + PR 26449 + PR 26450 + * cgen-ibld.in (insert_1): Use 1UL in forming mask. + (extract_normal): Likewise. + (insert_normal): Likewise, and move past zero length test. + (put_insn_int_value): Handle mask for zero length, use 1UL. + * bpf-ibld.c, * epiphany-ibld.c, * fr30-ibld.c, * frv-ibld.c, + * ip2k-ibld.c, * iq2000-ibld.c, * lm32-ibld.c, * m32c-ibld.c, + * m32r-ibld.c, * mep-ibld.c, * mt-ibld.c, * or1k-ibld.c, + * xc16x-ibld.c, * xstormy16-ibld.c: Regenerate. + 2020-08-28 Cooper Qu <cooper.qu@linux.alibaba.com> * csky-dis.c (CSKY_DEFAULT_ISA): Define. diff --git a/opcodes/bpf-ibld.c b/opcodes/bpf-ibld.c index 392dceb..0070e41 100644 --- a/opcodes/bpf-ibld.c +++ b/opcodes/bpf-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? */ diff --git a/opcodes/cgen-ibld.in b/opcodes/cgen-ibld.in index ae9d20d..7829822 100644 --- a/opcodes/cgen-ibld.in +++ b/opcodes/cgen-ibld.in @@ -84,13 +84,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 @@ -130,13 +130,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 (); @@ -313,7 +315,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); } @@ -490,7 +492,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? */ diff --git a/opcodes/epiphany-ibld.c b/opcodes/epiphany-ibld.c index 4a974ed..27f0fab 100644 --- a/opcodes/epiphany-ibld.c +++ b/opcodes/epiphany-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? */ diff --git a/opcodes/fr30-ibld.c b/opcodes/fr30-ibld.c index 6816154..8cc7020 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? */ diff --git a/opcodes/frv-ibld.c b/opcodes/frv-ibld.c index 43bccba..2a7fcb8 100644 --- a/opcodes/frv-ibld.c +++ b/opcodes/frv-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? */ diff --git a/opcodes/ip2k-ibld.c b/opcodes/ip2k-ibld.c index 605d0bd..18c2fed 100644 --- a/opcodes/ip2k-ibld.c +++ b/opcodes/ip2k-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? */ diff --git a/opcodes/iq2000-ibld.c b/opcodes/iq2000-ibld.c index 2a87c70..cad26e2 100644 --- a/opcodes/iq2000-ibld.c +++ b/opcodes/iq2000-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? */ diff --git a/opcodes/lm32-ibld.c b/opcodes/lm32-ibld.c index 2b0efda..48e894a 100644 --- a/opcodes/lm32-ibld.c +++ b/opcodes/lm32-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? */ diff --git a/opcodes/m32c-ibld.c b/opcodes/m32c-ibld.c index 6ad4da9..67bfb48 100644 --- a/opcodes/m32c-ibld.c +++ b/opcodes/m32c-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? */ diff --git a/opcodes/m32r-ibld.c b/opcodes/m32r-ibld.c index 559f471..8e1a7de 100644 --- a/opcodes/m32r-ibld.c +++ b/opcodes/m32r-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? */ diff --git a/opcodes/mep-ibld.c b/opcodes/mep-ibld.c index 66a30e1..3de7ade 100644 --- a/opcodes/mep-ibld.c +++ b/opcodes/mep-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? */ diff --git a/opcodes/mt-ibld.c b/opcodes/mt-ibld.c index 683b76b..924fc90 100644 --- a/opcodes/mt-ibld.c +++ b/opcodes/mt-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? */ diff --git a/opcodes/or1k-ibld.c b/opcodes/or1k-ibld.c index 7b89260..576a139 100644 --- a/opcodes/or1k-ibld.c +++ b/opcodes/or1k-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? */ diff --git a/opcodes/xc16x-ibld.c b/opcodes/xc16x-ibld.c index b2802fe..ed51a1b 100644 --- a/opcodes/xc16x-ibld.c +++ b/opcodes/xc16x-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? */ diff --git a/opcodes/xstormy16-ibld.c b/opcodes/xstormy16-ibld.c index eaffbee..06f036f 100644 --- a/opcodes/xstormy16-ibld.c +++ b/opcodes/xstormy16-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? */ |