osaca_version: 0.3.0
micro_architecture: "Cascade Lake SP"
arch_code: "CSX"
isa: "x86"
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 |
               └-------┘
ports: ["0", "0DV", "1", "2", "2D", "3", "3D", "4", "5", "6", "7"]
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: 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: 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: 7.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: 7.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: 7.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: 7.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: 2.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: 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: "memory"
          base: "gpr"
          offset: "imd"
          index: "gpr"
          scale: 1
        - class: "register"
          name: "ymm"
      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: "ymm"
        - class: "memory"
          base: "gpr"
          offset: ~
          index: "gpr"
          scale: 1
      throughput: 1.0
      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.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: 3.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: 3.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: 3.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: 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: vmovupd
      operands:
        - class: "memory"
          base: "gpr"
          offset: "imd"
          index: "gpr"
          scale: 1
        - class: "register"
          name: "ymm"
      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]

