Of possible interest: fast UTF8 validation

xenon325 anm at programmer.net
Wed May 16 17:32:03 UTC 2018


On Wednesday, 16 May 2018 at 16:54:19 UTC, Walter Bright wrote:
> I used to do things like that a simpler way. 3 functions would 
> be created:
>
>   void FeatureInHardware();
>   void EmulateFeature();
>   void Select();
>   void function() doIt = &Select;
>
> I.e. the first time doIt is called, it calls the Select 
> function which then resets doIt to either FeatureInHardware() 
> or EmulateFeature().
>
> It costs an indirect call [...]

Is this basically the same as Function MultiVersioning [1] ?

I never had a need to use it and always wondered how does it work 
out it real life.
 From description it seems this would incur indirection:

"To keep the cost of dispatching low, the IFUNC [2] mechanism is 
used for dispatching. This makes the call to the dispatcher a 
one-time thing during startup and a call to a function version is 
a single jump indirect instruction."

In linked article [2] Ian Lance Taylor says glibc uses this for 
memcpy(), so this should be pretty efficient (but than again, one 
doesn't call memcpy() in hot loops too often)

[1] https://gcc.gnu.org/wiki/FunctionMultiVersioning
[2] https://www.airs.com/blog/archives/403

--
Alexander


More information about the Digitalmars-d mailing list