Subversion Repositories Kolibri OS

Rev

Rev 992 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 992 Rev 1039
Line 1... Line 1...
1
; flat assembler core
1
; flat assembler core
2
; Copyright (c) 1999-2007, Tomasz Grysztar.
2
; Copyright (c) 1999-2009, Tomasz Grysztar.
3
; All rights reserved.
3
; All rights reserved.
Line 4... Line 4...
4
 
4
 
5
simple_instruction_except64:
5
simple_instruction_except64:
6
	cmp	[code_type],64
6
	cmp	[code_type],64
Line 2335... Line 2335...
2335
	jz	movx_unknown_size
2335
	jz	movx_unknown_size
2336
	cmp	ah,al
2336
	cmp	ah,al
2337
	jae	invalid_operand_size
2337
	jae	invalid_operand_size
2338
	cmp	ah,1
2338
	cmp	ah,1
2339
	je	movx_mem_8bit
2339
	je	movx_mem_store
2340
	cmp	ah,2
2340
	cmp	ah,2
2341
	jne	invalid_operand_size
2341
	jne	invalid_operand_size
2342
      movx_mem_16bit:
2342
	inc	[extended_code]
2343
	inc	[extended_code]
-
 
2344
	call	operand_autodetect
2343
      movx_mem_store:
-
 
2344
	call	operand_autodetect
2345
	call	store_instruction
2345
	call	store_instruction
2346
	jmp	instruction_assembled
2346
	jmp	instruction_assembled
2347
      movx_unknown_size:
2347
      movx_unknown_size:
2348
	cmp	[error_line],0
2348
	cmp	[error_line],0
2349
	jne	movx_mem_8bit
2349
	jne	movx_mem_store
2350
	mov	eax,[current_line]
2350
	mov	eax,[current_line]
2351
	mov	[error_line],eax
2351
	mov	[error_line],eax
2352
	mov	[error],operand_size_not_specified
2352
	mov	[error],operand_size_not_specified
2353
      movx_mem_8bit:
2353
	jmp	movx_mem_store
2354
	call	operand_autodetect
2354
      movx_reg:
2355
	call	store_instruction
-
 
2356
	jmp	instruction_assembled
-
 
2357
      movx_reg:
-
 
2358
	lods	byte [esi]
2355
	lods	byte [esi]
2359
	call	convert_register
2356
	call	convert_register
2360
	pop	ebx
2357
	pop	ebx
2361
	xchg	bl,al
2358
	xchg	bl,al
2362
	cmp	ah,al
2359
	cmp	ah,al
Line 4067... Line 4064...
4067
	jne	invalid_operand
4064
	jne	invalid_operand
4068
	call	get_address
4065
	call	get_address
4069
	mov	al,[operand_size]
4066
	mov	al,[operand_size]
4070
	or	al,al
4067
	or	al,al
4071
	jz	extended_nop_nosize
4068
	jz	extended_nop_store
4072
	call	operand_autodetect
4069
	call	operand_autodetect
4073
      extended_nop_store:
4070
      extended_nop_store:
4074
	call	store_instruction
4071
	call	store_instruction
4075
	jmp	instruction_assembled
4072
	jmp	instruction_assembled
4076
      extended_nop_nosize:
4073
      extended_nop_reg:
4077
	cmp	[error_line],0
-
 
4078
	jne	extended_nop_store
-
 
4079
	mov	eax,[current_line]
-
 
4080
	mov	[error_line],eax
-
 
4081
	mov	[error],operand_size_not_specified
-
 
4082
	jmp	extended_nop_store
-
 
4083
      extended_nop_reg:
-
 
4084
	lods	byte [esi]
4074
	lods	byte [esi]
4085
	call	convert_register
4075
	call	convert_register
4086
	mov	bl,al
4076
	mov	bl,al
4087
	mov	al,ah
4077
	mov	al,ah
4088
	call	operand_autodetect
4078
	call	operand_autodetect
Line 4394... Line 4384...
4394
	or	dh,11000000b
4384
	or	dh,11000000b
4395
	mov	ax,dx
4385
	mov	ax,dx
4396
	stos	word [edi]
4386
	stos	word [edi]
4397
	jmp	instruction_assembled
4387
	jmp	instruction_assembled
4398
fstenv_instruction:
4388
 
-
 
4389
fstenv_instruction:
4399
	mov	byte [edi],9Bh
4390
	mov	byte [edi],9Bh
4400
	inc	edi
4391
	inc	edi
4401
fldenv_instruction:
4392
fldenv_instruction:
4402
	mov	[base_code],0D9h
4393
	mov	[base_code],0D9h
4403
	jmp	fpu_mem
4394
	jmp	fpu_mem
4404
fsave_instruction:
4395
fstenv_instruction_16bit:
-
 
4396
	mov	byte [edi],9Bh
-
 
4397
	inc	edi
-
 
4398
fldenv_instruction_16bit:
-
 
4399
	call	operand_16bit
-
 
4400
	jmp	fldenv_instruction
-
 
4401
fstenv_instruction_32bit:
-
 
4402
	mov	byte [edi],9Bh
-
 
4403
	inc	edi
-
 
4404
fldenv_instruction_32bit:
-
 
4405
	call	operand_32bit
-
 
4406
	jmp	fldenv_instruction
-
 
4407
fsave_instruction_32bit:
-
 
4408
	mov	byte [edi],9Bh
-
 
4409
	inc	edi
-
 
4410
fnsave_instruction_32bit:
-
 
4411
	call	operand_32bit
-
 
4412
	jmp	fnsave_instruction
-
 
4413
fsave_instruction_16bit:
-
 
4414
	mov	byte [edi],9Bh
-
 
4415
	inc	edi
-
 
4416
fnsave_instruction_16bit:
-
 
4417
	call	operand_16bit
-
 
4418
	jmp	fnsave_instruction
-
 
4419
fsave_instruction:
4405
	mov	byte [edi],9Bh
4420
	mov	byte [edi],9Bh
4406
	inc	edi
4421
	inc	edi
4407
fnsave_instruction:
4422
fnsave_instruction:
4408
	mov	[base_code],0DDh
4423
	mov	[base_code],0DDh
4409
      fpu_mem:
4424
      fpu_mem:
Line 4586... Line 4601...
4586
	call	store_nomem_instruction
4601
	call	store_nomem_instruction
4587
	mov	al,byte [value]
4602
	mov	al,byte [value]
4588
	stos	byte [edi]
4603
	stos	byte [edi]
4589
	jmp	instruction_assembled
4604
	jmp	instruction_assembled
4590
pextrw_instruction:
4605
pmovmskb_instruction:
4591
	mov	[base_code],0Fh
4606
	mov	[base_code],0Fh
4592
	mov	[extended_code],al
4607
	mov	[extended_code],al
4593
	lods	byte [esi]
4608
	lods	byte [esi]
4594
	call	get_size_operator
4609
	call	get_size_operator
4595
	cmp	al,10h
4610
	cmp	al,10h
4596
	jne	invalid_operand
4611
	jne	invalid_operand
Line 4633... Line 4648...
4633
	call	store_instruction_with_imm8
4648
	call	store_instruction_with_imm8
4634
	jmp	instruction_assembled
4649
	jmp	instruction_assembled
4635
      mmx_nomem_imm8:
4650
      mmx_nomem_imm8:
4636
	call	store_nomem_instruction
4651
	call	store_nomem_instruction
4637
	mov	[operand_size],0
4652
	call	append_imm8
-
 
4653
	jmp	instruction_assembled
-
 
4654
      append_imm8:
-
 
4655
	mov	[operand_size],0
4638
	lods	byte [esi]
4656
	lods	byte [esi]
4639
	cmp	al,','
4657
	cmp	al,','
4640
	jne	invalid_operand
4658
	jne	invalid_operand
4641
	lods	byte [esi]
4659
	lods	byte [esi]
4642
	call	get_size_operator
4660
	call	get_size_operator
Line 4645... Line 4663...
4645
	cmp	al,'('
4663
	cmp	al,'('
4646
	jne	invalid_operand
4664
	jne	invalid_operand
4647
	call	get_byte_value
4665
	call	get_byte_value
4648
	stosb
4666
	stosb
4649
	jmp	instruction_assembled
4667
	ret
4650
pinsrw_instruction:
4668
pinsrw_instruction:
4651
	mov	[extended_code],al
4669
	mov	[extended_code],al
4652
	mov	[base_code],0Fh
4670
	mov	[base_code],0Fh
4653
	lods	byte [esi]
4671
	lods	byte [esi]
4654
	call	get_size_operator
4672
	call	get_size_operator
4655
	cmp	al,10h
4673
	cmp	al,10h
Line 4682... Line 4700...
4682
	mov	bl,al
4700
	mov	bl,al
4683
	jmp	mmx_nomem_imm8
4701
	jmp	mmx_nomem_imm8
4684
pshufw_instruction:
4702
pshufw_instruction:
4685
	mov	[mmx_size],8
4703
	mov	[mmx_size],8
4686
	mov	[operand_prefix],al
4704
	mov	[opcode_prefix],al
4687
	jmp	pshuf_instruction
4705
	jmp	pshuf_instruction
4688
pshufd_instruction:
4706
pshufd_instruction:
4689
	mov	[mmx_size],16
4707
	mov	[mmx_size],16
4690
	mov	[operand_prefix],al
4708
	mov	[opcode_prefix],al
4691
      pshuf_instruction:
4709
      pshuf_instruction:
4692
	mov	[base_code],0Fh
4710
	mov	[base_code],0Fh
4693
	mov	[extended_code],70h
4711
	mov	[extended_code],70h
4694
	lods	byte [esi]
4712
	lods	byte [esi]
4695
	call	get_size_operator
4713
	call	get_size_operator
4696
	cmp	al,10h
4714
	cmp	al,10h
Line 4825... Line 4843...
4825
	call	store_instruction
4843
	call	store_instruction
4826
	jmp	instruction_assembled
4844
	jmp	instruction_assembled
4827
     movq_mem_xmmreg:
4845
     movq_mem_xmmreg:
4828
	mov	[extended_code],0D6h
4846
	mov	[extended_code],0D6h
4829
	mov	[operand_prefix],66h
4847
	mov	[opcode_prefix],66h
4830
	call	store_instruction
4848
	call	store_instruction
4831
	jmp	instruction_assembled
4849
	jmp	instruction_assembled
4832
     movq_reg:
4850
     movq_reg:
4833
	lods	byte [esi]
4851
	lods	byte [esi]
4834
	cmp	al,0B0h
4852
	cmp	al,0B0h
4835
	jae	movq_mmreg
4853
	jae	movq_mmreg
Line 4860... Line 4878...
4860
	mov	[mmx_size],ah
4878
	mov	[mmx_size],ah
4861
	cmp	ah,16
4879
	cmp	ah,16
4862
	jne	movq_mmreg_
4880
	jne	movq_mmreg_
4863
	mov	[extended_code],7Eh
4881
	mov	[extended_code],7Eh
4864
	mov	[operand_prefix],0F3h
4882
	mov	[opcode_prefix],0F3h
4865
      movq_mmreg_:
4883
      movq_mmreg_:
4866
	lods	byte [esi]
4884
	lods	byte [esi]
4867
	cmp	al,','
4885
	cmp	al,','
4868
	jne	invalid_operand
4886
	jne	invalid_operand
4869
	mov	[operand_size],0
4887
	mov	[operand_size],0
4870
	lods	byte [esi]
4888
	lods	byte [esi]
Line 4884... Line 4902...
4884
	call	convert_register
4902
	call	convert_register
4885
	cmp	ah,8
4903
	cmp	ah,8
4886
	jne	invalid_operand_size
4904
	jne	invalid_operand_size
4887
	mov	[extended_code],6Eh
4905
	mov	[extended_code],6Eh
4888
	mov	[operand_prefix],0
4906
	mov	[opcode_prefix],0
4889
	mov	bl,al
4907
	mov	bl,al
4890
	cmp	[mmx_size],16
4908
	cmp	[mmx_size],16
4891
	jne	movq_mmreg_reg_store
4909
	jne	movq_mmreg_reg_store
4892
	mov	[operand_prefix],66h
4910
	mov	[opcode_prefix],66h
4893
      movq_mmreg_reg_store:
4911
      movq_mmreg_reg_store:
4894
	call	operand_64bit
4912
	call	operand_64bit
4895
	call	store_nomem_instruction
4913
	call	store_nomem_instruction
4896
	jmp	instruction_assembled
4914
	jmp	instruction_assembled
4897
      movq_mmreg_mmreg:
4915
      movq_mmreg_mmreg:
4898
	call	convert_mmx_register
4916
	call	convert_mmx_register
Line 4901... Line 4919...
4901
	mov	bl,al
4919
	mov	bl,al
4902
	call	store_nomem_instruction
4920
	call	store_nomem_instruction
4903
	jmp	instruction_assembled
4921
	jmp	instruction_assembled
4904
movdq_instruction:
4922
movdq_instruction:
4905
	mov	[operand_prefix],al
4923
	mov	[opcode_prefix],al
4906
	mov	[base_code],0Fh
4924
	mov	[base_code],0Fh
4907
	mov	[extended_code],6Fh
4925
	mov	[extended_code],6Fh
4908
	lods	byte [esi]
4926
	lods	byte [esi]
4909
	call	get_size_operator
4927
	call	get_size_operator
4910
	cmp	al,10h
4928
	cmp	al,10h
4911
	je	movdq_mmreg
4929
	je	movdq_mmreg
Line 4972... Line 4990...
4972
	jne	invalid_operand
4990
	jne	invalid_operand
4973
	call	get_address
4991
	call	get_address
4974
	pop	eax
4992
	pop	eax
4975
	mov	[postbyte_register],al
4993
	mov	[postbyte_register],al
4976
	mov	[operand_prefix],0F2h
4994
	mov	[opcode_prefix],0F2h
4977
	mov	[base_code],0Fh
4995
	mov	[base_code],0Fh
4978
	mov	[extended_code],0F0h
4996
	mov	[extended_code],0F0h
4979
	call	store_instruction
4997
	call	store_instruction
4980
	jmp	instruction_assembled
4998
	jmp	instruction_assembled
4981
movq2dq_instruction:
4999
movq2dq_instruction:
4982
	lods	byte [esi]
5000
	lods	byte [esi]
Line 5000... Line 5018...
5000
	call	convert_mmx_register
5018
	call	convert_mmx_register
5001
	cmp	ah,8
5019
	cmp	ah,8
5002
	jne	invalid_operand_size
5020
	jne	invalid_operand_size
5003
	mov	bl,al
5021
	mov	bl,al
5004
	mov	[operand_prefix],0F3h
5022
	mov	[opcode_prefix],0F3h
5005
	mov	[base_code],0Fh
5023
	mov	[base_code],0Fh
5006
	mov	[extended_code],0D6h
5024
	mov	[extended_code],0D6h
5007
	call	store_nomem_instruction
5025
	call	store_nomem_instruction
5008
	jmp	instruction_assembled
5026
	jmp	instruction_assembled
5009
movdq2q_instruction:
5027
movdq2q_instruction:
5010
	lods	byte [esi]
5028
	lods	byte [esi]
Line 5028... Line 5046...
5028
	call	convert_mmx_register
5046
	call	convert_mmx_register
5029
	cmp	ah,16
5047
	cmp	ah,16
5030
	jne	invalid_operand_size
5048
	jne	invalid_operand_size
5031
	mov	bl,al
5049
	mov	bl,al
5032
	mov	[operand_prefix],0F2h
5050
	mov	[opcode_prefix],0F2h
5033
	mov	[base_code],0Fh
5051
	mov	[base_code],0Fh
5034
	mov	[extended_code],0D6h
5052
	mov	[extended_code],0D6h
5035
	call	store_nomem_instruction
5053
	call	store_nomem_instruction
5036
	jmp	instruction_assembled
5054
	jmp	instruction_assembled
5037
 
5055
 
Line 5043... Line 5061...
5043
sse_pd_instruction_imm8:
5061
sse_pd_instruction_imm8:
5044
	mov	[immediate_size],8
5062
	mov	[immediate_size],8
5045
sse_pd_instruction:
5063
sse_pd_instruction:
5046
	mov	[mmx_size],16
5064
	mov	[mmx_size],16
5047
	mov	[operand_prefix],66h
5065
	mov	[opcode_prefix],66h
5048
	jmp	sse_instruction
5066
	jmp	sse_instruction
5049
sse_ss_instruction:
5067
sse_ss_instruction:
5050
	mov	[mmx_size],4
5068
	mov	[mmx_size],4
5051
	mov	[operand_prefix],0F3h
5069
	mov	[opcode_prefix],0F3h
5052
	jmp	sse_instruction
5070
	jmp	sse_instruction
5053
sse_sd_instruction:
5071
sse_sd_instruction:
5054
	mov	[mmx_size],8
5072
	mov	[mmx_size],8
5055
	mov	[operand_prefix],0F2h
5073
	mov	[opcode_prefix],0F2h
5056
	jmp	sse_instruction
5074
	jmp	sse_instruction
5057
comiss_instruction:
5075
comiss_instruction:
5058
	mov	[mmx_size],4
5076
	mov	[mmx_size],4
5059
	jmp	sse_instruction
5077
	jmp	sse_instruction
5060
comisd_instruction:
5078
comisd_instruction:
5061
	mov	[mmx_size],8
5079
	mov	[mmx_size],8
5062
	mov	[operand_prefix],66h
5080
	mov	[opcode_prefix],66h
5063
	jmp	sse_instruction
5081
	jmp	sse_instruction
5064
cvtps2pd_instruction:
5082
cvtps2pd_instruction:
5065
	mov	[mmx_size],8
5083
	mov	[mmx_size],8
5066
	jmp	sse_instruction
5084
	jmp	sse_instruction
5067
cvtpd2dq_instruction:
5085
cvtpd2dq_instruction:
5068
	mov	[mmx_size],16
5086
	mov	[mmx_size],16
5069
	mov	[operand_prefix],0F2h
5087
	mov	[opcode_prefix],0F2h
5070
	jmp	sse_instruction
5088
	jmp	sse_instruction
5071
cvtdq2pd_instruction:
5089
cvtdq2pd_instruction:
5072
	mov	[mmx_size],16
5090
	mov	[mmx_size],16
5073
	mov	[operand_prefix],0F3h
5091
	mov	[opcode_prefix],0F3h
5074
sse_instruction:
5092
sse_instruction:
5075
	mov	[base_code],0Fh
5093
	mov	[base_code],0Fh
5076
	mov	[extended_code],al
5094
	mov	[extended_code],al
5077
	lods	byte [esi]
5095
	lods	byte [esi]
5078
	call	get_size_operator
5096
	call	get_size_operator
5079
	cmp	al,10h
5097
	cmp	al,10h
Line 5148... Line 5166...
5148
	ret
5166
	ret
5149
 
5167
 
Line 5150... Line 5168...
5150
ps_dq_instruction:
5168
ps_dq_instruction:
5151
	mov	[postbyte_register],al
5169
	mov	[postbyte_register],al
5152
	mov	[operand_prefix],66h
5170
	mov	[opcode_prefix],66h
5153
	mov	[base_code],0Fh
5171
	mov	[base_code],0Fh
5154
	mov	[extended_code],73h
5172
	mov	[extended_code],73h
5155
	lods	byte [esi]
5173
	lods	byte [esi]
5156
	call	get_size_operator
5174
	call	get_size_operator
5157
	cmp	al,10h
5175
	cmp	al,10h
Line 5162... Line 5180...
5162
	jne	invalid_operand_size
5180
	jne	invalid_operand_size
5163
	mov	bl,al
5181
	mov	bl,al
5164
	jmp	mmx_nomem_imm8
5182
	jmp	mmx_nomem_imm8
5165
movpd_instruction:
5183
movpd_instruction:
5166
	mov	[operand_prefix],66h
5184
	mov	[opcode_prefix],66h
5167
movps_instruction:
5185
movps_instruction:
5168
	mov	[base_code],0Fh
5186
	mov	[base_code],0Fh
5169
	mov	[extended_code],al
5187
	mov	[extended_code],al
5170
	mov	[mmx_size],16
5188
	mov	[mmx_size],16
5171
	jmp	sse_mov_instruction
5189
	jmp	sse_mov_instruction
5172
movss_instruction:
5190
movss_instruction:
5173
	mov	[mmx_size],4
5191
	mov	[mmx_size],4
5174
	mov	[operand_prefix],0F3h
5192
	mov	[opcode_prefix],0F3h
5175
	jmp	sse_movs
5193
	jmp	sse_movs
5176
movsd_instruction:
5194
movsd_instruction:
5177
	mov	al,0A5h
5195
	mov	al,0A5h
5178
	mov	ah,[esi]
5196
	mov	ah,[esi]
5179
	or	ah,ah
5197
	or	ah,ah
5180
	jz	simple_instruction_32bit
5198
	jz	simple_instruction_32bit
5181
	cmp	ah,0Fh
5199
	cmp	ah,0Fh
5182
	je	simple_instruction_32bit
5200
	je	simple_instruction_32bit
5183
	mov	[mmx_size],8
5201
	mov	[mmx_size],8
5184
	mov	[operand_prefix],0F2h
5202
	mov	[opcode_prefix],0F2h
5185
      sse_movs:
5203
      sse_movs:
5186
	mov	[base_code],0Fh
5204
	mov	[base_code],0Fh
5187
	mov	[extended_code],10h
5205
	mov	[extended_code],10h
5188
	jmp	sse_mov_instruction
5206
	jmp	sse_mov_instruction
5189
sse_mov_instruction:
5207
sse_mov_instruction:
5190
	lods	byte [esi]
5208
	lods	byte [esi]
Line 5217... Line 5235...
5217
	mov	[postbyte_register],al
5235
	mov	[postbyte_register],al
5218
	call	store_instruction
5236
	call	store_instruction
5219
	jmp	instruction_assembled
5237
	jmp	instruction_assembled
5220
movlpd_instruction:
5238
movlpd_instruction:
5221
	mov	[operand_prefix],66h
5239
	mov	[opcode_prefix],66h
5222
movlps_instruction:
5240
movlps_instruction:
5223
	mov	[base_code],0Fh
5241
	mov	[base_code],0Fh
5224
	mov	[extended_code],al
5242
	mov	[extended_code],al
5225
	mov	[mmx_size],8
5243
	mov	[mmx_size],8
5226
	lods	byte [esi]
5244
	lods	byte [esi]
5227
	call	get_size_operator
5245
	call	get_size_operator
Line 5264... Line 5282...
5264
	mov	cl,8
5282
	mov	cl,8
5265
	jmp	maskmov_instruction
5283
	jmp	maskmov_instruction
5266
maskmovdqu_instruction:
5284
maskmovdqu_instruction:
5267
	mov	cl,16
5285
	mov	cl,16
5268
	mov	[operand_prefix],66h
5286
	mov	[opcode_prefix],66h
5269
      maskmov_instruction:
5287
      maskmov_instruction:
5270
	mov	[base_code],0Fh
5288
	mov	[base_code],0Fh
5271
	mov	[extended_code],0F7h
5289
	mov	[extended_code],0F7h
5272
	lods	byte [esi]
5290
	lods	byte [esi]
5273
	call	get_size_operator
5291
	call	get_size_operator
5274
	cmp	al,10h
5292
	cmp	al,10h
