Paolo Bonzini <[EMAIL PROTECTED]> writes: > > To invoke this instruction from the source level, a compiler builtin > > is provided. > > Since C syntax doesn't provide functions with two results, this builtin > > refers > > to them via pointers:__super_ld32( int* x, int *y, int *a) > > I did something similar in a private port by folding the builtin to > > long long tmp = __super_ld32_dimode (a); > *x = (int) tmp; > *y = (int) (tmp >> 32); > > Then you create the builtin as returning a DImode, but the > lower-subreg pass will be able to split the DImode pseudo into > non-consecutive hard registers.
Yes, I have followed a similar approach in the past. It generates the most efficient code of various different approaches I have tried. At least at the time, with gcc 4.0. I actually had the functions return structs, and I provided other builtin functions to access the fields of the struct. Those functions were folded in TARGET_FOLD_BUILTIN to COMPONENT_REFs. Ian