some more instructions (esp. AT&T naming)

This commit is contained in:
Julian Hammer
2020-01-17 16:30:00 +01:00
parent b2bb2cd003
commit daa566329c
7 changed files with 671 additions and 4828 deletions

View File

@@ -170,18 +170,6 @@ instruction_forms:
port_pressure: [[3, '0156']]
throughput: 0.75
uops: 3
- name: '{store} SHRD'
operands:
- class: immediate
imd: int
- class: register
name: gpr
- class: register
name: gpr
latency: 3
port_pressure: [[1, '1']]
throughput: 1.0
uops: 1
- name: wait
operands: []
latency: 1
@@ -222,6 +210,62 @@ instruction_forms:
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: cbtw # AT&T version of CBW
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cwtl # AT&T version of CWDE
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cwtd # AT&T version of CWD
operands: []
latency: 2
port_pressure: [[1, '0156'], [1, '06']]
throughput: 0.75
uops: 2
- name: cltd # AT&T version of CDQ
operands: []
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: cltq # AT&T version of CDQE
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cqtq # AT&T version of CQO
operands: []
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: [cmpeqsd, cmpltsd, cmplesd, cmpunordsd, cmpneqsd, cmpnltsd, cmpnlesd, cmpordsd]
# same as CMPSD xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: [cmpeqss, cmpltss, cmpless, cmpunordss, cmpneqss, cmpnltss, cmpnless, cmpordss]
# same as CMPSS xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: cmpps
operands:
- class: immediate
@@ -681,18 +725,38 @@ instruction_forms:
port_pressure: [[1, '23'], [1, [2D, 3D]]]
throughput: 0.5
uops: 2
- name: '{store} MOVDQA'
- name: [vcmpeqsd, vcmpltsd, vcmplesd, vcmpunordsd, vcmpneqsd, vcmpnltsd, vcmpnlesd, vcmpordsd,
vcmpeq_uqsd, vcmpngesd, vcmpngtsd, vcmpfalsesd, vcmpneq_oqsd, vcmpgesd, vcmpgtsd,
vcmptruesd, vcmpeq_ossd, vcmplt_oqsd, vcmple_oqsd, vcmpunord_ssd, vcmpneq_ussd,
vcmpnlt_uqsd, vcmpnle_uqsd, vcmpord_ssd, vcmpeq_ussd, vcmpnge_uqsd, vcmpngt_uqsd,
vcmpfalse_ossd, vcmpneq_ossd, vcmpge_oqsd, vcmpgt_oqsd, vcmptrue_ussd]
# same as VCMPSD xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 0
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: [vcmpeqss, vcmpltss, vcmpless, vcmpunordss, vcmpneqss, vcmpnltss, vcmpnless, vcmpordss,
vcmpeq_uqss, vcmpngess, vcmpngtss, vcmpfalsess, vcmpneq_oqss, vcmpgess, vcmpgtss,
vcmptruess, vcmpeq_osss, vcmplt_oqss, vcmple_oqss, vcmpunord_sss, vcmpneq_usss,
vcmpnlt_uqss, vcmpnle_uqss, vcmpord_sss, vcmpeq_usss, vcmpnge_uqss, vcmpngt_uqss,
vcmpfalse_osss, vcmpneq_osss, vcmpge_oqss, vcmpgt_oqss, vcmptrue_usss]
# same as VCMPSS xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: vcvtss2sd
operands:
- class: register

View File

