Subversion Repositories Kolibri OS

Rev

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

Rev 1342 Rev 2287
Line 1... Line 1...
1
; flat assembler core
1
; flat assembler core
2
; Copyright (c) 1999-2009, Tomasz Grysztar.
2
; Copyright (c) 1999-2011, 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 32... Line 32...
32
	cmp	[code_type],16
32
	cmp	[code_type],16
33
	je	size_prefix
33
	je	size_prefix
34
	stos	byte [edi]
34
	stos	byte [edi]
35
	jmp	instruction_assembled
35
	jmp	instruction_assembled
36
simple_instruction_64bit:
36
iret_instruction:
-
 
37
	cmp	[code_type],64
-
 
38
	jne	simple_instruction
-
 
39
simple_instruction_64bit:
37
	cmp	[code_type],64
40
	cmp	[code_type],64
38
	jne	illegal_instruction
41
	jne	illegal_instruction
39
	mov	ah,al
42
	mov	ah,al
40
	mov	al,48h
43
	mov	al,48h
41
	stos	word [edi]
44
	stos	word [edi]
Line 71... Line 74...
71
	ja	invalid_operand_size
74
	ja	invalid_operand_size
72
	cmp	al,'('
75
	cmp	al,'('
73
	jne	invalid_operand
76
	jne	invalid_operand
74
	call	get_byte_value
77
	call	get_byte_value
75
	mov	ah,al
78
	cmp	[next_pass_needed],0
-
 
79
	jne	int_imm_ok
-
 
80
	test	eax,eax
-
 
81
	js	value_out_of_range
-
 
82
      int_imm_ok:
-
 
83
	mov	ah,al
76
	mov	al,0CDh
84
	mov	al,0CDh
77
	stos	word [edi]
85
	stos	word [edi]
78
	jmp	instruction_assembled
86
	jmp	instruction_assembled
79
iret_instruction:
87
aa_instruction:
80
	cmp	[code_type],64
-
 
81
	jne	simple_instruction
-
 
82
	call	operand_64bit
-
 
83
	jmp	simple_instruction
-
 
84
aa_instruction:
-
 
85
	cmp	[code_type],64
88
	cmp	[code_type],64
86
	je	illegal_instruction
89
	je	illegal_instruction
87
	push	eax
90
	push	eax
88
	mov	bl,10
91
	mov	bl,10
89
	cmp	byte [esi],'('
92
	cmp	byte [esi],'('
Line 1822... Line 1825...
1822
	cmp	[next_pass_needed],0
1825
	cmp	[next_pass_needed],0
1823
	jne	enter_imm16_ok
1826
	jne	enter_imm16_ok
1824
	cmp	[value_type],0
1827
	cmp	[value_type],0
1825
	jne	invalid_use_of_symbol
1828
	jne	invalid_use_of_symbol
1826
      enter_imm16_ok:
1829
	test	eax,eax
-
 
1830
	js	value_out_of_range
-
 
1831
      enter_imm16_ok:
1827
	push	eax
1832
	push	eax
1828
	mov	[operand_size],0
1833
	mov	[operand_size],0
1829
	lods	byte [esi]
1834
	lods	byte [esi]
1830
	cmp	al,','
1835
	cmp	al,','
1831
	jne	invalid_operand
1836
	jne	invalid_operand
Line 1838... Line 1843...
1838
      enter_imm8_size_ok:
1843
      enter_imm8_size_ok:
1839
	cmp	al,'('
1844
	cmp	al,'('
1840
	jne	invalid_operand
1845
	jne	invalid_operand
1841
	call	get_byte_value
1846
	call	get_byte_value
1842
	mov	dl,al
1847
	cmp	[next_pass_needed],0
-
 
1848
	jne	enter_imm8_ok
-
 
1849
	test	eax,eax
-
 
1850
	js	value_out_of_range
-
 
1851
      enter_imm8_ok:
-
 
1852
	mov	dl,al
1843
	pop	ebx
1853
	pop	ebx
1844
	mov	al,0C8h
1854
	mov	al,0C8h
1845
	stos	byte [edi]
1855
	stos	byte [edi]
1846
	mov	ax,bx
1856
	mov	ax,bx
1847
	stos	word [edi]
1857
	stos	word [edi]
Line 1888... Line 1898...
1888
	cmp	[next_pass_needed],0
1898
	cmp	[next_pass_needed],0
1889
	jne	ret_imm_ok
1899
	jne	ret_imm_ok
1890
	cmp	[value_type],0
1900
	cmp	[value_type],0
1891
	jne	invalid_use_of_symbol
1901
	jne	invalid_use_of_symbol
1892
      ret_imm_ok:
1902
	test	eax,eax
-
 
1903
	js	value_out_of_range
-
 
1904
      ret_imm_ok:
1893
	cmp	[size_declared],0
1905
	cmp	[size_declared],0
1894
	jne	ret_imm_store
1906
	jne	ret_imm_store
1895
	or	ax,ax
1907
	or	ax,ax
1896
	jz	simple_ret
1908
	jz	simple_ret
1897
      ret_imm_store:
1909
      ret_imm_store:
Line 3168... Line 3180...
3168
	jc	conditional_jump_short
3180
	jc	conditional_jump_short
3169
      conditional_jump_32bit_store:
3181
      conditional_jump_32bit_store:
3170
	mov	edx,eax
3182
	mov	edx,eax
3171
	sub	edx,4
3183
	sub	edx,4
3172
	mov	ah,[base_code]
3184
	jno	conditional_jump_32bit_range_ok
-
 
3185
	cmp	[code_type],64
-
 
3186
	je	relative_jump_out_of_range
-
 
3187
      conditional_jump_32bit_range_ok:
-
 
3188
	mov	ah,[base_code]
3173
	add	ah,10h
3189
	add	ah,10h
3174
	mov	al,0Fh
3190
	mov	al,0Fh
3175
	stos	word [edi]
3191
	stos	word [edi]
3176
	mov	eax,edx
3192
	mov	eax,edx
3177
	call	mark_relocation
3193
	call	mark_relocation
Line 3207... Line 3223...
3207
	jc	conditional_jump_short
3223
	jc	conditional_jump_short
3208
	cmp	[value_type],0
3224
	cmp	[value_type],0
3209
	jne	invalid_use_of_symbol
3225
	jne	invalid_use_of_symbol
3210
	mov	edx,eax
3226
	mov	edx,eax
3211
	sub	edx,2
3227
	sub	dx,2
3212
	mov	ah,[base_code]
3228
	mov	ah,[base_code]
3213
	add	ah,10h
3229
	add	ah,10h
3214
	mov	al,0Fh
3230
	mov	al,0Fh
3215
	stos	word [edi]
3231
	stos	word [edi]
3216
	mov	eax,edx
3232
	mov	eax,edx
3217
	stos	word [edi]
3233
	stos	word [edi]
Line 3269... Line 3285...
3269
	cdq
3285
	cdq
3270
      make_loop_jump:
3286
      make_loop_jump:
3271
	call	check_for_short_jump
3287
	call	check_for_short_jump
3272
	jc	conditional_jump_short
3288
	jc	conditional_jump_short
3273
	jmp	jump_out_of_range
3289
	scas	word [edi]
-
 
3290
	jmp	jump_out_of_range
3274
      loop_counter_size:
3291
      loop_counter_size:
3275
	cmp	[operand_prefix],0
3292
	cmp	[operand_prefix],0
3276
	je	loop_counter_size_ok
3293
	je	loop_counter_size_ok
3277
	push	eax
3294
	push	eax
3278
	mov	al,[operand_prefix]
3295
	mov	al,[operand_prefix]
Line 3747... Line 3764...
3747
	jne	invalid_operand
3764
	jne	invalid_operand
3748
	call	get_address
3765
	call	get_address
3749
	jmp	instruction_ready
3766
	jmp	instruction_ready
3750
swapgs_instruction:
3767
swapgs_instruction:
3751
	mov	[base_code],0Fh
3768
	cmp	[code_type],64
-
 
3769
	jne	illegal_instruction
-
 
3770
rdtscp_instruction:
-
 
3771
	mov	[base_code],0Fh
3752
	mov	[extended_code],1
3772
	mov	[extended_code],1
3753
	mov	[postbyte_register],7
3773
	mov	[postbyte_register],7
3754
	mov	bl,al
3774
	mov	bl,al
3755
	jmp	nomem_instruction_ready
3775
	jmp	nomem_instruction_ready
3756
 
3776
 
Line 4344... Line 4364...
4344
	lods	byte [esi]
4364
	lods	byte [esi]
4345
	call	convert_mmx_register
4365
	call	convert_mmx_register
4346
	mov	bl,al
4366
	mov	bl,al
4347
	jmp	nomem_instruction_ready
4367
	jmp	nomem_instruction_ready
4348
mmx_ps_instruction:
4368
mmx_bit_shift_instruction:
4349
	mov	[base_code],0Fh
4369
	mov	[base_code],0Fh
4350
	mov	[extended_code],al
4370
	mov	[extended_code],al
4351
	lods	byte [esi]
4371
	lods	byte [esi]
4352
	call	get_size_operator
4372
	call	get_size_operator
4353
	cmp	al,10h
4373
	cmp	al,10h
4354
	jne	invalid_operand
4374
	jne	invalid_operand
Line 4420... Line 4440...
4420
	je	mmx_nomem_imm8
4440
	je	mmx_nomem_imm8
4421
	jmp	nomem_instruction_ready
4441
	jmp	nomem_instruction_ready
4422
      mmx_imm8:
4442
      mmx_imm8:
4423
	push	ebx ecx edx
