added instructions for BHIVE

This commit is contained in:
JanLJL
2021-09-29 17:26:44 +02:00
parent 3404d72dc5
commit f1f119f5a0
2 changed files with 274 additions and 15 deletions

View File

@@ -163,6 +163,16 @@ instruction_forms:
port_pressure: [[1, '06']] # JH: assumed from SKX
throughput: 0.5 # JH: measured on casclakesp2
uops: 1
- name: BT
operands:
- class: immediate
imd: int
- class: register
name: gpr
latency: 1
port_pressure: [[1, '06']] # JH: assumed from SKX
throughput: 0.5 # JH: measured on casclakesp2
uops: 1
- name: BTS
operands:
- class: immediate
@@ -369,6 +379,11 @@ instruction_forms:
throughput: 0.25
latency: 1.0
port_pressure: [[1, '0156']]
- name: lock
operands: []
throughput: 0.0
latency: 0.0
port_pressure: []
- name: cmp
operands:
- class: register
@@ -746,6 +761,15 @@ instruction_forms:
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: SAR
operands:
# assume implicit immediate (0)
- class: register
name: gpr
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: SARX
operands:
- class: register
@@ -788,6 +812,15 @@ instruction_forms:
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: [shr, shl]
# assume implicit immediate (0)
operands:
- class: register
name: gpr
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: SHR
operands:
- class: immediate
@@ -840,7 +873,7 @@ instruction_forms:
throughput: 3.0
latency: 16.0 # 1"*"p0+3"*"p0DV
port_pressure: [[1, '0'], [3.0, [0DV]]]
- name: subq
- name: sub
operands:
- class: immediate
imd: int
@@ -849,6 +882,15 @@ instruction_forms:
throughput: 0.25
latency: 1.0 # 1"*"p0156
port_pressure: [[1, '0156']]
- name: sub
operands:
- class: register
name: gpr
- class: register
name: gpr
throughput: 0.25
latency: 1.0 # 1"*"p0156
port_pressure: [[1, '0156']]
- name: TEST
operands:
- class: immediate
@@ -4620,7 +4662,7 @@ instruction_forms:
port_pressure: [[1, '23'], [1, ['2D', '3D']]] # ./generate_mov_entries.py csx
throughput: 0.5 # ./generate_mov_entries.py csx
uops: 2 # ./generate_mov_entries.py csx
- name: mov # ./generate_mov_entries.py csx
- name: [mov, movabs] # ./generate_mov_entries.py csx
operands: # ./generate_mov_entries.py csx
- class: immediate # ./generate_mov_entries.py csx
imd: int # ./generate_mov_entries.py csx
@@ -4630,7 +4672,7 @@ instruction_forms:
port_pressure: [[1, '0156']] # ./generate_mov_entries.py csx
throughput: 0.25 # ./generate_mov_entries.py csx
uops: 1 # ./generate_mov_entries.py csx
- name: mov # with store, simple AGU # ./generate_mov_entries.py csx
- name: [mov, movabs] # with store, simple AGU # ./generate_mov_entries.py csx
operands: # ./generate_mov_entries.py csx
- class: immediate # ./generate_mov_entries.py csx
imd: int # ./generate_mov_entries.py csx
@@ -4643,7 +4685,7 @@ instruction_forms:
port_pressure: [[1, '237'], [1, '4']] # ./generate_mov_entries.py csx
throughput: 1.0 # ./generate_mov_entries.py csx
uops: 2 # ./generate_mov_entries.py csx
- name: mov # with store, complex AGU # ./generate_mov_entries.py csx
- name: [mov, movabs] # with store, complex AGU # ./generate_mov_entries.py csx
operands: # ./generate_mov_entries.py csx
- class: immediate # ./generate_mov_entries.py csx
imd: int # ./generate_mov_entries.py csx
@@ -8738,6 +8780,17 @@ instruction_forms:
port_pressure: [[1, '0156']] # model_importer.py SKX
throughput: 0.25 # model_importer.py SKX
uops: 0 # model_importer.py SKX
- name: NOP
operands:
- class: memory
base: '*'
offset: '*'
index: '*'
scale: '*'
latency: ~
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 0
- name: INC # model_importer.py SKX
operands: # model_importer.py SKX
- class: memory # model_importer.py SKX
@@ -8767,6 +8820,14 @@ instruction_forms:
port_pressure: [[3, '0156'], [2, '23']] # model_importer.py SKX
throughput: 1.0 # model_importer.py SKX
uops: 5 # model_importer.py SKX
- name: [sete, setne, setg, setge, seta, setae]
operands:
- class: register
name: gpr
latency: 1
port_pressure: [[1, '06']]
throughput: 0.5
uops: 1
- name: SETB # model_importer.py SKX
operands: # model_importer.py SKX
- class: memory # model_importer.py SKX
@@ -8904,6 +8965,16 @@ instruction_forms:
port_pressure: [[1, '0156'], [2, '06'], [1, '23'], [1, '237'], [1, '4']] # model_importer.py SKX
throughput: 1.25 # model_importer.py SKX
uops: 6 # model_importer.py SKX
- name: SBB
operands:
- class: register
name: gpr
- class: register
name: gpr
latency: 2
port_pressure: [[1, '06']]
throughput: 0.5
uops: 2
- name: SBB # model_importer.py SKX
operands: # model_importer.py SKX
- class: immediate # model_importer.py SKX
@@ -9791,7 +9862,7 @@ instruction_forms:
port_pressure: [[1, '0156']] # model_importer.py SKX
throughput: 0.25 # model_importer.py SKX
uops: 10 # model_importer.py SKX
- name: CDQ # model_importer.py SKX
- name: [CDQ, CLTD] # model_importer.py SKX
operands: [] # model_importer.py SKX
latency: 1 # model_importer.py SKX
port_pressure: [[1, '06']] # model_importer.py SKX
@@ -9839,10 +9910,22 @@ instruction_forms:
scale: '*' # model_importer.py SKX
- class: register # model_importer.py SKX
name: gpr # model_importer.py SKX
latency: ~ # model_importer.py SKX
latency: 3 # model_importer.py SKX
port_pressure: [[1, '1'], [1, '23'], [1, [2D, 3D]]] # model_importer.py SKX
throughput: 1.0 # model_importer.py SKX
uops: 2 # model_importer.py SKX
- name: IMUL
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: IMUL # model_importer.py SKX
operands: # model_importer.py SKX
- class: memory # model_importer.py SKX
@@ -10077,6 +10160,30 @@ instruction_forms:
port_pressure: [[1, '0156'], [1, '1'], [1, '23'], [1, '237'], [1, '4']] # model_importer.py SKX
throughput: 1.25 # model_importer.py SKX
uops: 5 # model_importer.py SKX
- name: [SHLD, SHRD]
operands:
- class: register #CL
name: gpr
- class: register
name: gpr
- class: register
name: gpr
latency: 5
port_pressure: [[1, '0156'], [2, '06'], [1, '1']]
throughput: 1.00
uops: 4
- name: [SHLD, SHRD]
operands:
- class: immediate
imd: int
- class: register
name: gpr
- class: register
name: gpr
latency: 5
port_pressure: [[1, '1']]
throughput: 1.00
uops: 1
- name: SHLD # model_importer.py SKX
operands: # model_importer.py SKX
- class: register # model_importer.py SKX
@@ -10140,7 +10247,17 @@ instruction_forms:
latency: ~ # model_importer.py SKX
port_pressure: [[1, '0156'], [1, '23'], [1, '237'], [1, '4']] # model_importer.py SKX
throughput: 1.0 # model_importer.py SKX
uops: 4 # model_importer.py SKX
uops: 4
- name: OR
operands:
- class: register
name: gpr
- class: register
name: gpr
latency: 1
port_pressure: [[1, '0156']]
throughput: 0.25
uops: 1
- name: OR # model_importer.py SKX
operands: # model_importer.py SKX
- class: immediate # model_importer.py SKX
@@ -10664,6 +10781,29 @@ instruction_forms:
port_pressure: [[1, '015']] # model_importer.py SKX
throughput: 0.3333333333333333 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: [CMPEQSS, CMPLTSS, CMPLESS, CMPUNORDSS, CMPNEQSS, CMPNLTSS, CMPNLESS, CMPORDSS] # pseudo op to CMPSS
operands:
- class: memory
base: '*'
offset: '*'
index: '*'
scale: '*'
- class: register
name: xmm
latency: 4
port_pressure: [[1, '015'], [1, '23'], [1, [2D, 3D]]]
throughput: 0.5
uops: 2
- name: [CMPEQSS, CMPLTSS, CMPLESS, CMPUNORDSS, CMPNEQSS, CMPNLTSS, CMPNLESS, CMPORDSS] # pseudo op to CMPSS
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 4
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- name: FXSAVE64 # model_importer.py SKX
operands: # model_importer.py SKX
- class: memory # model_importer.py SKX
@@ -12144,6 +12284,30 @@ instruction_forms:
port_pressure: [[1, '015']] # model_importer.py SKX
throughput: 0.3333333333333333 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: [CMPEQSD, CMPLTSD, CMPLESD, CMPUNORDSD, CMPNEQSD, CMPNLTSD, CMPNLESD, CMPORDSD] # pseudo op to CMPSD
operands:
- class: memory
base: '*'
offset: '*'
index: '*'
scale: '*'
- class: register
name: xmm
latency: 4
port_pressure: [[1, '015'], [1, '23'], [1, [2D, 3D]]]
throughput: 0.5
uops: 2
- name: [CMPEQSD, CMPLTSD, CMPLESD, CMPUNORDSD, CMPNEQSD, CMPNLTSD, CMPNLESD, CMPORDSD] # pseudo op to CMPSD
operands:
- class: register
name: xmm
- class: register
name: xmm
latency: 4
port_pressure: [[1, '015']]
throughput: 0.3333333333333333
uops: 1
- name: PMULHUW # model_importer.py SKX
operands: # model_importer.py SKX
- class: memory # model_importer.py SKX
@@ -15616,7 +15780,7 @@ instruction_forms:
port_pressure: [[2, '0'], [6, '0156'], [4, '06'], [1, '23'], [1, '237'], [1, '4'], [4, '5']] # model_importer.py SKX
throughput: 5.5 # model_importer.py SKX
uops: 23 # model_importer.py SKX
- name: CQO # model_importer.py SKX
- name: [CQO, CQTO] # model_importer.py SKX
operands: [] # model_importer.py SKX
latency: 1 # model_importer.py SKX
port_pressure: [[1, '06']] # model_importer.py SKX
@@ -19074,6 +19238,18 @@ instruction_forms:
port_pressure: [[1, '01']] # model_importer.py SKX
throughput: 0.5 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: [VCMPEQSS, VCMPGESS, VCMPLTSS, VCMPLESS, VCMPUNORDSS, VCMPNEQSS, VCMPNLTSS, VCMPNLESS, VCMPORDSS] # pseudo op to VCMPSS # model_importer.py SKX
operands: # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
latency: 4 # model_importer.py SKX
port_pressure: [[1, '01']] # model_importer.py SKX
throughput: 0.5 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: VPSHUFLW # model_importer.py SKX
operands: # model_importer.py SKX
- class: immediate # model_importer.py SKX
@@ -19155,6 +19331,18 @@ instruction_forms:
port_pressure: [[1, '01']] # model_importer.py SKX
throughput: 0.5 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: [VCMPEQSD, VCMPGESD, VCMPLTSD, VCMPLESD, VCMPUNORDSD, VCMPNEQSD, VCMPNLTSD, VCMPNLESD, VCMPORDSD] # pseudo op to VCMPSD # model_importer.py SKX
operands: # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
latency: 4 # model_importer.py SKX
port_pressure: [[1, '01']] # model_importer.py SKX
throughput: 0.5 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: VPSLLQ # model_importer.py SKX
operands: # model_importer.py SKX
- class: register # model_importer.py SKX
@@ -20313,6 +20501,18 @@ instruction_forms:
port_pressure: [[1, '01']] # model_importer.py SKX
throughput: 0.5 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: [VCMPEQPS, VCMPGEPS, VCMPLTPS, VCMPLEPS, VCMPUNORDPS, VCMPNEQPS, VCMPNLTPS, VCMPNLEPS, VCMPORDPS] # pseudo op to VCMPPS # model_importer.py SKX
operands: # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
latency: 4 # model_importer.py SKX
port_pressure: [[1, '01']] # model_importer.py SKX
throughput: 0.5 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: VCMPPS # model_importer.py SKX
operands: # model_importer.py SKX
- class: immediate # model_importer.py SKX
@@ -57595,6 +57795,18 @@ instruction_forms:
port_pressure: [[1, '01'], [1, '23'], [1, [2D, 3D]]] # model_importer.py SKX
throughput: 0.5 # model_importer.py SKX
uops: 2 # model_importer.py SKX
- name: VPSRLD # model_importer.py SKX
operands: # model_importer.py SKX
- class: immediate # model_importer.py SKX
imd: int # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
- class: register # model_importer.py SKX
name: xmm # model_importer.py SKX
latency: 1 # model_importer.py SKX
port_pressure: [[1, '01']] # model_importer.py SKX
throughput: 0.5 # model_importer.py SKX
uops: 1 # model_importer.py SKX
- name: VPSRLD # model_importer.py SKX
operands: # model_importer.py SKX
- class: immediate # model_importer.py SKX