@@ -209,6 +209,42 @@ instruction_forms:
port_pressure: [[1, '01']] # uops.info (measured)
throughput: 0.5
uops: 1
- name: cbtw # AT&T version of CBW
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cwtl # AT&T version of CWDE
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cwtd # AT&T version of CWD
operands: []
latency: 2
port_pressure: [[1, '0156'], [1, '06']]
throughput: 0.75
uops: 2
- name: cltd # AT&T version of CDQ
operands: []
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: cltq # AT&T version of CDQE
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cqtq # AT&T version of CQO
operands: []
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: cmp
operands:
- class: register
@@ -228,6 +264,26 @@ instruction_forms:
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: [cmpeqsd, cmpltsd, cmplesd, cmpunordsd, cmpneqsd, cmpnltsd, cmpnlesd, cmpordsd]
# same as CMPSD xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
- name: [cmpeqss, cmpltss, cmpless, cmpunordss, cmpneqss, cmpnltss, cmpnless, cmpordss]
# same as CMPSS xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 4
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
- name: cmppd
operands:
- class: immediate
@@ -526,6 +582,38 @@ instruction_forms:
throughput: 0.5
latency: 4.0 # 1"*"p01
port_pressure: [[1, '01']]
- name: [vcmpeqsd, vcmpltsd, vcmplesd, vcmpunordsd, vcmpneqsd, vcmpnltsd, vcmpnlesd, vcmpordsd,
vcmpeq_uqsd, vcmpngesd, vcmpngtsd, vcmpfalsesd, vcmpneq_oqsd, vcmpgesd, vcmpgtsd,
vcmptruesd, vcmpeq_ossd, vcmplt_oqsd, vcmple_oqsd, vcmpunord_ssd, vcmpneq_ussd,
vcmpnlt_uqsd, vcmpnle_uqsd, vcmpord_ssd, vcmpeq_ussd, vcmpnge_uqsd, vcmpngt_uqsd,
vcmpfalse_ossd, vcmpneq_ossd, vcmpge_oqsd, vcmpgt_oqsd, vcmptrue_ussd]
# same as VCMPSD xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 4
port_pressure: [[1, '01']]
throughput: 1
- name: [vcmpeqss, vcmpltss, vcmpless, vcmpunordss, vcmpneqss, vcmpnltss, vcmpnless, vcmpordss,
vcmpeq_uqss, vcmpngess, vcmpngtss, vcmpfalsess, vcmpneq_oqss, vcmpgess, vcmpgtss,
vcmptruess, vcmpeq_osss, vcmplt_oqss, vcmple_oqss, vcmpunord_sss, vcmpneq_usss,
vcmpnlt_uqss, vcmpnle_uqss, vcmpord_sss, vcmpeq_usss, vcmpnge_uqss, vcmpngt_uqss,
vcmpfalse_osss, vcmpneq_osss, vcmpge_oqss, vcmpgt_oqss, vcmptrue_usss]
# same as VCMPSS xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 4
port_pressure: [[1, '01']]
throughput: 1
- name: vcvtsi2ss
operands:
- class: register
@@ -627,39 +715,6 @@ instruction_forms:
throughput: 0.5
latency: 4.0 # 1"*"p01
port_pressure: [[1, '05']]
- name: vpsrld # JH: assumed from SKX
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 1
port_pressure: [[1, '0'], [1, '15']]
throughput: 1
- name: VXORPS # JH: assumed from SKX
operands:
- class: register
name: ymm
- class: register
name: ymm
- class: register
name: ymm
latency: 1
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
- name: VXORPD # JH: assumed from SKX
operands:
- class: register
name: ymm
- class: register
name: ymm
- class: register
name: ymm
latency: 1
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
- name: wait
operands: []
latency: 1

View File

@@ -191,6 +191,62 @@ instruction_forms:
port_pressure: [[1, '0156'], [1, '23']]
throughput: 0.5
uops: 3
- name: cbtw # AT&T version of CBW
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cwtl # AT&T version of CWDE
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cwtd # AT&T version of CWD
operands: []
latency: 2
port_pressure: [[1, '0156'], [1, '06']]
throughput: 0.75
uops: 2
- name: cltd # AT&T version of CDQ
operands: []
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: cltq # AT&T version of CDQE
operands: []
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: cqtq # AT&T version of CQO
operands: []
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: [cmpeqsd, cmpltsd, cmplesd, cmpunordsd, cmpneqsd, cmpnltsd, cmpnlesd, cmpordsd]
# same as CMPSD xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: [cmpeqss, cmpltss, cmpless, cmpunordss, cmpneqss, cmpnltss, cmpnless, cmpordss]
# same as CMPSS xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: cmpps
operands:
- class: immediate
@@ -375,6 +431,38 @@ instruction_forms:
port_pressure: [[1, '1']] # JH: according to uops.info
throughput: 1.0 # JH: measured on phinally
uops: 1
- name: [vcmpeqsd, vcmpltsd, vcmplesd, vcmpunordsd, vcmpneqsd, vcmpnltsd, vcmpnlesd, vcmpordsd,
vcmpeq_uqsd, vcmpngesd, vcmpngtsd, vcmpfalsesd, vcmpneq_oqsd, vcmpgesd, vcmpgtsd,
vcmptruesd, vcmpeq_ossd, vcmplt_oqsd, vcmple_oqsd, vcmpunord_ssd, vcmpneq_ussd,
vcmpnlt_uqsd, vcmpnle_uqsd, vcmpord_ssd, vcmpeq_ussd, vcmpnge_uqsd, vcmpngt_uqsd,
vcmpfalse_ossd, vcmpneq_ossd, vcmpge_oqsd, vcmpgt_oqsd, vcmptrue_ussd]
# same as VCMPSD xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: [vcmpeqss, vcmpltss, vcmpless, vcmpunordss, vcmpneqss, vcmpnltss, vcmpnless, vcmpordss,
vcmpeq_uqss, vcmpngess, vcmpngtss, vcmpfalsess, vcmpneq_oqss, vcmpgess, vcmpgtss,
vcmptruess, vcmpeq_osss, vcmplt_oqss, vcmple_oqss, vcmpunord_sss, vcmpneq_usss,
vcmpnlt_uqss, vcmpnle_uqss, vcmpord_sss, vcmpeq_usss, vcmpnge_uqss, vcmpngt_uqss,
vcmpfalse_osss, vcmpneq_osss, vcmpge_oqss, vcmpgt_oqss, vcmptrue_usss]
# same as VCMPSS xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: vcvtss2sd
operands:
- class: register

