On Thu, 2013-08-29 at 20:51 +0200, Jakub Jelinek wrote: > On Thu, Aug 29, 2013 at 08:45:33PM +0200, Oleg Endo wrote: > > Sorry for the delay. I've just backported the 2 patches to 4.8. > > Tested with 'make all-gcc' for SH and PPC cross compilers. > > Committed as rev 202083. > > Please fix the overly long lines as a follow-up. >
In m original mail http://gcc.gnu.org/ml/gcc-patches/2013-07/msg01315.html I wrote: * I don't know whether it's really needed to properly format the code of class insn_gen_fn. After reading the first two or three overloads (which do fit into 80 columns) one gets the idea and so I guess nobody is going to read that stuff completely anyway. Nobody commented on it and after Richard's OK to the patch I assumed it's fine that way as an exception. Of course I'll do it if you insist :) Cheers, Oleg > > +struct insn_gen_fn > > +{ > > + typedef rtx (*f0) (void); > > + typedef rtx (*f1) (rtx); > > + typedef rtx (*f2) (rtx, rtx); > > + typedef rtx (*f3) (rtx, rtx, rtx); > > + typedef rtx (*f4) (rtx, rtx, rtx, rtx); > > + typedef rtx (*f5) (rtx, rtx, rtx, rtx, rtx); > > + typedef rtx (*f6) (rtx, rtx, rtx, rtx, rtx, rtx); > > + typedef rtx (*f7) (rtx, rtx, rtx, rtx, rtx, rtx, rtx); > > + typedef rtx (*f8) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx); > > + typedef rtx (*f9) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx); > > + typedef rtx (*f10) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx); > > + typedef rtx (*f11) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, > > rtx); > > + typedef rtx (*f12) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, > > rtx, rtx); > > + typedef rtx (*f13) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, > > rtx, rtx, rtx); > > + typedef rtx (*f14) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, > > rtx, rtx, rtx, rtx); > > + typedef rtx (*f15) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, > > rtx, rtx, rtx, rtx, rtx); > > + typedef rtx (*f16) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, > > rtx, rtx, rtx, rtx, rtx, rtx); > > + > > + typedef f0 stored_funcptr; > > + > > + rtx operator () (void) const { return ((f0)func) (); } > > + rtx operator () (rtx a0) const { return ((f1)func) (a0); } > > + rtx operator () (rtx a0, rtx a1) const { return ((f2)func) (a0, a1); } > > + rtx operator () (rtx a0, rtx a1, rtx a2) const { return ((f3)func) (a0, > > a1, a2); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3) const { return > > ((f4)func) (a0, a1, a2, a3); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4) const { return > > ((f5)func) (a0, a1, a2, a3, a4); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5) const { > > return ((f6)func) (a0, a1, a2, a3, a4, a5); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6) > > const { return ((f7)func) (a0, a1, a2, a3, a4, a5, a6); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7) const { return ((f8)func) (a0, a1, a2, a3, a4, a5, a6, a7); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7, rtx a8) const { return ((f9)func) (a0, a1, a2, a3, a4, a5, a6, a7, > > a8); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7, rtx a8, rtx a9) const { return ((f10)func) (a0, a1, a2, a3, a4, a5, > > a6, a7, a8, a9); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7, rtx a8, rtx a9, rtx a10) const { return ((f11)func) (a0, a1, a2, > > a3, a4, a5, a6, a7, a8, a9, a10); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7, rtx a8, rtx a9, rtx a10, rtx a11) const { return ((f12)func) (a0, > > a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7, rtx a8, rtx a9, rtx a10, rtx a11, rtx a12) const { return > > ((f13)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7, rtx a8, rtx a9, rtx a10, rtx a11, rtx a12, rtx a13) const { return > > ((f14)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7, rtx a8, rtx a9, rtx a10, rtx a11, rtx a12, rtx a13, rtx a14) const > > { return ((f15)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, > > a12, a13, a14); } > > + rtx operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, > > rtx a7, rtx a8, rtx a9, rtx a10, rtx a11, rtx a12, rtx a13, rtx a14, rtx > > a15) const { return ((f16)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, > > a10, a11, a12, a13, a14, a15); } > > + > > + // This is for compatibility of code that invokes functions like > > + // (*funcptr) (arg) > > + insn_gen_fn operator * (void) const { return *this; } > > + > > + // The wrapped function pointer must be public and there must not be any > > + // constructors. Otherwise the insn_data_d struct initializers generated > > + // by genoutput.c will result in static initializer functions, which > > defeats > > + // the purpose of the generated insn_data_d array. > > + stored_funcptr func; > > +}; >