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
snb_mov_instructions = [ snb_mov_instructions = [
# https://www.felixcloutier.com/x86/mov # https://www.felixcloutier.com/x86/mov
('mov gpr gpr', ('', 0)), ('mov gpr gpr', ('1*p015', 1)),
('mov gpr mem', ('', 0)), ('mov gpr mem', ('', 0)),
('mov mem gpr', ('', 0)), ('mov mem gpr', ('', 0)),
('mov imd gpr', ('', 0)), ('mov imd gpr', ('1*p015', 1)),
('mov imd mem', ('', 0)), ('mov imd mem', ('', 0)),
# https://www.felixcloutier.com/x86/movapd # https://www.felixcloutier.com/x86/movapd
('movapd xmm xmm', ('', 0)), ('movapd xmm xmm', ('1*p5', 1)),
('movapd xmm mem', ('', 0)), ('movapd xmm mem', ('', 0)),
('movapd mem xmm', ('', 0)), ('movapd mem xmm', ('', 0)),
('vmovapd xmm xmm', ('', 0)), ('vmovapd xmm xmm', ('1*p5', 1)),
('vmovapd xmm mem', ('', 0)), ('vmovapd xmm mem', ('', 0)),
('vmovapd mem xmm', ('', 0)), ('vmovapd mem xmm', ('', 0)),
('vmovapd ymm ymm', ('', 0)), ('vmovapd ymm ymm', ('1*p5', 1)),
('vmovapd ymm mem', ('', 0)), ('vmovapd ymm mem', ('', 0)),
('vmovapd mem ymm', ('', 0)), ('vmovapd mem ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movaps # https://www.felixcloutier.com/x86/movaps
('movaps xmm xmm', ('', 0)), ('movaps xmm xmm', ('1*p5', 1)),
('movaps xmm mem', ('', 0)), ('movaps xmm mem', ('', 0)),
('movaps mem xmm', ('', 0)), ('movaps mem xmm', ('', 0)),
('vmovaps xmm xmm', ('', 0)), ('vmovaps xmm xmm', ('1*p5', 1)),
('movaps xmm mem', ('', 0)), ('movaps xmm mem', ('', 0)),
('movaps mem xmm', ('', 0)), ('movaps mem xmm', ('', 0)),
('vmovaps ymm ymm', ('', 0)), ('vmovaps ymm ymm', ('1*p5', 1)),
('movaps ymm mem', ('', 0)), ('movaps ymm mem', ('', 0)),
('movaps mem ymm', ('', 0)), ('movaps mem ymm', ('', 0)),
@@ -184,17 +184,17 @@ snb_mov_instructions = [
('movd mem xmm', ('', 0)), ('movd mem xmm', ('', 0)),
('movq gpr xmm', ('1*p5', 1)), ('movq gpr xmm', ('1*p5', 1)),
('movq mem xmm', ('', 0)), ('movq mem xmm', ('', 0)),
('movd xmm gpr', ('1*p5', 1)), ('movd xmm gpr', ('1*p0', 1)),
('movd xmm mem', ('', 0)), ('movd xmm mem', ('', 0)),
('movq xmm gpr', ('1*p5', 1)), ('movq xmm gpr', ('1*p0', 1)),
('movq xmm mem', ('', 0)), ('movq xmm mem', ('', 0)),
('vmovd gpr xmm', ('1*p5', 1)), ('vmovd gpr xmm', ('1*p5', 1)),
('vmovd mem xmm', ('', 0)), ('vmovd mem xmm', ('', 0)),
('vmovq gpr xmm', ('1*p5', 1)), ('vmovq gpr xmm', ('1*p5', 1)),
('vmovq mem xmm', ('', 0)), ('vmovq mem xmm', ('', 0)),
('vmovd xmm gpr', ('1*p5', 1)), ('vmovd xmm gpr', ('1*p0', 1)),
('vmovd xmm mem', ('', 0)), ('vmovd xmm mem', ('', 0)),
('vmovq xmm gpr', ('1*p5', 1)), ('vmovq xmm gpr', ('1*p0', 1)),
('vmovq xmm mem', ('', 0)), ('vmovq xmm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movddup # https://www.felixcloutier.com/x86/movddup
@@ -209,24 +209,24 @@ snb_mov_instructions = [
('movdq2q xmm mm', ('1*p015+1*p5', 1)), ('movdq2q xmm mm', ('1*p015+1*p5', 1)),
# https://www.felixcloutier.com/x86/movdqa:vmovdqa32:vmovdqa64 # https://www.felixcloutier.com/x86/movdqa:vmovdqa32:vmovdqa64
('movdqa xmm xmm', ('', 0)), ('movdqa xmm xmm', ('1*p015', 1)),
('movdqa mem xmm', ('', 0)), ('movdqa mem xmm', ('', 0)),
('movdqa xmm mem', ('', 0)), ('movdqa xmm mem', ('', 0)),
('vmovdqa xmm xmm', ('', 0)), ('vmovdqa xmm xmm', ('1*p015', 1)),
('vmovdqa mem xmm', ('', 0)), ('vmovdqa mem xmm', ('', 0)),
('vmovdqa xmm mem', ('', 0)), ('vmovdqa xmm mem', ('', 0)),
('vmovdqa ymm ymm', ('', 0)), ('vmovdqa ymm ymm', ('1*p05', 1)),
('vmovdqa mem ymm', ('', 0)), ('vmovdqa mem ymm', ('', 0)),
('vmovdqa ymm mem', ('', 0)), ('vmovdqa ymm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movdqu:vmovdqu8:vmovdqu16:vmovdqu32:vmovdqu64 # 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 mem xmm', ('', 0)),
('movdqu xmm mem', ('', 0)), ('movdqu xmm mem', ('', 0)),
('vmovdqu xmm xmm', ('', 0)), ('vmovdqu xmm xmm', ('1*p015', 1)),
('vmovdqu mem xmm', ('', 0)), ('vmovdqu mem xmm', ('', 0)),
('vmovdqu xmm mem', ('', 0)), ('vmovdqu xmm mem', ('', 0)),
('vmovdqu ymm ymm', ('', 0)), ('vmovdqu ymm ymm', ('1*p05', 1)),
('vmovdqu mem ymm', ('', 0)), ('vmovdqu mem ymm', ('', 0)),
('vmovdqu ymm mem', ('', 0)), ('vmovdqu ymm mem', ('', 0)),
@@ -254,20 +254,20 @@ snb_mov_instructions = [
('movlpd mem xmm', ('1*p5', 1)), ('movlpd mem xmm', ('1*p5', 1)),
('vmovlpd mem xmm xmm', ('1*p5', 1)), ('vmovlpd mem xmm xmm', ('1*p5', 1)),
('movlpd xmm mem', ('', 0)), ('movlpd xmm mem', ('', 0)),
('vmovlpd mem xmm', ('', 0)), ('vmovlpd mem xmm', ('1*p5', 1)),
# https://www.felixcloutier.com/x86/movlps # https://www.felixcloutier.com/x86/movlps
('movlps mem xmm', ('1*p5', 1)), ('movlps mem xmm', ('1*p5', 1)),
('vmovlps mem xmm xmm', ('1*p5', 1)), ('vmovlps mem xmm xmm', ('1*p5', 1)),
('movlps xmm mem', ('', 0)), ('movlps xmm mem', ('', 0)),
('vmovlps mem xmm', ('', 0)), ('vmovlps mem xmm', ('1*p5', 1)),
# https://www.felixcloutier.com/x86/movmskpd # https://www.felixcloutier.com/x86/movmskpd
('movmskpd xmm gpr', ('1*p0', 1)), ('movmskpd xmm gpr', ('1*p0', 2)),
('vmovmskpd xmm gpr', ('1*p0', 1)), ('vmovmskpd xmm gpr', ('1*p0', 2)),
('vmovmskpd ymm gpr', ('1*p0', 1)), ('vmovmskpd ymm gpr', ('1*p0', 2)),
# https://www.felixcloutier.com/x86/movmskpd # https://www.felixcloutier.com/x86/movmskps
('movmskps xmm gpr', ('1*p0', 1)), ('movmskps xmm gpr', ('1*p0', 1)),
('vmovmskps xmm gpr', ('1*p0', 1)), ('vmovmskps xmm gpr', ('1*p0', 1)),
('vmovmskps ymm gpr', ('1*p0', 1)), ('vmovmskps ymm gpr', ('1*p0', 1)),
@@ -302,10 +302,10 @@ snb_mov_instructions = [
('movq mm mm', ('', 0)), ('movq mm mm', ('', 0)),
('movq mem mm', ('', 0)), ('movq mem mm', ('', 0)),
('movq mm mem', ('', 0)), ('movq mm mem', ('', 0)),
('movq xmm xmm', ('', 0)), ('movq xmm xmm', ('1*p015', 1)),
('movq mem xmm', ('', 0)), ('movq mem xmm', ('', 0)),
('movq xmm mem', ('', 0)), ('movq xmm mem', ('', 0)),
('vmovq xmm xmm', ('', 0)), ('vmovq xmm xmm', ('1*p015', 1)),
('vmovq mem xmm', ('', 0)), ('vmovq mem xmm', ('', 0)),
('vmovq xmm mem', ('', 0)), ('vmovq xmm mem', ('', 0)),
@@ -317,76 +317,76 @@ snb_mov_instructions = [
# ('movs mem mem', ()), # ('movs mem mem', ()),
# https://www.felixcloutier.com/x86/movsd # https://www.felixcloutier.com/x86/movsd
('movsd xmm xmm', ('', 0)), ('movsd xmm xmm', ('1*p5', 1)),
('movsd mem xmm', ('', 0)), ('movsd mem xmm', ('', 0)),
('movsd xmm mem', ('', 0)), ('movsd xmm mem', ('', 0)),
('vmovsd xmm xmm xmm', ('', 0)), ('vmovsd xmm xmm xmm', ('1*p5', 1)),
('vmovsd mem xmm', ('', 0)), ('vmovsd mem xmm', ('', 0)),
('vmovsd xmm mem', ('', 0)), ('vmovsd xmm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movshdup # https://www.felixcloutier.com/x86/movshdup
('movshdup xmm xmm', ('', 0)), ('movshdup xmm xmm', ('1*p5', 1)),
('movshdup mem xmm', ('', 0)), ('movshdup mem xmm', ('', 0)),
('vmovshdup xmm xmm', ('', 0)), ('vmovshdup xmm xmm', ('1*p5', 1)),
('vmovshdup mem xmm', ('', 0)), ('vmovshdup mem xmm', ('', 0)),
('vmovshdup ymm ymm', ('', 0)), ('vmovshdup ymm ymm', ('1*p5', 1)),
('vmovshdup mem ymm', ('', 0)), ('vmovshdup mem ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movsldup # https://www.felixcloutier.com/x86/movsldup
('movsldup xmm xmm', ('', 0)), ('movsldup xmm xmm', ('1*p5', 1)),
('movsldup mem xmm', ('', 0)), ('movsldup mem xmm', ('', 0)),
('vmovsldup xmm xmm', ('', 0)), ('vmovsldup xmm xmm', ('1*p5', 1)),
('vmovsldup mem xmm', ('', 0)), ('vmovsldup mem xmm', ('', 0)),
('vmovsldup ymm ymm', ('', 0)), ('vmovsldup ymm ymm', ('1*p5', 1)),
('vmovsldup mem ymm', ('', 0)), ('vmovsldup mem ymm', ('', 0)),
# https://www.felixcloutier.com/x86/movss # https://www.felixcloutier.com/x86/movss
('movss xmm xmm', ('', 0)), ('movss xmm xmm', ('1*p5', 1)),
('movss mem xmm', ('', 0)), ('movss mem xmm', ('', 0)),
('vmovss xmm xmm xmm', ('', 0)), ('vmovss xmm xmm xmm', ('1*p5', 1)),
('vmovss mem xmm', ('', 0)), ('vmovss mem xmm', ('', 0)),
('vmovss xmm xmm', ('', 0)), ('vmovss xmm xmm', ('1*p5', 1)),
('vmovss xmm mem', ('', 0)), ('vmovss xmm mem', ('', 0)),
('movss mem xmm', ('', 0)), ('movss mem xmm', ('', 0)),
# https://www.felixcloutier.com/x86/movsx:movsxd # https://www.felixcloutier.com/x86/movsx:movsxd
('movsx gpr gpr', ('', 0)), ('movsx gpr gpr', ('1*p015', 1)),
('movsx mem gpr', ('', 0)), ('movsx mem gpr', ('', 0)),
('movsxd gpr gpr', ('', 0)), ('movsxd gpr gpr', ('', 0)),
('movsxd mem 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 ('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 ('movsw mem gpr', ('', 0)), # AT&T version
# https://www.felixcloutier.com/x86/movupd # https://www.felixcloutier.com/x86/movupd
('movupd xmm xmm', ('', 0)), ('movupd xmm xmm', ('1*p5', 1)),
('movupd mem xmm', ('', 0)), ('movupd mem xmm', ('', 0)),
('movupd xmm mem', ('', 0)), ('movupd xmm mem', ('', 0)),
('vmovupd xmm xmm', ('', 0)), ('vmovupd xmm xmm', ('1*p5', 1)),
('vmovupd mem xmm', ('', 0)), ('vmovupd mem xmm', ('', 0)),
('vmovupd xmm mem', ('', 0)), ('vmovupd xmm mem', ('', 0)),
('vmovupd ymm ymm', ('', 0)), ('vmovupd ymm ymm', ('1*p5', 1)),
('vmovupd mem ymm', ('', 0)), ('vmovupd mem ymm', ('', 0)),
('vmovupd ymm mem', ('', 0)), ('vmovupd ymm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movups # https://www.felixcloutier.com/x86/movups
('movups xmm xmm', ('', 0)), ('movups xmm xmm', ('1*p5', 1)),
('movups mem xmm', ('', 0)), ('movups mem xmm', ('', 0)),
('movups xmm mem', ('', 0)), ('movups xmm mem', ('', 0)),
('vmovups xmm xmm', ('', 0)), ('vmovups xmm xmm', ('1*p5', 1)),
('vmovups mem xmm', ('', 0)), ('vmovups mem xmm', ('', 0)),
('vmovups xmm mem', ('', 0)), ('vmovups xmm mem', ('', 0)),
('vmovups ymm ymm', ('', 0)), ('vmovups ymm ymm', ('1*p5', 1)),
('vmovups mem ymm', ('', 0)), ('vmovups mem ymm', ('', 0)),
('vmovups ymm mem', ('', 0)), ('vmovups ymm mem', ('', 0)),
# https://www.felixcloutier.com/x86/movzx # https://www.felixcloutier.com/x86/movzx
('movzx gpr gpr', ('', 0)), ('movzx gpr gpr', ('1*p015', 1)),
('movzx mem gpr', ('', 0)), ('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 ('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 ('movzw mem gpr', ('', 0)), # AT&T version
# https://www.felixcloutier.com/x86/cmovcc # https://www.felixcloutier.com/x86/cmovcc
@@ -450,18 +450,107 @@ snb_mov_instructions = [
('cmovs mem gpr', ('1*p015+1*p05', 2)), ('cmovs mem gpr', ('1*p015+1*p05', 2)),
('cmovz gpr gpr', ('1*p015+1*p05', 2)), ('cmovz gpr gpr', ('1*p015+1*p05', 2)),
('cmovz mem 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_mov_instructions = list(OrderedDict(snb_mov_instructions + [
ivb_description = '\n'.join([np7.process_item(*item) for item in ivb_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 + [ 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 # https://www.felixcloutier.com/x86/movbe
('movbe gpr mem', ('1*p15', 6)), ('movbe gpr mem', ('1*p15', 6)),
('movbe mem gpr', ('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 # https://www.felixcloutier.com/x86/cmovcc
('cmova gpr gpr', ('1*p0156+2*p06', 2)), ('cmova gpr gpr', ('1*p0156+2*p06', 2)),
('cmova mem 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)), ('cmovs mem gpr', ('1*p0156+1*p06', 2)),
('cmovz gpr gpr', ('1*p0156+1*p06', 2)), ('cmovz gpr gpr', ('1*p0156+1*p06', 2)),
('cmovz mem 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()) ]).items())
hsw_description = '\n'.join([p7.process_item(*item) for item in hsw_mov_instructions])
bdw_mov_instructions = list(OrderedDict(hsw_mov_instructions + [ bdw_mov_instructions = list(OrderedDict(hsw_mov_instructions + [
# https://www.felixcloutier.com/x86/cmovcc # 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 gpr gpr', ('1*p06', 1)),
('cmovz mem gpr', ('1*p06', 1)), ('cmovz mem gpr', ('1*p06', 1)),
]).items()) ]).items())
bdw_description = '\n'.join([p7.process_item(*item) for item in bdw_mov_instructions])
skx_mov_instructions = list(OrderedDict(bdw_mov_instructions + [ skx_mov_instructions = list(OrderedDict(bdw_mov_instructions + [
# TODO with masking! https://www.felixcloutier.com/x86/movapd # https://www.felixcloutier.com/x86/movapd
# TODO with masking! https://www.felixcloutier.com/x86/movaps # 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 # https://www.felixcloutier.com/x86/movbe
('movbe gpr mem', ('1*p15', 4)), ('movbe gpr mem', ('1*p15', 4)),
('movbe mem gpr', ('1*p15', 4)), ('movbe mem gpr', ('1*p15', 4)),
# TODO with masking! https://www.felixcloutier.com/x86/movddup # https://www.felixcloutier.com/x86/movddup
# TODO with masking! https://www.felixcloutier.com/x86/movdqa:vmovdqa32:vmovdqa64 # TODO with masking!
# TODO with masking! https://www.felixcloutier.com/x86/movdqu:vmovdqu8:vmovdqu16:vmovdqu32:vmovdqu64
# 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 # https://www.felixcloutier.com/x86/movntdq
('vmovntdq zmm mem', ('', 0)), # TODO NT-store: what latency to use? ('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 # https://www.felixcloutier.com/x86/movq2dq
('movq2dq mm xmm', ('1*p0+1*p015', 1)), ('movq2dq mm xmm', ('1*p0+1*p015', 1)),
# TODO with masking! https://www.felixcloutier.com/x86/movsd # https://www.felixcloutier.com/x86/movsd
# TODO with masking! https://www.felixcloutier.com/x86/movshdup # TODO with masking!
# TODO with masking! https://www.felixcloutier.com/x86/movsldup
# TODO with masking! https://www.felixcloutier.com/x86/movss # https://www.felixcloutier.com/x86/movshdup
# TODO with masking! https://www.felixcloutier.com/x86/movupd # TODO with masking!
# TODO with masking! https://www.felixcloutier.com/x86/movups
# 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()) ]).items())
skx_description = '\n'.join([p7.process_item(*item) for item in skx_mov_instructions])
csx_mov_instructions = OrderedDict(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): def get_description(arch, rhs_comment=None):
descriptions = { descriptions = {
'snb': '\n'.join([p7.process_item(*item) for item in snb_mov_instructions]), 'snb': '\n'.join([np7.process_item(*item) for item in snb_mov_instructions]),
'ivb': '\n'.join([p7.process_item(*item) for item in ivb_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]), '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]), '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]), '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 = "" commented_description = ""
for l in descriptions[arch].split('\n'): 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 description = commented_description
return description return description
@@ -661,7 +812,7 @@ if __name__ == '__main__':
sys.exit(0) sys.exit(0)
try: 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: except KeyError:
print("Unknown architecture.") print("Unknown architecture.")
sys.exit(1) sys.exit(1)