4443
	push	ebx ecx edx
4424
	mov	[operand_size],0
4444
	xor	cl,cl
-
 
4445
	xchg	cl,[operand_size]
4425
	lods	byte [esi]
4446
	lods	byte [esi]
4426
	cmp	al,','
4447
	cmp	al,','
4427
	jne	invalid_operand
4448
	jne	invalid_operand
4428
	lods	byte [esi]
4449
	lods	byte [esi]
4429
	call	get_size_operator
4450
	call	get_size_operator
4430
	test	ah,not 1
4451
	test	ah,not 1
4431
	jnz	invalid_operand_size
4452
	jnz	invalid_operand_size
4432
	cmp	al,'('
4453
	mov	[operand_size],cl
-
 
4454
	cmp	al,'('
4433
	jne	invalid_operand
4455
	jne	invalid_operand
4434
	call	get_byte_value
4456
	call	get_byte_value
4435
	mov	byte [value],al
4457
	mov	byte [value],al
4436
	pop	edx ecx ebx
4458
	pop	edx ecx ebx
4437
	call	store_instruction_with_imm8
4459
	call	store_instruction_with_imm8
Line 4595... Line 4617...
4595
	jne	invalid_operand_size
4617
	jne	invalid_operand_size
4596
	mov	bl,al
4618
	mov	bl,al
4597
	jmp	nomem_instruction_ready
4619
	jmp	nomem_instruction_ready
4598
      make_mmx_prefix:
4620
      make_mmx_prefix:
4599
	cmp	[operand_size],16
4621
	cmp	[vex_required],0
-
 
4622
	jne	mmx_prefix_for_vex
-
 
4623
	cmp	[operand_size],16
4600
	jne	no_mmx_prefix
4624
	jne	no_mmx_prefix
4601
	mov	[operand_prefix],66h
4625
	mov	[operand_prefix],66h
4602
      no_mmx_prefix:
4626
      no_mmx_prefix:
4603
	ret
4627
	ret
4604
movq_instruction:
4628
      mmx_prefix_for_vex:
-
 
4629
	cmp	[operand_size],16
-
 
4630
	jne	invalid_operand
-
 
4631
	mov	[opcode_prefix],66h
-
 
4632
	ret
-
 
4633
movq_instruction:
4605
	mov	[base_code],0Fh
4634
	mov	[base_code],0Fh
4606
	lods	byte [esi]
4635
	lods	byte [esi]
4607
	call	get_size_operator
4636
	call	get_size_operator
4608
	cmp	al,10h
4637
	cmp	al,10h
4609
	je	movq_reg
4638
	je	movq_reg
Line 4716... Line 4745...
4716
	call	get_size_operator
4745
	call	get_size_operator
4717
	cmp	al,10h
4746
	cmp	al,10h
4718
	jne	invalid_operand
4747
	jne	invalid_operand
4719
	lods	byte [esi]
4748
	lods	byte [esi]
4720
	call	convert_mmx_register
4749
	call	convert_xmm_register
4721
	cmp	ah,16
4750
	mov	[postbyte_register],al
4722
	jne	invalid_operand_size
-
 
4723
	mov	[postbyte_register],al
-
 
4724
	mov	[extended_code],7Fh
4751
	mov	[extended_code],7Fh
4725
	jmp	instruction_ready
4752
	jmp	instruction_ready
4726
      movdq_mmreg:
4753
      movdq_mmreg:
4727
	lods	byte [esi]
4754
	lods	byte [esi]
4728
	call	convert_mmx_register
4755
	call	convert_xmm_register
4729
	cmp	ah,16
4756
	mov	[postbyte_register],al
4730
	jne	invalid_operand_size
-
 
4731
	mov	[postbyte_register],al
-
 
4732
	lods	byte [esi]
4757
	lods	byte [esi]
4733
	cmp	al,','
4758
	cmp	al,','
4734
	jne	invalid_operand
4759
	jne	invalid_operand
4735
	lods	byte [esi]
4760
	lods	byte [esi]
4736
	call	get_size_operator
4761
	call	get_size_operator
Line 4741... Line 4766...
4741
	call	get_address
4766
	call	get_address
4742
	jmp	instruction_ready
4767
	jmp	instruction_ready
4743
      movdq_mmreg_mmreg:
4768
      movdq_mmreg_mmreg:
4744
	lods	byte [esi]
4769
	lods	byte [esi]
4745
	call	convert_mmx_register
4770
	call	convert_xmm_register
4746
	cmp	ah,16
4771
	mov	bl,al
4747
	jne	invalid_operand_size
-
 
4748
	mov	bl,al
-
 
4749
	jmp	nomem_instruction_ready
4772
	jmp	nomem_instruction_ready
4750
lddqu_instruction:
4773
lddqu_instruction:
4751
	lods	byte [esi]
4774
	lods	byte [esi]
4752
	call	get_size_operator
4775
	call	get_size_operator
4753
	cmp	al,10h
4776
	cmp	al,10h
4754
	jne	invalid_operand
4777
	jne	invalid_operand
4755
	lods	byte [esi]
4778
	lods	byte [esi]
4756
	call	convert_mmx_register
4779
	call	convert_xmm_register
4757
	cmp	ah,16
4780
	push	eax
4758
	jne	invalid_operand_size
-
 
4759
	push	eax
-
 
4760
	lods	byte [esi]
4781
	lods	byte [esi]
4761
	cmp	al,','
4782
	cmp	al,','
4762
	jne	invalid_operand
4783
	jne	invalid_operand
4763
	lods	byte [esi]
4784
	lods	byte [esi]
4764
	call	get_size_operator
4785
	call	get_size_operator
Line 4770... Line 4791...
4770
	mov	[opcode_prefix],0F2h
4791
	mov	[opcode_prefix],0F2h
4771
	mov	[base_code],0Fh
4792
	mov	[base_code],0Fh
4772
	mov	[extended_code],0F0h
4793
	mov	[extended_code],0F0h
4773
	jmp	instruction_ready
4794
	jmp	instruction_ready
4774
movq2dq_instruction:
4795
 
-
 
4796
movdq2q_instruction:
-
 
4797
	mov	[opcode_prefix],0F2h
-
 
4798
	mov	[mmx_size],8
-
 
4799
	jmp	movq2dq_
-
 
4800
movq2dq_instruction:
4775
	lods	byte [esi]
4801
	mov	[opcode_prefix],0F3h
4776
	call	get_size_operator
-
 
4777
	cmp	al,10h
-
 
4778
	jne	invalid_operand
-
 
4779
	lods	byte [esi]
-
 
4780
	call	convert_mmx_register
-
 
4781
	cmp	ah,16
-
 
4782
	jne	invalid_operand_size
-
 
4783
	mov	[postbyte_register],al
-
 
4784
	mov	[operand_size],0
-
 
4785
	lods	byte [esi]
-
 
4786
	cmp	al,','
-
 
4787
	jne	invalid_operand
-
 
4788
	lods	byte [esi]
-
 
4789
	call	get_size_operator
-
 
4790
	cmp	al,10h
-
 
4791
	jne	invalid_operand
-
 
4792
	lods	byte [esi]
-
 
4793
	call	convert_mmx_register
-
 
4794
	cmp	ah,8
-
 
4795
	jne	invalid_operand_size
-
 
4796
	mov	bl,al
-
 
4797
	mov	[opcode_prefix],0F3h
-
 
4798
	mov	[base_code],0Fh
4802
	mov	[mmx_size],16
4799
	mov	[extended_code],0D6h
4803
      movq2dq_:
4800
	jmp	nomem_instruction_ready
-
 
4801
movdq2q_instruction:
-
 
4802
	lods	byte [esi]
4804
	lods	byte [esi]
4803
	call	get_size_operator
4805
	call	get_size_operator
4804
	cmp	al,10h
4806
	cmp	al,10h
4805
	jne	invalid_operand
4807
	jne	invalid_operand
4806
	lods	byte [esi]
4808
	lods	byte [esi]
4807
	call	convert_mmx_register
4809
	call	convert_mmx_register
4808
	cmp	ah,8
4810
	cmp	ah,[mmx_size]
4809
	jne	invalid_operand_size
4811
	jne	invalid_operand_size
4810
	mov	[postbyte_register],al
4812
	mov	[postbyte_register],al
4811
	mov	[operand_size],0
4813
	mov	[operand_size],0
4812
	lods	byte [esi]
4814
	lods	byte [esi]
4813
	cmp	al,','
4815
	cmp	al,','
4814
	jne	invalid_operand
4816
	jne	invalid_operand
Line 4817... Line 4819...
4817
	cmp	al,10h
4819
	cmp	al,10h
4818
	jne	invalid_operand
4820
	jne	invalid_operand
4819
	lods	byte [esi]
4821
	lods	byte [esi]
4820
	call	convert_mmx_register
4822
	call	convert_mmx_register
4821
	cmp	ah,16
4823
	xor	[mmx_size],8+16
-
 
4824
	cmp	ah,[mmx_size]
4822
	jne	invalid_operand_size
4825
	jne	invalid_operand_size
4823
	mov	bl,al
4826
	mov	bl,al
4824
	mov	[opcode_prefix],0F2h
4827
	mov	[base_code],0Fh
4825
	mov	[base_code],0Fh
-
 
4826
	mov	[extended_code],0D6h
4828
	mov	[extended_code],0D6h
4827
	jmp	nomem_instruction_ready
4829
	jmp	nomem_instruction_ready
4828
 
4830
 
Line 4829... Line 4831...
4829
sse_ps_instruction_imm8:
4831
sse_ps_instruction_imm8:
Line 4844... Line 4846...
4844
sse_sd_instruction:
4846
sse_sd_instruction:
4845
	mov	[mmx_size],8
