123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384typetemporal_locality=|None|Low|Moderate|Hightypeoperation=|Read|Write(* The compiler needs to know statically the operation and the temporal locality hints,
because they correspond to different instructions on amd64 target and different GCC
builtins in the C stubs. We have one "external" declaration for each pair of
operation, locality, and pointer type. Naming convention:
caml_prefetch_<operation>_<temporal_locality>_<pointer_type>
*)moduleExpert=Prefetch_expertletvaluep~operation~temporal_locality=matchoperation,temporal_localitywith|Write,High->Expert.prefetch_write_highp|Write,Moderate->Expert.prefetch_write_moderatep|Write,Low->Expert.prefetch_write_lowp|Write,None->Expert.prefetch_write_nonep|Read,None->Expert.prefetch_read_nonep|Read,Low->Expert.prefetch_read_lowp|Read,Moderate->Expert.prefetch_read_moderatep|Read,High->Expert.prefetch_read_highp;;letvalue_byte_offsetp~byte_offset~operation~temporal_locality=matchoperation,temporal_localitywith|Write,High->Expert.prefetch_write_high_val_offsetp~byte_offset|Write,Moderate->Expert.prefetch_write_moderate_val_offsetp~byte_offset|Write,Low->Expert.prefetch_write_low_val_offsetp~byte_offset|Write,None->Expert.prefetch_write_none_val_offsetp~byte_offset|Read,None->Expert.prefetch_read_none_val_offsetp~byte_offset|Read,Low->Expert.prefetch_read_low_val_offsetp~byte_offset|Read,Moderate->Expert.prefetch_read_moderate_val_offsetp~byte_offset|Read,High->Expert.prefetch_read_high_val_offsetp~byte_offset;;letvalue_posp~pos~operation~temporal_locality=letbyte_offset=Sys.word_size/8*posinvalue_byte_offsetp~byte_offset~operation~temporal_locality;;letnative_pointerp~operation~temporal_locality=matchoperation,temporal_localitywith|Write,High->Expert.prefetch_write_high_native_pointerp|Write,Moderate->Expert.prefetch_write_moderate_native_pointerp|Write,Low->Expert.prefetch_write_low_native_pointerp|Write,None->Expert.prefetch_write_none_native_pointerp|Read,None->Expert.prefetch_read_none_native_pointerp|Read,Low->Expert.prefetch_read_low_native_pointerp|Read,Moderate->Expert.prefetch_read_moderate_native_pointerp|Read,High->Expert.prefetch_read_high_native_pointerp;;letext_pointerp~operation~temporal_locality=matchoperation,temporal_localitywith|Write,High->Expert.prefetch_write_high_ext_pointerp|Write,Moderate->Expert.prefetch_write_moderate_ext_pointerp|Write,Low->Expert.prefetch_write_low_ext_pointerp|Write,None->Expert.prefetch_write_none_ext_pointerp|Read,None->Expert.prefetch_read_none_ext_pointerp|Read,Low->Expert.prefetch_read_low_ext_pointerp|Read,Moderate->Expert.prefetch_read_moderate_ext_pointerp|Read,High->Expert.prefetch_read_high_ext_pointerp;;letbigstringbigstring~pos~operation~temporal_locality=matchoperation,temporal_localitywith|Write,High->Expert.prefetch_write_high_bigstringbigstringpos|Write,Moderate->Expert.prefetch_write_moderate_bigstringbigstringpos|Write,Low->Expert.prefetch_write_low_bigstringbigstringpos|Write,None->Expert.prefetch_write_none_bigstringbigstringpos|Read,None->Expert.prefetch_read_none_bigstringbigstringpos|Read,Low->Expert.prefetch_read_low_bigstringbigstringpos|Read,Moderate->Expert.prefetch_read_moderate_bigstringbigstringpos|Read,High->Expert.prefetch_read_high_bigstringbigstringpos;;externalpause:unit->unit="caml_pause_hint"[@@noalloc][@@builtin]