I'm working on some of the AVX insert/extract instructions. They're stupid. They do not operate on ymm registers, meaning we have to use VINSERTF128/VEXTRACTF128 and then do the real operation. Anyway, I'm looking at how INSERTPS and friends work and noticed that there are special SelectionDAG nodes for them and corresponding TableGen dag operators (X86insrtps, for example). What's the reason for using special dag operators as opposed to intrinsics? -Dave
On Wed, Dec 2, 2009 at 2:44 PM, David Greene <dag at cray.com> wrote:> I'm working on some of the AVX insert/extract instructions. They're > stupid. They do not operate on ymm registers, meaning we have to > use VINSERTF128/VEXTRACTF128 and then do the real operation. > > Anyway, I'm looking at how INSERTPS and friends work and noticed that > there are special SelectionDAG nodes for them and corresponding TableGen > dag operators (X86insrtps, for example). > > What's the reason for using special dag operators as opposed to intrinsics?INSERTPS isn't an intrinsic because there's a standard way to represent the operation, and we try to avoid adding intrinsics when possible. -Eli
On Wednesday 02 December 2009 16:51, Eli Friedman wrote:> On Wed, Dec 2, 2009 at 2:44 PM, David Greene <dag at cray.com> wrote: > > I'm working on some of the AVX insert/extract instructions. They're > > stupid. They do not operate on ymm registers, meaning we have to > > use VINSERTF128/VEXTRACTF128 and then do the real operation. > > > > Anyway, I'm looking at how INSERTPS and friends work and noticed that > > there are special SelectionDAG nodes for them and corresponding TableGen > > dag operators (X86insrtps, for example). > > > > What's the reason for using special dag operators as opposed to > > intrinsics? > > INSERTPS isn't an intrinsic because there's a standard way to > represent the operation, and we try to avoid adding intrinsics when > possible.I don't get it. How is X86insrtps "standard?" It looks just like an intrinsic to me. -Dave