/* Independent diagnostic worker. Never linked by the production builder. */ #ifndef CONTEXT_FALLBACK_DIAG_H #define CONTEXT_FALLBACK_DIAG_H #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0600 #endif #include #include #include "local_probe.h" extern int dx_mode,dx_selected,dx_region,dx_position,dx_shadow; extern const int dx_start_pos[LP_NR],dx_contextual[LP_NR],dx_version[LP_NO+1],dx_mutates[LP_NO]; extern const int dx_in_offset[LP_NO+1],dx_out_offset[LP_NO+1]; void dx_initialize(void);void dx_finish(void);void dx_jacobian(void); int dx_reuse(int,NativePropertyCache*,NativePipeCache*,double*,double*,double*,double*,double*); void dx_eval_begin(double,const double*);void dx_eval_end(void); void dx_schedule(NativePropertyCache*,NativePipeCache*); void dx_op_begin(int,const double*);void dx_op_end(int,const double*,NativePropertyCache*,NativePipeCache*); void dx_region_end(double*,double*,double*,double*,double*,NativePropertyCache*,NativePipeCache*); int dx_eval(double,const double*,double*,double*,ModelJacobianWorkspace*); uint64_t dx_kernel_begin(int);void dx_kernel_end(int,uint64_t); void dx_validate_matrix(double,const double*,const double*); void dx_property_created(NativePropertyCache*,NativePropertyState*); static inline uint64_t dx_clock(void){unsigned lo,hi;__asm__ __volatile__("lfence\n\trdtsc\n\tlfence":"=a"(lo),"=d"(hi)::"memory");return ((uint64_t)hi<<32)|lo;} #endif