Files
OSACA/osaca/data/zen1.yml

567 lines
20 KiB
YAML

osaca_version: 0.~
micro_architecture: "AMD Zen (family 17h)"
isa: "x86"
port_model_scheme: |
┌--------------------------------------┐ ┌-----------------------------------------------┐
| 96 entries OoO scheduler | | 84 entries OoO scheduler |
└--------------------------------------┘ └-----------------------------------------------┘
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
┌-------┐ ┌-------┐ ┌-------┐ ┌-------┐ ┌------┐ ┌-----┐ ┌-----┐ ┌------┐ ┌-----┐ ┌-----┐
|SSE ALU| |SSE ALU| |SSE ALU| |SSE ALU| | ALU | | ALU | | ALU | | ALU | | AGU | | AGU |
└-------┘ └-------┘ └-------┘ └-------┘ └------┘ └-----┘ └-----┘ └------┘ └-----┘ └-----┘
┌-------┐ ┌-------┐ ┌-------┐ ┌-------┐ ┌------┐ ┌-----┐ ┌-----┐ ┌------┐ | |
|SSE MUL| |SSE MUL| |SSE ADD| |SSE ADD| |BRANCH| | MUL | | MUL | |BRANCH| ▼ ▼
└-------┘ └-------┘ └-------┘ └-------┘ └------┘ └-----┘ └-----┘ └------┘ ┌-------------┐
┌-------┐ ┌-------┐ ┌-------┐ ┌-------┐ | LOAD |
|SSE FMA| |SSE FMA| | SSE | |SSE DIV| └-------------┘
└-------┘ └-------┘ | SHUF | └-------┘ ┌-------------┐
┌-------┐ └-------┘ | LOAD |
| SSE | └-------------┘
| SHUF | ┌-------------┐
└-------┘ | STORE |
└-------------┘
ports: ["0", "1", "2", "3", "3DV", "4", "5", "6", "7", "8", "8D", "9", "9D"]
instruction_forms:
- name: add
operands:
- class: "immediate"
imd: "int"
- class: "register"
name: "gpr"
throughput: 0.25
latency: 1.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
- name: add
operands:
- class: "register"
name: "gpr"
- class: "register"
name: "gpr"
throughput: 0.25
latency: 1 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 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 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
- name: addq
operands:
- class: "immediate"
imd: "int"
- class: "register"
name: "gpr"
throughput: 0.25
latency: 1.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
- name: cmpl
operands:
- class: "register"
name: "gpr"
- class: "register"
name: "gpr"
throughput: 0.25
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
- name: cmpq
operands:
- class: "register"
name: "gpr"
- class: "register"
name: "gpr"
throughput: 0.25
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
- name: cmpq
operands:
- class: "register"
name: "gpr"
- class: "memory"
base: "gpr"
offset: "imd"
index: ~
scale: 1
throughput: 0.25
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
- name: ja
operands:
- class: 'identifier'
throughput: 0.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 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 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 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 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 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: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 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: 5.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.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: ~ #8.0
latency: 23.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.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: ~ #5.0
latency: 17.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- name: subq
operands:
- class: "register"
name: "gpr"
- class: "register"
name: "gpr"
throughput: 0.25
latency: 1.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 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 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
- name: vaddpd
operands:
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 1.0, 1.0, 0.0, 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: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vaddpd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vaddsd
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.5, 0.5, 0.0, 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: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.5, 0.5, 0.0, 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: 13.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 1.0, 4.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: 10.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 1.0, 3.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: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vfmadd213pd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vfmadd231pd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vfmadd231pd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vfmadd132pd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vfmadd132pd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vmulsd
operands:
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: 4.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 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: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 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: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5]
- name: vmulpd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "xmm"
- class: "register"
name: "xmm"
throughput: 0.5
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5]
- name: vmulpd
operands:
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: 4.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 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: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vmulpd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vmovapd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "xmm"
throughput: 0.5
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5]
- name: vmovapd
operands:
- class: "register"
name: "xmm"
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 1.0]
- name: vmovapd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vmovapd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
- name: vmovapd
operands:
- class: "register"
name: "ymm"
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
throughput: 2.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
- name: vmovapd
operands:
- class: "register"
name: "ymm"
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
throughput: 2.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
- name: vmovaps
operands:
- class: "register"
name: "xmm"
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 1.0]
- name: vmovaps
operands:
- class: "register"
name: "xmm"
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
throughput: 1.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 1.0]
- name: vmovupd
operands:
- class: "register"
name: "ymm"
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
throughput: 2.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
- name: vmovupd
operands:
- class: "register"
name: "ymm"
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
throughput: 2.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
- name: vmovupd
operands:
- class: "memory"
base: "gpr"
offset: ~
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
throughput: 2.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
- name: vmovupd
operands:
- class: "memory"
base: "gpr"
offset: "imd"
index: "gpr"
scale: 1
- class: "register"
name: "ymm"
throughput: 2.0
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]