emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/android 2686a55aa12: Fix optimized move functions


From: Po Lu
Subject: feature/android 2686a55aa12: Fix optimized move functions
Date: Wed, 29 Mar 2023 02:53:47 -0400 (EDT)

branch: feature/android
commit 2686a55aa121b7e0bdd0d98c9b3e660df25c9bcf
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix optimized move functions
    
    * src/sfnt.c (sfnt_move_x):
    (sfnt_move_y):
    (sfnt_move): Set N flags and don't forget to
    set N points too.
---
 src/sfnt.c | 37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/src/sfnt.c b/src/sfnt.c
index 11b632ca555..4da0997751d 100644
--- a/src/sfnt.c
+++ b/src/sfnt.c
@@ -9344,7 +9344,7 @@ sfnt_dual_project_onto_any_vector (sfnt_f26dot6 vx, 
sfnt_f26dot6 vy,
 }
 
 /* Move N points at *X, *Y by DISTANCE along INTERPRETER's freedom
-   vector.  Set *FLAGS where appropriate and when non-NULL.
+   vector.  Set N flags in *FLAGS where appropriate and when non-NULL.
 
    Assume both vectors are aligned to the X axis.  */
 
@@ -9354,14 +9354,17 @@ sfnt_move_x (sfnt_f26dot6 *restrict x, sfnt_f26dot6 
*restrict y,
             sfnt_f26dot6 distance, unsigned char *flags)
 {
   while (n--)
-    *x = sfnt_add (*x, distance);
+    {
+      *x = sfnt_add (*x, distance);
+      x++;
 
-  if (flags)
-    *flags |= SFNT_POINT_TOUCHED_X;
+      if (flags)
+       *flags++ |= SFNT_POINT_TOUCHED_X;
+    }
 }
 
 /* Move N points at *X, *Y by DISTANCE along INTERPRETER's freedom
-   vector.  Set *FLAGS where appropriate and when non-NULL.
+   vector.  Set N flags in *FLAGS where appropriate and when non-NULL.
 
    Assume both vectors are aligned to the Y axis.  */
 
@@ -9371,14 +9374,18 @@ sfnt_move_y (sfnt_f26dot6 *restrict x, sfnt_f26dot6 
*restrict y,
             sfnt_f26dot6 distance, unsigned char *flags)
 {
   while (n--)
-    *y = sfnt_add (*y, distance);
+    {
+      *y = sfnt_add (*y, distance);
+      y++;
 
-  if (flags)
-    *flags |= SFNT_POINT_TOUCHED_Y;
+      if (flags)
+       *flags++ |= SFNT_POINT_TOUCHED_Y;
+    }
 }
 
 /* Move N points at *X, *Y by DISTANCE along INTERPRETER's freedom
-   vector.  Set *FLAGS where appropriate and when non-NULL.  */
+   vector.  Set N flags in *FLAGS where appropriate and when
+   non-NULL.  */
 
 static void
 sfnt_move (sfnt_f26dot6 *restrict x, sfnt_f26dot6 *restrict y,
@@ -9412,10 +9419,10 @@ sfnt_move (sfnt_f26dot6 *restrict x, sfnt_f26dot6 
*restrict y,
                                                          versor,
                                                          dot_product));
          x++;
-       }
 
-      if (flags)
-       *flags |= SFNT_POINT_TOUCHED_X;
+         if (flags)
+           *flags++ |= SFNT_POINT_TOUCHED_X;
+       }
     }
 
   versor = interpreter->state.freedom_vector.y;
@@ -9432,10 +9439,10 @@ sfnt_move (sfnt_f26dot6 *restrict x, sfnt_f26dot6 
*restrict y,
                                                          versor,
                                                          dot_product));
          y++;
-       }
 
-      if (flags)
-       *flags |= SFNT_POINT_TOUCHED_Y;
+         if (flags)
+           *flags++ |= SFNT_POINT_TOUCHED_Y;
+       }
     }
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]