e33ed7d667 
								
							 
						 
						
							
							
								
								[X86] Remove DATA32_PREFIX. Hack the printing for DATA16_PREFIX to print 'data32' in 16-bit mode. Hack the asm parser to convert 'data32' to 'data16' in 16-bit mode.  
							
							... 
							
							
							
							Improve the error messages to match GNU assembler.
This also allows us to remove the hack from the disassembler table building.
llvm-svn: 330531 
							
						 
						
							2018-04-22 00:52:02 +00:00  
				
					
						
							
							
								 
						
							
								6496d51284 
								
							 
						 
						
							
							
								
								[X86] Remove non-existant instruction name from X86DisassemblerTables.cpp.  
							
							... 
							
							
							
							This instruction was removed a long time so we don't need to check for it here.
llvm-svn: 330363 
							
						 
						
							2018-04-19 20:44:15 +00:00  
				
					
						
							
							
								 
						
							
								665f74414d 
								
							 
						 
						
							
							
								
								[X86] Disassembler support for having an ADSIZE prefix affect instructions with 0xf2 and 0xf3 prefixes.  
							
							... 
							
							
							
							Needed to support umonitor from D45253.
llvm-svn: 329327 
							
						 
						
							2018-04-05 18:20:14 +00:00  
				
					
						
							
							
								 
						
							
								097b47a0fc 
								
							 
						 
						
							
							
								
								[X86] Add a new disassembler opcode map for 3DNow. Stop treating 3DNow as an attribute.  
							
							... 
							
							
							
							This reduces the size of llvm-mc by at least 150k since we no longer have to multiply the attribute across 7 tables.
llvm-svn: 328416 
							
						 
						
							2018-03-24 07:48:54 +00:00  
				
					
						
							
							
								 
						
							
								c0e1880db9 
								
							 
						 
						
							
							
								
								[X86] Use unique_ptr to simplify memory management. NFC  
							
							... 
							
							
							
							llvm-svn: 328413 
							
						 
						
							2018-03-24 07:15:47 +00:00  
				
					
						
							
							
								 
						
							
								de9ad4ba84 
								
							 
						 
						
							
							
								
								[X86][3DNOW] Teach decoder about AMD 3DNow! instrs  
							
							... 
							
							
							
							Summary:
This patch makes the decoder understand old AMD 3DNow!
instructions that have never been properly supported in the X86
disassembler, despite being supported in other subsystems. Hopefully
this should make the X86 decoder more complete with respect to binaries
containing legacy code.
Reviewers: craig.topper
Reviewed By: craig.topper
Subscribers: llvm-commits, maksfb, bruno
Differential Revision: https://reviews.llvm.org/D43311 
llvm-svn: 325295 
							
						 
						
							2018-02-15 21:20:31 +00:00  
				
					
						
							
							
								 
						
							
								e06cc6d9ba 
								
							 
						 
						
							
							
								
								[X86] Fix disassembler table generation to prevent instructions tagged with 'PS' being inherited into PD/XS/XD attribute entries.  
							
							... 
							
							
							
							llvm-svn: 316345 
							
						 
						
							2017-10-23 16:49:26 +00:00  
				
					
						
							
							
								 
						
							
								326008c615 
								
							 
						 
						
							
							
								
								[X86] Fix disassembly of EVEX rounding control and SAE instructions.  
							
							... 
							
							
							
							Fixes PR31955.
llvm-svn: 316308 
							
						 
						
							2017-10-23 02:26:24 +00:00  
				
					
						
							
							
								 
						
							
								dac20263a1 
								
							 
						 
						
							
							
								
								[X86] More correctly support LIG and WIG for EVEX instructions in the disassembler tables.  
							
							... 
							
							
							
							This is similar to how we generate the VEX tables.
More fixes are still needed for the instructions that use EVEX.b (broadcast and embedded rounding).
llvm-svn: 316294 
							
						 
						
							2017-10-22 17:22:29 +00:00  
				
					
						
							
							
								 
						
							
								e975127db6 
								
							 
						 
						
							
							
								
								[X86] Teach the disassembler that some instructions use VEX.W==0 without a corresponding VEX.W==1 instruction and we shouldn't treat them as if VEX.W is ignored.  
							
							... 
							
							
							
							Fixes PR11304.