View File

@@ -353,6 +353,91 @@ instruction_forms:
scale: "*"
source: true
destination: true
- name: cld
operands: []
hidden_operands:
- class: "flag"
name: "DF"
source: false
destination: true
- name: cbtw
operands: []
hidden_operands:
- class: "register"
name: "al"
source: true
destination: false
- class: "register"
name: "ax"
source: false
destination: true
- name: cwtl
operands: []
hidden_operands:
- class: "register"
name: "ax"
source: true
destination: false
- class: "register"
name: "eax"
source: false
destination: true
- name: cwtd
operands: []
hidden_operands:
- class: "register"
name: "ax"
source: true
destination: false
- class: "register"
name: "dx"
source: false
destination: true
- class: "register"
name: "ax"
source: false
destination: true
- name: cltd
operands: []
hidden_operands:
- class: "register"
name: "eax"
source: true
destination: false
- class: "register"
name: "edx"
source: false
destination: true
- class: "register"
name: "eax"
source: false
destination: true
- name: cltq
operands: []
hidden_operands:
- class: "register"
name: "eax"
source: true
destination: false
- class: "register"
name: "rax"
source: false
destination: true
- name: cqtq
operands: []
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: false
- class: "register"
name: "rdx"
source: false
destination: true
- class: "register"
name: "rax"
source: false
destination: true
- name: cmova
operands:
- class: "register"
@@ -2197,6 +2282,69 @@ instruction_forms:
name: "PF"
source: false
destination: true
- name: cmpxchg
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: true
- class: "flag"
name: "ZF"
source: true
destination: true
- name: cmpxchg
operands:
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: true
- class: "flag"
name: "ZF"
source: true
destination: true
- name: cmpxchg
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "memory"
base: "*"
offset: "*"
index: "*"
scale: "*"
source: true
destination: true
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: true
- class: "flag"
name: "ZF"
source: true
destination: true
- name: dec
operands:
- class: "register"

View File

@@ -175,6 +175,62 @@ instruction_forms:
port_pressure: [[2, '015']]
throughput: 0.6666666666666666
uops: 3
- name: cbtw # AT&T version of CBW
operands: []
latency: 1
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- name: cwtl # AT&T version of CWDE
operands: []
latency: 1
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- name: cwtd # AT&T version of CWD
operands: []
latency: 2
port_pressure: [[1, '015'], [1, '05']]
throughput: 0.8333333333333333
uops: 2
- name: cltd # AT&T version of CDQ
operands: []
latency: 1
port_pressure: [[1, '05']]
throughput: 0.5
uops: 1
- name: cltq # AT&T version of CDQE
operands: []
latency: 1
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- name: cqtq # AT&T version of CQO
operands: []
latency: 1
port_pressure: [[1, '05']]
throughput: 0.5
uops: 1
- name: [cmpeqsd, cmpltsd, cmplesd, cmpunordsd, cmpneqsd, cmpnltsd, cmpnlesd, cmpordsd]
# same as CMPSD xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: [cmpeqss, cmpltss, cmpless, cmpunordss, cmpneqss, cmpnltss, cmpnless, cmpordss]
# same as CMPSS xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: cmpps
operands:
- class: immediate
@@ -359,6 +415,38 @@ instruction_forms:
port_pressure: [[1, '1']] # JH: according to uops.info
throughput: 1.0 # JH: measured on phinally
uops: 1
- name: [vcmpeqsd, vcmpltsd, vcmplesd, vcmpunordsd, vcmpneqsd, vcmpnltsd, vcmpnlesd, vcmpordsd,
vcmpeq_uqsd, vcmpngesd, vcmpngtsd, vcmpfalsesd, vcmpneq_oqsd, vcmpgesd, vcmpgtsd,
vcmptruesd, vcmpeq_ossd, vcmplt_oqsd, vcmple_oqsd, vcmpunord_ssd, vcmpneq_ussd,
vcmpnlt_uqsd, vcmpnle_uqsd, vcmpord_ssd, vcmpeq_ussd, vcmpnge_uqsd, vcmpngt_uqsd,
vcmpfalse_ossd, vcmpneq_ossd, vcmpge_oqsd, vcmpgt_oqsd, vcmptrue_ussd]
# same as VCMPSD xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: [vcmpeqss, vcmpltss, vcmpless, vcmpunordss, vcmpneqss, vcmpnltss, vcmpnless, vcmpordss,
vcmpeq_uqss, vcmpngess, vcmpngtss, vcmpfalsess, vcmpneq_oqss, vcmpgess, vcmpgtss,
vcmptruess, vcmpeq_osss, vcmplt_oqss, vcmple_oqss, vcmpunord_sss, vcmpneq_usss,
vcmpnlt_uqss, vcmpnle_uqss, vcmpord_sss, vcmpeq_usss, vcmpnge_uqss, vcmpngt_uqss,
vcmpfalse_osss, vcmpneq_osss, vcmpge_oqss, vcmpgt_oqss, vcmptrue_usss]
# same as VCMPSS xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: vcvtss2sd
operands:
- class: register

