VirtualBox

Changeset 96561 in vbox for trunk/src/VBox/Additions/3D/mesa


Ignore:
Timestamp:
Aug 31, 2022 3:09:32 AM (2 years ago)
Author:
vboxsync
Message:

Add/3D/mesa: Trick for avoiding a vectorization optimziation resulting in a call to vdecl_floorf4. bugref:10261

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/3D/mesa/mesa-21.3.8/src/gallium/auxiliary/tgsi/tgsi_exec.c

    r96488 r96561  
    451451          const union tgsi_exec_channel *src)
    452452{
     453#if defined(IPRT_NO_CRT) && defined(_MSC_VER)
     454/* The micro_flr use in exec_exp is optimized into a __vdecl_floorf4 call,
     455   which the no-CRT library doesn't implement.  There is some vectorization
     456   taking place in the file (now 102 hits, 264 misses), but this one is the
     457   only one resulting in calling an external helper it seems.
     458
     459   We could just use /Os (optimize for size) to disable all of it, however
     460   that's not very desirable.
     461
     462   Only found the #pragma loop(no_vector) incantation to selectively
     463   controlling this optimization.  However, that one needs an actual loop to
     464   work, only here the compiler is detecting an implicit loop.  So, it won't
     465   work without changing the code.  The stupid loop below does the trick even
     466   without the #pragma (1303: too few loop iterations). */
     467# pragma loop(no_vector)
     468   for (unsigned i = 0; i < 4; i++)
     469      dst->f[i] = floorf(src->f[i]);
     470#else
    453471   dst->f[0] = floorf(src->f[0]);
    454472   dst->f[1] = floorf(src->f[1]);
    455473   dst->f[2] = floorf(src->f[2]);
    456474   dst->f[3] = floorf(src->f[3]);
     475#endif
    457476}
    458477
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette