openbsd-ports/devel/llvm/patches/patch-lib_Target_Sparc_SparcISelDAGToDAG_cpp
ajacoutot ab10d0eb39 - Keep the STT_FILE symbol in the table so that we know what file was used to compile an object
- [Sparc] Fix addressing mode when using 64-bit values in inline assembly
- [Sparc] Use synthetic instruction clr to zero register instead of sethi

from Brad (maintainer)
2018-04-28 15:04:29 +00:00

23 lines
914 B
Plaintext

$OpenBSD: patch-lib_Target_Sparc_SparcISelDAGToDAG_cpp,v 1.3 2018/04/28 15:04:29 ajacoutot Exp $
[Sparc] Fix addressing mode when using 64-bit values in inline assembly
Summary:
If a 64-bit register is used as an operand in inline assembly together
with a memory reference, the memory addressing will be wrong. The
addressing will be a single reg, instead of reg+reg or reg+imm. This
will generate a bad offset value or an exception in printMemOperand().
Index: lib/Target/Sparc/SparcISelDAGToDAG.cpp
--- lib/Target/Sparc/SparcISelDAGToDAG.cpp.orig
+++ lib/Target/Sparc/SparcISelDAGToDAG.cpp
@@ -311,6 +311,8 @@ bool SparcDAGToDAGISel::tryInlineAsm(SDNode *N){
if (!Changed)
return false;
+ SelectInlineAsmMemoryOperands(AsmNodeOperands, SDLoc(N));
+
SDValue New = CurDAG->getNode(ISD::INLINEASM, SDLoc(N),
CurDAG->getVTList(MVT::Other, MVT::Glue), AsmNodeOperands);
New->setNodeId(-1);