llvm-svn: 316285 
							
						 
						
							2017-10-22 06:18:26 +00:00  
				
					
						
							
							
								 
						
							
								2344b7611a 
								
							 
						 
						
							
							
								
								fix trivial typos in comments; NFC  
							
							... 
							
							
							
							llvm-svn: 307075 
							
						 
						
							2017-07-04 13:09:29 +00:00  
				
					
						
							
							
								 
						
							
								197db00e3e 
								
							 
						 
						
							
							
								
								[X86] Fix for bugzilla 31576 - add support for "data32" instruction prefix  
							
							... 
							
							
							
							This patch fixes bugzilla 31576 (https://llvm.org/bugs/show_bug.cgi?id=31576 ).
"data32" instruction prefix was not defined in the llvm.
An exception had to be added to the X86 tablegen and AsmPrinter because both "data16" and "data32" are encoded to 0x66 (but in different modes).
Differential Revision: https://reviews.llvm.org/D28468 
llvm-svn: 292352 
							
						 
						
							2017-01-18 08:07:51 +00:00  
				
					
						
							
							
								 
						
							
								2263512a6c 
								
							 
						 
						
							
							
								
								test commit: remove trailing whitespace  
							
							... 
							
							
							
							llvm-svn: 273197 
							
						 
						
							2016-06-20 20:43:26 +00:00  
				
					
						
							
							
								 
						
							
								0f370936a0 
								
							 
						 
						
							
							
								
								AVX-512: Added all AVX-512 forms of Vector Convert for Float/Double/Int/Long types.  
							
							... 
							
							
							
							In this patch I have only encoding. Intrinsics and DAG lowering will be in the next patch.
I temporary removed the old intrinsics test (just to split this patch).
Half types are not covered here.
Differential Revision: http://reviews.llvm.org/D11134 
llvm-svn: 242023 
							
						 
						
							2015-07-13 13:26:20 +00:00  
				
					
						
							
							
								 
						
							
								431b81e41f 
								
							 
						 
						
							
							
								
								AVX-512: Added VPTESTM and VPTESTNM instructions for SKX  
							
							... 
							
							
							
							llvm-svn: 235383 
							
						 
						
							2015-04-21 13:13:46 +00:00  
				
					
						
							
							
								 
						
							
								8b88cc284f 
								
							 
						 
						
							
							
								
								Use SmallVector instead of std::vector for uniquing X86 disassembler operand sets. The number of operands is a small fixed size.  
							
							... 
							
							
							
							llvm-svn: 234465 
							
						 
						
							2015-04-09 04:08:48 +00:00  
				
					
						
							
							
								 
						
							
								34136874fd 
								
							 
						 
						
							
							
								
								Simplify some printing code by combining new lines onto previous strings. Don't work so hard not to print a comma on the last entry of an array.  
							
							... 
							
							
							
							llvm-svn: 234464 
							
						 
						
							2015-04-09 04:08:46 +00:00  
				
					
						
							
							
								 
						
							
								d434e39557 
								
							 
						 
						
							
							
								
								Don't convert enum to strings just to put them in the uniquing map. Use the enum directly. Only convert to a string for printing.  
							
							... 
							
							
							
							llvm-svn: 234463 
							
						 
						
							2015-04-09 04:08:42 +00:00  
				
					
						
							
							
								 
						
							
								02ffd26023 
								
							 
						 
						
							
							
								
								AVX-512: Added mask and rounding mode for scalar arithmetics  
							
							... 
							
							
							
							Added more tests for scalar instructions to destinguish between AVX and AVX-512 forms.
llvm-svn: 230891 
							
						 
						
							2015-03-01 07:44:04 +00:00  
				
					
						
							
							
								 
						
							
								ae8e1b3831 
								
							 
						 
						
							
							
								
								[X86] Disassembler support for move to/from %rax with a 32-bit memory offset is REX.W and AdSize prefix are both present.  
							
							... 
							
							
							
							llvm-svn: 225099 
							
						 
						
							2015-01-03 00:00:20 +00:00  
				
					
						
							
							
								 
						
							
								055845f5cb 
								
							 
						 
						
							
							
								
								[X86] Make the instructions that use AdSize16/32/64 co-exist together without using mode predicates.  
							
							... 
							
							
							
							This is necessary to allow the disassembler to be able to handle AdSize32 instructions in 64-bit mode when address size prefix is used.
Eventually we should probably also support 'addr32' and 'addr16' in the assembler to override the address size on some of these instructions. But for now we'll just use special operand types that will lookup the current mode size to select the right instruction.
llvm-svn: 225075 
							
						 
						
							2015-01-02 07:02:25 +00:00  
				
					
						
							
							
								 
						
							
								99bcab7b85 
								
							 
						 
						
							
							
								
								[X86] Fix disassembly of absolute moves to work correctly in 16 and 32-bit modes with all 4 combinations of OpSize and AdSize prefixes being present or not.  
							
							... 
							
							
							
							llvm-svn: 225036 
							
						 
						
							2014-12-31 07:07:31 +00:00  
				
					
						
							
							
								 
						
							
								b86338f7b2 
								
							 
						 
						
							
							
								
								[X86] Remove the single AdSize indicator and replace it with separate AdSize16/32/64 flags.  
							
							... 
							
							
							
							This removes a hardcoded list of instructions in the CodeEmitter. Eventually I intend to remove the predicates on the affected instructions since in any given mode two of them are valid if we supported addr32/addr16 prefixes in the assembler.
llvm-svn: 224809 
							
						 
						
							2014-12-24 06:05:22 +00:00  
				
					
						
							
							
								 
						
							
								eb12639375 
								
							 
						 
						
							
							
								
								[AVX512] Extended avx512_sqrt_packed (sqrt instructions) to VL subset.  
							
							... 
							
							
							
							Refactored through AVX512_maskable
llvm-svn: 220806 
							
						 
						
							2014-10-28 18:15:20 +00:00  
				
					
						
							
							
								 
						
							
								d5b14f7994 
								
							 
						 
						
							
							
								
								[AVX512] Extended avx512_binop_rm for AVX512VL subsets.  
							
							... 
							
							
							
							Added avx512_binop_rm_vl multiclass for VL subset
Added encoding tests
llvm-svn: 219390 
							
						 
						
							2014-10-09 08:38:48 +00:00  
				
					
						
							
							
								 
						
							
								2ea081d4d1 
								
							 
						 
						
							
							
								
								[SKX] avx512_icmp_packed multiclass extension  
							
							... 
							
							
							
							Extended avx512_icmp_packed multiclass by masking versions.
Added avx512_icmp_packed_rmb multiclass for embedded broadcast versions.
Added corresponding _vl multiclasses.
Added encoding tests for CPCMP{EQ|GT}* instructions.
Add more fields for X86VectorVTInfo.
Added AVX512VLVectorVTInfo that include X86VectorVTInfo for 512/256/128-bit versions
Differential Revision: http://reviews.llvm.org/D5024 
llvm-svn: 216383 
							
						 
						
							2014-08-25 14:49:34 +00:00  
				
					
						
							
							
								 
						
							
								7ca7df0bf9 
								
							 
						 
						
							
							
								
								[SKX] Enabling load/store instructions: encoding  
							
							... 
							
							
							
							Instructions: VMOVAPD, VMOVAPS, VMOVDQA8, VMOVDQA16, VMOVDQA32,VMOVDQA64, VMOVDQU8, VMOVDQU16, VMOVDQU32,VMOVDQU64, VMOVUPD, VMOVUPS,
Reviewed by Elena Demikhovsky <elena.demikhovsky@intel.com>
llvm-svn: 214719 
							
						 
						
							2014-08-04 14:35:15 +00:00  
				
					
						
							
							
								 
						
							
								f7c1b16591 
								
							 
						 
						
							
							
								
								AVX-512: Added rrk, rrkz, rmk, rmkz, rmbk, rmbkz versions of AVX512 FP packed instructions, added encoding tests for them.  
							
							... 
							
							
							
							By Robert Khazanov.
llvm-svn: 203098 
							
						 
						
							2014-03-06 08:45:30 +00:00  
				
					
						
							
							
								 
						
							
								0d1fd55c13 
								
							 
						 
						
							
							
								
								Remove A6/A7 opcode maps. They can all be handled with a TB map, opcode of 0xa6/0xa7, and adding MRM_C0/MRM_E0 forms. Removes 376K from the disassembler tables.  
							
							... 
							
							
							
							llvm-svn: 201641 
							
						 
						
							2014-02-19 05:34:21 +00:00  
				
					
						
							
							
								 
						
							
								69e245c01d 
								
							 
						 
						
							
							
								
								Remove filtering concept from X86 disassembler table generation. It's no longer necessary.  
							
							... 
							
							
							
							llvm-svn: 201299 
							
						 
						
							2014-02-13 07:07:16 +00:00  
				
					
						
							
							
								 
						
							
								2813e3a46e 
								
							 
						 
						
							
							
								
								Remove unnecessary include.  
							
							... 
							
							
							
							llvm-svn: 201041 
							
						 
						
							2014-02-09 07:55:19 +00:00  
				
					
						
							
							
								 
						
							
								caaa2850c0 
								
							 
						 
						
							
							
								
								[x86] Fix disassembly of MOV16ao16 et al.  
							
							... 
							
							
							
							The addition of IC_OPSIZE_ADSIZE in r198759 wasn't quite complete. It
also turns out to have been unnecessary. The disassembler handles the
AdSize prefix for itself, and doesn't care about the difference between
(e.g.) MOV8ao8 and MOB8ao8_16 definitions. So just let them coexist and
don't worry about it.
llvm-svn: 199654 
							
						 
						
							2014-01-20 12:02:53 +00:00  
				
					
						
							
							
								 
						
							
								b19c9dc1a1 
								
							 
						 
						
							
							
								
								AVX-512: Embedded Rounding Control - encoding and printing  
							
							... 
							
							
							
							Changed intrinsics for vrcp14/vrcp28 vrsqrt14/vrsqrt28 - aligned with GCC.
llvm-svn: 199102 
							
						 
						
							2014-01-13 12:55:03 +00:00  
				
					
						
							
							
								 
						
							
								32da3c8f3b 
								
							 
						 
						
							
							
								
								[x86] Fix MOV8ao8 et al for 16-bit mode, fix up disassembler to understand  
							
							... 
							
							
							
							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 
							
						 
						
							2014-01-08 12:58:24 +00:00  
				
					
						
							
							
								 
						
							
								3321c99a06 
								
							 
						 
						
							
							
								
								Remove modifierType/Base from X86 disassembler tables as they are no longer used. Removes ~11.5K from static tables.  
							
							... 
							
							
							
							llvm-svn: 198284 
							
						 
						
							2014-01-01 21:52:57 +00:00  
				
					
						
							
							
								 
						
							
								de3f751baf 
								
							 
						 
						
							
							
								
								AVX-512: Added intrinsics for vcvt, vcvtt, vrndscale, vcmp  
							
							... 
							
							
							
							Printing rounding control.
Enncoding for EVEX_RC (rounding control).
llvm-svn: 198277 
							
						 
						
							2014-01-01 15:12:34 +00:00  
				
					
						
							
							
								 
						
							
								371e363833 
								
							 
						 
						
							
							
								
								AVX-512: decoder for AVX-512, made by Alexey Bader.  
							
							... 
							
							
							
							llvm-svn: 198013 
							
						 
						
							2013-12-25 11:40:51 +00:00  
				
					
						
							
							
								 
						
							
								dacddb0bab 
								
							 
						 
						
							
							
								
								AVX-512: added VPCONFLICT instruction and intrinsics,  
							
							... 
							
							
							
							added EVEX_KZ to tablegen
llvm-svn: 193959 
							
						 
						
							2013-11-03 13:46:31 +00:00  
				
					
						
							
							
								 
						
							
								9e3e38ae3f 
								
							 
						 
						
							
							
								
								Add XOP disassembler support. Fixes PR13933.  
							
							... 
							
							
							
							llvm-svn: 191874 
							
						 
						
							2013-10-03 05:17:48 +00:00  
				
					
						
							
							
								 
						
							
								009de6015f 
								
							 
						 
						
							
							
								
								Filter out repeated sections from the X86 disassembler modRMTable. Saves about ~43K from a released build. Unfortunately the disassembler tables are still upwards of 800K.  
							
							... 
							
							
							
							llvm-svn: 191652 
							
						 
						
							2013-09-30 06:23:19 +00:00  
				
					
						
							
							
								 
						
							
								ed59dd34fd 
								
							 
						 
						
							
							
								
								Various x86 disassembler fixes.  
							
							... 
							
							
							
							Add VEX_LIG to scalar FMA4 instructions.
Use VEX_LIG in some of the inheriting checks in disassembler table generator.
Make use of VEX_L_W, VEX_L_W_XS, VEX_L_W_XD contexts.
Don't let VEX_L_W, VEX_L_W_XS, VEX_L_W_XD, VEX_L_W_OPSIZE inherit from their non-L forms unless VEX_LIG is set.
Let VEX_L_W, VEX_L_W_XS, VEX_L_W_XD, VEX_L_W_OPSIZE inherit from all of their non-L or non-W cases.
Increase ranking on VEX_L_W, VEX_L_W_XS, VEX_L_W_XD, VEX_L_W_OPSIZE so they get chosen over non-L/non-W forms.
llvm-svn: 191649 
							
						 
						
							2013-09-30 02:46:36 +00:00  
				
					
						
							
							
								 
						
							
								003e7d73b9 
								
							 
						 
						
							
							
								
								Added encoding prefixes for KNL instructions (EVEX).  
							
							... 
							
							
							
							Added 512-bit operands printing.
Added instruction formats for KNL instructions.
llvm-svn: 187324 
							
						 
						
							2013-07-28 08:28:38 +00:00  
				
					
						
							
							
								 
						
							
								91d19d8e93 
								
							 
						 
						
							
							
								
								Sort the #include lines for utils/...  
							
							... 
							
							
							
							I've tried to find main moudle headers where possible, but the TableGen
stuff may warrant someone else looking at it.
llvm-svn: 169251 
							
						 
						
							2012-12-04 10:37:14 +00:00  
				
					
						
							
							
								 
						
							
								963305b450 
								
							 
						 
						
							
							
								
								Add a new compression type to ModRM table that detects when the memory modRM byte represent 8 instructions and the reg modRM byte represents up to 64 instructions. Reduces modRM table from 43k entreis to 25k entries. Based on a patch from Manman Ren.  
							
							... 
							
							
							
							llvm-svn: 163774 
							
						 
						
							2012-09-13 05:45:42 +00:00  
				
					
						
							
							
								 
						
							
								8702c5b7c0 
								
							 
						 
						
							
							
								
								Change unsigned to a uint16_t in static disassembler tables to reduce the table size.  
							
							... 
							
							
							
							llvm-svn: 163594 
							
						 
						
							2012-09-11 04:19:21 +00:00  
				
					
						
							
							
								 
						
							
								b8aec08819 
								
							 
						 
						
							
							
								
								Add more indirection to the disassembler tables to reduce amount of space used to store the operand types and encodings. Store only the unique combinations in a separate table and store indices in the instruction table. Saves about 32K of static data.  
							
							... 
							
							
							
							llvm-svn: 161101 
							
						 
						
							2012-08-01 07:39:18 +00:00  
				
					
						
							
							
								 
						
							
								9caea12bd8 
								
							 
						 
						
							
							
								
								Use uint8_t to store the InstructionContext table. Saves 768 bytes of static data.  
							
							... 
							
							
							
							llvm-svn: 161034 
							
						 
						
							2012-07-31 06:15:39 +00:00  
				
					
						
							
							
								 
						
							
								6f142746e7 
								
							 
						 
						
							
							
								
								Tidy up. Move for loop index declarations into for statements. Use unsigned instead of uint16_t for loop indices. Use unsigned instead of uint32_t for arguments to raw_ostream.indent.  
							
							... 
							
							
							
							llvm-svn: 161033 
							
						 
						
							2012-07-31 06:02:05 +00:00  
				
					
						
							
							
								 
						
							
								b61024cfcc 
								
							 
						 
						
							
							
								
								Tidy up function argument formatting.  
							
							... 
							
							
							
							llvm-svn: 161032 
							
						 
						
							2012-07-31 05:42:02 +00:00  
				
					
						
							
							
								 
						
							
								0c4253fe29 
								
							 
						 
						
							
							
								
								Remove trailing whitespace  
							
							... 
							
							
							
							llvm-svn: 161030 
							
						 
						
							2012-07-31 05:27:01 +00:00