4847
	mov	[mmx_size],8
4846
	mov	[opcode_prefix],0F2h
4848
	mov	[opcode_prefix],0F2h
4847
	jmp	sse_instruction
4849
	jmp	sse_instruction
4848
comiss_instruction:
4850
cmp_pd_instruction:
-
 
4851
	mov	[opcode_prefix],66h
-
 
4852
cmp_ps_instruction:
-
 
4853
	mov	[mmx_size],16
-
 
4854
	mov	byte [value],al
-
 
4855
	mov	al,0C2h
-
 
4856
	jmp	sse_instruction
-
 
4857
cmp_ss_instruction:
-
 
4858
	mov	[mmx_size],4
-
 
4859
	mov	[opcode_prefix],0F3h
-
 
4860
	jmp	cmp_sx_instruction
-
 
4861
cmpsd_instruction:
-
 
4862
	mov	al,0A7h
-
 
4863
	mov	ah,[esi]
-
 
4864
	or	ah,ah
-
 
4865
	jz	simple_instruction_32bit
-
 
4866
	cmp	ah,0Fh
-
 
4867
	je	simple_instruction_32bit
-
 
4868
	mov	al,-1
-
 
4869
cmp_sd_instruction:
-
 
4870
	mov	[mmx_size],8
-
 
4871
	mov	[opcode_prefix],0F2h
-
 
4872
      cmp_sx_instruction:
-
 
4873
	mov	byte [value],al
-
 
4874
	mov	al,0C2h
-
 
4875
	jmp	sse_instruction
-
 
4876
comiss_instruction:
4849
	mov	[mmx_size],4
4877
	mov	[mmx_size],4
4850
	jmp	sse_instruction
4878
	jmp	sse_instruction
4851
comisd_instruction:
4879
comisd_instruction:
4852
	mov	[mmx_size],8
4880
	mov	[mmx_size],8
4853
	mov	[opcode_prefix],66h
4881
	mov	[opcode_prefix],66h
4854
	jmp	sse_instruction
4882
	jmp	sse_instruction
4855
cvtps2pd_instruction:
4883
cvtdq2pd_instruction:
-
 
4884
	mov	[opcode_prefix],0F3h
-
 
4885
cvtps2pd_instruction:
4856
	mov	[mmx_size],8
4886
	mov	[mmx_size],8
4857
	jmp	sse_instruction
4887
	jmp	sse_instruction
4858
cvtpd2dq_instruction:
4888
cvtpd2dq_instruction:
4859
	mov	[mmx_size],16
4889
	mov	[mmx_size],16
4860
	mov	[opcode_prefix],0F2h
4890
	mov	[opcode_prefix],0F2h
4861
	jmp	sse_instruction
4891
	jmp	sse_instruction
4862
cvtdq2pd_instruction:
4892
movshdup_instruction:
4863
	mov	[mmx_size],16
4893
	mov	[mmx_size],16
4864
	mov	[opcode_prefix],0F3h
4894
	mov	[opcode_prefix],0F3h
4865
sse_instruction:
4895
sse_instruction:
4866
	mov	[base_code],0Fh
4896
	mov	[base_code],0Fh
4867
	mov	[extended_code],al
4897
	mov	[extended_code],al
4868
	lods	byte [esi]
4898
	lods	byte [esi]
Line 4870... Line 4900...
4870
	cmp	al,10h
4900
	cmp	al,10h
4871
	jne	invalid_operand
4901
	jne	invalid_operand
4872
      sse_xmmreg:
4902
      sse_xmmreg:
4873
	lods	byte [esi]
4903
	lods	byte [esi]
4874
	call	convert_mmx_register
4904
	call	convert_xmm_register
4875
	cmp	ah,16
4905
      sse_reg:
4876
	jne	invalid_operand_size
-
 
4877
      sse_reg:
-
 
4878
	mov	[postbyte_register],al
4906
	mov	[postbyte_register],al
4879
	mov	[operand_size],0
4907
	mov	[operand_size],0
4880
	lods	byte [esi]
4908
	lods	byte [esi]
4881
	cmp	al,','
4909
	cmp	al,','
4882
	jne	invalid_operand
4910
	jne	invalid_operand
Line 4893... Line 4921...
4893
	mov	al,[mmx_size]
4921
	mov	al,[mmx_size]
4894
	cmp	[operand_size],al
4922
	cmp	[operand_size],al
4895
	jne	invalid_operand_size
4923
	jne	invalid_operand_size
4896
      sse_mem_size_ok:
4924
      sse_mem_size_ok:
4897
	cmp	[immediate_size],1
4925
	mov	al,[extended_code]
-
 
4926
	mov	ah,[supplemental_code]
-
 
4927
	cmp	al,0C2h
-
 
4928
	je	sse_cmp_mem_ok
-
 
4929
	cmp	ax,443Ah
-
 
4930
	je	sse_cmp_mem_ok
-
 
4931
	cmp	[immediate_size],1
4898
	je	mmx_imm8
4932
	je	mmx_imm8
4899
	cmp	[immediate_size],-1
4933
	cmp	[immediate_size],-1
4900
	jne	sse_ok
4934
	jne	sse_ok
4901
	call	take_additional_xmm0
4935
	call	take_additional_xmm0
4902
	mov	[immediate_size],0
4936
	mov	[immediate_size],0
4903
      sse_ok:
4937
      sse_ok:
4904
	jmp	instruction_ready
4938
	jmp	instruction_ready
4905
      sse_xmmreg_xmmreg:
4939
      sse_cmp_mem_ok:
-
 
4940
	cmp	byte [value],-1
-
 
4941
	je	mmx_imm8
-
 
4942
	call	store_instruction_with_imm8
-
 
4943
	jmp	instruction_assembled
-
 
4944
      sse_xmmreg_xmmreg:
4906
	cmp	[operand_prefix],66h
4945
	cmp	[operand_prefix],66h
4907
	jne	sse_xmmreg_xmmreg_ok
4946
	jne	sse_xmmreg_xmmreg_ok
4908
	cmp	[extended_code],12h
4947
	cmp	[extended_code],12h
4909
	je	invalid_operand
4948
	je	invalid_operand
4910
	cmp	[extended_code],16h
4949
	cmp	[extended_code],16h
4911
	je	invalid_operand
4950
	je	invalid_operand
4912
      sse_xmmreg_xmmreg_ok:
4951
      sse_xmmreg_xmmreg_ok:
4913
	lods	byte [esi]
4952
	lods	byte [esi]
4914
	call	convert_mmx_register
4953
	call	convert_xmm_register
4915
	cmp	ah,16
4954
	mov	bl,al
4916
	jne	invalid_operand_size
-
 
4917
	mov	bl,al
-
 
4918
	cmp	[immediate_size],1
4955
	mov	al,[extended_code]
-
 
4956
	mov	ah,[supplemental_code]
-
 
4957
	cmp	al,0C2h
-
 
4958
	je	sse_cmp_nomem_ok
-
 
4959
	cmp	ax,443Ah
-
 
4960
	je	sse_cmp_nomem_ok
-
 
4961
	cmp	[immediate_size],1
4919
	je	mmx_nomem_imm8
4962
	je	mmx_nomem_imm8
4920
	cmp	[immediate_size],-1
4963
	cmp	[immediate_size],-1
4921
	jne	sse_nomem_ok
4964
	jne	sse_nomem_ok
4922
	call	take_additional_xmm0
4965
	call	take_additional_xmm0
4923
	mov	[immediate_size],0
4966
	mov	[immediate_size],0
4924
      sse_nomem_ok:
4967
      sse_nomem_ok:
4925
	jmp	nomem_instruction_ready
4968
	jmp	nomem_instruction_ready
4926
      take_additional_xmm0:
4969
      sse_cmp_nomem_ok:
-
 
4970
	cmp	byte [value],-1
-
 
4971
	je	mmx_nomem_imm8
-
 
4972
	call	store_nomem_instruction
-
 
4973
	mov	al,byte [value]
-
 
4974
	stosb
-
 
4975
	jmp	instruction_assembled
-
 
4976
      take_additional_xmm0:
4927
	cmp	byte [esi],','
4977
	cmp	byte [esi],','
4928
	jne	additional_xmm0_ok
4978
	jne	additional_xmm0_ok
4929
	inc	esi
4979
	inc	esi
4930
	lods	byte [esi]
4980
	lods	byte [esi]
4931
	cmp	al,10h
4981
	cmp	al,10h
4932
	jne	invalid_operand
4982
	jne	invalid_operand
4933
	lods	byte [esi]
4983
	lods	byte [esi]
4934
	call	convert_mmx_register
4984
	call	convert_xmm_register
4935
	cmp	ah,16
4985
	test	al,al
4936
	jne	invalid_operand_size
-
 
4937
	test	al,al
-
 
4938
	jnz	invalid_operand
4986
	jnz	invalid_operand
4939
      additional_xmm0_ok:
4987
      additional_xmm0_ok:
4940
	ret
4988
	ret
4941
 
4989
 
Line 4942... Line 4990...
4942
ps_dq_instruction:
4990
pslldq_instruction:
4943
	mov	[postbyte_register],al
4991
	mov	[postbyte_register],al
4944
	mov	[opcode_prefix],66h
4992
	mov	[opcode_prefix],66h
4945
	mov	[base_code],0Fh
4993
	mov	[base_code],0Fh
4946
	mov	[extended_code],73h
4994
	mov	[extended_code],73h
4947
	lods	byte [esi]
4995
	lods	byte [esi]
4948
	call	get_size_operator
4996
	call	get_size_operator
4949
	cmp	al,10h
4997
	cmp	al,10h
4950
	jne	invalid_operand
4998
	jne	invalid_operand
4951
	lods	byte [esi]
4999
	lods	byte [esi]
4952
	call	convert_mmx_register
5000
	call	convert_xmm_register
4953
	cmp	ah,16
-
 
4954
	jne	invalid_operand_size
-
 
4955
	mov	bl,al
5001
	mov	bl,al
4956
	jmp	mmx_nomem_imm8
5002
	jmp	mmx_nomem_imm8
4957
movpd_instruction:
5003
movpd_instruction:
4958
	mov	[opcode_prefix],66h
5004
	mov	[opcode_prefix],66h
4959
movps_instruction:
5005
movps_instruction:
Line 5002... Line 5048...
5002
	call	get_size_operator
5048
	call	get_size_operator
5003
	cmp	al,10h
5049
	cmp	al,10h
5004
	jne	invalid_operand
5050
	jne	invalid_operand
5005
	lods	byte [esi]
5051
	lods	byte [esi]
5006
	call	convert_mmx_register
5052
	call	convert_xmm_register
5007
	cmp	ah,16
5053
	mov	[postbyte_register],al
5008
	jne	invalid_operand_size
-
 
5009
	mov	[postbyte_register],al
-
 
5010
	jmp	instruction_ready
5054
	jmp	instruction_ready
5011
movlpd_instruction:
5055
movlpd_instruction:
5012
	mov	[opcode_prefix],66h
5056
	mov	[opcode_prefix],66h
5013
movlps_instruction:
5057
movlps_instruction:
5014
	mov	[base_code],0Fh
5058
	mov	[base_code],0Fh
Line 5018... Line 5062...
5018
	call	get_size_operator
5062
	call	get_size_operator
5019
	cmp	al,10h
5063
	cmp	al,10h
5020
	jne	sse_mem
5064
	jne	sse_mem
5021
	lods	byte [esi]
5065
	lods	byte [esi]
5022
	call	convert_mmx_register
5066
	call	convert_xmm_register
5023
	cmp	ah,16
5067
	mov	[postbyte_register],al
5024
	jne	invalid_operand_size
-
 
5025
	mov	[postbyte_register],al
-
 
5026
	mov	[operand_size],0
5068
	mov	[operand_size],0
5027
	lods	byte [esi]
5069
	lods	byte [esi]
5028
	cmp	al,','
5070
	cmp	al,','
5029
	jne	invalid_operand
5071
	jne	invalid_operand
5030
	lods	byte [esi]
5072
	lods	byte [esi]
Line 5038... Line 5080...
5038
	call	get_size_operator
5080
	call	get_size_operator
5039
	cmp	al,10h
5081
	cmp	al,10h
5040
	jne	invalid_operand
5082
	jne	invalid_operand
5041
	lods	byte [esi]
5083
	lods	byte [esi]
5042
	call	convert_mmx_register
5084
	call	convert_xmm_register
5043
	cmp	ah,16
5085
	mov	[postbyte_register],al
5044
	jne	invalid_operand_size
-
 
5045
	mov	[postbyte_register],al
-
 
5046
	lods	byte [esi]
5086
	lods	byte [esi]
5047
	cmp	al,','
5087
	cmp	al,','
5048
	jne	invalid_operand
5088
	jne	invalid_operand
5049
	lods	byte [esi]
5089
	lods	byte [esi]
5050
	call	get_size_operator
5090
	call	get_size_operator
Line 5090... Line 5130...
5090
	cmp	al,10h
5130
	cmp	al,10h
5091
	jne	invalid_operand
5131
	jne	invalid_operand
5092
	lods	byte [esi]
5132
	lods	byte [esi]
5093
	call	convert_register
5133
	call	convert_register
5094
	cmp	ah,4
5134
	mov	[postbyte_register],al
5095
	jne	invalid_operand_size
-
 
5096
	mov	[operand_size],0
-
 
5097
	mov	[postbyte_register],al
-
 
5098
	lods	byte [esi]
5135
	cmp	ah,4
5099
	cmp	al,','
-
 
5100
	jne	invalid_operand
-
 
5101
	lods	byte [esi]
-
 
5102
	call	get_size_operator
-
 
5103
	cmp	al,10h
-
 
5104
	jne	invalid_operand
-
 
5105
	lods	byte [esi]
-
 
5106
	call	convert_mmx_register
-
 
5107
	cmp	ah,16
-
 
5108
	jne	invalid_operand_size
5136
	je	movmskps_reg_ok
5109
	mov	bl,al
-
 
5110
	jmp	nomem_instruction_ready
-
 
5111
cmppd_instruction:
-
 
5112
	mov	[opcode_prefix],66h
-
 
5113
cmpps_instruction:
-
 
5114
	mov	[base_code],0Fh
-
 
5115
	mov	[extended_code],0C2h
-
 
5116
	mov	[mmx_size],16
-
 
5117
	mov	byte [value],-1
-
 
5118
	jmp	sse_cmp_instruction
-
 
5119
cmp_pd_instruction:
-
 
5120
	mov	[opcode_prefix],66h
-
 
5121
cmp_ps_instruction:
-
 
5122
	mov	[base_code],0Fh
-
 
5123
	mov	[extended_code],0C2h
-
 
5124
	mov	[mmx_size],16
-
 
5125
	mov	byte [value],al
-
 
5126
	jmp	sse_cmp_instruction
-
 
5127
cmpss_instruction:
-
 
5128
	mov	[mmx_size],4
-
 
5129
	mov	[opcode_prefix],0F3h
-
 
5130
	jmp	cmpsx_instruction
-
 
5131
cmpsd_instruction:
-
 
5132
	mov	al,0A7h
-
 
5133
	mov	ah,[esi]
-
 
5134
	or	ah,ah
-
 
5135
	jz	simple_instruction_32bit
-
 
5136
	cmp	ah,0Fh
-
 
5137
	je	simple_instruction_32bit
-
 
5138
	mov	[mmx_size],8
-
 
5139
	mov	[opcode_prefix],0F2h
-
 
5140
      cmpsx_instruction:
-
 
5141
	mov	[base_code],0Fh
-
 
5142
	mov	[extended_code],0C2h
-
 
5143
	mov	byte [value],-1
-
 
5144
	jmp	sse_cmp_instruction
-
 
5145
cmp_ss_instruction:
-
 
5146
	mov	[mmx_size],4
-
 
5147
	mov	[opcode_prefix],0F3h
-
 
5148
	jmp	cmp_sx_instruction
-
 
5149
cmp_sd_instruction:
-
 
5150
	mov	[mmx_size],8
-
 
5151
	mov	[opcode_prefix],0F2h
-
 
5152
      cmp_sx_instruction:
-
 
5153
	mov	[base_code],0Fh
-
 
5154
	mov	[extended_code],0C2h
-
 
5155
	mov	byte [value],al
-
 
5156
sse_cmp_instruction:
-
 
5157
	lods	byte [esi]
-
 
5158
	call	get_size_operator
-
 
5159
	cmp	al,10h
-
 
5160
	jne	invalid_operand
-
 
5161
	lods	byte [esi]
5137
	cmp	ah,8
5162
	call	convert_mmx_register
-
 
5163
	cmp	ah,16
-
 
5164
	jne	invalid_operand_size
5138
	jne	invalid_operand_size
5165
	mov	[postbyte_register],al
5139
	cmp	[code_type],64
5166
	lods	byte [esi]
5140
	jne	invalid_operand
5167
	cmp	al,','
-
 
5168
	jne	invalid_operand
-
 
5169
	mov	[operand_size],0
5141
      movmskps_reg_ok:
5170
	lods	byte [esi]
-
 
5171
	call	get_size_operator
-
 
5172
	cmp	al,10h
-
 
5173
	je	sse_cmp_xmmreg_xmmreg
-
 
5174
	cmp	al,'['
-
 
5175
	jne	invalid_operand
-
 
5176
	call	get_address
-
 
5177
	mov	al,[operand_size]
-
 
5178
	or	al,al
-
 
5179
	jz	sse_cmp_size_ok
-
 
5180
	cmp	al,[mmx_size]
-
 
5181
	jne	invalid_operand_size
-
 
5182
      sse_cmp_size_ok:
-
 
5183
	push	ebx ecx edx
5142
	mov	[operand_size],0
5184
	call	get_nextbyte
-
 
5185
	pop	edx ecx ebx
-
 
5186
	call	store_instruction_with_imm8
-
 
5187
	jmp	instruction_assembled
-
 
5188
      sse_cmp_xmmreg_xmmreg:
-
 
5189
	lods	byte [esi]
-
 
5190
	call	convert_mmx_register
-
 
5191
	cmp	ah,16
-
 
5192
	jne	invalid_operand_size
-
 
5193
	mov	bl,al
-
 
5194
	call	store_nomem_instruction
-
 
5195
	call	get_nextbyte
-
 
5196
	mov	al,byte [value]
-
 
5197
	stos	byte [edi]
-
 
5198
	jmp	instruction_assembled
-
 
5199
      get_nextbyte:
-
 
5200
	cmp	byte [value],-1
-
 
5201
	jne	nextbyte_ok
-
 
5202
	mov	[operand_size],0
-
 
5203
	lods	byte [esi]
5143
	lods	byte [esi]
5204
	cmp	al,','
5144
	cmp	al,','
5205
	jne	invalid_operand
5145
	jne	invalid_operand
5206
	lods	byte [esi]
5146
	lods	byte [esi]
5207
	call	get_size_operator
