mirror of
https://github.com/corda/corda.git
synced 2025-01-24 13:28:07 +00:00
pick a temporary register which is valid as both a destination and a source for the required moves in maybeMove
This commit is contained in:
parent
1192ef939e
commit
97961ecdde
@ -2459,9 +2459,23 @@ maybeMove(Context* c, BinaryOperation type, unsigned srcSize, Value* src,
|
|||||||
} else {
|
} else {
|
||||||
target->freeze(c, dst);
|
target->freeze(c, dst);
|
||||||
|
|
||||||
assert(c, dstMask.typeMask & (1 << RegisterOperand));
|
// pick a temporary register which is valid as both a
|
||||||
|
// destination and a source for the moves we need to perform:
|
||||||
|
|
||||||
Site* tmpTarget = freeRegisterSite(c, dstMask.registerMask);
|
bool thunk;
|
||||||
|
uint8_t srcTypeMask;
|
||||||
|
uint64_t srcRegisterMask;
|
||||||
|
uint8_t dstTypeMask;
|
||||||
|
uint64_t dstRegisterMask;
|
||||||
|
|
||||||
|
c->arch->plan(type, dstSize, &srcTypeMask, &srcRegisterMask,
|
||||||
|
dstSize, &dstTypeMask, &dstRegisterMask,
|
||||||
|
&thunk);
|
||||||
|
|
||||||
|
assert(c, dstMask.typeMask & srcTypeMask & (1 << RegisterOperand));
|
||||||
|
|
||||||
|
Site* tmpTarget = freeRegisterSite
|
||||||
|
(c, dstMask.registerMask & srcRegisterMask);
|
||||||
|
|
||||||
addSite(c, dst, tmpTarget);
|
addSite(c, dst, tmpTarget);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user