apparently jmpl $1,$2 is an alias for ljmpl, similiarly
authorChris Lattner <sabre@nondot.org>
Wed, 15 Sep 2010 05:25:21 +0000 (05:25 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 15 Sep 2010 05:25:21 +0000 (05:25 +0000)
for call.  Add this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113948 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmParser/X86AsmParser.cpp
test/MC/AsmParser/X86/x86_32-new-encoder.s
test/MC/AsmParser/X86/x86_instructions.s

index 37334ad4ceb06a2bc92a640c090b0cb7574e4a2c..acee68c54ef18342a5559498cbb6f04e5097b2c6 100644 (file)
@@ -989,6 +989,27 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
                                           NameLoc);
   }
   
+  // jmp $42,$5 -> ljmp, similarly for call.
+  if ((Name.startswith("call") || Name.startswith("jmp")) &&
+      Operands.size() == 3 &&
+      static_cast<X86Operand*>(Operands[1])->isImm() &&
+      static_cast<X86Operand*>(Operands[2])->isImm()) {
+    const char *NewOpName = StringSwitch<const char *>(Name)
+      .Case("jmp", "ljmp")
+      .Case("jmpw", "ljmpw")
+      .Case("jmpl", "ljmpl")
+      .Case("jmpq", "ljmpq")
+      .Case("call", "lcall")
+      .Case("callw", "lcallw")
+      .Case("calll", "lcalll")
+      .Case("callq", "lcallq")
+    .Default(0);
+    if (NewOpName) {
+      delete Operands[0];
+      Operands[0] = X86Operand::CreateToken(NewOpName, NameLoc);
+    }
+  }
+  
   return false;
 }
 
index f9cb206b6a67c6389c514847160306059b23b086..f5a53bf4eac9ed0390b90f995bb939fcf6e29281 100644 (file)
@@ -537,3 +537,18 @@ popfl
        setnl   %bl
        setng   %bl
        setnle  %bl
+
+
+
+
+// CHECK: lcalll       $31438, $31438
+// CHECK: lcalll       $31438, $31438
+// CHECK: ljmpl        $31438, $31438
+// CHECK: ljmpl        $31438, $31438
+
+calll  $0x7ace,$0x7ace
+lcalll $0x7ace,$0x7ace
+jmpl   $0x7ace,$0x7ace
+ljmpl  $0x7ace,$0x7ace
+
+
index 092aff3b48bc213296ec76daac95c5048a3ead10..16fafa6ef2dffc1e43dc85936b80ae8f72f48fa6 100644 (file)
@@ -293,4 +293,3 @@ sldt        %cx
 lcall  *0xbadeface
 ljmp   *0xbadeface
 
-