ubsan: iq2000: left shift of negative value

cpu/
	* iq2000.cpu (f-offset): Avoid left shift of negative values.
opcodes/
	* iq2000-ibld.c: Regenerate.
This commit is contained in:
Alan Modra 2019-12-23 18:04:12 +10:30
parent 1a1e2852a5
commit 3e1056a1a6
4 changed files with 10 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2019-12-23 Alan Modra <amodra@gmail.com>
* iq2000.cpu (f-offset): Avoid left shift of negative values.
2019-12-20 Alan Modra <amodra@gmail.com>
* or1korbis.cpu (f-disp26, f-disp21): Don't left shift negative values.

View File

@ -207,7 +207,7 @@
(df f-offset "pc offset field" (PCREL-ADDR) 15 16 INT
; Actually, this is relative to the address of the delay slot.
((value pc) (sra SI (sub SI value pc) 2))
((value pc) (add SI (sll SI value 2) (add pc 4))))
((value pc) (add SI (mul SI value 4) (add pc 4))))
; Instruction fields that scarcely appear in instructions.

View File

@ -1,3 +1,7 @@
2019-12-23 Alan Modra <amodra@gmail.com>
* iq2000-ibld.c: Regenerate.
2019-12-23 Alan Modra <amodra@gmail.com>
* d30v-dis.c (extract_value): Make num param a uint64_t, constify

View File

@ -838,7 +838,7 @@ iq2000_cgen_extract_operand (CGEN_CPU_DESC cd,
{
long value;
length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 15, 16, 32, total_length, pc, & value);
value = ((((value) << (2))) + (((pc) + (4))));
value = ((((value) * (4))) + (((pc) + (4))));
fields->f_offset = value;
}
break;