View File

@@ -422,6 +422,17 @@ instruction_forms:
name: "eax"
source: false
destination: true
- name: [cqo, cqto]
operands: []
hidden_operands:
- class: "register"
name: "rax"
source: true
destination: false
- class: "register"
name: "rdx"
source: false
destination: true
- name: [cltq, cdqe]
operands: []
hidden_operands:
@@ -2639,7 +2650,7 @@ instruction_forms:
source: true
destination: true
- name: [pxor]
breaks_pedendency_on_equal_operands: true
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "xmm"
@@ -2660,7 +2671,7 @@ instruction_forms:
source: true
destination: true
- name: [pxor]
breaks_pedendency_on_equal_operands: true
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "mm"
@@ -3321,6 +3332,42 @@ instruction_forms:
name: "ID"
source: true
destination: false
- name: sbb
operands:
- class: "register"
name: "gpr"
source: true
destination: false
- class: "register"
name: "gpr"
source: true
destination: true
hidden_operands:
- class: "flag"
name: "OF"
source: false
destination: true
- class: "flag"
name: "SF"
source: false
destination: true
- class: "flag"
name: "ZF"
source: false
destination: true
- class: "flag"
name: "AF"
source: false
destination: true
- class: "flag"
name: "PF"
source: false
destination: true
- class: "flag"
name: "CF"
source: true
destination: true
operation: "op2['value'] -= (op1['value'])" # + CF['value'])" TODO
- name: sub
operands:
- class: "immediate"
@@ -3358,7 +3405,7 @@ instruction_forms:
destination: true
operation: "op2['value'] -= op1['value']"
- name: sub
breaks_pedendency_on_equal_operands: true
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "gpr"
@@ -3846,7 +3893,7 @@ instruction_forms:
source: false
destination: true
- name: vzeroall
breaks_pedendency_on_equal_operands: true
breaks_dependency_on_equal_operands: true
operands: []
hidden_operands:
- class: "register"
@@ -4003,7 +4050,7 @@ instruction_forms:
source: true
destination: true
- name: [xorps, xorpd]
breaks_pedendency_on_equal_operands: true
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "xmm"
@@ -4024,7 +4071,7 @@ instruction_forms:
source: true
destination: true
- name: [vxorpd, vxorps]
breaks_pedendency_on_equal_operands: true
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "*"
@@ -4039,7 +4086,7 @@ instruction_forms:
source: false
destination: true
- name: xor
breaks_pedendency_on_equal_operands: true
breaks_dependency_on_equal_operands: true
operands:
- class: "register"
name: "gpr"