mirror of
https://github.com/corda/corda.git
synced 2025-01-06 05:04:20 +00:00
handle b == dst case in andC
This commit is contained in:
parent
8d9409112c
commit
12640219e6
@ -1091,8 +1091,18 @@ andC(Context* c, unsigned size, Assembler::Constant* a,
|
|||||||
} else if ((v32 & 0xFFFF) == 0) {
|
} else if ((v32 & 0xFFFF) == 0) {
|
||||||
issue(c, andis(dst->low, b->low, v32 >> 16));
|
issue(c, andis(dst->low, b->low, v32 >> 16));
|
||||||
} else {
|
} else {
|
||||||
moveCR(c, 4, a, 4, dst);
|
bool useTemporary = b->low == dst->low;
|
||||||
andR(c, 4, b, dst, dst);
|
Assembler::Register tmp(dst->low);
|
||||||
|
if (useTemporary) {
|
||||||
|
tmp.low = c->client->acquireTemporary();
|
||||||
|
}
|
||||||
|
|
||||||
|
moveCR(c, 4, a, 4, &tmp);
|
||||||
|
andR(c, 4, b, &tmp, dst);
|
||||||
|
|
||||||
|
if (useTemporary) {
|
||||||
|
c->client->releaseTemporary(tmp.low);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user