diff --git a/cpu/ChangeLog b/cpu/ChangeLog index c5a44ab45f0f63b579d9aecbc24203c50d4eb046..688c5960a33f05aa67ea83f43a9f004b072a3e1f 100644 --- a/cpu/ChangeLog +++ b/cpu/ChangeLog @@ -1,3 +1,7 @@ +2019-12-16 Alan Modra <amodra@gmail.com> + + * xstormy16.cpu (f-rel12a): Avoid signed overflow. + 2019-12-11 Alan Modra <amodra@gmail.com> * epiphany.cpu (f-sdisp11): Don't sign extend with shifts. diff --git a/cpu/xstormy16.cpu b/cpu/xstormy16.cpu index ae7e042c92b04249bf14104ed088d6ba5c0f0c8f..aa5a464fa61cd3a14f19165ebd2e439531c456f1 100644 --- a/cpu/xstormy16.cpu +++ b/cpu/xstormy16.cpu @@ -393,7 +393,7 @@ (length 11) (mode INT) (encode (value pc) (sra SI (sub SI value (add SI pc 2)) 1)) - (decode (value pc) (add SI (sll value 1) (add SI pc 2))) + (decode (value pc) (add SI (mul value 2) (add SI pc 2))) ) (dnop rel12a "12 bit relative address" () h-uint f-rel12a) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index ce56ec023129cf3ba594d3b532283b79328edd16..1e13b1f7346d29b2f7e2f265584598b36c2b6dd6 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,7 @@ +2019-12-16 Alan Modra <amodra@gmail.com> + + * xstormy16-ibld.c: Regenerate. + 2019-12-16 Alan Modra <amodra@gmail.com> * score-dis.c (print_insn_score16): Move rpush/rpop imm field diff --git a/opcodes/xstormy16-ibld.c b/opcodes/xstormy16-ibld.c index babdd46def9ef5b15f2d37a6855f30e77ec0d07b..69da98678494f45a09f34d1eb769c77cc6df76a5 100644 --- a/opcodes/xstormy16-ibld.c +++ b/opcodes/xstormy16-ibld.c @@ -800,7 +800,7 @@ xstormy16_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, 4, 11, 32, total_length, pc, & value); - value = ((((value) << (1))) + (((pc) + (2)))); + value = ((((value) * (2))) + (((pc) + (2)))); fields->f_rel12a = value; } break;