mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
572acaa24c
We modeled the RDFLAGS{32,64} operations as "using" {E,R}FLAGS. While technically correct, this is not be desirable for folks who want to examine aspects of the FLAGS register which are not related to computation like whether or not CPUID is a valid instruction. Differential Revision: http://reviews.llvm.org/D17782 llvm-svn: 262465
32 lines
727 B
LLVM
32 lines
727 B
LLVM
; RUN: llc -verify-machineinstrs < %s | FileCheck %s
|
|
target triple = "i686-pc-win32"
|
|
|
|
declare i32 @llvm.x86.flags.read.u32()
|
|
declare void @llvm.x86.flags.write.u32(i32)
|
|
|
|
define i32 @read_flags() {
|
|
entry:
|
|
%flags = call i32 @llvm.x86.flags.read.u32()
|
|
ret i32 %flags
|
|
}
|
|
|
|
; CHECK-LABEL: _read_flags:
|
|
; CHECK: pushl %ebp
|
|
; CHECK-NEXT: movl %esp, %ebp
|
|
; CHECK-NEXT: pushfl
|
|
; CHECK-NEXT: popl %eax
|
|
; CHECK-NEXT: popl %ebp
|
|
|
|
define x86_fastcallcc void @write_flags(i32 inreg %arg) {
|
|
entry:
|
|
call void @llvm.x86.flags.write.u32(i32 %arg)
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: @write_flags@4:
|
|
; CHECK: pushl %ebp
|
|
; CHECK-NEXT: movl %esp, %ebp
|
|
; CHECK-NEXT: pushl %ecx
|
|
; CHECK-NEXT: popfl
|
|
; CHECK-NEXT: popl %ebp
|