      native_thread_data_t native_thread_data;
      void *blocking_region_buffer;
  
-@@ -446,22 +468,6 @@
+@@ -452,22 +474,6 @@
      jmp_buf machine_regs;
      int mark_stack_len;
  

 #ifdef  COLLECT_USAGE_ANALYSIS
 #define USAGE_ANALYSIS_INSN(insn)           vm_analysis_insn(insn)
 #define USAGE_ANALYSIS_OPERAND(insn, n, op) vm_analysis_operand(insn, n, (VALUE)op)
@@ -28,12 +62,14 @@
 #define USAGE_ANALYSIS_REGISTER(reg, s)		/* none */
 #endif
 
-#ifdef __GCC__
 /* TODO: machine dependent prefetch instruction */
-#define PREFETCH(pc)
-#else
-#define PREFETCH(pc)
-#endif
+/* Rocky: added breakpoint testing. */
+#define PREFETCH(pc)							\
+    if (UNLIKELY(GET_CFP()->iseq &&					\
+		 GET_CFP()->iseq->breakpoints &&			\
+		 GET_CFP()->iseq->breakpoints[pc - GET_CFP()->iseq->iseq_encoded])) \
+	EXEC_EVENT_HOOK(th, RUBY_EVENT_BRKPT, GET_SELF(),		\
+			0, 0)
 
 #if VMDEBUG > 0
 #define debugs printf
Index: vm.c
===================================================================
--- vm.c	(revision 27218)
+++ vm.c	(working copy)
@@ -1151,8 +1151,20 @@
 

 	rb_thread_method_id_and_class(GET_THREAD(), &id, &klass);
     }
     if (id == ID_ALLOCATOR)
@@ -4196,7 +4276,7 @@
     rb_eThreadError = rb_define_class("ThreadError", rb_eStandardError);
 
     /* trace */
