also added pmovs and updated some port numbers

This commit is contained in:
Julian Hammer
2020-01-16 15:10:41 +01:00
parent 7e4fcf5399
commit 3f55ae2368

View File

@@ -143,31 +143,31 @@ p7 = MOVEntryBuilderIntelWithPort7AGU()
# SNB
snb_mov_instructions = [
# https://www.felixcloutier.com/x86/mov
('mov gpr gpr', ('', 0)),
('mov gpr gpr', ('1*p015', 1)),
('mov gpr mem', ('', 0)),
('mov mem gpr', ('', 0)),
('mov imd gpr', ('', 0)),
('mov imd gpr', ('1*p015', 1)),
('mov imd mem', ('', 0)),
# https://www.felixcloutier.com/x86/movapd
('movapd xmm xmm', ('', 0)),
('movapd xmm xmm', ('1*p5', 1)),
('movapd xmm mem', ('', 0)),
('movapd mem xmm', ('', 0)),
('vmovapd xmm xmm', ('', 0)),
('vmovapd xmm xmm', ('1*p5', 1)),
('vmovapd xmm mem', ('', 0)),
('vmovapd mem xmm', ('', 0)),
('vmovapd ymm ymm', ('', 0)),
('vmovapd ymm ymm', ('1*p5', 1)),
('vmovapd ymm mem', ('', 0)),
('vmovapd mem ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movaps
('movaps xmm xmm', ('', 0)),
('movaps xmm xmm', ('1*p5', 1)),
('movaps xmm mem', ('', 0)),
('movaps mem xmm', ('', 0)),
('vmovaps xmm xmm', ('', 0)),
('vmovaps xmm xmm', ('1*p5', 1)),
('movaps xmm mem', ('', 0)),
('movaps mem xmm', ('', 0)),
('vmovaps ymm ymm', ('', 0)),
('vmovaps ymm ymm', ('1*p5', 1)),
('movaps ymm mem', ('', 0)),
('movaps mem ymm', ('', 0)),
@@ -184,17 +184,17 @@ snb_mov_instructions = [
('movd mem xmm', ('', 0)),
('movq gpr xmm', ('1*p5', 1)),
('movq mem xmm', ('', 0)),
('movd xmm gpr', ('1*p5', 1)),
('movd xmm gpr', ('1*p0', 1)),
('movd xmm mem', ('', 0)),
('movq xmm gpr', ('1*p5', 1)),
('movq xmm gpr', ('1*p0', 1)),
('movq xmm mem', ('', 0)),
('vmovd gpr xmm', ('1*p5', 1)),
('vmovd mem xmm', ('', 0)),
('vmovq gpr xmm', ('1*p5', 1)),
('vmovq mem xmm', ('', 0)),
('vmovd xmm gpr', ('1*p5', 1)),
('vmovd xmm gpr', ('1*p0', 1)),
('vmovd xmm mem', ('', 0)),
('vmovq xmm gpr', ('1*p5', 1)),
('vmovq xmm gpr', ('1*p0', 1)),
('vmovq xmm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movddup
@@ -209,24 +209,24 @@ snb_mov_instructions = [
('movdq2q xmm mm', ('1*p015+1*p5', 1)),
# https://www.felixcloutier.com/x86/movdqa:vmovdqa32:vmovdqa64
('movdqa xmm xmm', ('', 0)),
('movdqa xmm xmm', ('1*p015', 1)),
('movdqa mem xmm', ('', 0)),
('movdqa xmm mem', ('', 0)),
('vmovdqa xmm xmm', ('', 0)),
('vmovdqa xmm xmm', ('1*p015', 1)),
('vmovdqa mem xmm', ('', 0)),
('vmovdqa xmm mem', ('', 0)),
('vmovdqa ymm ymm', ('', 0)),
('vmovdqa ymm ymm', ('1*p05', 1)),
('vmovdqa mem ymm', ('', 0)),
('vmovdqa ymm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movdqu:vmovdqu8:vmovdqu16:vmovdqu32:vmovdqu64
('movdqu xmm xmm', ('', 0)),
('movdqu xmm xmm', ('1*p015', 1)),
('movdqu mem xmm', ('', 0)),
('movdqu xmm mem', ('', 0)),
('vmovdqu xmm xmm', ('', 0)),
('vmovdqu xmm xmm', ('1*p015', 1)),
('vmovdqu mem xmm', ('', 0)),
('vmovdqu xmm mem', ('', 0)),
('vmovdqu ymm ymm', ('', 0)),
('vmovdqu ymm ymm', ('1*p05', 1)),
('vmovdqu mem ymm', ('', 0)),
('vmovdqu ymm mem', ('', 0)),
@@ -254,20 +254,20 @@ snb_mov_instructions = [
('movlpd mem xmm', ('1*p5', 1)),
('vmovlpd mem xmm xmm', ('1*p5', 1)),
('movlpd xmm mem', ('', 0)),
('vmovlpd mem xmm', ('', 0)),
('vmovlpd mem xmm', ('1*p5', 1)),
# https://www.felixcloutier.com/x86/movlps
('movlps mem xmm', ('1*p5', 1)),
('vmovlps mem xmm xmm', ('1*p5', 1)),
('movlps xmm mem', ('', 0)),
('vmovlps mem xmm', ('', 0)),
('vmovlps mem xmm', ('1*p5', 1)),
# https://www.felixcloutier.com/x86/movmskpd
('movmskpd xmm gpr', ('1*p0', 1)),
('vmovmskpd xmm gpr', ('1*p0', 1)),
('vmovmskpd ymm gpr', ('1*p0', 1)),
('movmskpd xmm gpr', ('1*p0', 2)),
('vmovmskpd xmm gpr', ('1*p0', 2)),
('vmovmskpd ymm gpr', ('1*p0', 2)),
# https://www.felixcloutier.com/x86/movmskpd
# https://www.felixcloutier.com/x86/movmskps
('movmskps xmm gpr', ('1*p0', 1)),
('vmovmskps xmm gpr', ('1*p0', 1)),
('vmovmskps ymm gpr', ('1*p0', 1)),
@@ -302,10 +302,10 @@ snb_mov_instructions = [
('movq mm mm', ('', 0)),
('movq mem mm', ('', 0)),
('movq mm mem', ('', 0)),
('movq xmm xmm', ('', 0)),
('movq xmm xmm', ('1*p015', 1)),
('movq mem xmm', ('', 0)),
('movq xmm mem', ('', 0)),
('vmovq xmm xmm', ('', 0)),
('vmovq xmm xmm', ('1*p015', 1)),
('vmovq mem xmm', ('', 0)),
('vmovq xmm mem', ('', 0)),
@@ -317,76 +317,76 @@ snb_mov_instructions = [
# ('movs mem mem', ()),
# https://www.felixcloutier.com/x86/movsd
('movsd xmm xmm', ('', 0)),
('movsd xmm xmm', ('1*p5', 1)),
('movsd mem xmm', ('', 0)),
('movsd xmm mem', ('', 0)),
('vmovsd xmm xmm xmm', ('', 0)),
('vmovsd xmm xmm xmm', ('1*p5', 1)),
('vmovsd mem xmm', ('', 0)),
('vmovsd xmm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movshdup
('movshdup xmm xmm', ('', 0)),
('movshdup xmm xmm', ('1*p5', 1)),
('movshdup mem xmm', ('', 0)),
('vmovshdup xmm xmm', ('', 0)),
('vmovshdup xmm xmm', ('1*p5', 1)),
('vmovshdup mem xmm', ('', 0)),
('vmovshdup ymm ymm', ('', 0)),
('vmovshdup ymm ymm', ('1*p5', 1)),
('vmovshdup mem ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movsldup
('movsldup xmm xmm', ('', 0)),
('movsldup xmm xmm', ('1*p5', 1)),
('movsldup mem xmm', ('', 0)),
('vmovsldup xmm xmm', ('', 0)),
('vmovsldup xmm xmm', ('1*p5', 1)),
('vmovsldup mem xmm', ('', 0)),
('vmovsldup ymm ymm', ('', 0)),
('vmovsldup ymm ymm', ('1*p5', 1)),
('vmovsldup mem ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movss
('movss xmm xmm', ('', 0)),
('movss xmm xmm', ('1*p5', 1)),
('movss mem xmm', ('', 0)),
('vmovss xmm xmm xmm', ('', 0)),
('vmovss xmm xmm xmm', ('1*p5', 1)),
('vmovss mem xmm', ('', 0)),
('vmovss xmm xmm', ('', 0)),
('vmovss xmm xmm', ('1*p5', 1)),
('vmovss xmm mem', ('', 0)),
('movss mem xmm', ('', 0)),
# https://www.felixcloutier.com/x86/movsx:movsxd
('movsx gpr gpr', ('', 0)),
('movsx gpr gpr', ('1*p015', 1)),
('movsx mem gpr', ('', 0)),
('movsxd gpr gpr', ('', 0)),
('movsxd mem gpr', ('', 0)),
('movsb gpr gpr', ('', 0)), # AT&T version
('movsb gpr gpr', ('1*p015', 1)), # AT&T version
('movsb mem gpr', ('', 0)), # AT&T version
('movsw gpr gpr', ('', 0)), # AT&T version
('movsw gpr gpr', ('1*p015', 1)), # AT&T version
('movsw mem gpr', ('', 0)), # AT&T version
# https://www.felixcloutier.com/x86/movupd
('movupd xmm xmm', ('', 0)),
('movupd xmm xmm', ('1*p5', 1)),
('movupd mem xmm', ('', 0)),
('movupd xmm mem', ('', 0)),
('vmovupd xmm xmm', ('', 0)),
('vmovupd xmm xmm', ('1*p5', 1)),
('vmovupd mem xmm', ('', 0)),
('vmovupd xmm mem', ('', 0)),
('vmovupd ymm ymm', ('', 0)),
('vmovupd ymm ymm', ('1*p5', 1)),
('vmovupd mem ymm', ('', 0)),
('vmovupd ymm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movups
('movups xmm xmm', ('', 0)),
('movups xmm xmm', ('1*p5', 1)),
('movups mem xmm', ('', 0)),
('movups xmm mem', ('', 0)),
('vmovups xmm xmm', ('', 0)),
('vmovups xmm xmm', ('1*p5', 1)),
('vmovups mem xmm', ('', 0)),
('vmovups xmm mem', ('', 0)),
('vmovups ymm ymm', ('', 0)),
('vmovups ymm ymm', ('1*p5', 1)),
('vmovups mem ymm', ('', 0)),
('vmovups ymm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movzx
('movzx gpr gpr', ('', 0)),
('movzx gpr gpr', ('1*p015', 1)),
('movzx mem gpr', ('', 0)),
('movzb gpr gpr', ('', 0)), # AT&T version
('movzb gpr gpr', ('1*p015', 1)), # AT&T version
('movzb mem gpr', ('', 0)), # AT&T version
('movzw gpr gpr', ('', 0)), # AT&T version
('movzw gpr gpr', ('1*p015', 1)), # AT&T version
('movzw mem gpr', ('', 0)), # AT&T version
# https://www.felixcloutier.com/x86/cmovcc
@@ -450,18 +450,107 @@ snb_mov_instructions = [
('cmovs mem gpr', ('1*p015+1*p05', 2)),
('cmovz gpr gpr', ('1*p015+1*p05', 2)),
('cmovz mem gpr', ('1*p015+1*p05', 2)),
# https://www.felixcloutier.com/x86/pmovmskb
('pmovmskb gpr mm', ('1*p0', 2)),
('pmovmskb gpr xmm', ('1*p0', 2)),
('vpmovmskb gpr xmm', ('1*p0', 2)),
('vpmovmskb gpr ymm', ('1*p0', 2)),
# https://www.felixcloutier.com/x86/pmovsx
('pmovsxbw xmm xmm', ('1*p15', 1)),
('pmovsxbw mem xmm', ('1*p15', 1)),
('pmovsxbd xmm xmm', ('1*p15', 1)),
('pmovsxbd mem xmm', ('1*p15', 1)),
('pmovsxbq xmm xmm', ('1*p15', 1)),
('pmovsxbq mem xmm', ('1*p15', 1)),
('vpmovsxbw xmm xmm', ('1*p15', 1)),
('vpmovsxbw mem xmm', ('1*p15', 1)),
('vpmovsxbd xmm xmm', ('1*p15', 1)),
('vpmovsxbd mem xmm', ('1*p15', 1)),
('vpmovsxbq xmm xmm', ('1*p15', 1)),
('vpmovsxbq mem xmm', ('1*p15', 1)),
('vpmovsxbw ymm ymm', ('1*p15', 1)),
('vpmovsxbw mem ymm', ('1*p15', 1)),
('vpmovsxbd ymm ymm', ('1*p15', 1)),
('vpmovsxbd mem ymm', ('1*p15', 1)),
('vpmovsxbq ymm ymm', ('1*p15', 1)),
('vpmovsxbq mem ymm', ('1*p15', 1)),
# https://www.felixcloutier.com/x86/pmovzx
('pmovzxbw xmm xmm', ('1*p15', 1)),
('pmovzxbw mem xmm', ('1*p15', 1)),
('vpmovzxbw xmm xmm', ('1*p15', 1)),
('vpmovzxbw mem xmm', ('1*p15', 1)),
('vpmovzxbw ymm ymm', ('1*p15', 1)),
('vpmovzxbw mem ymm', ('1*p15', 1)),
]
snb_description = '\n'.join([np7.process_item(*item) for item in snb_mov_instructions])
ivb_mov_instructions = snb_mov_instructions
ivb_description = '\n'.join([np7.process_item(*item) for item in ivb_mov_instructions])
ivb_mov_instructions = list(OrderedDict(snb_mov_instructions + [
# https://www.felixcloutier.com/x86/mov
('mov gpr gpr', ('', 0)),
('mov imd gpr', ('', 0)),
# https://www.felixcloutier.com/x86/movapd
('movapd xmm xmm', ('', 0)),
('vmovapd xmm xmm', ('', 0)),
('vmovapd ymm ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movaps
('movaps xmm xmm', ('', 0)),
('vmovaps xmm xmm', ('', 0)),
('vmovaps ymm ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movdqa:vmovdqa32:vmovdqa64
('movdqa xmm xmm', ('', 0)),
('vmovdqa xmm xmm', ('', 0)),
('vmovdqa ymm ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movdqu:vmovdqu8:vmovdqu16:vmovdqu32:vmovdqu64
('movdqu xmm xmm', ('', 0)),
('vmovdqu xmm xmm', ('', 0)),
('vmovdqu ymm ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movupd
('movupd xmm xmm', ('', 0)),
('vmovupd xmm xmm', ('', 0)),
('vmovupd ymm ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movupd
('movups xmm xmm', ('', 0)),
('vmovups xmm xmm', ('', 0)),
('vmovups ymm ymm', ('', 0)),
]).items())
hsw_mov_instructions = list(OrderedDict(ivb_mov_instructions + [
# https://www.felixcloutier.com/x86/mov
('mov imd gpr', ('1*p0156', 1)),
('mov gpr gpr', ('1*p0156', 1)),
# https://www.felixcloutier.com/x86/movbe
('movbe gpr mem', ('1*p15', 6)),
('movbe mem gpr', ('1*p15', 6)),
# https://www.felixcloutier.com/x86/movmskpd
('movmskpd xmm gpr', ('1*p0', 3)),
('vmovmskpd xmm gpr', ('1*p0', 3)),
('vmovmskpd ymm gpr', ('1*p0', 3)),
# https://www.felixcloutier.com/x86/movmskps
('movmskps xmm gpr', ('1*p0', 3)),
('vmovmskps xmm gpr', ('1*p0', 3)),
('vmovmskps ymm gpr', ('1*p0', 3)),
# https://www.felixcloutier.com/x86/movsx:movsxd
('movsx gpr gpr', ('1*p0156', 1)),
('movsb gpr gpr', ('1*p015', 1)), # AT&T version
('movsw gpr gpr', ('1*p015', 1)), # AT&T version
# https://www.felixcloutier.com/x86/movzx
('movzx gpr gpr', ('1*p0156', 1)),
('movzb gpr gpr', ('1*p0156', 1)), # AT&T version
('movzw gpr gpr', ('1*p0156', 1)), # AT&T version
# https://www.felixcloutier.com/x86/cmovcc
('cmova gpr gpr', ('1*p0156+2*p06', 2)),
('cmova mem gpr', ('1*p0156+2*p06', 2)),
@@ -523,8 +612,41 @@ hsw_mov_instructions = list(OrderedDict(ivb_mov_instructions + [
('cmovs mem gpr', ('1*p0156+1*p06', 2)),
('cmovz gpr gpr', ('1*p0156+1*p06', 2)),
('cmovz mem gpr', ('1*p0156+1*p06', 2)),
# https://www.felixcloutier.com/x86/pmovmskb
('pmovmskb gpr mm', ('1*p0', 3)),
('pmovmskb gpr xmm', ('1*p0', 3)),
('vpmovmskb gpr xmm', ('1*p0', 3)),
('vpmovmskb gpr ymm', ('1*p0', 3)),
# https://www.felixcloutier.com/x86/pmovsx
('pmovsxbw xmm xmm', ('1*p5', 1)),
('pmovsxbw mem xmm', ('1*p5', 1)),
('pmovsxbd xmm xmm', ('1*p5', 1)),
('pmovsxbd mem xmm', ('1*p5', 1)),
('pmovsxbq xmm xmm', ('1*p5', 1)),
('pmovsxbq mem xmm', ('1*p5', 1)),
('vpmovsxbw xmm xmm', ('1*p5', 1)),
('vpmovsxbw mem xmm', ('1*p5', 1)),
('vpmovsxbd xmm xmm', ('1*p5', 1)),
('vpmovsxbd mem xmm', ('1*p5', 1)),
('vpmovsxbq xmm xmm', ('1*p5', 1)),
('vpmovsxbq mem xmm', ('1*p5', 1)),
('vpmovsxbw ymm ymm', ('1*p5', 1)),
('vpmovsxbw mem ymm', ('1*p5', 1)),
('vpmovsxbd ymm ymm', ('1*p5', 1)),
('vpmovsxbd mem ymm', ('1*p5', 1)),
('vpmovsxbq ymm ymm', ('1*p5', 1)),
('vpmovsxbq mem ymm', ('1*p5', 1)),
# https://www.felixcloutier.com/x86/pmovzx
('pmovzxbw xmm xmm', ('1*p5', 1)),
('pmovzxbw mem xmm', ('1*p5', 1)),
('vpmovzxbw xmm xmm', ('1*p5', 1)),
('vpmovzxbw mem xmm', ('1*p5', 1)),
('vpmovzxbw ymm ymm', ('1*p5', 1)),
('vpmovzxbw mem ymm', ('1*p5', 1)),
]).items())
hsw_description = '\n'.join([p7.process_item(*item) for item in hsw_mov_instructions])
bdw_mov_instructions = list(OrderedDict(hsw_mov_instructions + [
# https://www.felixcloutier.com/x86/cmovcc
@@ -589,20 +711,34 @@ bdw_mov_instructions = list(OrderedDict(hsw_mov_instructions + [
('cmovz gpr gpr', ('1*p06', 1)),
('cmovz mem gpr', ('1*p06', 1)),
]).items())
bdw_description = '\n'.join([p7.process_item(*item) for item in bdw_mov_instructions])
skx_mov_instructions = list(OrderedDict(bdw_mov_instructions + [
# TODO with masking! https://www.felixcloutier.com/x86/movapd
# TODO with masking! https://www.felixcloutier.com/x86/movaps
# https://www.felixcloutier.com/x86/movapd
# TODO with masking!
# TODO the following may eliminate or be bound to 1*p0156:
# ('movapd xmm xmm', ('1*p5', 1)),
# ('vmovapd xmm xmm', ('1*p5', 1)),
# ('vmovapd ymm ymm', ('1*p5', 1)),
# https://www.felixcloutier.com/x86/movaps
# TODO with masking!
# TODO the following may eliminate or be bound to 1*p0156:
# ('movaps xmm xmm', ('1*p5', 1)),
# ('vmovaps xmm xmm', ('1*p5', 1)),
# ('vmovaps ymm ymm', ('1*p5', 1)),
# https://www.felixcloutier.com/x86/movbe
('movbe gpr mem', ('1*p15', 4)),
('movbe mem gpr', ('1*p15', 4)),
# TODO with masking! https://www.felixcloutier.com/x86/movddup
# TODO with masking! https://www.felixcloutier.com/x86/movdqa:vmovdqa32:vmovdqa64
# TODO with masking! https://www.felixcloutier.com/x86/movdqu:vmovdqu8:vmovdqu16:vmovdqu32:vmovdqu64
# https://www.felixcloutier.com/x86/movddup
# TODO with masking!
# https://www.felixcloutier.com/x86/movdqa:vmovdqa32:vmovdqa64
# TODO with masking!
# https://www.felixcloutier.com/x86/movdqu:vmovdqu8:vmovdqu16:vmovdqu32:vmovdqu64
# TODO with masking!
# https://www.felixcloutier.com/x86/movntdq
('vmovntdq zmm mem', ('', 0)), # TODO NT-store: what latency to use?
@@ -619,14 +755,29 @@ skx_mov_instructions = list(OrderedDict(bdw_mov_instructions + [
# https://www.felixcloutier.com/x86/movq2dq
('movq2dq mm xmm', ('1*p0+1*p015', 1)),
# TODO with masking! https://www.felixcloutier.com/x86/movsd
# TODO with masking! https://www.felixcloutier.com/x86/movshdup
# TODO with masking! https://www.felixcloutier.com/x86/movsldup
# TODO with masking! https://www.felixcloutier.com/x86/movss
# TODO with masking! https://www.felixcloutier.com/x86/movupd
# TODO with masking! https://www.felixcloutier.com/x86/movups
# https://www.felixcloutier.com/x86/movsd
# TODO with masking!
# https://www.felixcloutier.com/x86/movshdup
# TODO with masking!
# https://www.felixcloutier.com/x86/movsldup
# TODO with masking!
# https://www.felixcloutier.com/x86/movss
# TODO with masking!
# https://www.felixcloutier.com/x86/movupd
# TODO with masking!
# https://www.felixcloutier.com/x86/movups
# TODO with masking!
# https://www.felixcloutier.com/x86/pmovsx
# TODO with masking!
('vpmovsxbw ymm zmm', ('1*p5', 3)),
('vpmovsxbw mem zmm', ('1*p5', 1)),
]).items())
skx_description = '\n'.join([p7.process_item(*item) for item in skx_mov_instructions])
csx_mov_instructions = OrderedDict(skx_mov_instructions + [
@@ -634,8 +785,8 @@ csx_mov_instructions = OrderedDict(skx_mov_instructions + [
def get_description(arch, rhs_comment=None):
descriptions = {
'snb': '\n'.join([p7.process_item(*item) for item in snb_mov_instructions]),
'ivb': '\n'.join([p7.process_item(*item) for item in ivb_mov_instructions]),
'snb': '\n'.join([np7.process_item(*item) for item in snb_mov_instructions]),
'ivb': '\n'.join([np7.process_item(*item) for item in ivb_mov_instructions]),
'hsw': '\n'.join([p7.process_item(*item) for item in hsw_mov_instructions]),
'bdw': '\n'.join([p7.process_item(*item) for item in bdw_mov_instructions]),
'skx': '\n'.join([p7.process_item(*item) for item in skx_mov_instructions]),
@@ -649,7 +800,7 @@ def get_description(arch, rhs_comment=None):
commented_description = ""
for l in descriptions[arch].split('\n'):
commented_description += ("{:<"+str(max_length)+"} # {}\n").format(l, rhs_comment)
commented_description += ("{:<"+str(max_length)+"} # {}\n").format(l, rhs_comment)
description = commented_description
return description
@@ -661,7 +812,7 @@ if __name__ == '__main__':
sys.exit(0)
try:
print(get_description(sys.argv[1], rhs_comment="by "+' '.join(sys.argv)))
print(get_description(sys.argv[1], rhs_comment=' '.join(sys.argv)))
except KeyError:
print("Unknown architecture.")
sys.exit(1)