| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
| |
The names of the tablegen defs now match the names of the ISD nodes.
This makes the world a slightly saner place, as previously "fround" matched
ISD::FP_ROUND and not ISD::FROUND.
Differential Revision: https://reviews.llvm.org/D23597
llvm-svn: 279129
|
|
|
|
|
|
| |
These operands are the registers and immediates that specify the memory address not the memory itself thus they are inputs.
llvm-svn: 263354
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|9B DD /7| FSTSW m2byte| Valid Valid Store FPU status word at m2byteafter checking for pending unmasked floating-point exceptions.|
|9B DF E0| FSTSW AX| Valid Valid Store FPU status word in AX register after checking for pending unmasked floating-point exceptions.|
|DD /7 |FNSTSW *m2byte| Valid Valid Store FPU status word at m2bytewithout checking for pending unmasked floating-point exceptions.|
|DF E0 |FNSTSW *AX| Valid Valid Store FPU status word in AX register without checking for pending unmasked floating-point exceptions|
m2byte is word register, and therefor instruction operand need to be change from f32mem to i16mem.
Differential Revision: http://reviews.llvm.org/D14953
llvm-svn: 254512
|
|
|
|
|
|
|
|
| |
memory on the left hand side of the fsub/fdiv operations in their patterns.
Not sure how to test this. I noticed by inspection in the isel tables where the same pattern tried to produce DIV and DIVR or SUB and SUBR.
llvm-svn: 254388
|
|
|
|
| |
llvm-svn: 250497
|
|
|
|
|
|
|
|
|
|
| |
FBLD and FBSTP should receive TBYTE because it is defined as
FBLD m80
FBSTP m80
Differential Revision: http://reviews.llvm.org/D11748
llvm-svn: 245553
|
|
|
|
|
|
| |
Add intrinsics for the FXSR instructions (FXSAVE/FXSAVE64/FXRSTOR/FXRSTOR64)
llvm-svn: 241049
|
|
|
|
|
|
|
|
|
|
| |
This was breaking sqlite with the machine verifier because operand 0 was a def according to tablegen, but didn't have the 'isDef' flag set.
Looking at the ISA, its clear that this operand is a source as writing to st(0) is implicit. So move the operand to the correct place in the td file.
rdar://problem/20751584
llvm-svn: 236183
|
|
|
|
|
|
| |
syntax. Also make them the default output.
llvm-svn: 227963
|
|
|
|
| |
llvm-svn: 223339
|
|
|
|
| |
llvm-svn: 222801
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Stop using ST registers for function returns and inline-asm instructions and use
FP registers instead. This allows removing a large amount of code in the
stackifier pass that was needed to track register liveness and handle copies
between ST and FP registers and function calls returning floating point values.
It also fixes a bug which manifests when an ST register defined by an
inline-asm instruction was live across another inline-asm instruction, as shown
in the following sequence of machine instructions:
1. INLINEASM <es:frndint> $0:[regdef], %ST0<imp-def,tied5>
2. INLINEASM <es:fldcw $0>
3. %FP0<def> = COPY %ST0
<rdar://problem/16952634>
llvm-svn: 214580
|
|
|
|
|
|
| |
This is related to <rdar://problem/15607571>.
llvm-svn: 203682
|
|
|
|
|
|
| |
handle all the FP operations. This increases format by 1 bit, but decreases opcode map by 1 bit so the TSFlags size doesn't change.
llvm-svn: 201649
|
|
|
|
|
|
| |
be explicitly specified.
llvm-svn: 199479
|
|
|
|
|
|
| |
instead of 'q'
llvm-svn: 199474
|
|
|
|
|
|
| |
instructions. These instructions can be handled by MRMXr instead.
llvm-svn: 198276
|
|
|
|
|
|
| |
realized we had no FP disassembler test cases.
llvm-svn: 198265
|
|
|
|
|
|
| |
can be handled by MRMXr instead.
llvm-svn: 198238
|
|
|
|
|
|
|
|
| |
Intel X86 assembler syntax.
Patch by Richard Mitton.
llvm-svn: 187476
|
|
|
|
| |
llvm-svn: 186932
|
|
|
|
| |
llvm-svn: 186814
|
|
|
|
|
|
|
| |
This only covers the instructions that were given itinerary classes for
the Atom model.
llvm-svn: 178050
|
|
|
|
|
|
| |
by providing the latencies for the instructions in X86InstrFPStack.td.
llvm-svn: 155996
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
pre-pentiumpro architectures.
* Model FPSW (the FPU status word) as a register.
* Add ISel patterns for the FUCOM*, FNSTSW and SAHF instructions.
* During Legalize/Lowering, build a node sequence to transfer the comparison
result from FPSW into EFLAGS. If you're wondering about the right-shift: That's
an implicit sub-register extraction (%ax -> %ah) which is handled later on by
the instruction selector.
Fixes PR6679. Patch by Christoph Erhardt!
llvm-svn: 155704
|
|
|
|
| |
llvm-svn: 150902
|
|
|
|
|
|
| |
MSP430, PPC, PTX, Sparc, X86, XCore.
llvm-svn: 150878
|
|
|
|
|
|
| |
predicates. Another commit will remove orAVX functions from X86SubTarget.
llvm-svn: 147841
|
|
|
|
| |
llvm-svn: 147758
|
|
|
|
| |
llvm-svn: 147453
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Drop the FpMov instructions, use plain COPY instead.
Drop the FpSET/GET instruction for accessing fixed stack positions.
Instead use normal COPY to/from ST registers around inline assembly, and
provide a single new FpPOP_RETVAL instruction that can access the return
value(s) from a call. This is still necessary since you cannot tell from
the CALL instruction alone if it returns anything on the FP stack. Teach
fast isel to use this.
This provides a much more robust way of handling fixed stack registers -
we can tolerate arbitrary FP stack instructions inserted around calls
and inline assembly. Live range splitting could sometimes break x87 code
by inserting spill code in unfortunate places.
As a bonus we handle floating point inline assembly correctly now.
llvm-svn: 134018
|
|
|
|
|
|
|
|
| |
These are just FXSAVE and FXRSTOR with REX.W prefixes. These versions use
64-bit pointer values instead of 32-bit pointer values in the memory map they
dump and restore.
llvm-svn: 125446
|
|
|
|
| |
llvm-svn: 122513
|
|
|
|
| |
llvm-svn: 120470
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
exposed:
GAS doesn't accept "fcomip %st(1)", it requires "fcomip %st(1), %st(0)"
even though st(0) is implicit in all other fp stack instructions.
Fortunately, there is an alias for fcomip named "fcompi" and gas does
accept the default argument for the alias (boggle!).
As such, switch the canonical form of this instruction to "pi" instead
of "ip". This makes the code generator and disassembler generate pi,
avoiding the gas bug.
llvm-svn: 118356
|
|
|
|
|
|
|
| |
listed in its asm string, for consistency with the other similar
instructions.
llvm-svn: 118354
|
|
|
|
|
|
|
| |
It doesn't look like anything is wrong with the checkin,
but the new test cases expose a mem bug in AsmParser.
llvm-svn: 117087
|
|
|
|
|
|
|
|
|
| |
sense, when the instruction takes the 16-bit ax register or m16 memory
location. These changes to llvm-mc matches what the darwin assembler allows
for these instructions. Also added the missing flex (without the wait prefix)
and ud2a as an alias to ud2 (still to add ud2b).
llvm-svn: 117031
|
|
|
|
|
|
|
|
| |
!strconcat(!strconcat(!strconcat(!strconcat
Simplify some x86 td files to use it.
llvm-svn: 115719
|
|
|
|
| |
llvm-svn: 115591
|
|
|
|
| |
llvm-svn: 114523
|
|
|
|
|
|
| |
used with stack slots, but hey, lets be safe.
llvm-svn: 114521
|
|
|
|
| |
llvm-svn: 112202
|
|
|
|
|
|
|
|
|
| |
pass that inserted it.
It is no longer necessary to limit the live ranges of FP registers to a single
basic block.
llvm-svn: 108536
|
|
|
|
|
|
| |
operations in x87 code.
llvm-svn: 108098
|
|
|
|
| |
llvm-svn: 106358
|
|
|
|
|
|
|
| |
instructions as the Mac OS X darwin assembler. Some of which like 'fcoml'
assembled to different opcodes. While some of the suffixes were just different.
llvm-svn: 102958
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to input patterns, we can fix X86ISD::CMP and X86ISD::BT as taking
two inputs (which have to be the same type) and *returning an i32*.
This is how the SDNodes get made in the graph, but we weren't able
to model it this way due to deficiencies in the pattern language.
Now we can change things like this:
def UCOM_FpIr80: FpI_<(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP,
- [(X86cmp RFP80:$lhs, RFP80:$rhs),
- (implicit EFLAGS)]>; // CC = ST(0) cmp ST(i)
+ [(set EFLAGS, (X86cmp RFP80:$lhs, RFP80:$rhs))]>;
and fix terrible crimes like this:
-def : Pat<(parallel (X86cmp GR8:$src1, 0), (implicit EFLAGS)),
+def : Pat<(X86cmp GR8:$src1, 0),
(TEST8rr GR8:$src1, GR8:$src1)>;
This relies on matching the result of TEST8rr (which is EFLAGS, which is
an implicit def) to the result of X86cmp, an i32.
llvm-svn: 98903
|
|
|
|
|
|
| |
PR4841. Patch by Craig Smith!
llvm-svn: 98496
|
|
|
|
| |
llvm-svn: 97348
|