5147
	call	get_size_operator
5208
	test	[operand_size],not 1
5148
	cmp	al,10h
5209
	jnz	invalid_value
-
 
5210
	cmp	al,'('
-
 
5211
	jne	invalid_operand
5149
	je	sse_xmmreg_xmmreg_ok
5212
	call	get_byte_value
5150
	jmp	invalid_operand
5213
	cmp	al,7
-
 
5214
	ja	invalid_value
-
 
5215
	mov	byte [value],al
5151
 
5216
      nextbyte_ok:
-
 
5217
	ret
-
 
5218
cvtpi2pd_instruction:
5152
cvtpi2pd_instruction:
5219
	mov	[opcode_prefix],66h
5153
	mov	[opcode_prefix],66h
5220
cvtpi2ps_instruction:
5154
cvtpi2ps_instruction:
5221
	mov	[base_code],0Fh
5155
	mov	[base_code],0Fh
5222
	mov	[extended_code],al
5156
	mov	[extended_code],al
5223
	lods	byte [esi]
5157
	lods	byte [esi]
5224
	call	get_size_operator
5158
	call	get_size_operator
5225
	cmp	al,10h
5159
	cmp	al,10h
5226
	jne	invalid_operand
5160
	jne	invalid_operand
5227
	lods	byte [esi]
5161
	lods	byte [esi]
5228
	call	convert_mmx_register
5162
	call	convert_xmm_register
5229
	cmp	ah,16
5163
	mov	[postbyte_register],al
5230
	jne	invalid_operand_size
-
 
5231
	mov	[postbyte_register],al
-
 
5232
	mov	[operand_size],0
5164
	mov	[operand_size],0
5233
	lods	byte [esi]
5165
	lods	byte [esi]
5234
	cmp	al,','
5166
	cmp	al,','
5235
	jne	invalid_operand
5167
	jne	invalid_operand
5236
	lods	byte [esi]
5168
	lods	byte [esi]
Line 5265... Line 5197...
5265
	call	get_size_operator
5197
	call	get_size_operator
5266
	cmp	al,10h
5198
	cmp	al,10h
5267
	jne	invalid_operand
5199
	jne	invalid_operand
5268
	lods	byte [esi]
5200
	lods	byte [esi]
5269
	call	convert_mmx_register
5201
	call	convert_xmm_register
5270
	cmp	ah,16
5202
	mov	[postbyte_register],al
5271
	jne	invalid_operand_size
-
 
5272
	mov	[postbyte_register],al
-
 
5273
	mov	[operand_size],0
5203
      cvtsi_xmmreg:
-
 
5204
	mov	[operand_size],0
5274
	lods	byte [esi]
5205
	lods	byte [esi]
5275
	cmp	al,','
5206
	cmp	al,','
5276
	jne	invalid_operand
5207
	jne	invalid_operand
5277
	lods	byte [esi]
5208
	lods	byte [esi]
5278
	call	get_size_operator
5209
	call	get_size_operator
Line 5283... Line 5214...
5283
	call	get_address
5214
	call	get_address
5284
	cmp	[operand_size],0
5215
	cmp	[operand_size],0
5285
	je	cvtsi_size_ok
5216
	je	cvtsi_size_ok
5286
	cmp	[operand_size],4
5217
	cmp	[operand_size],4
5287
	jne	invalid_operand_size
5218
	je	cvtsi_size_ok
-
 
5219
	cmp	[operand_size],8
-
 
5220
	jne	invalid_operand_size
5288
      cvtsi_size_ok:
5221
	call	operand_64bit
-
 
5222
      cvtsi_size_ok:
5289
	jmp	instruction_ready
5223
	jmp	instruction_ready
5290
      cvtsi_xmmreg_reg:
5224
      cvtsi_xmmreg_reg:
5291
	lods	byte [esi]
5225
	lods	byte [esi]
5292
	call	convert_register
5226
	call	convert_register
5293
	cmp	ah,4
5227
	cmp	ah,4
Line 5411... Line 5345...
5411
	jmp	instruction_assembled
5345
	jmp	instruction_assembled
5412
 
5346
 
Line 5413... Line 5347...
5413
sse4_instruction_38_xmm0:
5347
sse4_instruction_38_xmm0:
5414
	mov	[immediate_size],-1
5348
	mov	[immediate_size],-1
5415
	jmp	sse4_instruction_38
-
 
5416
sse4_instruction_38_imm8:
-
 
5417
	mov	[immediate_size],1
-
 
5418
sse4_instruction_38:
5349
sse4_instruction_38:
5419
	mov	[mmx_size],16
5350
	mov	[mmx_size],16
5420
	mov	[opcode_prefix],66h
5351
	mov	[opcode_prefix],66h
5421
	mov	[base_code],0Fh
-
 
5422
	mov	[supplemental_code],al
5352
	mov	[supplemental_code],al
5423
	mov	al,38h
5353
	mov	al,38h
5424
	jmp	sse_instruction
5354
	jmp	sse_instruction
5425
sse4_ss_instruction_3a_imm8:
5355
sse4_ss_instruction_3a_imm8:
5426
	mov	[immediate_size],1
5356
	mov	[immediate_size],1
Line 5431... Line 5361...
5431
	mov	[mmx_size],8
5361
	mov	[mmx_size],8
5432
	jmp	sse4_instruction_3a_setup
5362
	jmp	sse4_instruction_3a_setup
5433
sse4_instruction_3a_imm8:
5363
sse4_instruction_3a_imm8:
5434
	mov	[immediate_size],1
5364
	mov	[immediate_size],1
5435
sse4_instruction_3a:
5365
	mov	[mmx_size],16
5436
	mov	[mmx_size],16
-
 
5437
      sse4_instruction_3a_setup:
5366
      sse4_instruction_3a_setup:
5438
	mov	[opcode_prefix],66h
5367
	mov	[opcode_prefix],66h
5439
	mov	[base_code],0Fh
5368
	mov	[supplemental_code],al
5440
	mov	[supplemental_code],al
-
 
5441
	mov	al,3Ah
5369
	mov	al,3Ah
5442
	jmp	sse_instruction
5370
	jmp	sse_instruction
5443
extractps_instruction:
5371
pclmulqdq_instruction:
-
 
5372
	mov	byte [value],al
-
 
5373
	mov	[mmx_size],16
-
 
5374
	mov	al,44h
-
 
5375
	jmp	sse4_instruction_3a_setup
-
 
5376
extractps_instruction:
5444
	mov	[opcode_prefix],66h
5377
	mov	[opcode_prefix],66h
5445
	mov	[base_code],0Fh
5378
	mov	[base_code],0Fh
5446
	mov	[extended_code],3Ah
5379
	mov	[extended_code],3Ah
5447
	mov	[supplemental_code],17h
5380
	mov	[supplemental_code],17h
5448
	lods	byte [esi]
5381
	lods	byte [esi]
Line 5466... Line 5399...
5466
	call	get_size_operator
5399
	call	get_size_operator
5467
	cmp	al,10h
5400
	cmp	al,10h
5468
	jne	invalid_operand
5401
	jne	invalid_operand
5469
	lods	byte [esi]
5402
	lods	byte [esi]
5470
	call	convert_mmx_register
5403
	call	convert_xmm_register
5471
	cmp	ah,16
5404
	mov	[postbyte_register],al
5472
	jne	invalid_operand_size
-
 
5473
	mov	[postbyte_register],al
-
 
5474
	pop	ecx ebx edx
5405
	pop	ecx ebx edx
5475
	jmp	mmx_imm8
5406
	jmp	mmx_imm8
5476
      extractps_reg:
5407
      extractps_reg:
5477
	lods	byte [esi]
5408
	lods	byte [esi]
5478
	call	convert_register
5409
	call	convert_register
Line 5485... Line 5416...
5485
	call	get_size_operator
5416
	call	get_size_operator
5486
	cmp	al,10h
5417
	cmp	al,10h
5487
	jne	invalid_operand
5418
	jne	invalid_operand
5488
	lods	byte [esi]
5419
	lods	byte [esi]
5489
	call	convert_mmx_register
5420
	call	convert_xmm_register
5490
	cmp	ah,16
5421
	mov	[postbyte_register],al
5491
	jne	invalid_operand_size
-
 
5492
	mov	[postbyte_register],al
-
 
5493
	pop	ebx
5422
	pop	ebx
5494
	mov	al,bh
5423
	mov	al,bh
5495
	cmp	al,4
5424
	cmp	al,4
5496
	je	mmx_nomem_imm8
5425
	je	mmx_nomem_imm8
5497
	cmp	al,8
5426
	cmp	al,8
5498
	jne	invalid_operand_size
5427
	jne	invalid_operand_size
5499
	call	operand_64bit
5428
	call	operand_64bit
5500
	jmp	mmx_nomem_imm8
5429
	jmp	mmx_nomem_imm8
5501
insertps_instruction:
5430
insertps_instruction:
5502
	mov	[opcode_prefix],66h
5431
	lods	byte [esi]
5503
	mov	[base_code],0Fh
-
 
5504
	mov	[extended_code],3Ah
-
 
5505
	mov	[supplemental_code],21h
-
 
5506
	lods	byte [esi]
-
 
5507
	call	get_size_operator
5432
	call	get_size_operator
5508
	cmp	al,10h
5433
	cmp	al,10h
5509
	jne	invalid_operand
5434
	jne	invalid_operand
5510
	lods	byte [esi]
5435
	lods	byte [esi]
5511
	call	convert_mmx_register
5436
	call	convert_xmm_register
5512
	cmp	ah,16
5437
	mov	[postbyte_register],al