Line 5290... Line 5308...
5290
	mov	bl,al
5308
	mov	bl,al
5291
	call	store_nomem_instruction
5309
	call	store_nomem_instruction
5292
	jmp	instruction_assembled
5310
	jmp	instruction_assembled
5293
movmskpd_instruction:
5311
movmskpd_instruction:
5294
	mov	[operand_prefix],66h
5312
	mov	[opcode_prefix],66h
5295
movmskps_instruction:
5313
movmskps_instruction:
5296
	mov	[base_code],0Fh
5314
	mov	[base_code],0Fh
5297
	mov	[extended_code],50h
5315
	mov	[extended_code],50h
5298
	lods	byte [esi]
5316
	lods	byte [esi]
5299
	call	get_size_operator
5317
	call	get_size_operator
5300
	cmp	al,10h
5318
	cmp	al,10h
Line 5319... Line 5337...
5319
	mov	bl,al
5337
	mov	bl,al
5320
	call	store_nomem_instruction
5338
	call	store_nomem_instruction
5321
	jmp	instruction_assembled
5339
	jmp	instruction_assembled
5322
cmppd_instruction:
5340
cmppd_instruction:
5323
	mov	[operand_prefix],66h
5341
	mov	[opcode_prefix],66h
5324
cmpps_instruction:
5342
cmpps_instruction:
5325
	mov	[base_code],0Fh
5343
	mov	[base_code],0Fh
5326
	mov	[extended_code],0C2h
5344
	mov	[extended_code],0C2h
5327
	mov	[mmx_size],16
5345
	mov	[mmx_size],16
5328
	mov	byte [value],-1
5346
	mov	byte [value],-1
5329
	jmp	sse_cmp_instruction
5347
	jmp	sse_cmp_instruction
5330
cmp_pd_instruction:
5348
cmp_pd_instruction:
5331
	mov	[operand_prefix],66h
5349
	mov	[opcode_prefix],66h
5332
cmp_ps_instruction:
5350
cmp_ps_instruction:
5333
	mov	[base_code],0Fh
5351
	mov	[base_code],0Fh
5334
	mov	[extended_code],0C2h
5352
	mov	[extended_code],0C2h
5335
	mov	[mmx_size],16
5353
	mov	[mmx_size],16
5336
	mov	byte [value],al
5354
	mov	byte [value],al
5337
	jmp	sse_cmp_instruction
5355
	jmp	sse_cmp_instruction
5338
cmpss_instruction:
5356
cmpss_instruction:
5339
	mov	[mmx_size],4
5357
	mov	[mmx_size],4
5340
	mov	[operand_prefix],0F3h
5358
	mov	[opcode_prefix],0F3h
5341
	jmp	cmpsx_instruction
5359
	jmp	cmpsx_instruction
5342
cmpsd_instruction:
5360
cmpsd_instruction:
5343
	mov	al,0A7h
5361
	mov	al,0A7h
5344
	mov	ah,[esi]
5362
	mov	ah,[esi]
5345
	or	ah,ah
5363
	or	ah,ah
5346
	jz	simple_instruction_32bit
5364
	jz	simple_instruction_32bit
5347
	cmp	ah,0Fh
5365
	cmp	ah,0Fh
5348
	je	simple_instruction_32bit
5366
	je	simple_instruction_32bit
5349
	mov	[mmx_size],8
5367
	mov	[mmx_size],8
5350
	mov	[operand_prefix],0F2h
5368
	mov	[opcode_prefix],0F2h
5351
      cmpsx_instruction:
5369
      cmpsx_instruction:
5352
	mov	[base_code],0Fh
5370
	mov	[base_code],0Fh
5353
	mov	[extended_code],0C2h
5371
	mov	[extended_code],0C2h
5354
	mov	byte [value],-1
5372
	mov	byte [value],-1
5355
	jmp	sse_cmp_instruction
5373
	jmp	sse_cmp_instruction
5356
cmp_ss_instruction:
5374
cmp_ss_instruction:
5357
	mov	[mmx_size],4
5375
	mov	[mmx_size],4
5358
	mov	[operand_prefix],0F3h
5376
	mov	[opcode_prefix],0F3h
5359
	jmp	cmp_sx_instruction
5377
	jmp	cmp_sx_instruction
5360
cmp_sd_instruction:
5378
cmp_sd_instruction:
5361
	mov	[mmx_size],8
5379
	mov	[mmx_size],8
5362
	mov	[operand_prefix],0F2h
5380
	mov	[opcode_prefix],0F2h
5363
      cmp_sx_instruction:
5381
      cmp_sx_instruction:
5364
	mov	[base_code],0Fh
5382
	mov	[base_code],0Fh
5365
	mov	[extended_code],0C2h
5383
	mov	[extended_code],0C2h
5366
	mov	byte [value],al
5384
	mov	byte [value],al
5367
sse_cmp_instruction:
5385
sse_cmp_instruction:
5368
	lods	byte [esi]
5386
	lods	byte [esi]
Line 5426... Line 5444...
5426
	mov	byte [value],al
5444
	mov	byte [value],al
5427
      nextbyte_ok:
5445
      nextbyte_ok:
5428
	ret
5446
	ret
5429
cvtpi2pd_instruction:
5447
cvtpi2pd_instruction:
5430
	mov	[operand_prefix],66h
5448
	mov	[opcode_prefix],66h
5431
cvtpi2ps_instruction:
5449
cvtpi2ps_instruction:
5432
	mov	[base_code],0Fh
5450
	mov	[base_code],0Fh
5433
	mov	[extended_code],al
5451
	mov	[extended_code],al
5434
	lods	byte [esi]
5452
	lods	byte [esi]
5435
	call	get_size_operator
5453
	call	get_size_operator
5436
	cmp	al,10h
5454
	cmp	al,10h
Line 5466... Line 5484...
5466
	mov	bl,al
5484
	mov	bl,al
5467
	call	store_nomem_instruction
5485
	call	store_nomem_instruction
5468
	jmp	instruction_assembled
5486
	jmp	instruction_assembled
5469
cvtsi2ss_instruction:
5487
cvtsi2ss_instruction:
5470
	mov	[operand_prefix],0F3h
5488
	mov	[opcode_prefix],0F3h
5471
	jmp	cvtsi_instruction
5489
	jmp	cvtsi_instruction
5472
cvtsi2sd_instruction:
5490
cvtsi2sd_instruction:
5473
	mov	[operand_prefix],0F2h
5491
	mov	[opcode_prefix],0F2h
5474
      cvtsi_instruction:
5492
      cvtsi_instruction:
5475
	mov	[base_code],0Fh
5493
	mov	[base_code],0Fh
5476
	mov	[extended_code],al
5494
	mov	[extended_code],al
5477
	lods	byte [esi]
5495
	lods	byte [esi]
5478
	call	get_size_operator
5496
	call	get_size_operator
5479
	cmp	al,10h
5497
	cmp	al,10h
Line 5516... Line 5534...
5516
cvtps2pi_instruction:
5534
cvtps2pi_instruction:
5517
	mov	[mmx_size],8
5535
	mov	[mmx_size],8
5518
	jmp	cvtpd_instruction
5536
	jmp	cvtpd_instruction
5519
cvtpd2pi_instruction:
5537
cvtpd2pi_instruction:
5520
	mov	[operand_prefix],66h
5538
	mov	[opcode_prefix],66h
5521
	mov	[mmx_size],16
5539
	mov	[mmx_size],16
5522
      cvtpd_instruction:
5540
      cvtpd_instruction:
5523
	mov	[base_code],0Fh
5541
	mov	[base_code],0Fh
5524
	mov	[extended_code],al
5542
	mov	[extended_code],al
5525
	lods	byte [esi]
5543
	lods	byte [esi]
5526
	call	get_size_operator
5544
	call	get_size_operator
Line 5532... Line 5550...
5532
	jne	invalid_operand_size
5550
	jne	invalid_operand_size
5533
	mov	[operand_size],0
5551
	mov	[operand_size],0
5534
	jmp	sse_reg
5552
	jmp	sse_reg
5535
cvtss2si_instruction:
5553
cvtss2si_instruction:
5536
	mov	[operand_prefix],0F3h
5554
	mov	[opcode_prefix],0F3h
5537
	mov	[mmx_size],4
5555
	mov	[mmx_size],4
5538
	jmp	cvt2si_instruction
5556
	jmp	cvt2si_instruction
5539
cvtsd2si_instruction:
5557
cvtsd2si_instruction:
5540
	mov	[operand_prefix],0F2h
5558
	mov	[opcode_prefix],0F2h
5541
	mov	[mmx_size],8
5559
	mov	[mmx_size],8
5542
      cvt2si_instruction:
5560
      cvt2si_instruction:
5543
	mov	[extended_code],al
5561
	mov	[extended_code],al
5544
	mov	[base_code],0Fh
5562
	mov	[base_code],0Fh
5545
	lods	byte [esi]
5563
	lods	byte [esi]
5546
	call	get_size_operator
5564
	call	get_size_operator
Line 5630... Line 5648...
5630
	jmp	sse4_instruction_38
5648
	jmp	sse4_instruction_38
5631
sse4_instruction_38_imm8:
5649
sse4_instruction_38_imm8:
5632
	mov	[immediate_size],8
5650
	mov	[immediate_size],8
5633
sse4_instruction_38:
5651
sse4_instruction_38:
5634
	mov	[operand_prefix],66h
5652
	mov	[opcode_prefix],66h
5635
	mov	[base_code],0Fh
5653
	mov	[base_code],0Fh
5636
	mov	[supplemental_code],al
5654
	mov	[supplemental_code],al
5637
	mov	al,38h
5655
	mov	al,38h
5638
	jmp	sse_instruction
5656
	jmp	sse_instruction
5639
sse4_instruction_3a_imm8:
5657
sse4_instruction_3a_imm8:
5640
	mov	[immediate_size],8
5658
	mov	[immediate_size],8
5641
sse4_instruction_3a:
5659
sse4_instruction_3a:
5642
	mov	[operand_prefix],66h
5660
	mov	[opcode_prefix],66h
5643
	mov	[base_code],0Fh
5661
	mov	[base_code],0Fh
5644
	mov	[supplemental_code],al
5662
	mov	[supplemental_code],al
5645
	mov	al,3Ah
5663
	mov	al,3Ah
5646
	jmp	sse_instruction
5664
	jmp	sse_instruction
5647
 
5665
extractps_instruction:
-
 
5666
	mov	[opcode_prefix],66h
-
 
5667
	mov	[base_code],0Fh
-
 
5668
	mov	[extended_code],3Ah
-
 
5669
	mov	[supplemental_code],17h
-
 
5670
	lods	byte [esi]
-
 
5671
	call	get_size_operator
-
 
5672
	cmp	al,10h
-
 
5673
	je	extractps_reg
-
 
5674
	cmp	al,'['
-
 
5675
	jne	invalid_operand
-
 
5676
	call	get_address
-
 
5677
	cmp	[operand_size],4
-
 
5678
	je	extractps_size_ok
-
 
5679
	cmp	[operand_size],0
-
 
5680
	jne	invalid_operand_size
-
 
5681
      extractps_size_ok:
-
 
5682
	push	edx ebx ecx
-
 
5683
	mov	[operand_size],0
-
 
5684
	lods	byte [esi]
-
 
5685
	cmp	al,','
-
 
5686
	jne	invalid_operand
-
 
5687
	lods	byte [esi]
-
 
5688
	call	get_size_operator
-
 
5689
	cmp	al,10h
-
 
5690
	jne	invalid_operand
-
 
5691
	lods	byte [esi]
-
 
5692
	call	convert_mmx_register
-
 
5693
	cmp	ah,16
-
 
5694
	jne	invalid_operand_size
-
 
5695
	mov	[postbyte_register],al
-
 
5696
	pop	ecx ebx edx
-
 
5697
	jmp	mmx_imm8
-
 
5698
      extractps_reg:
-
 
5699
	lods	byte [esi]
-
 
5700
	call	convert_register
-
 
5701
	push	eax
-
 
5702
	mov	[operand_size],0
-
 
5703
	lods	byte [esi]
-
 
5704
	cmp	al,','
-
 
5705
	jne	invalid_operand
-
 
5706
	lods	byte [esi]
-
 
5707
	call	get_size_operator
-
 
5708
	cmp	al,10h
-
 
5709
	jne	invalid_operand
-
 
5710
	lods	byte [esi]
-
 
5711
	call	convert_mmx_register
-
 
5712
	cmp	ah,16
-
 
5713
	jne	invalid_operand_size
-
 
5714
	mov	[postbyte_register],al
-
 
5715
	pop	ebx
-
 
5716
	mov	al,bh
-
 
5717
	cmp	al,8
-
 
5718
	je	extractps_store
-
 
5719
	cmp	al,4
-
 
5720
	jne	invalid_operand_size
-
 
5721
      extractps_store:
-
 
5722
	call	operand_autodetect
-
 
5723
	jmp	mmx_nomem_imm8
-
 
5724
insertps_instruction:
-
 
5725
	mov	[opcode_prefix],66h
-
 
5726
	mov	[base_code],0Fh
-
 
5727
	mov	[extended_code],3Ah
-
 
5728
	mov	[supplemental_code],21h
-
 
5729
	lods	byte [esi]
-
 
5730
	call	get_size_operator
-
 
5731
	cmp	al,10h
-
 
5732
	jne	invalid_operand
-
 
5733
	lods	byte [esi]
-
 
5734
	call	convert_mmx_register
-
 
5735
	cmp	ah,16
-
 
5736
	jne	invalid_operand_size
-
 
5737
	mov	[postbyte_register],al
-
 
5738
	mov	[operand_size],0
-
 
5739
	lods	byte [esi]
-
 
5740
	cmp	al,','
-
 
5741
	jne	invalid_operand
-
 
5742
	lods	byte [esi]
-
 
5743
	call	get_size_operator
-
 
5744
	cmp	al,10h
-
 
5745
	je	insertps_reg
-
 
5746
	cmp	al,'['
-
 
5747
	jne	invalid_operand
-
 
5748
	call	get_address
-
 
5749
	cmp	[operand_size],4
-
 
5750
	je	insertps_size_ok
-
 
5751
	cmp	[operand_size],0
-
 
5752
	jne	invalid_operand_size
-
 
5753
      insertps_size_ok:
-
 
5754
	jmp	mmx_imm8
-
 
5755
      insertps_reg:
-
 
5756
	lods	byte [esi]
-
 
5757
	call	convert_mmx_register
-
 
5758
	mov	bl,al
-
 
5759
	jmp	mmx_nomem_imm8
-
 
5760
pextrq_instruction:
-
 
5761
	mov	[mmx_size],8
-
 
5762
	jmp	pextr_instruction
-
 
5763
pextrd_instruction:
-
 
5764
	mov	[mmx_size],4
-
 
5765
	jmp	pextr_instruction
-
 
5766
pextrw_instruction:
-
 
5767
	mov	[mmx_size],2
-
 
5768
	jmp	pextr_instruction
-
 
5769
pextrb_instruction:
-
 
5770
	mov	[mmx_size],1
-
 
5771
      pextr_instruction:
-
 
5772
	mov	[opcode_prefix],66h
-
 
5773
	mov	[base_code],0Fh
-
 
5774
	mov	[extended_code],3Ah
-
 
5775
	mov	[supplemental_code],al
-
 
5776
	lods	byte [esi]
-
 
5777
	call	get_size_operator
-
 
5778
	cmp	al,10h
-
 
5779
	je	pextr_reg
-
 
5780
	cmp	al,'['
-
 
5781
	jne	invalid_operand
-
 
5782
	call	get_address
-
 
