ubsan: fr30: left shift of negative value
authorAlan Modra <amodra@gmail.com>
Sat, 11 Jan 2020 02:02:11 +0000 (12:32 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 13 Jan 2020 01:42:05 +0000 (12:12 +1030)
cpu/
* fr30.cpu (f-disp9, f-disp10, f-s10, f-rel9, f-rel12): Don't
left shift signed values.
opcodes/
* fr30-ibld.c: Regenerate.

cpu/ChangeLog
cpu/fr30.cpu
opcodes/ChangeLog
opcodes/fr30-ibld.c

index a5d0843c4cdda0ef67baa2472a231e6f2bcfcae2..cd40af4113209f8687cedb24476672630a832b0f 100644 (file)
@@ -1,3 +1,8 @@
+2020-01-13  Alan Modra  <amodra@gmail.com>
+
+       * fr30.cpu (f-disp9, f-disp10, f-s10, f-rel9, f-rel12): Don't
+       left shift signed values.
+
 2020-01-06  Alan Modra  <amodra@gmail.com>
 
        * m32c.cpu (f-dsp-8-u16, f-dsp-8-s16): Rearrange to mask any sign
index 84c32cf5d78f0ef1a0526dc086d9728e1b1cde53..07bf1daf119bb40c366104e116911723399bc46d 100644 (file)
 (df  f-disp8     "8 bit signed offset"   ()  4  8 INT #f #f)
 (df  f-disp9     "9 bit signed offset"   ()  4  8 INT
     ((value pc) (sra WI value (const 1)))
-    ((value pc) (sll WI value (const 1)))
+    ((value pc) (mul WI value (const 2)))
 )
 (df  f-disp10    "10 bit signed offset"  ()  4  8 INT
      ((value pc) (sra WI value (const 2)))
-     ((value pc) (sll WI value (const 2)))
+     ((value pc) (mul WI value (const 4)))
 )
 (df  f-s10       "10 bit signed offset"  ()  8  8 INT
      ((value pc) (sra WI value (const 2)))
-     ((value pc) (sll WI value (const 2)))
+     ((value pc) (mul WI value (const 4)))
 )
 (df  f-u10       "10 bit unsigned offset" ()  8  8 UINT
      ((value pc) (srl UWI value (const 2)))
 )
 (df  f-rel9 "9 pc relative signed offset" (PCREL-ADDR) 8 8 INT
      ((value pc) (sra WI (sub WI value (add WI pc (const 2))) (const 1)))
-     ((value pc) (add WI (sll WI value (const 1)) (add WI pc (const 2))))
+     ((value pc) (add WI (mul WI value (const 2)) (add WI pc (const 2))))
 )
 (dnf f-dir8      "8  bit direct address"  ()  8  8)
 (df  f-dir9      "9  bit direct address"  ()  8  8 UINT
 )
 (df  f-rel12     "12 bit pc relative signed offset" (PCREL-ADDR) 5 11 INT
      ((value pc) (sra WI (sub WI value (add WI pc (const 2))) (const 1)))
-     ((value pc) (add WI (sll WI value (const 1)) (add WI pc (const 2))))
+     ((value pc) (add WI (mul WI value (const 2)) (add WI pc (const 2))))
 )
 
 (dnf f-reglist_hi_st  "8 bit register mask for stm" () 8 8)
index e2e9b10fcddd2f09a3af39a7d280bbe00673f343..feeb7c55357227efc12b7d80f9f352572d8cdae1 100644 (file)
@@ -1,3 +1,7 @@
+2020-01-13  Alan Modra  <amodra@gmail.com>
+
+       * fr30-ibld.c: Regenerate.
+
 2020-01-13  Alan Modra  <amodra@gmail.com>
 
        * xgate-dis.c (print_insn): Don't left shift signed value.
index 8f12e4c3fe5a41d95cf56c3cdfa30b4e3a698274..ea4ea0a6aac9dc4e26b417b1be3677cb2334aa47 100644 (file)
@@ -831,7 +831,7 @@ fr30_cgen_extract_operand (CGEN_CPU_DESC cd,
       {
         long value;
         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 4, 8, 16, total_length, pc, & value);
-        value = ((value) << (2));
+        value = ((value) * (4));
         fields->f_disp10 = value;
       }
       break;
@@ -842,7 +842,7 @@ fr30_cgen_extract_operand (CGEN_CPU_DESC cd,
       {
         long value;
         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 4, 8, 16, total_length, pc, & value);
-        value = ((value) << (1));
+        value = ((value) * (2));
         fields->f_disp9 = value;
       }
       break;
@@ -867,7 +867,7 @@ fr30_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, 5, 11, 16, total_length, pc, & value);
-        value = ((((value) << (1))) + (((pc) + (2))));
+        value = ((((value) * (2))) + (((pc) + (2))));
         fields->f_rel12 = value;
       }
       break;
@@ -875,7 +875,7 @@ fr30_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, 8, 8, 16, total_length, pc, & value);
-        value = ((((value) << (1))) + (((pc) + (2))));
+        value = ((((value) * (2))) + (((pc) + (2))));
         fields->f_rel9 = value;
       }
       break;
@@ -905,7 +905,7 @@ fr30_cgen_extract_operand (CGEN_CPU_DESC cd,
       {
         long value;
         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 8, 16, total_length, pc, & value);
-        value = ((value) << (2));
+        value = ((value) * (4));
         fields->f_s10 = value;
       }
       break;