Fix compile time load of const striped array data
This commit is contained in:
parent
57449e3f4a
commit
59d77504c8
|
@ -850,19 +850,22 @@ static void LoadConstantFold(InterInstruction* ins, InterInstruction* ains, cons
|
||||||
const uint8* data;
|
const uint8* data;
|
||||||
|
|
||||||
LinkerObject * lobj;
|
LinkerObject * lobj;
|
||||||
int offset;
|
int offset, stride;
|
||||||
|
|
||||||
if (ains)
|
if (ains)
|
||||||
{
|
{
|
||||||
lobj = ains->mConst.mLinkerObject;
|
lobj = ains->mConst.mLinkerObject;
|
||||||
offset = ains->mConst.mIntConst;
|
offset = ains->mConst.mIntConst;
|
||||||
|
stride = ains->mConst.mStride;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lobj = ins->mSrc[0].mLinkerObject;
|
lobj = ins->mSrc[0].mLinkerObject;
|
||||||
offset = ins->mSrc[0].mIntConst;
|
offset = ins->mSrc[0].mIntConst;
|
||||||
|
stride = ins->mSrc[0].mStride;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
data = lobj->mData + offset;
|
data = lobj->mData + offset;
|
||||||
|
|
||||||
switch (ins->mDst.mType)
|
switch (ins->mDst.mType)
|
||||||
|
@ -873,7 +876,7 @@ static void LoadConstantFold(InterInstruction* ins, InterInstruction* ains, cons
|
||||||
ins->mConst.mIntConst = data[0];
|
ins->mConst.mIntConst = data[0];
|
||||||
break;
|
break;
|
||||||
case IT_INT16:
|
case IT_INT16:
|
||||||
ins->mConst.mIntConst = (int)data[0] | ((int)data[1] << 8);
|
ins->mConst.mIntConst = (int)data[0 * stride] | ((int)data[1 * stride] << 8);
|
||||||
break;
|
break;
|
||||||
case IT_POINTER:
|
case IT_POINTER:
|
||||||
{
|
{
|
||||||
|
@ -897,18 +900,18 @@ static void LoadConstantFold(InterInstruction* ins, InterInstruction* ains, cons
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ins->mConst.mIntConst = (int)data[0] | ((int)data[1] << 8);
|
ins->mConst.mIntConst = (int)data[0 * stride] | ((int)data[1 * stride] << 8);
|
||||||
ins->mConst.mMemory = IM_ABSOLUTE;
|
ins->mConst.mMemory = IM_ABSOLUTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case IT_INT32:
|
case IT_INT32:
|
||||||
ins->mConst.mIntConst = (int)data[0] | ((int)data[1] << 8) | ((int)data[2] << 16) | ((int)data[3] << 24);
|
ins->mConst.mIntConst = (int)data[0 * stride] | ((int)data[1 * stride] << 8) | ((int)data[2 * stride] << 16) | ((int)data[3 * stride] << 24);
|
||||||
break;
|
break;
|
||||||
case IT_FLOAT:
|
case IT_FLOAT:
|
||||||
{
|
{
|
||||||
union { float f; unsigned int v; } cc;
|
union { float f; unsigned int v; } cc;
|
||||||
cc.v = (int)data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
|
cc.v = (int)data[0 * stride] | (data[1 * stride] << 8) | (data[2 * stride] << 16) | (data[3 * stride] << 24);
|
||||||
ins->mConst.mFloatConst = cc.v;
|
ins->mConst.mFloatConst = cc.v;
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue