diff --git a/osaca/data/csx.yml b/osaca/data/csx.yml index 8c5320f..4402731 100644 --- a/osaca/data/csx.yml +++ b/osaca/data/csx.yml @@ -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 diff --git a/osaca/data/isa/x86.yml b/osaca/data/isa/x86.yml index 99748c7..70dc1f7 100644 --- a/osaca/data/isa/x86.yml +++ b/osaca/data/isa/x86.yml @@ -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"