Commit 1e8dfde5 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r322623:

------------------------------------------------------------------------
r322623 | avt77 | 2018-01-17 02:12:06 -0800 (Wed, 17 Jan 2018) | 3 lines

Allow usage of X86-prefixes as separate instrs.
Differential Revision: https://reviews.llvm.org/D42102

------------------------------------------------------------------------

llvm-svn: 322654
parent d8f5d67c
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2375,6 +2375,13 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
            .Cases("repne", "repnz", X86::IP_HAS_REPEAT_NE)
            .Default(X86::IP_NO_PREFIX); // Invalid prefix (impossible)
    Flags |= Prefix;
    if (getLexer().is(AsmToken::EndOfStatement)) {
      // We don't have real instr with the given prefix
      //  let's use the prefix as the instr.
      // TODO: there could be several prefixes one after another
      Flags = X86::IP_NO_PREFIX;
      break;
    }
    Name = Parser.getTok().getString();
    Parser.Lex(); // eat the prefix
    // Hack: we could have something like "rep # some comment" or
+2 −1
Original line number Diff line number Diff line
@@ -19,7 +19,8 @@ entry:
  %.fca.1.insert = insertvalue { i64, i64 } %.fca.0.insert, i64 %retval.sroa.2.0.extract.trunc, 1
  ret { i64, i64 } %.fca.1.insert
}
; CHECK: lock cmpxchg16b
; CHECK: lock
; CHECK-NEXT: cmpxchg16b

attributes #0 = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind }
+37 −1
Original line number Diff line number Diff line
@@ -99,7 +99,8 @@
// CHECK: shll $2, %eax
        sall $2, %eax

// CHECK: rep movsb
// CHECK: rep
// CHECK-NEXT: movsb
rep     # comment
movsb

@@ -1557,3 +1558,38 @@ ptwriteq 0xdeadbeef(%rbx,%rcx,8)
// CHECK: ptwriteq %rax
// CHECK:  encoding: [0xf3,0x48,0x0f,0xae,0xe0]
ptwriteq %rax

//  __asm __volatile(
//    "pushf        \n\t"
//    "popf       \n\t"
//    "rep        \n\t"
//    ".byte  0x0f, 0xa7, 0xd0"
//  );
// CHECK: pushfq
// CHECK-NEXT: popfq
// CHECK-NEXT: rep
// CHECK-NEXT: .byte 15
// CHECK-NEXT: .byte 167
// CHECK-NEXT: .byte 208
pushfq
popfq
rep
.byte 15
.byte 167
.byte 208

// CHECK: lock
// CHECK: cmpxchgl
        cmp $0, %edx
        je 1f
        lock
1:      cmpxchgl %ecx,(%rdi)

// CHECK: rep
// CHECK-NEXT: byte
rep
.byte 0xa4      # movsb

// CHECK: lock
// This line has to be the last one in the file
lock