5783
	mov	al,[mmx_size]
-
 
5784
	cmp	al,[operand_size]
-
 
5785
	je	pextr_size_ok
-
 
5786
	cmp	[operand_size],0
-
 
5787
	jne	invalid_operand_size
-
 
5788
      pextr_size_ok:
-
 
5789
	push	edx ebx ecx
-
 
5790
	mov	[operand_size],0
-
 
5791
	lods	byte [esi]
-
 
5792
	cmp	al,','
-
 
5793
	jne	invalid_operand
-
 
5794
	lods	byte [esi]
-
 
5795
	call	get_size_operator
-
 
5796
	cmp	al,10h
-
 
5797
	jne	invalid_operand
-
 
5798
	lods	byte [esi]
-
 
5799
	call	convert_mmx_register
-
 
5800
	cmp	ah,16
-
 
5801
	jne	invalid_operand_size
-
 
5802
	mov	[postbyte_register],al
-
 
5803
	pop	ecx ebx edx
-
 
5804
	jmp	mmx_imm8
-
 
5805
      pextr_reg:
-
 
5806
	lods	byte [esi]
-
 
5807
	call	convert_register
-
 
5808
	cmp	[mmx_size],4
-
 
5809
	ja	pextrq_reg
-
 
5810
	cmp	ah,4
-
 
5811
	je	pextr_reg_size_ok
-
 
5812
	cmp	ah,8
-
 
5813
	je	pextr_reg_size_ok
-
 
5814
      pextr_invalid_size:
-
 
5815
	jmp	invalid_operand_size
-
 
5816
      pextrq_reg:
-
 
5817
	cmp	ah,8
-
 
5818
	jne	pextr_invalid_size
-
 
5819
	call	operand_64bit
-
 
5820
      pextr_reg_size_ok:
-
 
5821
	mov	[operand_size],0
-
 
5822
	push	eax
-
 
5823
	lods	byte [esi]
-
 
5824
	cmp	al,','
-
 
5825
	jne	invalid_operand
-
 
5826
	lods	byte [esi]
-
 
5827
	call	get_size_operator
-
 
5828
	cmp	al,10h
-
 
5829
	jne	invalid_operand
-
 
5830
	lods	byte [esi]
-
 
5831
	call	convert_mmx_register
-
 
5832
	mov	ebx,eax
-
 
5833
	pop	eax
-
 
5834
	mov	[postbyte_register],al
-
 
5835
	mov	al,ah
-
 
5836
	cmp	[mmx_size],2
-
 
5837
	jne	pextr_reg_store
-
 
5838
	mov	[opcode_prefix],0
-
 
5839
	mov	[extended_code],0C5h
-
 
5840
	call	make_mmx_prefix
-
 
5841
	jmp	mmx_nomem_imm8
-
 
5842
      pextr_reg_store:
-
 
5843
	cmp	bh,16
-
 
5844
	jne	invalid_operand_size
-
 
5845
	xchg	bl,[postbyte_register]
-
 
5846
	call	operand_autodetect
-
 
5847
	jmp	mmx_nomem_imm8
-
 
5848
pinsrb_instruction:
-
 
5849
	mov	[mmx_size],1
-
 
5850
	jmp	pinsr_instruction
-
 
5851
pinsrd_instruction:
-
 
5852
	mov	[mmx_size],4
-
 
5853
	jmp	pinsr_instruction
-
 
5854
pinsrq_instruction:
-
 
5855
	mov	[mmx_size],8
-
 
5856
	jmp	pinsr_instruction
-
 
5857
      pinsr_instruction:
-
 
5858
	mov	[opcode_prefix],66h
-
 
5859
	mov	[base_code],0Fh
-
 
5860
	mov	[extended_code],3Ah
-
 
5861
	mov	[supplemental_code],al
-
 
5862
	lods	byte [esi]
-
 
5863
	call	get_size_operator
-
 
5864
	cmp	al,10h
-
 
5865
	jne	invalid_operand
-
 
5866
	lods	byte [esi]
-
 
5867
	call	convert_mmx_register
-
 
5868
	cmp	ah,16
-
 
5869
	jne	invalid_operand_size
-
 
5870
	mov	[postbyte_register],al
-
 
5871
	mov	[operand_size],0
-
 
5872
	lods	byte [esi]
-
 
5873
	cmp	al,','
-
 
5874
	jne	invalid_operand
-
 
5875
	lods	byte [esi]
-
 
5876
	call	get_size_operator
-
 
5877
	cmp	al,10h
-
 
5878
	je	pinsr_xmmreg_reg
-
 
5879
	cmp	al,'['
-
 
5880
	jne	invalid_operand
-
 
5881
	call	get_address
-
 
5882
	cmp	[operand_size],0
-
 
5883
	je	mmx_imm8
-
 
5884
	mov	al,[mmx_size]
-
 
5885
	cmp	al,[operand_size]
-
 
5886
	je	mmx_imm8
-
 
5887
	jmp	invalid_operand_size
-
 
5888
      pinsr_xmmreg_reg:
-
 
5889
	lods	byte [esi]
-
 
5890
	call	convert_register
-
 
5891
	mov	bl,al
-
 
5892
	cmp	[mmx_size],8
-
 
5893
	je	pinsrq_xmmreg_reg
-
 
5894
	cmp	ah,4
-
 
5895
	je	mmx_nomem_imm8
-
 
5896
	jmp	invalid_operand_size
-
 
5897
      pinsrq_xmmreg_reg:
-
 
5898
	cmp	ah,8
-
 
5899
	je	mmx_nomem_imm8
-
 
5900
	jmp	invalid_operand_size
-
 
5901
pmovsxbw_instruction:
-
 
5902
	mov	[mmx_size],8
-
 
5903
	jmp	pmovsx_instruction
-
 
5904
pmovsxbd_instruction:
-
 
5905
	mov	[mmx_size],4
-
 
5906
	jmp	pmovsx_instruction
-
 
5907
pmovsxbq_instruction:
-
 
5908
	mov	[mmx_size],2
-
 
5909
	jmp	pmovsx_instruction
-
 
5910
pmovsxwd_instruction:
-
 
5911
	mov	[mmx_size],8
-
 
5912
	jmp	pmovsx_instruction
-
 
5913
pmovsxwq_instruction:
-
 
5914
	mov	[mmx_size],4
-
 
5915
	jmp	pmovsx_instruction
-
 
5916
pmovsxdq_instruction:
-
 
5917
	mov	[mmx_size],8
-
 
5918
      pmovsx_instruction:
-
 
5919
	mov	[opcode_prefix],66h
-
 
5920
	mov	[base_code],0Fh
-
 
5921
	mov	[extended_code],38h
-
 
5922
	mov	[supplemental_code],al
-
 
5923
	lods	byte [esi]
-
 
5924
	call	get_size_operator
-
 
5925
	cmp	al,10h
-
 
5926
	jne	invalid_operand
-
 
5927
	lods	byte [esi]
-
 
5928
	call	convert_mmx_register
-
 
5929
	cmp	ah,16
-
 
5930
	jne	invalid_operand_size
-
 
5931
	mov	[postbyte_register],al
-
 
5932
	lods	byte [esi]
-
 
5933
	cmp	al,','
-
 
5934
	jne	invalid_operand
-
 
5935
	mov	[operand_size],0
-
 
5936
	lods	byte [esi]
-
 
5937
	call	get_size_operator
-
 
5938
	cmp	al,10h
-
 
5939
	je	pmovsx_xmmreg_reg
-
 
5940
	cmp	al,'['
-
 
5941
	jne	invalid_operand
-
 
5942
	call	get_address
-
 
5943
	cmp	[operand_size],0
-
 
5944
	je	mmx_imm8
-
 
5945
	mov	al,[mmx_size]
-
 
5946
	cmp	al,[operand_size]
-
 
5947
	jne	invalid_operand_size
-
 
5948
	call	store_instruction
-
 
