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