[PATCH] D59346: [X86] Add gcc rotate intrinsics to ia32intrin.h
Craig Topper via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 13 22:12:12 PDT 2019
craig.topper created this revision.
craig.topper added reviewers: rnk, jyknight, RKSimon, spatel, erichkeane.
Herald added a subscriber: jdoerfert.
Herald added a project: clang.
craig.topper updated this revision to Diff 190567.
craig.topper added a comment.
Add the test file
This is another attempt at what Erich Keane tried to do in r355322.a
This adds __rolb, __rolw, __rold, __rolq and their ror equivalent as always_inline wrappers around __builtin_rotate* which will lower to funnel shift intrinsics in IR.
Additionally, when _MSC_VER is not defined we will define _rotl, _lrotl, _rotr, _lrotr as macros to one of the always_inline intrinsics mentioned above. Making sure that _lrotl/_lrotr use either 32 or 64 bit based on the size of long. These need to be macros because we have builtins with the same name for MS compatibility, but _MSC_VER isn't always defined when those builtins are enabled.
We also define _rotwl and _rotwr as macros aliasing to __rolw/__rorw just like gcc to complete the set. These don't need to be gated with _MSC_VER because these aren't MS builtins.
I've added tests both for non-MS and -ms-extensions with and without _MSC_VER being defined.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 7417 bytes
Desc: not available
More information about the cfe-commits