ubsan: or1k: left shift of negative value

cpu/
	* or1korbis.cpu (f-disp26, f-disp21): Don't left shift negative values.
opcodes/
	* or1k-ibld.c: Regenerate.
This commit is contained in:
Alan Modra 2019-12-20 14:37:44 +10:30
parent e76832f125
commit bcd9f578a9
4 changed files with 12 additions and 4 deletions

View File

@ -1,3 +1,7 @@
2019-12-20 Alan Modra <amodra@gmail.com>
* or1korbis.cpu (f-disp26, f-disp21): Don't left shift negative values.
2019-12-17 Alan Modra <amodra@gmail.com>
* bpf.cpu (f-imm64): Avoid signed overflow.

View File

@ -76,7 +76,7 @@
26
INT
((value pc) (sra IAI (sub IAI value pc) (const 2)))
((value pc) (add IAI (sll IAI value (const 2)) pc))
((value pc) (add IAI (mul IAI value (const 4)) pc))
)
; PC relative, 21-bit, 13 shifted to right, aligned.
@ -91,7 +91,7 @@
((value pc)
(sub IAI (sra IAI value (const 13)) (sra IAI pc (const 13))))
((value pc)
(sll IAI (add IAI value (sra IAI pc (const 13))) (const 13)))
(mul IAI (add IAI value (sra IAI pc (const 13))) (const 8192)))
)
; Immediates.

View File

@ -1,3 +1,7 @@
2019-12-20 Alan Modra <amodra@gmail.com>
* or1k-ibld.c: Regenerate.
2019-12-20 Alan Modra <amodra@gmail.com>
* hppa-dis.c (extract_16, extract_21, print_insn_hppa): Use

View File

@ -783,7 +783,7 @@ or1k_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_ABS_ADDR), 0, 20, 21, 32, total_length, pc, & value);
value = ((((value) + (((DI) (pc) >> (13))))) << (13));
value = ((((value) + (((DI) (pc) >> (13))))) * (MAKEDI (0, 8192)));
fields->f_disp21 = value;
}
break;
@ -791,7 +791,7 @@ or1k_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, 25, 26, 32, total_length, pc, & value);
value = ((((value) << (2))) + (pc));
value = ((((value) * (MAKEDI (0, 4)))) + (pc));
fields->f_disp26 = value;
}
break;