Move code around
diff --git a/src/hb-ot-shape-fallback-private.hh b/src/hb-ot-shape-fallback-private.hh
index 5e9cb06..ec65351 100644
--- a/src/hb-ot-shape-fallback-private.hh
+++ b/src/hb-ot-shape-fallback-private.hh
@@ -41,4 +41,9 @@
 								    hb_buffer_t  *buffer);
 
 
+HB_INTERNAL void _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
+					     hb_font_t *font,
+					     hb_buffer_t  *buffer);
+
+
 #endif /* HB_OT_SHAPE_FALLBACK_PRIVATE_HH */
diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc
index 6f3426e..cd9d9a4 100644
--- a/src/hb-ot-shape-fallback.cc
+++ b/src/hb-ot-shape-fallback.cc
@@ -407,3 +407,43 @@
     }
   position_cluster (plan, font, buffer, start, count);
 }
+
+
+/* Performs old-style TrueType kerning. */
+void
+_hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
+			    hb_font_t *font,
+			    hb_buffer_t  *buffer)
+{
+  unsigned int count = buffer->len;
+  hb_mask_t kern_mask = plan->map.get_1_mask (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction) ?
+					      HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
+
+  if (unlikely (!count)) return;
+
+  bool enabled = buffer->info[0].mask & kern_mask;
+  for (unsigned int i = 1; i < count; i++)
+  {
+    bool next = buffer->info[i].mask & kern_mask;
+    if (enabled && next)
+    {
+      hb_position_t x_kern, y_kern, kern1, kern2;
+      font->get_glyph_kerning_for_direction (buffer->info[i - 1].codepoint, buffer->info[i].codepoint,
+					     buffer->props.direction,
+					     &x_kern, &y_kern);
+
+      kern1 = x_kern >> 1;
+      kern2 = x_kern - kern1;
+      buffer->pos[i - 1].x_advance += kern1;
+      buffer->pos[i].x_advance += kern2;
+      buffer->pos[i].x_offset += kern2;
+
+      kern1 = y_kern >> 1;
+      kern2 = y_kern - kern1;
+      buffer->pos[i - 1].y_advance += kern1;
+      buffer->pos[i].y_advance += kern2;
+      buffer->pos[i].y_offset += kern2;
+    }
+    enabled = next;
+  }
+}
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 32d7afc..f65861f 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -493,42 +493,6 @@
 }
 
 static inline void
-hb_ot_truetype_kern (hb_ot_shape_context_t *c)
-{
-  unsigned int count = c->buffer->len;
-  hb_mask_t kern_mask = c->plan->map.get_1_mask (HB_DIRECTION_IS_HORIZONTAL (c->buffer->props.direction) ?
-						 HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
-
-  if (unlikely (!count)) return;
-
-  bool enabled = c->buffer->info[0].mask & kern_mask;
-  for (unsigned int i = 1; i < count; i++)
-  {
-    bool next = c->buffer->info[i].mask & kern_mask;
-    if (enabled && next)
-    {
-      hb_position_t x_kern, y_kern, kern1, kern2;
-      c->font->get_glyph_kerning_for_direction (c->buffer->info[i - 1].codepoint, c->buffer->info[i].codepoint,
-						c->buffer->props.direction,
-						&x_kern, &y_kern);
-
-      kern1 = x_kern >> 1;
-      kern2 = x_kern - kern1;
-      c->buffer->pos[i - 1].x_advance += kern1;
-      c->buffer->pos[i].x_advance += kern2;
-      c->buffer->pos[i].x_offset += kern2;
-
-      kern1 = y_kern >> 1;
-      kern2 = y_kern - kern1;
-      c->buffer->pos[i - 1].y_advance += kern1;
-      c->buffer->pos[i].y_advance += kern2;
-      c->buffer->pos[i].y_offset += kern2;
-    }
-    enabled = next;
-  }
-}
-
-static inline void
 hb_ot_position (hb_ot_shape_context_t *c)
 {
   hb_ot_position_default (c);
@@ -544,7 +508,7 @@
   /* Visual fallback goes here. */
 
   if (fallback)
-    hb_ot_truetype_kern (c);
+    _hb_ot_shape_fallback_kern (c->plan, c->font, c->buffer);
 }