+/* patcher_resolve_classref_to_vftbl *******************************************
+
+ CHECKCAST (class):
+
+ <patched call position>
+ 81870000 lwz r12,0(r7)
+ 800c0014 lwz r0,20(r12)
+ 818dff78 lwz r12,-136(r13)
+
+
+ INSTANCEOF (class):
+
+ <patched call position>
+ 817d0000 lwz r11,0(r29)
+ 818dff8c lwz r12,-116(r13)
+
+*******************************************************************************/
+
+bool patcher_resolve_classref_to_vftbl(u1 *sp)
+{
+ constant_classref *cr;
+ s4 disp;
+ u1 *pv;
+ classinfo *c;
+
+ /* get stuff from the stack */
+
+ cr = (constant_classref *) *((ptrint *) (sp + 2 * 8));
+ disp = *((s4 *) (sp + 1 * 8));
+ pv = (u1 *) *((ptrint *) (sp + 0 * 8));
+
+ /* get the fieldinfo */
+
+ if (!(c = resolve_classref_eager(cr)))
+ return false;
+
+ /* patch super class' vftbl */
+
+ *((ptrint *) (pv + disp)) = (ptrint) c->vftbl;
+
+ /* synchronize data cache */
+
+ md_dcacheflush(pv + disp, SIZEOF_VOID_P);
+
+ return true;
+}
+
+/* patcher_resolve_classref_to_flags *******************************************
+
+ CHECKCAST/INSTANCEOF:
+
+ <patched call position>
+ 818dff7c lwz r12,-132(r13)
+
+*******************************************************************************/
+
+bool patcher_resolve_classref_to_flags(u1 *sp)
+{
+ constant_classref *cr;
+ s4 disp;
+ u1 *pv;
+ classinfo *c;
+
+ /* get stuff from the stack */
+
+ cr = (constant_classref *) *((ptrint *) (sp + 2 * 8));
+ disp = *((s4 *) (sp + 1 * 8));
+ pv = (u1 *) *((ptrint *) (sp + 0 * 8));
+
+ /* get the fieldinfo */
+
+ if (!(c = resolve_classref_eager(cr)))
+ return false;
+
+ /* patch class flags */
+
+ *((s4 *) (pv + disp)) = (s4) c->flags;
+
+ /* synchronize data cache */
+
+ md_dcacheflush(pv + disp, SIZEOF_VOID_P);
+
+ return true;
+}