File diff suppressed because it is too large Load Diff

View File

@@ -62,6 +62,62 @@ instruction_forms:
port_pressure: []
throughput: 1
uops: 0
- name: cbtw # AT&T version of CBW
operands: []
latency: 1
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- name: cwtl # AT&T version of CWDE
operands: []
latency: 1
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- name: cwtd # AT&T version of CWD
operands: []
latency: 2
port_pressure: [[1, '015'], [1, '05']]
throughput: 0.8333333333333333
uops: 2
- name: cltd # AT&T version of CDQ
operands: []
latency: 1
port_pressure: [[1, '05']]
throughput: 0.5
uops: 1
- name: cltq # AT&T version of CDQE
operands: []
latency: 1
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- name: cqtq # AT&T version of CQO
operands: []
latency: 1
port_pressure: [[1, '05']]
throughput: 0.5
uops: 1
- name: [cmpeqsd, cmpltsd, cmplesd, cmpunordsd, cmpneqsd, cmpnltsd, cmpnlesd, cmpordsd]
# same as CMPSD xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: [cmpeqss, cmpltss, cmpless, cmpunordss, cmpneqss, cmpnltss, cmpnless, cmpordss]
# same as CMPSS xmm1, xmm2, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: cmpeqps # same as CMPPS xmm1, xmm2, 0
operands:
- class: register
@@ -222,6 +278,38 @@ instruction_forms:
port_pressure: [[1, '1']] # JH: according to uops.info
throughput: 1.0 # JH: measured on phinally
uops: 1
- name: [vcmpeqsd, vcmpltsd, vcmplesd, vcmpunordsd, vcmpneqsd, vcmpnltsd, vcmpnlesd, vcmpordsd,
vcmpeq_uqsd, vcmpngesd, vcmpngtsd, vcmpfalsesd, vcmpneq_oqsd, vcmpgesd, vcmpgtsd,
vcmptruesd, vcmpeq_ossd, vcmplt_oqsd, vcmple_oqsd, vcmpunord_ssd, vcmpneq_ussd,
vcmpnlt_uqsd, vcmpnle_uqsd, vcmpord_ssd, vcmpeq_ussd, vcmpnge_uqsd, vcmpngt_uqsd,
vcmpfalse_ossd, vcmpneq_ossd, vcmpge_oqsd, vcmpgt_oqsd, vcmptrue_ussd]
# same as VCMPSD xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: [vcmpeqss, vcmpltss, vcmpless, vcmpunordss, vcmpneqss, vcmpnltss, vcmpnless, vcmpordss,
vcmpeq_uqss, vcmpngess, vcmpngtss, vcmpfalsess, vcmpneq_oqss, vcmpgess, vcmpgtss,
vcmptruess, vcmpeq_osss, vcmplt_oqss, vcmple_oqss, vcmpunord_sss, vcmpneq_usss,
vcmpnlt_uqss, vcmpnle_uqss, vcmpord_sss, vcmpeq_usss, vcmpnge_uqss, vcmpngt_uqss,
vcmpfalse_osss, vcmpneq_osss, vcmpge_oqss, vcmpgt_oqss, vcmptrue_usss]
# same as VCMPSS xmm, xmm, xmm, imd
operands:
- class: register
name: xmm
- class: register
name: xmm
- class: register
name: xmm
latency: 3
port_pressure: [[1, '1']]
throughput: 1
- name: vpsrld
operands:
- class: register