| /* { dg-do compile { target bfin-*-* } } */ |
| |
| typedef short __v2hi __attribute__ ((vector_size (4))); |
| typedef __v2hi raw2x16; |
| typedef raw2x16 fract2x16; |
| |
| typedef short fract16; |
| typedef struct complex_fract16 |
| { |
| fract16 re; |
| fract16 im; |
| } __attribute__ ((aligned (4))) complex_fract16; |
| |
| typedef union composite_complex_fract16 |
| { |
| struct complex_fract16 x; |
| long raw; |
| } composite_complex_fract16; |
| |
| __inline__ __attribute__ ((always_inline)) |
| static complex_fract16 cmsu_fr16 (complex_fract16 _sum, |
| complex_fract16 _a, complex_fract16 _b) |
| { |
| complex_fract16 r; |
| fract2x16 i = |
| __builtin_bfin_cmplx_msu (__builtin_bfin_compose_2x16 |
| ((_sum).im, (_sum).re), |
| __builtin_bfin_compose_2x16 ((_a).im, (_a).re), |
| __builtin_bfin_compose_2x16 ((_b).im, (_b).re)); |
| (r).re = __builtin_bfin_extract_lo (i); |
| (r).im = __builtin_bfin_extract_hi (i); |
| return r; |
| } |
| |
| composite_complex_fract16 |
| f (complex_fract16 _sum, complex_fract16 _a, complex_fract16 _b) |
| { |
| return (composite_complex_fract16) cmsu_fr16 (_sum, _a, _b); |
| } |