From c0bad5706eff2dec7304b9266657ffdded0628d9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 8 Jun 2006 18:03:49 +0000 Subject: [PATCH] Add support for "m" inline asm constraints. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28728 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelDAGToDAG.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp index 7f7e069b081..a1512beb4d3 100644 --- a/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -128,7 +128,13 @@ namespace { bool TryFoldLoad(SDOperand P, SDOperand N, SDOperand &Base, SDOperand &Scale, SDOperand &Index, SDOperand &Disp); - + /// SelectInlineAsmMemoryOperand - Implement addressing mode selection for + /// inline asm expressions. + virtual bool SelectInlineAsmMemoryOperand(const SDOperand &Op, + char ConstraintCode, + std::vector &OutOps, + SelectionDAG &DAG); + void EmitSpecialCodeForMain(MachineBasicBlock *BB, MachineFrameInfo *MFI); inline void getAddressOperands(X86ISelAddressMode &AM, SDOperand &Base, @@ -876,6 +882,28 @@ void X86DAGToDAGISel::Select(SDOperand &Result, SDOperand N) { #endif } +bool X86DAGToDAGISel:: +SelectInlineAsmMemoryOperand(const SDOperand &Op, char ConstraintCode, + std::vector &OutOps, SelectionDAG &DAG){ + SDOperand Op0, Op1, Op2, Op3; + switch (ConstraintCode) { + case 'o': // offsetable ?? + case 'v': // not offsetable ?? + default: return true; + case 'm': // memory + if (!SelectAddr(Op, Op0, Op1, Op2, Op3)) + return true; + break; + } + + OutOps.resize(4); + Select(OutOps[0], Op0); + Select(OutOps[1], Op1); + Select(OutOps[2], Op2); + Select(OutOps[3], Op3); + return false; +} + /// createX86ISelDag - This pass converts a legalized DAG into a /// X86-specific DAG, ready for instruction scheduling. /// -- 2.11.0