Emit low/high immediate loads properly for Linux/PPC.
authorNick Lewycky <nicholas@mxc.ca>
Sat, 3 Mar 2007 05:29:51 +0000 (05:29 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sat, 3 Mar 2007 05:29:51 +0000 (05:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34871 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCAsmPrinter.cpp

index fc952273ff247d0db4341163d4ea4cd455c7afe9..f6b5d483e369fa18bc0f481b2c137b9a339f0414 100644 (file)
@@ -215,24 +215,28 @@ namespace {
       if (MI->getOperand(OpNo).isImmediate()) {
         printS16ImmOperand(MI, OpNo);
       } else {
-        O << "ha16(";
+        if (Subtarget.isDarwin()) O << "ha16(";
         printOp(MI->getOperand(OpNo));
         if (TM.getRelocationModel() == Reloc::PIC_)
-          O << "-\"L" << getFunctionNumber() << "$pb\")";
-        else
+          O << "-\"L" << getFunctionNumber() << "$pb\"";
+        if (Subtarget.isDarwin())
           O << ')';
+        else
+          O << "@ha";
       }
     }
     void printSymbolLo(const MachineInstr *MI, unsigned OpNo) {
       if (MI->getOperand(OpNo).isImmediate()) {
         printS16ImmOperand(MI, OpNo);
       } else {
-        O << "lo16(";
+        if (Subtarget.isDarwin()) O << "lo16(";
         printOp(MI->getOperand(OpNo));
         if (TM.getRelocationModel() == Reloc::PIC_)
-          O << "-\"L" << getFunctionNumber() << "$pb\")";
-        else
+          O << "-\"L" << getFunctionNumber() << "$pb\"";
+        if (Subtarget.isDarwin())
           O << ')';
+        else
+          O << "@l";
       }
     }
     void printcrbitm(const MachineInstr *MI, unsigned OpNo) {