(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
bfin/
frmul.c
       1  extern void abort (void);
       2  extern void exit (int);
       3  
       4  typedef short  __v2hi __attribute ((vector_size(4)));
       5  typedef __v2hi fract2x16;
       6  typedef short fract16;
       7  
       8  #define GETVECT(HILO1,HILO2,IN1,IN2)					\
       9    __builtin_bfin_compose_2x16 ((HILO2) ? __builtin_bfin_extract_hi (IN1) : __builtin_bfin_extract_lo (IN1), \
      10  			  (HILO1) ? __builtin_bfin_extract_hi (IN2) : __builtin_bfin_extract_lo (IN2))
      11  #define DOTEST(IN1, IN2, HL1, HL2, HL3, HL4)					\
      12    __builtin_bfin_multr_fr2x16 (GETVECT (HL1, HL2, IN1, IN1), \
      13  			  GETVECT (HL3, HL4, IN2, IN2))
      14  
      15  #define FUNC(HL1, HL2, HL3, HL4) \
      16    fract2x16 foo ## HL1 ## HL2 ## HL3 ## HL4 (fract2x16 a, fract2x16 b)\
      17    { \
      18      return DOTEST(a, b, HL1, HL2, HL3, HL4);\
      19    }
      20  
      21  FUNC (0, 0, 0, 0)
      22  FUNC (1, 0, 0, 0)
      23  FUNC (0, 1, 0, 0)
      24  FUNC (1, 1, 0, 0)
      25  FUNC (0, 0, 1, 0)
      26  FUNC (1, 0, 1, 0)
      27  FUNC (0, 1, 1, 0)
      28  FUNC (1, 1, 1, 0)
      29  FUNC (0, 0, 0, 1)
      30  FUNC (1, 0, 0, 1)
      31  FUNC (0, 1, 0, 1)
      32  FUNC (1, 1, 0, 1)
      33  FUNC (0, 0, 1, 1)
      34  FUNC (1, 0, 1, 1)
      35  FUNC (0, 1, 1, 1)
      36  FUNC (1, 1, 1, 1)
      37  
      38  #define RES1 0x1400
      39  #define RES2 0x1e00
      40  #define RES3 0x1c00
      41  #define RES4 0x2a00
      42  
      43  
      44  int main ()
      45  {
      46    fract2x16 a, b, c;
      47    fract16 t1, t2;
      48    a = __builtin_bfin_compose_2x16 (0x3000, 0x2000);
      49    b = __builtin_bfin_compose_2x16 (0x7000, 0x5000);
      50  
      51    c = foo0000 (a, b);
      52    t1 = __builtin_bfin_extract_lo (c);
      53    t2 = __builtin_bfin_extract_hi (c);
      54    if (t1 != RES1 || t2 != RES1)
      55      abort ();
      56  
      57    c = foo1000 (a, b);
      58    t1 = __builtin_bfin_extract_lo (c);
      59    t2 = __builtin_bfin_extract_hi (c);
      60    if (t1 != RES2 || t2 != RES1)
      61      abort ();
      62  
      63    c = foo0100 (a, b);
      64    t1 = __builtin_bfin_extract_lo (c);
      65    t2 = __builtin_bfin_extract_hi (c);
      66    if (t1 != RES1 || t2 != RES2)
      67      abort ();
      68  
      69    c = foo1100 (a, b);
      70    t1 = __builtin_bfin_extract_lo (c);
      71    t2 = __builtin_bfin_extract_hi (c);
      72    if (t1 != RES2 || t2 != RES2)
      73      abort ();
      74  
      75    c = foo0010 (a, b);
      76    t1 = __builtin_bfin_extract_lo (c);
      77    t2 = __builtin_bfin_extract_hi (c);
      78    if (t1 != RES3 || t2 != RES1)
      79      abort ();
      80  
      81    c = foo1010 (a, b);
      82    t1 = __builtin_bfin_extract_lo (c);
      83    t2 = __builtin_bfin_extract_hi (c);
      84    if (t1 != RES4 || t2 != RES1)
      85      abort ();
      86  
      87    c = foo0110 (a, b);
      88    t1 = __builtin_bfin_extract_lo (c);
      89    t2 = __builtin_bfin_extract_hi (c);
      90    if (t1 != RES3 || t2 != RES2)
      91      abort ();
      92  
      93    c = foo1110 (a, b);
      94    t1 = __builtin_bfin_extract_lo (c);
      95    t2 = __builtin_bfin_extract_hi (c);
      96    if (t1 != RES4 || t2 != RES2)
      97      abort ();
      98  
      99    c = foo0001 (a, b);
     100    t1 = __builtin_bfin_extract_lo (c);
     101    t2 = __builtin_bfin_extract_hi (c);
     102    if (t1 != RES1 || t2 != RES3)
     103      abort ();
     104  
     105    c = foo1001 (a, b);
     106    t1 = __builtin_bfin_extract_lo (c);
     107    t2 = __builtin_bfin_extract_hi (c);
     108    if (t1 != RES2 || t2 != RES3)
     109      abort ();
     110  
     111    c = foo0101 (a, b);
     112    t1 = __builtin_bfin_extract_lo (c);
     113    t2 = __builtin_bfin_extract_hi (c);
     114    if (t1 != RES1 || t2 != RES4)
     115      abort ();
     116  
     117    c = foo1101 (a, b);
     118    t1 = __builtin_bfin_extract_lo (c);
     119    t2 = __builtin_bfin_extract_hi (c);
     120    if (t1 != RES2 || t2 != RES4)
     121      abort ();
     122  
     123    c = foo0011 (a, b);
     124    t1 = __builtin_bfin_extract_lo (c);
     125    t2 = __builtin_bfin_extract_hi (c);
     126    if (t1 != RES3 || t2 != RES3)
     127      abort ();
     128  
     129    c = foo1011 (a, b);
     130    t1 = __builtin_bfin_extract_lo (c);
     131    t2 = __builtin_bfin_extract_hi (c);
     132    if (t1 != RES4 || t2 != RES3)
     133      abort ();
     134  
     135    c = foo0111 (a, b);
     136    t1 = __builtin_bfin_extract_lo (c);
     137    t2 = __builtin_bfin_extract_hi (c);
     138    if (t1 != RES3 || t2 != RES4)
     139      abort ();
     140  
     141    c = foo1111 (a, b);
     142    t1 = __builtin_bfin_extract_lo (c);
     143    t2 = __builtin_bfin_extract_hi (c);
     144    if (t1 != RES4 || t2 != RES4)
     145      abort ();
     146  
     147    exit (0);
     148  }
     149