Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / gcc / testsuite / gcc.target / mips / mips32-dsp.c
index c2a8ae7..9aaf120 100644 (file)
 /* Test MIPS32 DSP instructions */
 /* { dg-do compile } */
 /* { dg-options "-mgp32 -mdsp" } */
-/* { dg-final { scan-assembler "addq.ph" } } */
-/* { dg-final { scan-assembler "addq_s.ph" } } */
-/* { dg-final { scan-assembler "addq_s.w" } } */
-/* { dg-final { scan-assembler "addu.qb" } } */
-/* { dg-final { scan-assembler "addu_s.qb" } } */
-/* { dg-final { scan-assembler "subq.ph" } } */
-/* { dg-final { scan-assembler "subq_s.ph" } } */
-/* { dg-final { scan-assembler "subq_s.w" } } */
-/* { dg-final { scan-assembler "subu.qb" } } */
-/* { dg-final { scan-assembler "subu_s.qb" } } */
-/* { dg-final { scan-assembler "addsc" } } */
-/* { dg-final { scan-assembler "addwc" } } */
-/* { dg-final { scan-assembler "modsub" } } */
-/* { dg-final { scan-assembler "raddu.w.qb" } } */
-/* { dg-final { scan-assembler "absq_s.ph" } } */
-/* { dg-final { scan-assembler "absq_s.w" } } */
-/* { dg-final { scan-assembler "precrq.qb.ph" } } */
-/* { dg-final { scan-assembler "precrq.ph.w" } } */
-/* { dg-final { scan-assembler "precrq_rs.ph.w" } } */
-/* { dg-final { scan-assembler "precrqu_s.qb.ph" } } */
-/* { dg-final { scan-assembler "preceq.w.phl" } } */
-/* { dg-final { scan-assembler "preceq.w.phr" } } */
-/* { dg-final { scan-assembler "precequ.ph.qbl" } } */
-/* { dg-final { scan-assembler "precequ.ph.qbr" } } */
-/* { dg-final { scan-assembler "precequ.ph.qbla" } } */
-/* { dg-final { scan-assembler "precequ.ph.qbra" } } */
-/* { dg-final { scan-assembler "preceu.ph.qbl" } } */
-/* { dg-final { scan-assembler "preceu.ph.qbr" } } */
-/* { dg-final { scan-assembler "preceu.ph.qbla" } } */
-/* { dg-final { scan-assembler "preceu.ph.qbra" } } */
-/* { dg-final { scan-assembler "shllv?.qb" } } */
-/* { dg-final { scan-assembler "shllv?.ph" } } */
-/* { dg-final { scan-assembler "shllv?_s.ph" } } */
-/* { dg-final { scan-assembler "shllv?_s.w" } } */
-/* { dg-final { scan-assembler "shrlv?.qb" } } */
-/* { dg-final { scan-assembler "shrav?.ph" } } */
-/* { dg-final { scan-assembler "shrav?_r.ph" } } */
-/* { dg-final { scan-assembler "shrav?_r.w" } } */
-/* { dg-final { scan-assembler "muleu_s.ph.qbl" } } */
-/* { dg-final { scan-assembler "muleu_s.ph.qbr" } } */
-/* { dg-final { scan-assembler "mulq_rs.ph" } } */
-/* { dg-final { scan-assembler "muleq_s.w.phl" } } */
-/* { dg-final { scan-assembler "muleq_s.w.phr" } } */
-/* { dg-final { scan-assembler "dpau.h.qbl" } } */
-/* { dg-final { scan-assembler "dpau.h.qbr" } } */
-/* { dg-final { scan-assembler "dpsu.h.qbl" } } */
-/* { dg-final { scan-assembler "dpsu.h.qbr" } } */
-/* { dg-final { scan-assembler "dpaq_s.w.ph" } } */
-/* { dg-final { scan-assembler "dpsq_s.w.ph" } } */
-/* { dg-final { scan-assembler "mulsaq_s.w.ph" } } */
-/* { dg-final { scan-assembler "dpaq_sa.l.w" } } */
-/* { dg-final { scan-assembler "dpsq_sa.l.w" } } */
-/* { dg-final { scan-assembler "maq_s.w.phl" } } */
-/* { dg-final { scan-assembler "maq_s.w.phr" } } */
-/* { dg-final { scan-assembler "maq_sa.w.phl" } } */
-/* { dg-final { scan-assembler "maq_sa.w.phr" } } */
-/* { dg-final { scan-assembler "bitrev" } } */
-/* { dg-final { scan-assembler "insv" } } */
-/* { dg-final { scan-assembler "replv?.qb" } } */
-/* { dg-final { scan-assembler "repl.ph" } } */
-/* { dg-final { scan-assembler "replv.ph" } } */
-/* { dg-final { scan-assembler "cmpu.eq.qb" } } */
-/* { dg-final { scan-assembler "cmpu.lt.qb" } } */
-/* { dg-final { scan-assembler "cmpu.le.qb" } } */
-/* { dg-final { scan-assembler "cmpgu.eq.qb" } } */
-/* { dg-final { scan-assembler "cmpgu.lt.qb" } } */
-/* { dg-final { scan-assembler "cmpgu.le.qb" } } */
-/* { dg-final { scan-assembler "cmp.eq.ph" } } */
-/* { dg-final { scan-assembler "cmp.lt.ph" } } */
-/* { dg-final { scan-assembler "cmp.le.ph" } } */
-/* { dg-final { scan-assembler "pick.qb" } } */
-/* { dg-final { scan-assembler "pick.ph" } } */
-/* { dg-final { scan-assembler "packrl.ph" } } */
-/* { dg-final { scan-assembler "extrv?.w" } } */
-/* { dg-final { scan-assembler "extrv?_s.h" } } */
-/* { dg-final { scan-assembler "extrv?_r.w" } } */
-/* { dg-final { scan-assembler "extrv?_rs.w" } } */
-/* { dg-final { scan-assembler "extpv?" } } */
-/* { dg-final { scan-assembler "extpdpv?" } } */
-/* { dg-final { scan-assembler "shilov?" } } */
-/* { dg-final { scan-assembler "mthlip" } } */
-/* { dg-final { scan-assembler "mfhi" } } */
-/* { dg-final { scan-assembler "mflo" } } */
-/* { dg-final { scan-assembler "mthi" } } */
-/* { dg-final { scan-assembler "mtlo" } } */
-/* { dg-final { scan-assembler "wrdsp" } } */
-/* { dg-final { scan-assembler "rddsp" } } */
-/* { dg-final { scan-assembler "lbux?" } } */
-/* { dg-final { scan-assembler "lhx?" } } */
-/* { dg-final { scan-assembler "lwx?" } } */
-/* { dg-final { scan-assembler "bposge32" } } */
-/* { dg-final { scan-assembler "madd" } } */
-/* { dg-final { scan-assembler "maddu" } } */
-/* { dg-final { scan-assembler "msub" } } */
-/* { dg-final { scan-assembler "msubu" } } */
-/* { dg-final { scan-assembler "mult" } } */
-/* { dg-final { scan-assembler "multu" } } */
+/* { dg-final { scan-assembler "\taddq.ph\t" } } */
+/* { dg-final { scan-assembler "\taddq_s.ph\t" } } */
+/* { dg-final { scan-assembler "\taddq_s.w\t" } } */
+/* { dg-final { scan-assembler "\taddu.qb\t" } } */
+/* { dg-final { scan-assembler "\taddu_s.qb\t" } } */
+/* { dg-final { scan-assembler "\tsubq.ph\t" } } */
+/* { dg-final { scan-assembler "\tsubq_s.ph\t" } } */
+/* { dg-final { scan-assembler "\tsubq_s.w\t" } } */
+/* { dg-final { scan-assembler "\tsubu.qb\t" } } */
+/* { dg-final { scan-assembler "\tsubu_s.qb\t" } } */
+/* { dg-final { scan-assembler "\taddsc\t" } } */
+/* { dg-final { scan-assembler "\taddwc\t" } } */
+/* { dg-final { scan-assembler "\tmodsub\t" } } */
+/* { dg-final { scan-assembler "\traddu.w.qb\t" } } */
+/* { dg-final { scan-assembler "\tabsq_s.ph\t" } } */
+/* { dg-final { scan-assembler "\tabsq_s.w\t" } } */
+/* { dg-final { scan-assembler "\tprecrq.qb.ph\t" } } */
+/* { dg-final { scan-assembler "\tprecrq.ph.w\t" } } */
+/* { dg-final { scan-assembler "\tprecrq_rs.ph.w\t" } } */
+/* { dg-final { scan-assembler "\tprecrqu_s.qb.ph\t" } } */
+/* { dg-final { scan-assembler "\tpreceq.w.phl\t" } } */
+/* { dg-final { scan-assembler "\tpreceq.w.phr\t" } } */
+/* { dg-final { scan-assembler "\tprecequ.ph.qbl\t" } } */
+/* { dg-final { scan-assembler "\tprecequ.ph.qbr\t" } } */
+/* { dg-final { scan-assembler "\tprecequ.ph.qbla\t" } } */
+/* { dg-final { scan-assembler "\tprecequ.ph.qbra\t" } } */
+/* { dg-final { scan-assembler "\tpreceu.ph.qbl\t" } } */
+/* { dg-final { scan-assembler "\tpreceu.ph.qbr\t" } } */
+/* { dg-final { scan-assembler "\tpreceu.ph.qbla\t" } } */
+/* { dg-final { scan-assembler "\tpreceu.ph.qbra\t" } } */
+/* { dg-final { scan-assembler "\tshllv?.qb\t" } } */
+/* { dg-final { scan-assembler "\tshllv?.ph\t" } } */
+/* { dg-final { scan-assembler "\tshllv?_s.ph\t" } } */
+/* { dg-final { scan-assembler "\tshllv?_s.w\t" } } */
+/* { dg-final { scan-assembler "\tshrlv?.qb\t" } } */
+/* { dg-final { scan-assembler "\tshrav?.ph\t" } } */
+/* { dg-final { scan-assembler "\tshrav?_r.ph\t" } } */
+/* { dg-final { scan-assembler "\tshrav?_r.w\t" } } */
+/* { dg-final { scan-assembler "\tmuleu_s.ph.qbl\t" } } */
+/* { dg-final { scan-assembler "\tmuleu_s.ph.qbr\t" } } */
+/* { dg-final { scan-assembler "\tmulq_rs.ph\t" } } */
+/* { dg-final { scan-assembler "\tmuleq_s.w.phl\t" } } */
+/* { dg-final { scan-assembler "\tmuleq_s.w.phr\t" } } */
+/* { dg-final { scan-assembler "\tdpau.h.qbl\t" } } */
+/* { dg-final { scan-assembler "\tdpau.h.qbr\t" } } */
+/* { dg-final { scan-assembler "\tdpsu.h.qbl\t" } } */
+/* { dg-final { scan-assembler "\tdpsu.h.qbr\t" } } */
+/* { dg-final { scan-assembler "\tdpaq_s.w.ph\t" } } */
+/* { dg-final { scan-assembler "\tdpsq_s.w.ph\t" } } */
+/* { dg-final { scan-assembler "\tmulsaq_s.w.ph\t" } } */
+/* { dg-final { scan-assembler "\tdpaq_sa.l.w\t" } } */
+/* { dg-final { scan-assembler "\tdpsq_sa.l.w\t" } } */
+/* { dg-final { scan-assembler "\tmaq_s.w.phl\t" } } */
+/* { dg-final { scan-assembler "\tmaq_s.w.phr\t" } } */
+/* { dg-final { scan-assembler "\tmaq_sa.w.phl\t" } } */
+/* { dg-final { scan-assembler "\tmaq_sa.w.phr\t" } } */
+/* { dg-final { scan-assembler "\tbitrev\t" } } */
+/* { dg-final { scan-assembler "\tinsv\t" } } */
+/* { dg-final { scan-assembler "\treplv?.qb\t" } } */
+/* { dg-final { scan-assembler "\trepl.ph\t" } } */
+/* { dg-final { scan-assembler "\treplv.ph\t" } } */
+/* { dg-final { scan-assembler "\tcmpu.eq.qb\t" } } */
+/* { dg-final { scan-assembler "\tcmpu.lt.qb\t" } } */
+/* { dg-final { scan-assembler "\tcmpu.le.qb\t" } } */
+/* { dg-final { scan-assembler "\tcmpgu.eq.qb\t" } } */
+/* { dg-final { scan-assembler "\tcmpgu.lt.qb\t" } } */
+/* { dg-final { scan-assembler "\tcmpgu.le.qb\t" } } */
+/* { dg-final { scan-assembler "\tcmp.eq.ph\t" } } */
+/* { dg-final { scan-assembler "\tcmp.lt.ph\t" } } */
+/* { dg-final { scan-assembler "\tcmp.le.ph\t" } } */
+/* { dg-final { scan-assembler "\tpick.qb\t" } } */
+/* { dg-final { scan-assembler "\tpick.ph\t" } } */
+/* { dg-final { scan-assembler "\tpackrl.ph\t" } } */
+/* { dg-final { scan-assembler "\textrv?.w\t" } } */
+/* { dg-final { scan-assembler "\textrv?_s.h\t" } } */
+/* { dg-final { scan-assembler "\textrv?_r.w\t" } } */
+/* { dg-final { scan-assembler "\textrv?_rs.w\t" } } */
+/* { dg-final { scan-assembler "\textpv?\t" } } */
+/* { dg-final { scan-assembler "\textpdpv?\t" } } */
+/* { dg-final { scan-assembler "\tshilov?\t" } } */
+/* { dg-final { scan-assembler "\tmthlip\t" } } */
+/* { dg-final { scan-assembler "\tmfhi\t" } } */
+/* { dg-final { scan-assembler "\tmflo\t" } } */
+/* { dg-final { scan-assembler "\tmthi\t" } } */
+/* { dg-final { scan-assembler "\tmtlo\t" } } */
+/* { dg-final { scan-assembler "\twrdsp\t" } } */
+/* { dg-final { scan-assembler "\trddsp\t" } } */
+/* { dg-final { scan-assembler "\tlbux?\t" } } */
+/* { dg-final { scan-assembler "\tlhx?\t" } } */
+/* { dg-final { scan-assembler "\tlwx?\t" } } */
+/* { dg-final { scan-assembler "\tbposge32\t" } } */
+/* { dg-final { scan-assembler "\tmadd\t" } } */
+/* { dg-final { scan-assembler "\tmaddu\t" } } */
+/* { dg-final { scan-assembler "\tmsub\t" } } */
+/* { dg-final { scan-assembler "\tmsubu\t" } } */
+/* { dg-final { scan-assembler "\tmult\t" } } */
+/* { dg-final { scan-assembler "\tmultu\t" } } */
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -156,8 +156,10 @@ NOMIPS16 void test_MIPS_DSP ()
   v4i8 v4i8_a,v4i8_b,v4i8_c,v4i8_r,v4i8_s;
   v2q15 v2q15_a,v2q15_b,v2q15_c,v2q15_r,v2q15_s;
   q31 q31_a,q31_b,q31_c,q31_r,q31_s;
-  i32 i32_a,i32_b,i32_c,i32_r,i32_s;
-  ui32 ui32_a,ui32_b,ui32_c;
+  /* To protect the multiplication-related tests from being optimized
+     at compile time.  */
+  volatile i32 i32_a,i32_b,i32_c,i32_r,i32_s;
+  volatile ui32 ui32_a,ui32_b,ui32_c;
   a64 a64_a,a64_b,a64_c,a64_r,a64_s;
 
   void *ptr_a;