mirror of
https://github.com/corda/corda.git
synced 2025-06-19 07:38:22 +00:00
fix register masks used for planning in arm.cpp
We can't use a floating point register where an integer register is needed, or we may generate an invalid instruction.
This commit is contained in:
@ -2396,7 +2396,7 @@ class MyArchitecture: public Assembler::Architecture {
|
|||||||
{
|
{
|
||||||
*thunk = false;
|
*thunk = false;
|
||||||
*aTypeMask = ~0;
|
*aTypeMask = ~0;
|
||||||
*aRegisterMask = ~static_cast<uint64_t>(0);
|
*aRegisterMask = GPR_MASK64;
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case Negate:
|
case Negate:
|
||||||
@ -2453,7 +2453,7 @@ class MyArchitecture: public Assembler::Architecture {
|
|||||||
unsigned , uint8_t* bTypeMask, uint64_t* bRegisterMask)
|
unsigned , uint8_t* bTypeMask, uint64_t* bRegisterMask)
|
||||||
{
|
{
|
||||||
*bTypeMask = (1 << RegisterOperand) | (1 << MemoryOperand);
|
*bTypeMask = (1 << RegisterOperand) | (1 << MemoryOperand);
|
||||||
*bRegisterMask = ~static_cast<uint64_t>(0);
|
*bRegisterMask = GPR_MASK64;
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case Negate:
|
case Negate:
|
||||||
@ -2584,7 +2584,7 @@ class MyArchitecture: public Assembler::Architecture {
|
|||||||
virtual void planDestination
|
virtual void planDestination
|
||||||
(TernaryOperation op,
|
(TernaryOperation op,
|
||||||
unsigned, uint8_t, uint64_t,
|
unsigned, uint8_t, uint64_t,
|
||||||
unsigned, uint8_t, const uint64_t,
|
unsigned, uint8_t, const uint64_t bRegisterMask,
|
||||||
unsigned, uint8_t* cTypeMask, uint64_t* cRegisterMask)
|
unsigned, uint8_t* cTypeMask, uint64_t* cRegisterMask)
|
||||||
{
|
{
|
||||||
if (isBranch(op)) {
|
if (isBranch(op)) {
|
||||||
@ -2592,7 +2592,7 @@ class MyArchitecture: public Assembler::Architecture {
|
|||||||
*cRegisterMask = 0;
|
*cRegisterMask = 0;
|
||||||
} else {
|
} else {
|
||||||
*cTypeMask = (1 << RegisterOperand);
|
*cTypeMask = (1 << RegisterOperand);
|
||||||
*cRegisterMask = ~static_cast<uint64_t>(0);
|
*cRegisterMask = bRegisterMask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user