[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / pr58673-1.c
blob9ebe3c579d6e4d21df0c45092e6b04393569ae6f
1 /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_vsx_ok } */
4 /* { dg-options "-mdejagnu-cpu=power8 -mvsx -O1" } */
6 enum typecode
8 QIcode, QUcode, HIcode, HUcode, SIcode, SUcode, DIcode, DUcode, SFcode,
9 DFcode, XFcode, Pcode, Tcode, LAST_AND_UNUSED_TYPECODE
11 enum bytecode_opcode
13 neverneverland, drop, duplicate, over, setstackSI, adjstackSI, constQI,
14 constHI, constSI, constDI, constSF, constDF, constXF, constP, loadQI,
15 loadHI, loadSI, loadDI, loadSF, loadDF, loadXF, loadP, storeQI, storeHI,
16 storeSI, storeDI, storeSF, storeDF, storeXF, storeP, storeBLK, clearBLK,
17 addconstPSI, newlocalSI, localP, argP, convertQIHI, convertHISI,
18 convertSIDI, convertQISI, convertQUHU, convertHUSU, convertSUDU,
19 convertQUSU, convertSFDF, convertDFXF, convertHIQI, convertSIHI,
20 convertDISI, convertSIQI, convertSUQU, convertDFSF, convertXFDF,
21 convertSISF, convertSIDF, convertSIXF, convertSUSF, convertSUDF,
22 convertSUXF, convertDISF, convertDIDF, convertDIXF, convertDUSF,
23 convertDUDF, convertDUXF, convertSFSI, convertDFSI, convertXFSI,
24 convertSFSU, convertDFSU, convertXFSU, convertSFDI, convertDFDI,
25 convertXFDI, convertSFDU, convertDFDU, convertXFDU, convertPSI,
26 convertSIP, convertSIT, convertDIT, convertSFT, convertDFT, convertXFT,
27 convertPT, zxloadBI, sxloadBI, sstoreBI, addSI, addDI, addSF, addDF,
28 addXF, addPSI, subSI, subDI, subSF, subDF, subXF, subPP, mulSI, mulDI,
29 mulSU, mulDU, mulSF, mulDF, mulXF, divSI, divDI, divSU, divDU, divSF,
30 divDF, divXF, modSI, modDI, modSU, modDU, andSI, andDI, iorSI, iorDI,
31 xorSI, xorDI, lshiftSI, lshiftSU, lshiftDI, lshiftDU, rshiftSI, rshiftSU,
32 rshiftDI, rshiftDU, ltSI, ltSU, ltDI, ltDU, ltSF, ltDF, ltXF, ltP, leSI,
33 leSU, leDI, leDU, leSF, leDF, leXF, leP, geSI, geSU, geDI, geDU, geSF,
34 geDF, geXF, geP, gtSI, gtSU, gtDI, gtDU, gtSF, gtDF, gtXF, gtP, eqSI,
35 eqDI, eqSF, eqDF, eqXF, eqP, neSI, neDI, neSF, neDF, neXF, neP, negSI,
36 negDI, negSF, negDF, negXF, notSI, notDI, notT, predecQI, predecHI,
37 predecSI, predecDI, predecP, predecSF, predecDF, predecXF, predecBI,
38 preincQI, preincHI, preincSI, preincDI, preincP, preincSF, preincDF,
39 preincXF, preincBI, postdecQI, postdecHI, postdecSI, postdecDI, postdecP,
40 postdecSF, postdecDF, postdecXF, postdecBI, postincQI, postincHI,
41 postincSI, postincDI, postincP, postincSF, postincDF, postincXF,
42 postincBI, xjumpif, xjumpifnot, jump, jumpP, caseSI, caseSU, caseDI,
43 caseDU, call, returnP, ret, linenote, LAST_AND_UNUSED_OPCODE
45 struct binary_operator
47 enum bytecode_opcode opcode;
48 enum typecode arg0;
50 static struct conversion_recipe
52 unsigned char *opcodes;
53 int cost;
55 conversion_recipe[((int) LAST_AND_UNUSED_TYPECODE)][((int)
56 LAST_AND_UNUSED_TYPECODE)];
57 static struct conversion_recipe
58 deduce_conversion (from, to)
59 enum typecode from, to;
61 (conversion_recipe[(int) from][(int) to].
62 opcodes ? 0 : (conversion_recipe[(int) from][(int) to] =
63 deduce_conversion (from, to), 0));
66 void
67 bc_expand_binary_operation (optab, resulttype, arg0, arg1)
68 int resulttype, arg0, arg1;
69 struct binary_operator optab[];
71 int i, besti, cost, bestcost;
72 enum typecode resultcode, arg0code;
73 for (i = 0; optab[i].opcode != -1; ++i)
75 (conversion_recipe[(int) arg0code][(int) optab[i].arg0].
76 opcodes ? 0 : (conversion_recipe[(int) arg0code][(int) optab[i].arg0] =
77 deduce_conversion (arg0code, optab[i].arg0), 0));