Files
OSACA/osaca/data/csx.yml
2019-09-18 00:10:40 +02:00

592 lines
20 KiB
YAML

osaca_version: 0.3.0
micro_architecture: "Cascade Lake SP"
arch_code: "CSX"
isa: "x86"
ROB_size: 224
retired_uOps_per_cycle: 4
scheduler_size: 97
hidden_loads: false
ports: ["0", "0DV", "1", "2", "2D", "3", "3D", "4", "5", "6", "7"]
port_model_scheme: |
┌------------------------------------------------------------------------┐
| 97 entry unified scheduler |
└------------------------------------------------------------------------┘
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
┌-------┐ ┌-------┐ ┌-----┐ ┌-----┐ ┌-----┐ ┌-------┐ ┌--------┐ ┌-----┐
| ALU | | ALU | | LD | | LD | | ST | | ALU | | ALU & | | AGU |
└-------┘ └-------┘ └-----┘ └-----┘ └-----┘ └-------┘ | Shift | └-----┘
┌-------┐ ┌-------┐ ┌-----┐ ┌-----┐ ┌-------┐ └--------┘
| 2ND | | Fast | | AGU | | AGU | | Fast |
| BRANCH| | LEA | └-----┘ └-----┘ | LEA |
└-------┘ └-------┘ └-------┘
┌-------┐ ┌-------┐ ┌-------┐
|AVX DIV| |AVX FMA| | AVX |
└-------┘ └-------┘ | SHUF |
┌-------┐ ┌-------┐ └-------┘
|AVX FMA| |AVX MUL| ┌-------┐
└-------┘ └-------┘ |AVX-512|
┌-------┐ ┌-------┐ | FMA |
|AVX MUL| |AVX ADD| └-------┘
└-------┘ └-------┘ ┌-------┐
┌-------┐ ┌-------┐ |AVX-512|
|AVX ADD| |AVX ALU| | ADD |
└-------┘ └-------┘ └-------┘
┌-------┐ ┌-------┐ ┌-------┐
|AVX ALU| | AVX | |AVX-512|
└-------┘ | Shift | | MUL |
┌-------┐ └-------┘ └-------┘
| AVX | ┌-------┐ ┌-------┐
| Shift | | Slow | |AVX-512|
└-------┘ | LEA | | ALU |
┌-------┐ └-------┘ └-------┘
| VNNI | ┌-------┐
└-------┘ | VNNI |
└-------┘
instruction_forms:
- name: addsd
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: addss
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: addl
operands:
- class: "immediate"
imd: "int"
- class: "register"
name: "gpr"
throughput: 0.25
latency: 1.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
- name: addq
operands:
- class: "immediate"
imd: "int"
- class: "register"
name: "gpr"
throughput: 0.25
latency: 1.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
- name: cmpl
operands:
- class: "register"
name: "gpr"
- class: "register"
name: "gpr"
throughput: 0.25
latency: ~ # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
- name: cmpq
operands:
- class: "register"
name: "gpr"
- class: "register"
name: "gpr"
throughput: 0.25
latency: ~ # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
- name: cmpq
operands:
- class: "register"
name: "gpr"
- class: "memory"
base: "gpr"
offset: "imd"
index: ~
scale: 1
throughput: 0.5
latency: ~ # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.25, 0.0, 0.25, 0.5, 0.5, 0.5, 0.5, 0.0, 0.25, 0.25, 0.0]
- name: incq
operands:
- class: "register"
name: "gpr"
throughput: 0.25
latency: ~ # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
- name: ja
operands:
- class: 'identifier'
throughput: 0.0
latency: 0.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: jb
operands:
- class: 'identifier'
throughput: 0.0
latency: 0.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: jne
operands:
- class: 'identifier'
throughput: 0.0
latency: 0.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: mulsd
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: mulss
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: rcpss
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 1.0
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: sqrtsd
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 6.0
latency: 22.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [1.0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: sqrtss
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 3.0
latency: 16.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: subq
operands:
- class: "immediate"
imd: "int"
- class: "register"
name: "gpr"
throughput: 0.25
latency: 1.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
- name: vaddpd
operands:
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: vaddpd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 8.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vaddpd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 8.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vaddpd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 8.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vaddsd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 8.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vaddsd
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: vaddss
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: vdivsd
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 4.0
latency: 14.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [1.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: vdivss
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 3.0
latency: 11.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: vfmadd213pd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vfmadd213pd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vfmadd231pd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vfmadd231pd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vfmadd132pd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vfmadd132pd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmulsd
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: vmulss
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: vmulpd
operands:
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: vmulpd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 8.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmulpd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 0.5
latency: 8.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmovapd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "xmm"
throughput: 0.5
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmovapd
operands:
- class: "register"
name: "xmm"
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
throughput: 1.0
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0]
- name: vmovapd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmovapd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmovapd
operands:
- class: "register"
name: "ymm"
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
throughput: 1.0
latency: 5.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0]
- name: vmovapd
operands:
- class: "register"
name: "ymm"
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
throughput: 1.0
latency: 5.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0]
- name: vmovupd
operands:
- class: "register"
name: "ymm"
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
throughput: 1.0
latency: 5.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0]
- name: vmovupd
operands:
- class: "register"
name: "ymm"
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
throughput: 1.0
latency: 5.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0]
- name: vmovupd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmovupd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmovsd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
- name: vmovsd
operands:
- class: "register"
name: "xmm"
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
throughput: 1.0
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0]