5513
	jne	invalid_operand_size
-
 
5514
	mov	[postbyte_register],al
-
 
5515
	mov	[operand_size],0
5438
      insertps_xmmreg:
-
 
5439
	mov	[opcode_prefix],66h
-
 
5440
	mov	[base_code],0Fh
-
 
5441
	mov	[extended_code],3Ah
-
 
5442
	mov	[supplemental_code],21h
-
 
5443
	mov	[operand_size],0
5516
	lods	byte [esi]
5444
	lods	byte [esi]
5517
	cmp	al,','
5445
	cmp	al,','
5518
	jne	invalid_operand
5446
	jne	invalid_operand
5519
	lods	byte [esi]
5447
	lods	byte [esi]
5520
	call	get_size_operator
5448
	call	get_size_operator
5521
	cmp	al,10h
5449
	cmp	al,10h
5522
	je	insertps_reg
5450
	je	insertps_xmmreg_reg
5523
	cmp	al,'['
5451
	cmp	al,'['
5524
	jne	invalid_operand
5452
	jne	invalid_operand
5525
	call	get_address
5453
	call	get_address
5526
	cmp	[operand_size],4
5454
	cmp	[operand_size],4
5527
	je	insertps_size_ok
5455
	je	insertps_size_ok
5528
	cmp	[operand_size],0
5456
	cmp	[operand_size],0
5529
	jne	invalid_operand_size
5457
	jne	invalid_operand_size
5530
      insertps_size_ok:
5458
      insertps_size_ok:
5531
	jmp	mmx_imm8
5459
	jmp	mmx_imm8
5532
      insertps_reg:
5460
      insertps_xmmreg_reg:
5533
	lods	byte [esi]
5461
	lods	byte [esi]
5534
	call	convert_mmx_register
5462
	call	convert_mmx_register
5535
	mov	bl,al
5463
	mov	bl,al
5536
	jmp	mmx_nomem_imm8
5464
	jmp	mmx_nomem_imm8
5537
pextrq_instruction:
5465
pextrq_instruction:
5538
	mov	[mmx_size],8
5466
	mov	[mmx_size],8
Line 5562... Line 5490...
5562
	je	pextr_size_ok
5490
	je	pextr_size_ok
5563
	cmp	[operand_size],0
5491
	cmp	[operand_size],0
5564
	jne	invalid_operand_size
5492
	jne	invalid_operand_size
5565
      pextr_size_ok:
5493
      pextr_size_ok:
5566
	push	edx ebx ecx
5494
	cmp	al,8
-
 
5495
	jne	pextr_prefix_ok
-
 
5496
	call	operand_64bit
-
 
5497
      pextr_prefix_ok:
-
 
5498
	push	edx ebx ecx
5567
	mov	[operand_size],0
5499
	mov	[operand_size],0
5568
	lods	byte [esi]
5500
	lods	byte [esi]
5569
	cmp	al,','
5501
	cmp	al,','
5570
	jne	invalid_operand
5502
	jne	invalid_operand
5571
	lods	byte [esi]
5503
	lods	byte [esi]
5572
	call	get_size_operator
5504
	call	get_size_operator
5573
	cmp	al,10h
5505
	cmp	al,10h
5574
	jne	invalid_operand
5506
	jne	invalid_operand
5575
	lods	byte [esi]
5507
	lods	byte [esi]
5576
	call	convert_mmx_register
5508
	call	convert_xmm_register
5577
	cmp	ah,16
5509
	mov	[postbyte_register],al
5578
	jne	invalid_operand_size
-
 
5579
	mov	[postbyte_register],al
-
 
5580
	pop	ecx ebx edx
5510
	pop	ecx ebx edx
5581
	jmp	mmx_imm8
5511
	jmp	mmx_imm8
5582
      pextr_reg:
5512
      pextr_reg:
5583
	lods	byte [esi]
5513
	lods	byte [esi]
5584
	call	convert_register
5514
	call	convert_register
Line 5631... Line 5561...
5631
	mov	[mmx_size],4
5561
	mov	[mmx_size],4
5632
	jmp	pinsr_instruction
5562
	jmp	pinsr_instruction
5633
pinsrq_instruction:
5563
pinsrq_instruction:
5634
	mov	[mmx_size],8
5564
	mov	[mmx_size],8
5635
	jmp	pinsr_instruction
5565
	call	operand_64bit
5636
      pinsr_instruction:
5566
      pinsr_instruction:
5637
	mov	[opcode_prefix],66h
5567
	mov	[opcode_prefix],66h
5638
	mov	[base_code],0Fh
5568
	mov	[base_code],0Fh
5639
	mov	[extended_code],3Ah
5569
	mov	[extended_code],3Ah
5640
	mov	[supplemental_code],al
5570
	mov	[supplemental_code],al
5641
	lods	byte [esi]
5571
	lods	byte [esi]
5642
	call	get_size_operator
5572
	call	get_size_operator
5643
	cmp	al,10h
5573
	cmp	al,10h
5644
	jne	invalid_operand
5574
	jne	invalid_operand
5645
	lods	byte [esi]
5575
	lods	byte [esi]
5646
	call	convert_mmx_register
5576
	call	convert_xmm_register
5647
	cmp	ah,16
5577
	mov	[postbyte_register],al
5648
	jne	invalid_operand_size
-
 
5649
	mov	[postbyte_register],al
-
 
5650
	mov	[operand_size],0
5578
      pinsr_xmmreg:
-
 
5579
	mov	[operand_size],0
5651
	lods	byte [esi]
5580
	lods	byte [esi]
5652
	cmp	al,','
5581
	cmp	al,','
5653
	jne	invalid_operand
5582
	jne	invalid_operand
5654
	lods	byte [esi]
5583
	lods	byte [esi]
5655
	call	get_size_operator
5584
	call	get_size_operator
Line 5703... Line 5632...
5703
	call	get_size_operator
5632
	call	get_size_operator
5704
	cmp	al,10h
5633
	cmp	al,10h
5705
	jne	invalid_operand
5634
	jne	invalid_operand
5706
	lods	byte [esi]
5635
	lods	byte [esi]
5707
	call	convert_mmx_register
5636
	call	convert_xmm_register
5708
	cmp	ah,16
5637
	mov	[postbyte_register],al
5709
	jne	invalid_operand_size
-
 
5710
	mov	[postbyte_register],al
-
 
5711
	lods	byte [esi]
5638
	lods	byte [esi]
5712
	cmp	al,','
5639
	cmp	al,','
5713
	jne	invalid_operand
5640
	jne	invalid_operand
5714
	mov	[operand_size],0
5641
	mov	[operand_size],0
5715
	lods	byte [esi]
5642
	lods	byte [esi]
Line 5726... Line 5653...
5726
	jne	invalid_operand_size
5653
	jne	invalid_operand_size
5727
	jmp	instruction_ready
5654
	jmp	instruction_ready
5728
      pmovsx_xmmreg_reg:
5655
      pmovsx_xmmreg_reg:
5729
	lods	byte [esi]
5656
	lods	byte [esi]
5730
	call	convert_mmx_register
5657
	call	convert_xmm_register
5731
	cmp	ah,16
5658
	mov	bl,al
5732
	jne	invalid_operand_size
-
 
5733
	mov	bl,al
-
 
5734
	jmp	nomem_instruction_ready
5659
	jmp	nomem_instruction_ready
5735
 
5660
 
Line -... Line 5661...
-
 
5661
fxsave_instruction_64bit:
-
 
5662
	call	operand_64bit
5736
fxsave_instruction:
5663
fxsave_instruction:
5737
	mov	[extended_code],0AEh
5664
	mov	[extended_code],0AEh
5738
	mov	[base_code],0Fh
5665
	mov	[base_code],0Fh
5739
	mov	[postbyte_register],al
5666
	mov	[postbyte_register],al
5740
	lods	byte [esi]
5667
	lods	byte [esi]
Line 5792... Line 5719...
5792
	jmp	instruction_assembled
5719
	jmp	instruction_assembled
5793
movntq_instruction:
5720
movntq_instruction:
5794
	mov	[mmx_size],8
5721
	mov	[mmx_size],8
5795
	jmp	movnt_instruction
5722
	jmp	movnt_instruction
5796
movntps_instruction:
5723
movntpd_instruction:
5797
	mov	[mmx_size],16
5724
	mov	[opcode_prefix],66h
5798
	jmp	movnt_instruction
-
 
5799
movntdq_instruction:
-
 
5800
	mov	[opcode_prefix],66h
-
 
5801
	mov	[mmx_size],16
5725
movntps_instruction:
-
 
5726
	mov	[mmx_size],16
5802
      movnt_instruction:
5727
      movnt_instruction:
5803
	mov	[extended_code],al
5728
	mov	[extended_code],al
5804
	mov	[base_code],0Fh
5729
	mov	[base_code],0Fh
5805
	lods	byte [esi]
5730
	lods	byte [esi]
5806
	call	get_size_operator
5731
	call	get_size_operator
Line 5850... Line 5775...
5850
	call	get_size_operator
5775
	call	get_size_operator
5851
	cmp	al,10h
5776
	cmp	al,10h
5852
	jne	invalid_operand
5777
	jne	invalid_operand
5853
	lods	byte [esi]
5778
	lods	byte [esi]
5854
	call	convert_mmx_register
5779
	call	convert_xmm_register
5855
	cmp	ah,16
5780
	mov	[postbyte_register],al
5856
	jne	invalid_operand_size
-
 
5857
	mov	[postbyte_register],al
-
 
5858
	jmp	instruction_ready
5781
	jmp	instruction_ready
5859
 
