mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
Merge remote-tracking branch 'origin/GP-46_James_emulator_shifts'
This commit is contained in:
commit
c3d3547249
1 changed files with 15 additions and 6 deletions
|
@ -381,6 +381,9 @@ uintb OpBehaviorIntOr::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb i
|
||||||
uintb OpBehaviorIntLeft::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const
|
uintb OpBehaviorIntLeft::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const
|
||||||
|
|
||||||
{
|
{
|
||||||
|
if (in2 >= sizeout*8){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
uintb res = (in1 << in2) & calc_mask(sizeout);
|
uintb res = (in1 << in2) & calc_mask(sizeout);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -388,9 +391,8 @@ uintb OpBehaviorIntLeft::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb
|
||||||
uintb OpBehaviorIntLeft::recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const
|
uintb OpBehaviorIntLeft::recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const
|
||||||
|
|
||||||
{
|
{
|
||||||
if (slot!=0)
|
if ((slot!=0) || (in >= sizeout*8))
|
||||||
return OpBehavior::recoverInputBinary(slot,sizeout,out,sizein,in);
|
return OpBehavior::recoverInputBinary(slot,sizeout,out,sizein,in);
|
||||||
|
|
||||||
int4 sa = in;
|
int4 sa = in;
|
||||||
if (((out<<(8*sizeout-sa))&calc_mask(sizeout))!=0)
|
if (((out<<(8*sizeout-sa))&calc_mask(sizeout))!=0)
|
||||||
throw EvaluationError("Output is not in range of left shift operation");
|
throw EvaluationError("Output is not in range of left shift operation");
|
||||||
|
@ -400,6 +402,9 @@ uintb OpBehaviorIntLeft::recoverInputBinary(int4 slot,int4 sizeout,uintb out,int
|
||||||
uintb OpBehaviorIntRight::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const
|
uintb OpBehaviorIntRight::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const
|
||||||
|
|
||||||
{
|
{
|
||||||
|
if (in2 >= sizeout*8){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
uintb res = (in1&calc_mask(sizeout)) >> in2;
|
uintb res = (in1&calc_mask(sizeout)) >> in2;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -407,7 +412,7 @@ uintb OpBehaviorIntRight::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uint
|
||||||
uintb OpBehaviorIntRight::recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const
|
uintb OpBehaviorIntRight::recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const
|
||||||
|
|
||||||
{
|
{
|
||||||
if (slot!=0)
|
if ((slot!=0) || (in >= sizeout*8))
|
||||||
return OpBehavior::recoverInputBinary(slot,sizeout,out,sizein,in);
|
return OpBehavior::recoverInputBinary(slot,sizeout,out,sizein,in);
|
||||||
|
|
||||||
int4 sa = in;
|
int4 sa = in;
|
||||||
|
@ -419,6 +424,10 @@ uintb OpBehaviorIntRight::recoverInputBinary(int4 slot,int4 sizeout,uintb out,in
|
||||||
uintb OpBehaviorIntSright::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const
|
uintb OpBehaviorIntSright::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const
|
||||||
|
|
||||||
{
|
{
|
||||||
|
if (in2 >= 8*sizeout){
|
||||||
|
return signbit_negative(in1,sizein) ? calc_mask(sizeout) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
uintb res;
|
uintb res;
|
||||||
if (signbit_negative(in1,sizein)) {
|
if (signbit_negative(in1,sizein)) {
|
||||||
res = in1 >> in2;
|
res = in1 >> in2;
|
||||||
|
@ -435,7 +444,7 @@ uintb OpBehaviorIntSright::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uin
|
||||||
uintb OpBehaviorIntSright::recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const
|
uintb OpBehaviorIntSright::recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const
|
||||||
|
|
||||||
{
|
{
|
||||||
if (slot!=0)
|
if ((slot!=0) || (in >= sizeout*8))
|
||||||
return OpBehavior::recoverInputBinary(slot,sizeout,out,sizein,in);
|
return OpBehavior::recoverInputBinary(slot,sizeout,out,sizein,in);
|
||||||
|
|
||||||
int4 sa = in;
|
int4 sa = in;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue