| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
used instead. Simplify some other code. No functional changes intended.
llvm-svn: 199353
|
|
|
|
|
|
|
|
| |
and the current mode from the concept of SSE instructions using 0x66 prefix as part of their encoding without being affected by the mode.
This should allow SSE instructions to be encoded correctly in 16-bit mode which r198586 probably broke.
llvm-svn: 199193
|
|
|
|
|
|
| |
Changed intrinsics for vrcp14/vrcp28 vrsqrt14/vrsqrt28 - aligned with GCC.
llvm-svn: 199102
|
|
|
|
|
|
|
|
|
|
| |
It seems there is no separate instruction class for having AdSize *and*
OpSize bits set, which is required in order to disambiguate between all
these instructions. So add that to the disassembler.
Hm, perhaps we do need an AdSize16 bit after all?
llvm-svn: 198759
|
|
|
|
|
|
|
|
|
| |
Where "where possible" means that it's an immediate value and it's below
0x10000. In fact GAS will either truncate or error with larger values,
and will insist on using the addr32 prefix to get 32-bit addressing. So
perhaps we should do that, in a later patch.
llvm-svn: 198758
|
|
|
|
|
|
|
| |
JCXZ should have the 0x67 prefix only if we're in 32-bit mode, so make that
appropriately conditional. And JECXZ needs the prefix instead.
llvm-svn: 198757
|
|
|
|
| |
llvm-svn: 198588
|
|
|
|
| |
llvm-svn: 198587
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The 0x66 prefix toggles between 16-bit and 32-bit addressing mode.
So in 32-bit mode it is used to switch to 16-bit addressing mode for the
following instruction, while in 16-bit mode it's the other way round — it's
used to switch to 32-bit mode instead.
Thus, emit the 0x66 prefix byte for OpSize only in 32-bit (and 64-bit) mode,
and introduce a new OpSize16 bit which is used in 16-bit mode instead.
This is just the basic infrastructure for that change; a subsequent patch
will add the new OpSize16 bit to the 32-bit instructions that need it.
Patch from David Woodhouse.
llvm-svn: 198586
|
|
|
|
|
|
|
|
|
|
|
| |
This is not really expected to work right yet. Mostly because we will
still emit the OpSize (0x66) prefix in all the wrong places, along with
a number of other corner cases. Those will all be fixed in the subsequent
commits.
Patch from David Woodhouse.
llvm-svn: 198584
|
|
|
|
|
|
|
|
|
| |
Add some tests to validate correct register selection, including a fix
to an existing test which was requiring the *wrong* output.
Patch from David Woodhouse.
llvm-svn: 198566
|
|
|
|
|
|
|
| |
Printing rounding control.
Enncoding for EVEX_RC (rounding control).
llvm-svn: 198277
|
|
|
|
| |
llvm-svn: 198257
|
|
|
|
| |
llvm-svn: 198241
|
|
|
|
|
|
| |
cases from switch.
llvm-svn: 191632
|
|
|
|
| |
llvm-svn: 191630
|
|
|
|
|
|
| |
Phabricator code review is located here: http://llvm-reviews.chandlerc.com/D1750
llvm-svn: 191539
|
|
|
|
| |
llvm-svn: 189005
|
|
|
|
|
|
| |
MCJIT code where CurOp was being incremented even if the operand it was pointing at wasn't used. Maybe only matters if there are any EVEX_K instructions that aren't VEX_4V.
llvm-svn: 188868
|
|
|
|
| |
llvm-svn: 187576
|
|
|
|
|
|
|
|
|
| |
Someone may want to do something crazy, like replace these objects if they
change or something.
No functionality change intended.
llvm-svn: 184175
|
|
|
|
|
|
| |
Patch by Kai Nacke. This matches the gnu as output.
llvm-svn: 180568
|
|
|
|
|
|
|
| |
As these two instructions in AVX extension are privileged instructions for
special purpose, it's only expected to be used in inlined assembly.
llvm-svn: 179266
|
|
|
|
|
|
|
|
|
|
|
|
| |
into the operand array of the start of the memory reference descriptor.
Additional code in EncodeInstruction provides an additional adjustment.
This patch places that additional code in a separate function,
called getOperandBias, so that any caller of getMemoryOperandNo
can also call getOperandBias.
llvm-svn: 179211
|
|
|
|
| |
llvm-svn: 177888
|
|
|
|
|
|
| |
Previously we weren't skipping the VVVV encoded register. Based on patch by Michael Liao.
llvm-svn: 177221
|
|
|
|
|
|
| |
set. The VEX.B was being calculated from the wrong operand. Fixes at least some portion of PR14185.
llvm-svn: 177014
|
|
|
|
|
|
|
|
| |
- Add RTM code generation support throught 3 X86 intrinsics:
xbegin()/xend() to start/end a transaction region, and xabort() to abort a
tranaction region
llvm-svn: 167573
|
|
|
|
|
|
|
|
| |
- Add 'HwEncoding' for X86 registers and call getEncodingValue() to
retrieve their encoding values.
- This's the first step to adopt new scheme. Furthur revising is onging.
llvm-svn: 165241
|
|
|
|
|
|
| |
code emitters and the disassembler table builder. Fix a couple instructions that were still missing VEX_L.
llvm-svn: 164204
|
|
|
|
| |
llvm-svn: 163974
|
|
|
|
|
|
| |
myself and Manman Ren.
llvm-svn: 160110
|
|
|
|
|
|
|
|
|
|
|
|
| |
Support the following intrinsics:
llvm.x86.avx2.gather.d.pd, llvm.x86.avx2.gather.q.pd
llvm.x86.avx2.gather.d.pd.256, llvm.x86.avx2.gather.q.pd.256
llvm.x86.avx2.gather.d.ps, llvm.x86.avx2.gather.q.ps
llvm.x86.avx2.gather.d.ps.256, llvm.x86.avx2.gather.q.ps.256
Modified Disassembler to handle VSIB addressing mode.
llvm-svn: 159221
|
|
|
|
|
|
|
|
| |
I disabled FMA3 autodetection, since the result may differ from expected for some benchmarks.
I added tests for GodeGen and intrinsics.
I did not change llvm.fma.f32/64 - it may be done later.
llvm-svn: 157737
|
|
|
|
|
|
|
|
|
|
|
| |
extrq and insertq instructions.
This required light surgery on the assembler and disassembler
because the instructions use an uncommon encoding. They are
the only two instructions in x86 that use register operands
and two immediates.
llvm-svn: 157634
|
|
|
|
|
|
| |
functional change intended.
llvm-svn: 157122
|
|
|
|
|
|
|
|
| |
Add the MCRegisterInfo to the factories and constructors.
Patch by Tom Stellard <Tom.Stellard@amd.com>.
llvm-svn: 156828
|
|
|
|
| |
llvm-svn: 153185
|
|
|
|
|
|
|
| |
the invalid cases. At least 16bit operand in 64bit mode is currently not
rejected in the parser.
llvm-svn: 153166
|
|
|
|
| |
llvm-svn: 150899
|
|
|
|
|
|
| |
MSP430, PPC, PTX, Sparc, X86, XCore.
llvm-svn: 150878
|
|
|
|
|
|
| |
Original patch by Kay Tiong Khoo. Few tweaks by me for code density and to reduce replication.
llvm-svn: 150873
|
|
|
|
|
|
| |
Patch by Kai Nacke!
llvm-svn: 150307
|
|
|
|
| |
llvm-svn: 149809
|
|
|
|
| |
llvm-svn: 149106
|
|
|
|
|
|
| |
of having the W bit set for XOP instructons. Removes ORing W-bits in the encoder and will similarly simplify the disassembler implementation.
llvm-svn: 147366
|
|
|
|
| |
llvm-svn: 146397
|
|
|
|
|
|
|
|
| |
does. The _GLOBAL_OFFSET_TABLE_ is still magical in that we get a R_386_GOTPC,
but it doesn't change the immediate in the same way as when the expression
has no right hand side symbol.
llvm-svn: 146311
|
|
|
|
|
|
| |
and fix the encoding.
llvm-svn: 146151
|
|
|
|
|
|
|
|
|
| |
tablegen patterns for scalar FMA4 operations and intrinsic. Also
add tests for vfmaddsd.
Patch by Jan Sjodin
llvm-svn: 145133
|