Browse Source

Disable checkpointer call when handling left of prefetch node

git-svn-id: trunk@34559 -
pierre 8 years ago
parent
commit
fe4e2956c6
3 changed files with 18 additions and 0 deletions
  1. 6 0
      compiler/arm/narminl.pas
  2. 6 0
      compiler/ppcgen/ngppcinl.pas
  3. 6 0
      compiler/x86/nx86inl.pas

+ 6 - 0
compiler/arm/narminl.pas

@@ -380,10 +380,16 @@ implementation
       var
       var
         ref : treference;
         ref : treference;
         r : tregister;
         r : tregister;
+        checkpointer_used : boolean;
       begin
       begin
         if not(GenerateThumbCode) and (CPUARM_HAS_EDSP in cpu_capabilities[current_settings.cputype]) then
         if not(GenerateThumbCode) and (CPUARM_HAS_EDSP in cpu_capabilities[current_settings.cputype]) then
           begin
           begin
+            { do not call Checkpointer for left node }
+            checkpointer_used:=(cs_checkpointer in current_settings.localswitches);
+            exclude(current_settings.localswitches,cs_checkpointer);
             secondpass(left);
             secondpass(left);
+            if checkpointer_used then
+              include(current_settings.localswitches,cs_checkpointer);
             case left.location.loc of
             case left.location.loc of
               LOC_CREFERENCE,
               LOC_CREFERENCE,
               LOC_REFERENCE:
               LOC_REFERENCE:

+ 6 - 0
compiler/ppcgen/ngppcinl.pas

@@ -205,8 +205,14 @@ implementation
      procedure tgppcinlinenode.second_prefetch;
      procedure tgppcinlinenode.second_prefetch;
        var
        var
          r: tregister;
          r: tregister;
+         checkpointer_used : boolean;
        begin
        begin
+         { do not call Checkpointer for left node }
+         checkpointer_used:=(cs_checkpointer in current_settings.localswitches);
+         exclude(current_settings.localswitches,cs_checkpointer);
          secondpass(left);
          secondpass(left);
+         if checkpointer_used then
+           include(current_settings.localswitches,cs_checkpointer);
          case left.location.loc of
          case left.location.loc of
            LOC_CREFERENCE,
            LOC_CREFERENCE,
            LOC_REFERENCE:
            LOC_REFERENCE:

+ 6 - 0
compiler/x86/nx86inl.pas

@@ -591,12 +591,18 @@ implementation
        var
        var
          ref : treference;
          ref : treference;
          r : tregister;
          r : tregister;
+         checkpointer_used : boolean;
        begin
        begin
 {$if defined(i386) or defined(i8086)}
 {$if defined(i386) or defined(i8086)}
          if current_settings.cputype>=cpu_Pentium3 then
          if current_settings.cputype>=cpu_Pentium3 then
 {$endif i386 or i8086}
 {$endif i386 or i8086}
            begin
            begin
+             { do not call Checkpointer for left node }
+             checkpointer_used:=(cs_checkpointer in current_settings.localswitches);
+             exclude(current_settings.localswitches,cs_checkpointer);
              secondpass(left);
              secondpass(left);
+             if checkpointer_used then
+               include(current_settings.localswitches,cs_checkpointer);
              case left.location.loc of
              case left.location.loc of
                LOC_CREFERENCE,
                LOC_CREFERENCE,
                LOC_REFERENCE:
                LOC_REFERENCE: