summaryrefslogtreecommitdiff
path: root/src/jit/emitarm64.cpp
diff options
context:
space:
mode:
authorSteve MacLean, Qualcomm Datacenter Technologies, Inc <sdmaclea@qti.qualcomm.com>2017-04-26 22:39:03 +0000
committerSteve MacLean, Qualcomm Datacenter Technologies, Inc <sdmaclea@qti.qualcomm.com>2017-04-26 22:40:29 +0000
commit47261a0e9b82b735d1efcbd8c0ca0a2a3a75b8c9 (patch)
treefc9ed96ca8985bae781eef4133adf2b53bb8c55b /src/jit/emitarm64.cpp
parent4a3a184d7187a58aa50a203186dc937b78e57b2a (diff)
downloadcoreclr-47261a0e9b82b735d1efcbd8c0ca0a2a3a75b8c9.tar.gz
coreclr-47261a0e9b82b735d1efcbd8c0ca0a2a3a75b8c9.tar.bz2
coreclr-47261a0e9b82b735d1efcbd8c0ca0a2a3a75b8c9.zip
[Arm64] Update emitOutputInstr to support GC refs in ldp forms
Diffstat (limited to 'src/jit/emitarm64.cpp')
-rw-r--r--src/jit/emitarm64.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/jit/emitarm64.cpp b/src/jit/emitarm64.cpp
index 0328cb6712..1a56e863e5 100644
--- a/src/jit/emitarm64.cpp
+++ b/src/jit/emitarm64.cpp
@@ -9331,8 +9331,17 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp)
{
// INS_ldp etc...
// We assume that "idReg1" and "idReg2" are the destination register for all instructions
- emitGCregDeadUpd(id->idReg1(), dst);
- emitGCregDeadUpd(id->idReg2(), dst);
+ // TODO-ARM64-CQ: Current limitations only allows using ldp/stp when both of the GC types match
+ if (id->idGCref() != GCT_NONE)
+ {
+ emitGCregLiveUpd(id->idGCref(), id->idReg1(), dst);
+ emitGCregLiveUpd(id->idGCref(), id->idReg2(), dst);
+ }
+ else
+ {
+ emitGCregDeadUpd(id->idReg1(), dst);
+ emitGCregDeadUpd(id->idReg2(), dst);
+ }
}
else
{