5949
	jmp	instruction_assembled
-
 
5950
      pmovsx_xmmreg_reg:
-
 
5951
	lods	byte [esi]
-
 
5952
	call	convert_mmx_register
-
 
5953
	cmp	ah,16
-
 
5954
	jne	invalid_operand_size
-
 
5955
	mov	bl,al
-
 
5956
	call	store_nomem_instruction
-
 
5957
	jmp	instruction_assembled
-
 
5958
 
Line 5648... Line 5959...
5648
fxsave_instruction:
5959
fxsave_instruction:
5649
	mov	[extended_code],0AEh
5960
	mov	[extended_code],0AEh
5650
	mov	[base_code],0Fh
5961
	mov	[base_code],0Fh
5651
	mov	[postbyte_register],al
5962
	mov	[postbyte_register],al
Line 5710... Line 6021...
5710
movntps_instruction:
6021
movntps_instruction:
5711
	mov	[mmx_size],16
6022
	mov	[mmx_size],16
5712
	jmp	movnt_instruction
6023
	jmp	movnt_instruction
5713
movntdq_instruction:
6024
movntdq_instruction:
5714
	mov	[operand_prefix],66h
6025
	mov	[opcode_prefix],66h
5715
	mov	[mmx_size],16
6026
	mov	[mmx_size],16
5716
      movnt_instruction:
6027
      movnt_instruction:
5717
	mov	[extended_code],al
6028
	mov	[extended_code],al
5718
	mov	[base_code],0Fh
6029
	mov	[base_code],0Fh
5719
	lods	byte [esi]
6030
	lods	byte [esi]
5720
	call	get_size_operator
6031
	call	get_size_operator
Line 5734... Line 6045...
5734
	jne	invalid_operand_size
6045
	jne	invalid_operand_size
5735
	mov	[postbyte_register],al
6046
	mov	[postbyte_register],al
5736
	call	store_instruction
6047
	call	store_instruction
5737
	jmp	instruction_assembled
6048
	jmp	instruction_assembled
5738
movnti_instruction:
6049
 
-
 
6050
movntsd_instruction:
-
 
6051
	mov	[opcode_prefix],0F2h
-
 
6052
	mov	[mmx_size],8
-
 
6053
	jmp	movnts_instruction
-
 
6054
movntss_instruction:
-
 
6055
	mov	[opcode_prefix],0F3h
-
 
6056
	mov	[mmx_size],4
-
 
6057
      movnts_instruction:
-
 
6058
	mov	[extended_code],al
-
 
6059
	mov	[base_code],0Fh
-
 
6060
	lods	byte [esi]
-
 
6061
	call	get_size_operator
-
 
6062
	cmp	al,'['
-
 
6063
	jne	invalid_operand
-
 
6064
	call	get_address
-
 
6065
	mov	al,[operand_size]
-
 
6066
	cmp	al,[mmx_size]
-
 
6067
	je	movnts_size_ok
-
 
6068
	test	al,al
-
 
6069
	jnz	invalid_operand_size
-
 
6070
      movnts_size_ok:
-
 
6071
	lods	byte [esi]
-
 
6072
	cmp	al,','
-
 
6073
	jne	invalid_operand
-
 
6074
	mov	[operand_size],0
-
 
6075
	lods	byte [esi]
-
 
6076
	call	get_size_operator
-
 
6077
	cmp	al,10h
-
 
6078
	jne	invalid_operand
-
 
6079
	lods	byte [esi]
-
 
6080
	call	convert_mmx_register
-
 
6081
	cmp	ah,16
-
 
6082
	jne	invalid_operand_size
-
 
6083
	mov	[postbyte_register],al
-
 
6084
	call	store_instruction
-
 
6085
	jmp	instruction_assembled
-
 
6086
 
-
 
6087
movnti_instruction:
5739
	mov	[base_code],0Fh
6088
	mov	[base_code],0Fh
5740
	mov	[extended_code],al
6089
	mov	[extended_code],al
5741
	lods	byte [esi]
6090
	lods	byte [esi]
5742
	call	get_size_operator
6091
	call	get_size_operator
5743
	cmp	al,'['
6092
	cmp	al,'['
Line 5800... Line 6149...
5800
	stos	word [edi]
6149
	stos	word [edi]
5801
	mov	al,[postbyte_register]
6150
	mov	al,[postbyte_register]
5802
	stos	byte [edi]
6151
	stos	byte [edi]
5803
	jmp	instruction_assembled
6152
	jmp	instruction_assembled
5804
 
6153
movntdqa_instruction:
-
 
6154
	mov	[opcode_prefix],66h
-
 
6155
	mov	[base_code],0Fh
-
 
6156
	mov	[extended_code],38h
-
 
6157
	mov	[supplemental_code],2Ah
-
 
6158
	lods	byte [esi]
-
 
6159
	call	get_size_operator
-
 
6160
	cmp	al,10h
-
 
6161
	jne	invalid_operand
-
 
6162
	lods	byte [esi]
-
 
6163
	call	convert_mmx_register
-
 
6164
	cmp	ah,16
-
 
6165
	jne	invalid_operand_size
-
 
6166
	mov	[postbyte_register],al
-
 
6167
	lods	byte [esi]
-
 
6168
	cmp	al,','
-
 
6169
	jne	invalid_operand
-
 
6170
	lods	byte [esi]
-
 
6171
	call	get_size_operator
-
 
6172
	cmp	al,'['
-
 
6173
	jne	invalid_operand
-
 
6174
	call	get_address
-
 
6175
	call	store_instruction
-
 
6176
	jmp	instruction_assembled
-
 
6177
 
-
 
6178
extrq_instruction:
-
 
6179
	mov	[opcode_prefix],66h
-
 
6180
	mov	[base_code],0Fh
-
 
6181
	mov	[extended_code],78h
-
 
6182
	lods	byte [esi]
-
 
6183
	call	get_size_operator
-
 
6184
	cmp	al,10h
-
 
6185
	jne	invalid_operand
-
 
6186
	lods	byte [esi]
-
 
6187
	call	convert_mmx_register
-
 
6188
	cmp	ah,16
-
 
6189
	jne	invalid_operand_size
-
 
6190
	mov	[postbyte_register],al
-
 
6191
	mov	[operand_size],0
-
 
6192
	lods	byte [esi]
-
 
6193
	cmp	al,','
-
 
6194
	jne	invalid_operand
-
 
6195
	lods	byte [esi]
-
 
6196
	call	get_size_operator
-
 
6197
	cmp	al,10h
-
 
6198
	je	extrq_xmmreg_xmmreg
-
 
6199
	test	ah,not 1
-
 
6200
	jnz	invalid_operand_size
-
 
6201
	cmp	al,'('
-
 
6202
	jne	invalid_operand
-
 
6203
	xor	bl,bl
-
 
6204
	call	store_nomem_instruction
-
 
6205
	call	get_byte_value
-
 
6206
	stosb
-
 
6207
	call	append_imm8
-
 
6208
	jmp	instruction_assembled
-
 
6209
      extrq_xmmreg_xmmreg:
-
 
6210
	inc	[extended_code]
-
 
6211
	lods	byte [esi]
-
 
6212
	call	convert_mmx_register
-
 
6213
	cmp	ah,16
-
 
6214
	jne	invalid_operand_size
-
 
6215
	mov	bl,al
-
 
6216
	call	store_nomem_instruction
-
 
6217
	jmp	instruction_assembled
-
 
6218
insertq_instruction:
-
 
6219
	mov	[opcode_prefix],0F2h
-
 
6220
	mov	[base_code],0Fh
-
 
6221
	mov	[extended_code],78h
-
 
6222
	lods	byte [esi]
-
 
6223
	call	get_size_operator
-
 
6224
	cmp	al,10h
-
 
6225
	jne	invalid_operand
-
 
6226
	lods	byte [esi]
-
 
6227
	call	convert_mmx_register
-
 
6228
	cmp	ah,16
-
 
