Hi Guys,

  I am checking in the patch below to update the hardware multiply
  patterns for the MSP430 so that there is a NOP instruction after
  disabling interrupts with the DINT instruction.  Timing issues mean
  that it is possible for the instruction following the DINT to be
  interrupted, so it has to be a NOP.  The change is going in to the
  mainline sources and the 4.9 branch.

Cheers
  Nick

gcc/ChangeLog
2014-06-17  Nick Clifton  <ni...@redhat.com>

        * config/msp430/msp430.md (mulhisi3): Add a NOP after the DINT.
        (umulhi3, mulsidi3, umulsidi3): Likewise.

Index: gcc/config/msp430/msp430.md
===================================================================
--- gcc/config/msp430/msp430.md (revision 211726)
+++ gcc/config/msp430/msp430.md (working copy)
@@ -1423,9 +1423,9 @@
   "optimize > 2 && msp430_hwmult_type != NONE"
   "*
     if (msp430_use_f5_series_hwmult ())
-      return \"PUSH.W sr { DINT { MOV.W %1, &0x04C2 { MOV.W %2, &0x04C8 { 
MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0 { POP.W sr\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x04C2 { MOV.W %2, &0x04C8 
{ MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0 { POP.W sr\";
     else
-      return \"PUSH.W sr { DINT { MOV.W %1, &0x0132 { MOV.W %2, &0x0138 { 
MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0 { POP.W sr\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x0132 { MOV.W %2, &0x0138 
{ MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0 { POP.W sr\";
   "
 )
 
@@ -1436,9 +1436,9 @@
   "optimize > 2 && msp430_hwmult_type != NONE"
   "*
     if (msp430_use_f5_series_hwmult ())
-      return \"PUSH.W sr { DINT { MOV.W %1, &0x04C0 { MOV.W %2, &0x04C8 { 
MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0 { POP.W sr\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x04C0 { MOV.W %2, &0x04C8 
{ MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0 { POP.W sr\";
     else
-      return \"PUSH.W sr { DINT { MOV.W %1, &0x0130 { MOV.W %2, &0x0138 { 
MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0 { POP.W sr\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x0130 { MOV.W %2, &0x0138 
{ MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0 { POP.W sr\";
   "
 )
 
@@ -1449,9 +1449,9 @@
   "optimize > 2 && msp430_hwmult_type != NONE"
   "*
     if (msp430_use_f5_series_hwmult ())
-      return \"PUSH.W sr { DINT { MOV.W %L1, &0x04D4 { MOV.W %H1, &0x04D6 { 
MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, 
%B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0 { POP.W sr\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x04D4 { MOV.W %H1, 
&0x04D6 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W 
&0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0 { POP.W sr\";
     else
-      return \"PUSH.W sr { DINT { MOV.W %L1, &0x0144 { MOV.W %H1, &0x0146 { 
MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, 
%B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0 { POP.W sr\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x0144 { MOV.W %H1, 
&0x0146 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W 
&0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0 { POP.W sr\";
   "
 )
 
@@ -1462,8 +1462,8 @@
   "optimize > 2 && msp430_hwmult_type != NONE"
   "*
     if (msp430_use_f5_series_hwmult ())
-      return \"PUSH.W sr { DINT { MOV.W %L1, &0x04D0 { MOV.W %H1, &0x04D2 { 
MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, 
%B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0 { POP.W sr\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x04D0 { MOV.W %H1, 
&0x04D2 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W 
&0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0 { POP.W sr\";
     else
-      return \"PUSH.W sr { DINT { MOV.W %L1, &0x0140 { MOV.W %H1, &0x0142 { 
MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, 
%B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0 { POP.W sr\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x0140 { MOV.W %H1, 
&0x0142 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W 
&0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0 { POP.W sr\";
   "
 )

Reply via email to