static bool genArithOpFloat(CompilationUnit *cUnit, MIR *mir, int vDest,
                                int vSrc1, int vSrc2)
{
    int op = THUMB_BKPT;

    /*
     * Don't attempt to optimize register usage since these opcodes call out to
     * the handlers.
     */
    switch (mir->dalvikInsn.opCode) {
        case OP_ADD_FLOAT_2ADDR:
        case OP_ADD_FLOAT:
            op = THUMB2_VADDS;
            break;
        case OP_SUB_FLOAT_2ADDR:
        case OP_SUB_FLOAT:
            op = THUMB2_VSUBS;
            break;
        case OP_DIV_FLOAT_2ADDR:
        case OP_DIV_FLOAT:
            op = THUMB2_VDIVS;
            break;
        case OP_MUL_FLOAT_2ADDR:
        case OP_MUL_FLOAT:
            op = THUMB2_VMULS;
            break;
        case OP_REM_FLOAT_2ADDR:
        case OP_REM_FLOAT:
        case OP_NEG_FLOAT: {
            return genArithOpFloatPortable(cUnit, mir, vDest, vSrc1, vSrc2);
        }
        default:
            return true;
    }
    loadFloat(cUnit, vSrc1, fr2);
    loadFloat(cUnit, vSrc2, fr4);
    newLIR3(cUnit, op, fr0, fr2, fr4);
    storeFloat(cUnit, fr0, vDest, 0);
    return false;
}
示例#2
0
Magic3D::XMLElement* Magic3D::TextData::load(XMLElement* root)
{
    if (root)
    {
        text = loadString(root, M3D_TEXT_XML_TEXT);
        if (text.compare(M3D_XML_NULL) == 0)
        {
            text.clear();
        }        
        std::string fontName = loadString(root, M3D_TEXT_XML_FONT);
        if (fontName.compare(M3D_XML_NULL) != 0)
        {
            bool created;
            font = ResourceManager::getFonts()->load(fontName, created);
        }
        textAlignment = (HORIZONTAL_ALIGN)loadInt(root, M3D_TEXT_XML_ALIGNMENT);
        textColor = loadColorRGBA(root, M3D_TEXT_XML_COLOR);
        textSize = loadFloat(root, M3D_TEXT_XML_SIZE);
        changed = true;
    }
    return root;
}
示例#3
0
void			StaticShader::loadShineVariables(float shineDamper, float reflectivity)
{
	loadFloat(_locationShineDamper, shineDamper);
	loadFloat(_locationReflectivity, reflectivity);
}
示例#4
0
void			StaticShader::loadNumberOfRows(int numberOfRows)
{
	loadFloat(_locationNumberOfRows, numberOfRows);
}
示例#5
0
void StaticShader::loadShining(float reflectivity, float shineDamper) {
    loadFloat(this->reflectivity, reflectivity);
    loadFloat(this->shineDamper, shineDamper);
}
static bool genConversion(CompilationUnit *cUnit, MIR *mir)
{
    OpCode opCode = mir->dalvikInsn.opCode;
    int vSrc1Dest = mir->dalvikInsn.vA;
    int vSrc2 = mir->dalvikInsn.vB;
    int op = THUMB_BKPT;
    bool longSrc = false;
    bool longDest = false;
    int srcReg;
    int tgtReg;

    switch (opCode) {
        case OP_INT_TO_FLOAT:
            longSrc = false;
            longDest = false;
            op = THUMB2_VCVTIF;
            break;
        case OP_FLOAT_TO_INT:
            longSrc = false;
            longDest = false;
            op = THUMB2_VCVTFI;
            break;
        case OP_DOUBLE_TO_FLOAT:
            longSrc = true;
            longDest = false;
            op = THUMB2_VCVTDF;
            break;
        case OP_FLOAT_TO_DOUBLE:
            longSrc = false;
            longDest = true;
            op = THUMB2_VCVTFD;
            break;
        case OP_INT_TO_DOUBLE:
            longSrc = false;
            longDest = true;
            op = THUMB2_VCVTID;
            break;
        case OP_DOUBLE_TO_INT:
            longSrc = true;
            longDest = false;
            op = THUMB2_VCVTDI;
            break;
        case OP_FLOAT_TO_LONG:
        case OP_LONG_TO_FLOAT:
        case OP_DOUBLE_TO_LONG:
        case OP_LONG_TO_DOUBLE:
            return genConversionPortable(cUnit, mir);
        default:
            return true;
    }
    if (longSrc) {
        srcReg = dr1;
        loadDouble(cUnit, vSrc2, srcReg);
    } else {
        srcReg = fr2;
        loadFloat(cUnit, vSrc2, srcReg);
    }
    if (longDest) {
        newLIR2(cUnit, op, dr0, srcReg);
        storeDouble(cUnit, dr0, vSrc1Dest, 0);
    } else {
        newLIR2(cUnit, op, fr0, srcReg);
        storeFloat(cUnit, fr0, vSrc1Dest, 0);
    }
    return false;
}