From d15098fdc86a9b1fe15d2b4b93994db307307a31 Mon Sep 17 00:00:00 2001 From: Eric Astor Date: Sun, 13 Jun 2021 18:35:51 -0400 Subject: [PATCH] [ms] [llvm-ml] When parsing MASM, "jmp short" instructions are case insensitive Handle "short" in a case-insensitive fashion in MASM. Required to correctly parse z_Windows_NT-586_asm.asm from the OpenMP runtime. Reviewed By: thakis Differential Revision: https://reviews.llvm.org/D104195 --- lib/Target/X86/AsmParser/X86AsmParser.cpp | 3 ++- test/tools/llvm-ml/jmp_short.asm | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/tools/llvm-ml/jmp_short.asm diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index 7f01f81605a..c25e8b3d2db 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -3105,7 +3105,8 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name, (PatchedName.startswith("j") && ParseConditionCode(PatchedName.substr(1)) != X86::COND_INVALID))) { StringRef NextTok = Parser.getTok().getString(); - if (NextTok == "short") { + if (Parser.isParsingMasm() ? NextTok.equals_lower("short") + : NextTok == "short") { SMLoc NameEndLoc = NameLoc.getFromPointer(NameLoc.getPointer() + Name.size()); // Eat the short keyword. diff --git a/test/tools/llvm-ml/jmp_short.asm b/test/tools/llvm-ml/jmp_short.asm new file mode 100644 index 00000000000..d9bd41a34c5 --- /dev/null +++ b/test/tools/llvm-ml/jmp_short.asm @@ -0,0 +1,21 @@ +; RUN: llvm-ml -filetype=s %s /Fo - | FileCheck %s + +.code + +t1: + jmp short t1_label + jmp SHORT t1_label + JmP Short t1_label + JMP SHORT t1_label + mov eax, eax +t1_label: + ret + +; CHECK-LABEL: t1: +; CHECK-NEXT: jmp t1_label +; CHECK-NEXT: jmp t1_label +; CHECK-NEXT: jmp t1_label +; CHECK-NEXT: jmp t1_label +; CHECK-NEXT: mov eax, eax + +end