5782
 
Line 5860... Line 5783...
5860
movnti_instruction:
5783
movnti_instruction:
5861
	mov	[base_code],0Fh
5784
	mov	[base_code],0Fh
Line 5935... Line 5858...
5935
	call	get_size_operator
5858
	call	get_size_operator
5936
	cmp	al,10h
5859
	cmp	al,10h
5937
	jne	invalid_operand
5860
	jne	invalid_operand
5938
	lods	byte [esi]
5861
	lods	byte [esi]
5939
	call	convert_mmx_register
5862
	call	convert_xmm_register
5940
	cmp	ah,16
5863
	mov	[postbyte_register],al
5941
	jne	invalid_operand_size
-
 
5942
	mov	[postbyte_register],al
-
 
5943
	lods	byte [esi]
5864
	lods	byte [esi]
5944
	cmp	al,','
5865
	cmp	al,','
5945
	jne	invalid_operand
5866
	jne	invalid_operand
5946
	lods	byte [esi]
5867
	lods	byte [esi]
5947
	call	get_size_operator
5868
	call	get_size_operator
Line 5958... Line 5879...
5958
	call	get_size_operator
5879
	call	get_size_operator
5959
	cmp	al,10h
5880
	cmp	al,10h
5960
	jne	invalid_operand
5881
	jne	invalid_operand
5961
	lods	byte [esi]
5882
	lods	byte [esi]
5962
	call	convert_mmx_register
5883
	call	convert_xmm_register
5963
	cmp	ah,16
5884
	mov	[postbyte_register],al
5964
	jne	invalid_operand_size
-
 
5965
	mov	[postbyte_register],al
-
 
5966
	mov	[operand_size],0
5885
	mov	[operand_size],0
5967
	lods	byte [esi]
5886
	lods	byte [esi]
5968
	cmp	al,','
5887
	cmp	al,','
5969
	jne	invalid_operand
5888
	jne	invalid_operand
5970
	lods	byte [esi]
5889
	lods	byte [esi]
Line 5984... Line 5903...
5984
	jmp	instruction_assembled
5903
	jmp	instruction_assembled
5985
      extrq_xmmreg_xmmreg:
5904
      extrq_xmmreg_xmmreg:
5986
	inc	[extended_code]
5905
	inc	[extended_code]
5987
	lods	byte [esi]
5906
	lods	byte [esi]
5988
	call	convert_mmx_register
5907
	call	convert_xmm_register
5989
	cmp	ah,16
5908
	mov	bl,al
5990
	jne	invalid_operand_size
-
 
5991
	mov	bl,al
-
 
5992
	jmp	nomem_instruction_ready
5909
	jmp	nomem_instruction_ready
5993
insertq_instruction:
5910
insertq_instruction:
5994
	mov	[opcode_prefix],0F2h
5911
	mov	[opcode_prefix],0F2h
5995
	mov	[base_code],0Fh
5912
	mov	[base_code],0Fh
5996
	mov	[extended_code],78h
5913
	mov	[extended_code],78h
Line 5998... Line 5915...
5998
	call	get_size_operator
5915
	call	get_size_operator
5999
	cmp	al,10h
5916
	cmp	al,10h
6000
	jne	invalid_operand
5917
	jne	invalid_operand
6001
	lods	byte [esi]
5918
	lods	byte [esi]
6002
	call	convert_mmx_register
5919
	call	convert_xmm_register
6003
	cmp	ah,16
5920
	mov	[postbyte_register],al
6004
	jne	invalid_operand_size
-
 
6005
	mov	[postbyte_register],al
-
 
6006
	mov	[operand_size],0
5921
	mov	[operand_size],0
6007
	lods	byte [esi]
5922
	lods	byte [esi]
6008
	cmp	al,','
5923
	cmp	al,','
6009
	jne	invalid_operand
5924
	jne	invalid_operand
6010
	lods	byte [esi]
5925
	lods	byte [esi]
6011
	call	get_size_operator
5926
	call	get_size_operator
6012
	cmp	al,10h
5927
	cmp	al,10h
6013
	jne	invalid_operand
5928
	jne	invalid_operand
6014
	lods	byte [esi]
5929
	lods	byte [esi]
6015
	call	convert_mmx_register
5930
	call	convert_xmm_register
6016
	cmp	ah,16
5931
	mov	bl,al
6017
	jne	invalid_operand_size
-
 
6018
	mov	bl,al
-
 
6019
	cmp	byte [esi],','
5932
	cmp	byte [esi],','
6020
	je	insertq_with_imm
5933
	je	insertq_with_imm
6021
	inc	[extended_code]
5934
	inc	[extended_code]
6022
	jmp	nomem_instruction_ready
5935
	jmp	nomem_instruction_ready
6023
      insertq_with_imm:
5936
      insertq_with_imm:
Line 6138... Line 6051...
6138
	cmp	al,','
6051
	cmp	al,','
6139
	jne	invalid_operand
6052
	jne	invalid_operand
6140
	lods	byte [esi]
6053
	lods	byte [esi]
6141
	call	get_size_operator
6054
	call	get_size_operator
6142
;       cmp     al,10h
6055
	cmp	al,'['
6143
;       je      movbe_reg_reg
-
 
6144
	cmp	al,'['
-
 
6145
	jne	invalid_argument
6056
	jne	invalid_argument
6146
	call	get_address
6057
	call	get_address
6147
	mov	al,[operand_size]
6058
	mov	al,[operand_size]
6148
	call	operand_autodetect
6059
	call	operand_autodetect
6149
	jmp	instruction_ready
6060
	jmp	instruction_ready
6150
;      movbe_reg_reg:
6061
      movbe_mem:
6151
;       lods    byte [esi]
-
 
6152
;       call    convert_register
-
 
6153
;       mov     bl,al
-
 
6154
;       mov     al,ah
-
 
6155
;       call    operand_autodetect
-
 
6156
;       jmp     nomem_instruction_ready
-
 
6157
      movbe_mem:
-
 
6158
	inc	[supplemental_code]
6062
	inc	[supplemental_code]
6159
	call	get_address
6063
	call	get_address
6160
	push	edx ebx ecx
6064
	push	edx ebx ecx
6161
	lods	byte [esi]
6065
	lods	byte [esi]
6162
	cmp	al,','
6066
	cmp	al,','
Line 6380... Line 6284...
6380
	jne	invalid_operand
6284
	jne	invalid_operand
6381
	mov	ah,bl
6285
	mov	ah,bl
6382
	jmp	simple_svm_detect_size
6286
	jmp	simple_svm_detect_size
6383
 
6287
 
Line -... Line 6288...
-
 
6288
rdrand_instruction:
-
 
6289
	mov	[base_code],0Fh
-
 
6290
	mov	[extended_code],0C7h
-
 
6291
	mov	[postbyte_register],al
-
 
6292
	lods	byte [esi]
-
 
6293
	call	get_size_operator
-
 
6294
	cmp	al,10h
-
 
6295
	jne	invalid_operand
-
 
6296
	lods	byte [esi]
-
 
6297
	call	convert_register
-
 
6298
	mov	bl,al
-
 
6299
	mov	al,ah
-
 
6300
	call	operand_autodetect
-
 
6301
	jmp	nomem_instruction_ready
-
 
6302
rdfsbase_instruction:
-
 
6303
	mov	[opcode_prefix],0F3h
-
 
6304
	mov	[base_code],0Fh
-
 
6305
	mov	[extended_code],0AEh
-
 
6306
	mov	[postbyte_register],al
-
 
6307
	lods	byte [esi]
-
 
6308
	call	get_size_operator
-
 
6309
	cmp	al,10h
-
 
6310
	jne	invalid_operand
-
 
6311
	lods	byte [esi]
-
 
6312
	call	convert_register
-
 
6313
	mov	bl,al
-
 
6314
	mov	al,ah
-
 
6315
	cmp	ah,2
-
 
6316
	je	invalid_operand_size
-
 
6317
	call	operand_autodetect
-
 
6318
	jmp	nomem_instruction_ready
-
 
6319
 
6384
convert_register:
6320
convert_register:
6385
	mov	ah,al
6321
	mov	ah,al
6386
	shr	ah,4
6322
	shr	ah,4
6387
	and	al,0Fh
6323
	and	al,0Fh
6388
	cmp	ah,8
6324
	cmp	ah,8
Line 6424... Line 6360...
6424
	and	al,111b
6360
	and	al,111b
6425
	cmp	ah,0Bh
6361
	cmp	ah,0Bh
6426
	jne	invalid_operand
6362
	jne	invalid_operand
6427
	mov	ah,8
6363
	mov	ah,8
6428
	jmp	match_register_size
6364
	cmp	[vex_required],0
-
 
6365
	jne	invalid_operand
-
 
6366
	jmp	match_register_size
6429
      xmm_register:
6367
      xmm_register:
6430
	and	al,0Fh
6368
	and	al,0Fh
6431
	mov	ah,16
6369
	mov	ah,16
6432
	cmp	al,8
6370
	cmp	al,8
6433
	jb	match_register_size
6371
	jb	match_register_size
6434
	cmp	[code_type],64
6372
	cmp	[code_type],64
6435
	jne	invalid_operand
6373
	jne	invalid_operand
6436
	jmp	match_register_size
6374
	jmp	match_register_size
6437
get_size_operator:
6375
convert_xmm_register:
-
 
6376
	mov	ah,al
-
 
6377
	shr	ah,4
-
 
6378
	cmp	ah,0Ch
-
 
6379
	je	xmm_register
-
 
6380
	jmp	invalid_operand
-
 
6381
get_size_operator:
6438
	xor	ah,ah