6229
	jne	invalid_operand_size
-
 
6230
	mov	[postbyte_register],al
-
 
6231
	mov	[operand_size],0
-
 
6232
	lods	byte [esi]
-
 
6233
	cmp	al,','
-
 
6234
	jne	invalid_operand
-
 
6235
	lods	byte [esi]
-
 
6236
	call	get_size_operator
-
 
6237
	cmp	al,10h
-
 
6238
	jne	invalid_operand
-
 
6239
	lods	byte [esi]
-
 
6240
	call	convert_mmx_register
-
 
6241
	cmp	ah,16
-
 
6242
	jne	invalid_operand_size
-
 
6243
	mov	bl,al
-
 
6244
	cmp	byte [esi],','
-
 
6245
	je	insertq_with_imm
-
 
6246
	inc	[extended_code]
-
 
6247
	call	store_nomem_instruction
-
 
6248
	jmp	instruction_assembled
-
 
6249
      insertq_with_imm:
-
 
6250
	call	store_nomem_instruction
-
 
6251
	call	append_imm8
-
 
6252
	call	append_imm8
-
 
6253
	jmp	instruction_assembled
-
 
6254
 
-
 
6255
crc32_instruction:
-
 
6256
	mov	[opcode_prefix],0F2h
-
 
6257
	mov	[base_code],0Fh
-
 
6258
	mov	[extended_code],38h
-
 
6259
	mov	[supplemental_code],0F0h
-
 
6260
	lods	byte [esi]
-
 
6261
	call	get_size_operator
-
 
6262
	cmp	al,10h
-
 
6263
	jne	invalid_operand
-
 
6264
	lods	byte [esi]
-
 
6265
	call	convert_register
-
 
6266
	mov	[postbyte_register],al
-
 
6267
	cmp	ah,8
-
 
6268
	je	crc32_reg64
-
 
6269
	cmp	ah,4
-
 
6270
	jne	invalid_operand
-
 
6271
	lods	byte [esi]
-
 
6272
	cmp	al,','
-
 
6273
	jne	invalid_operand
-
 
6274
	mov	[operand_size],0
-
 
6275
	lods	byte [esi]
-
 
6276
	call	get_size_operator
-
 
6277
	cmp	al,10h
-
 
6278
	je	crc32_reg32_reg
-
 
6279
	cmp	al,'['
-
 
6280
	jne	invalid_operand
-
 
6281
	call	get_address
-
 
6282
	mov	al,[operand_size]
-
 
6283
	test	al,al
-
 
6284
	jz	crc32_unknown_size
-
 
6285
	cmp	al,1
-
 
6286
	je	crc32_reg32_mem_store
-
 
6287
	cmp	al,4
-
 
6288
	ja	invalid_operand_size
-
 
6289
	inc	[supplemental_code]
-
 
6290
	call	operand_autodetect
-
 
6291
      crc32_reg32_mem_store:
-
 
6292
	call	store_instruction
-
 
6293
	jmp	instruction_assembled
-
 
6294
      crc32_unknown_size:
-
 
6295
	cmp	[error_line],0
-
 
6296
	jne	crc32_reg32_mem_store
-
 
6297
	mov	eax,[current_line]
-
 
6298
	mov	[error_line],eax
-
 
6299
	mov	[error],operand_size_not_specified
-
 
6300
	jmp	crc32_reg32_mem_store
-
 
6301
      crc32_reg32_reg:
-
 
6302
	lods	byte [esi]
-
 
6303
	call	convert_register
-
 
6304
	mov	bl,al
-
 
6305
	mov	al,ah
-
 
6306
	cmp	al,1
-
 
6307
	je	crc32_reg32_reg_store
-
 
6308
	cmp	al,4
-
 
6309
	ja	invalid_operand_size
-
 
6310
	inc	[supplemental_code]
-
 
6311
	call	operand_autodetect
-
 
6312
      crc32_reg32_reg_store:
-
 
6313
	call	store_nomem_instruction
-
 
6314
	jmp	instruction_assembled
-
 
6315
      crc32_reg64:
-
 
6316
	lods	byte [esi]
-
 
6317
	cmp	al,','
-
 
6318
	jne	invalid_operand
-
 
6319
	mov	[operand_size],0
-
 
6320
	lods	byte [esi]
-
 
6321
	call	get_size_operator
-
 
6322
	cmp	al,10h
-
 
6323
	je	crc32_reg64_reg
-
 
6324
	cmp	al,'['
-
 
6325
	jne	invalid_operand
-
 
6326
	call	get_address
-
 
6327
	mov	ah,[operand_size]
-
 
6328
	mov	al,8
-
 
6329
	test	ah,ah
-
 
6330
	jz	crc32_unknown_size
-
 
6331
	cmp	ah,1
-
 
6332
	je	crc32_reg32_mem_store
-
 
6333
	cmp	ah,al
-
 
6334
	jne	invalid_operand_size
-
 
6335
	inc	[supplemental_code]
-
 
6336
	jmp	crc32_reg32_mem_store
-
 
6337
      crc32_reg64_reg:
-
 
6338
	lods	byte [esi]
-
 
6339
	call	convert_register
-
 
6340
	mov	bl,al
-
 
6341
	mov	al,8
-
 
6342
	cmp	ah,1
-
 
6343
	je	crc32_reg32_reg_store
-
 
6344
	cmp	ah,al
-
 
6345
	jne	invalid_operand_size
-
 
6346
	inc	[supplemental_code]
-
 
6347
	jmp	crc32_reg32_reg_store
-
 
6348
popcnt_instruction:
-
 
6349
	mov	[opcode_prefix],0F3h
-
 
6350
	jmp	bs_instruction
-
 
6351
 
Line 5805... Line 6352...
5805
simple_vmx_instruction:
6352
simple_vmx_instruction:
5806
	mov	ah,al
6353
	mov	ah,al
5807
	mov	al,0Fh
6354
	mov	al,0Fh
5808
	stos	byte [edi]
6355
	stos	byte [edi]
5809
	mov	al,1
6356
	mov	al,1
5810
	stos	word [edi]
6357
	stos	word [edi]
5811
	jmp	instruction_assembled
6358
	jmp	instruction_assembled
5812
vmclear_instruction:
6359
vmclear_instruction:
5813
	mov	[operand_prefix],66h
6360
	mov	[opcode_prefix],66h
5814
	jmp	vmx_instruction
6361
	jmp	vmx_instruction
5815
vmxon_instruction:
6362
vmxon_instruction:
5816
	mov	[operand_prefix],0F3h
6363
	mov	[opcode_prefix],0F3h
5817
vmx_instruction:
6364
vmx_instruction:
5818
	mov	[postbyte_register],al
6365
	mov	[postbyte_register],al
5819
	mov	[extended_code],0C7h
6366
	mov	[extended_code],0C7h
5820
	lods	byte [esi]
6367
	lods	byte [esi]
5821
	call	get_size_operator
6368
	call	get_size_operator
Line 6208... Line 6755...
6208
	or	al,al
6755
	or	al,al
6209
	jz	operand_prefix_ok
6756
	jz	operand_prefix_ok
6210
	stos	byte [edi]
6757
	stos	byte [edi]
6211
      operand_prefix_ok:
6758
      operand_prefix_ok:
6212
	mov	al,[rex_prefix]
6759
	mov	al,[opcode_prefix]
-
 
6760
	or	al,al
-
 
6761
	jz	opcode_prefix_ok
-
 
6762
	stos	byte [edi]
-
 
6763
      opcode_prefix_ok:
-
 
6764
	mov	al,[rex_prefix]
6213
	test	al,40h
6765
	test	al,40h
6214
	jz	rex_prefix_ok
6766
	jz	rex_prefix_ok
6215
	cmp	[code_type],64
6767
	cmp	[code_type],64
6216
	jne	invalid_operand
6768
	jne	invalid_operand
6217
	test	al,0B0h
6769
	test	al,0B0h