6382
	xor	ah,ah
6439
	cmp	al,11h
6383
	cmp	al,11h
6440
	jne	no_size_operator
6384
	jne	no_size_operator
6441
	mov	[size_declared],1
6385
	mov	[size_declared],1
6442
	lods	word [esi]
6386
	lods	word [esi]
Line 6551... Line 6495...
6551
store_segment_prefix_if_necessary:
6495
store_segment_prefix_if_necessary:
6552
	mov	al,[segment_register]
6496
	mov	al,[segment_register]
6553
	or	al,al
6497
	or	al,al
6554
	jz	segment_prefix_ok
6498
	jz	segment_prefix_ok
6555
	cmp	al,3
6499
	cmp	al,4
6556
	je	ss_prefix
-
 
6557
	cmp	al,4
-
 
6558
	ja	segment_prefix_386
6500
	ja	segment_prefix_386
6559
	jb	segment_prefix_86
6501
	cmp	[code_type],64
-
 
6502
	je	segment_prefix_ok
-
 
6503
	cmp	al,3
-
 
6504
	je	ss_prefix
-
 
6505
	jb	segment_prefix_86
6560
	cmp	bl,25h
6506
	cmp	bl,25h
6561
	je	segment_prefix_86
6507
	je	segment_prefix_86
6562
	cmp	bh,25h
6508
	cmp	bh,25h
6563
	je	segment_prefix_86
6509
	je	segment_prefix_86
6564
	cmp	bh,45h
6510
	cmp	bh,45h
Line 6593... Line 6539...
6593
	stos	byte [edi]
6539
	stos	byte [edi]
6594
      segment_prefix_ok:
6540
      segment_prefix_ok:
6595
	ret
6541
	ret
6596
store_instruction_code:
6542
store_instruction_code:
6597
	mov	al,[operand_prefix]
6543
	cmp	[vex_required],0
-
 
6544
	jne	store_vex_instruction_code
-
 
6545
	mov	al,[operand_prefix]
6598
	or	al,al
6546
	or	al,al
6599
	jz	operand_prefix_ok
6547
	jz	operand_prefix_ok
6600
	stos	byte [edi]
6548
	stos	byte [edi]
6601
      operand_prefix_ok:
6549
      operand_prefix_ok:
6602
	mov	al,[opcode_prefix]
6550
	mov	al,[opcode_prefix]
Line 6654... Line 6602...
6654
	jz	reg_code_ok
6602
	jz	reg_code_ok
6655
	or	[rex_prefix],44h
6603
	or	[rex_prefix],44h
6656
	and	[postbyte_register],111b
6604
	and	[postbyte_register],111b
6657
      reg_code_ok:
6605
      reg_code_ok:
6658
	call	store_segment_prefix_if_necessary
6606
	cmp	[code_type],64
-
 
6607
	jne	address_value_ok
-
 
6608
	xor	eax,eax
-
 
6609
	bt	edx,31
-
 
6610
	sbb	eax,[address_high]
-
 
6611
	jz	address_value_ok
-
 
6612
	cmp	[address_high],0
-
 
6613
	jne	address_value_out_of_range
-
 
6614
	test	ch,44h
-
 
6615
	jnz	address_value_ok
-
 
6616
	test	bx,8080h
-
 
6617
	jz	address_value_ok
-
 
6618
      address_value_out_of_range:
-
 
6619
	cmp	[error_line],0
-
 
6620
	jne	address_value_ok
-
 
6621
	mov	edx,[current_line]
-
 
6622
	mov	[error_line],edx
-
 
6623
	mov	[error],value_out_of_range
-
 
6624
      address_value_ok:
-
 
6625
	call	store_segment_prefix_if_necessary
6659
	or	bx,bx
6626
	or	bx,bx
6660
	jz	address_immediate
6627
	jz	address_immediate
6661
	cmp	bx,0F800h
6628
	cmp	bx,0F800h
6662
	je	address_rip_based
6629
	je	address_rip_based
6663
	cmp	bx,0F400h
6630
	cmp	bx,0F400h
Line 6772... Line 6739...
6772
	cmp	[code_type],64
6739
	cmp	[code_type],64
6773
	jne	invalid_address_size
6740
	jne	invalid_address_size
6774
      address_prefix_ok:
6741
      address_prefix_ok:
6775
	cmp	bl,44h
6742
	cmp	bl,44h
6776
	je	swap_base_with_index
6743
	je	invalid_address
6777
	cmp	bl,84h
-
 
6778
	jne	base_register_ok
-
 
6779
      swap_base_with_index:
-
 
6780
	cmp	cl,1
-
 
6781
	jne	invalid_address
-
 
6782
	xchg	bl,bh
-
 
6783
	cmp	bl,44h
-
 
6784
	je	invalid_address
-
 
6785
	cmp	bl,84h
6744
	cmp	bl,84h
6786
	je	invalid_address
6745
	je	invalid_address
6787
      base_register_ok:
6746
	test	bh,1000b
6788
	test	bh,1000b
-
 
6789
	jz	base_code_ok
6747
	jz	base_code_ok
6790
	or	[rex_prefix],41h
6748
	or	[rex_prefix],41h
6791
      base_code_ok:
6749
      base_code_ok:
6792
	test	bl,1000b
6750
	test	bl,1000b
6793
	jz	index_code_ok
6751
	jz	index_code_ok
Line 6840... Line 6798...
6840
	mov	cl,[postbyte_register]
6798
	mov	cl,[postbyte_register]
6841
	shl	cl,3
6799
	shl	cl,3
6842
	or	al,cl
6800
	or	al,cl
6843
	stos	word [edi]
6801
	stos	word [edi]
6844
      address_32bit_value:
6802
	jmp	store_address_32bit_value
6845
	cmp	[code_type],64
-
 
6846
	jne	store_address_32bit_value
-
 
6847
	mov	eax,edx
-
 
6848
	cdq
-
 
6849
	cmp	edx,[address_high]
-
 
6850
	je	address_32bit_value_ok
-
 
6851
	cmp	[error_line],0
-
 
6852
	jne	address_32bit_value_ok
-
 
6853
	mov	edx,[current_line]
-
 
6854
	mov	[error_line],edx
-
 
6855
	mov	[error],value_out_of_range
-
 
6856
      address_32bit_value_ok:
-
 
6857
	mov	edx,eax
-
 
6858
	jmp	store_address_32bit_value
-
 
6859
      sib_address_8bit_value:
6803
      sib_address_8bit_value:
6860
	or	al,01000000b
6804
	or	al,01000000b
6861
	mov	cl,[postbyte_register]
6805
	mov	cl,[postbyte_register]
6862
	shl	cl,3
6806
	shl	cl,3
6863
	or	al,cl
6807
	or	al,cl
Line 6884... Line 6828...
6884
	shl	cl,3
6828
	shl	cl,3
6885
	or	al,cl
6829
	or	al,cl
6886
	stos	word [edi]
6830
	stos	word [edi]
6887
	test	ch,44h
6831
	test	ch,44h
6888
	jnz	address_32bit_value
6832
	jnz	store_address_32bit_value
6889
	test	ch,88h
6833
	test	ch,88h
6890
	jnz	address_32bit_value
6834
	jnz	store_address_32bit_value
6891
	or	ch,ch
6835
	or	ch,ch
6892
	jnz	invalid_address_size
6836
	jnz	invalid_address_size
6893
	jmp	address_32bit_value
6837
	jmp	store_address_32bit_value
6894
      zero_index_register:
6838
      zero_index_register:
6895
	mov	bl,4
6839
	mov	bl,4
6896
	mov	cl,1
6840
	mov	cl,1
6897
	jmp	base_and_index
6841
	jmp	base_and_index
6898
      only_base_register:
6842
      only_base_register:
6899
	mov	al,bh
6843
	mov	al,bh
Line 6917... Line 6861...
6917
	mov	cl,[postbyte_register]
6861
	mov	cl,[postbyte_register]
6918
	shl	cl,3
6862
	shl	cl,3
6919
	or	al,cl
6863
	or	al,cl
6920
	stos	byte [edi]
6864
	stos	byte [edi]
6921
	jmp	address_32bit_value
6865
	jmp	store_address_32bit_value
6922
      simple_address_8bit_value:
6866
      simple_address_8bit_value:
6923
	or	al,01000000b
6867
	or	al,01000000b
6924
	mov	cl,[postbyte_register]
6868
	mov	cl,[postbyte_register]
6925
	shl	cl,3
6869
	shl	cl,3
6926
	or	al,cl
6870
	or	al,cl
6927
	stos	byte [edi]
6871
	stos	byte [edi]
Line 7000... Line 6944...
7000
	test	ch,44h
6944
	test	ch,44h
7001
	jnz	address_immediate_sib_32bit
6945
	jnz	address_immediate_sib_32bit
7002
	test	ch,not 88h
6946
	test	ch,not 88h
7003
	jnz	invalid_address_size
6947
	jnz	invalid_address_size
7004
	xor	eax,eax
6948
      address_immediate_sib_store:
7005
	bt	edx,31
-
 
7006
	sbb	eax,0
-
 
7007
	cmp	eax,[address_high]
-
 
7008
	jne	value_out_of_range
-
 
7009
      address_immediate_sib_store:
-
 
7010
	call	store_instruction_code
6949
	call	store_instruction_code
7011
	mov	al,100b
6950
	mov	al,100b
7012
	mov	ah,100101b
6951
	mov	ah,100101b
7013
	mov	cl,[postbyte_register]
6952
	mov	cl,[postbyte_register]
7014
	shl	cl,3
6953
	shl	cl,3