Skip to content

Commit a17e79a

Browse files
authored
Merge pull request #115 from pleroy/Comisd
Support for arithmetic shift and comparison instructions for x86
2 parents 9c97d32 + 1eb82a6 commit a17e79a

File tree

2 files changed

+80
-2
lines changed

2 files changed

+80
-2
lines changed

osaca/data/isa/x86.yml

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2621,6 +2621,79 @@ instruction_forms:
26212621
name: "ZF"
26222622
source: true
26232623
destination: true
2624+
- name: ["comisd", "ucomisd"]
2625+
operands:
2626+
- class: "register"
2627+
name: "xmm"
2628+
source: true
2629+
destination: false
2630+
- class: "register"
2631+
name: "xmm"
2632+
source: true
2633+
destination: false
2634+
hidden_operands:
2635+
- class: "flag"
2636+
name: "CF"
2637+
source: false
2638+
destination: true
2639+
- class: "flag"
2640+
name: "OF"
2641+
source: false
2642+
destination: true
2643+
- class: "flag"
2644+
name: "SF"
2645+
source: false
2646+
destination: true
2647+
- class: "flag"
2648+
name: "ZF"
2649+
source: false
2650+
destination: true
2651+
- class: "flag"
2652+
name: "AF"
2653+
source: false
2654+
destination: true
2655+
- class: "flag"
2656+
name: "PF"
2657+
source: false
2658+
destination: true
2659+
- name: ["comisd", "ucomisd"]
2660+
operands:
2661+
- class: "register"
2662+
name: "xmm"
2663+
source: true
2664+
destination: false
2665+
- class: "memory"
2666+
base: "*"
2667+
offset: "*"
2668+
index: "*"
2669+
scale: "*"
2670+
source: true
2671+
destination: false
2672+
hidden_operands:
2673+
- class: "flag"
2674+
name: "CF"
2675+
source: false
2676+
destination: true
2677+
- class: "flag"
2678+
name: "OF"
2679+
source: false
2680+
destination: true
2681+
- class: "flag"
2682+
name: "SF"
2683+
source: false
2684+
destination: true
2685+
- class: "flag"
2686+
name: "ZF"
2687+
source: false
2688+
destination: true
2689+
- class: "flag"
2690+
name: "AF"
2691+
source: false
2692+
destination: true
2693+
- class: "flag"
2694+
name: "PF"
2695+
source: false
2696+
destination: true
26242697
- name: dec
26252698
operands:
26262699
- class: "register"
@@ -3613,7 +3686,7 @@ instruction_forms:
36133686
- class: "register"
36143687
name: "gpr"
36153688
source: true
3616-
destination: true
3689+
destination: true
36173690
- name: sbb
36183691
operands:
36193692
- class: "register"
@@ -4342,7 +4415,7 @@ instruction_forms:
43424415
name: "xmm"
43434416
source: true
43444417
destination: true
4345-
- name: [shl, shr, shlq, shrq]
4418+
- name: [sal, sar, salq, sarq, shl, shr, shlq, shrq]
43464419
operands:
43474420
- class: "immediate"
43484421
imd: "int"

tests/test_semantics.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,9 @@ def test_is_read_is_written_x86_intel(self):
849849
instr_form_r_ymm = self.parser_x86_intel.parse_line("vmovapd ymm0, ymm1")
850850
self.semantics_csx_intel.normalize_instruction_form(instr_form_r_ymm)
851851
self.semantics_csx_intel.assign_src_dst(instr_form_r_ymm)
852+
instr_form_rw_sar = self.parser_x86_intel.parse_line("sar rcx, 43")
853+
self.semantics_csx_intel.normalize_instruction_form(instr_form_rw_sar)
854+
self.semantics_csx_intel.assign_src_dst(instr_form_rw_sar)
852855
self.assertTrue(dag.is_read(reg_rcx, instr_form_r_c))
853856
self.assertFalse(dag.is_read(reg_rcx, instr_form_non_r_c))
854857
self.assertFalse(dag.is_read(reg_rcx, instr_form_w_c))
@@ -860,6 +863,8 @@ def test_is_read_is_written_x86_intel(self):
860863
self.assertTrue(dag.is_written(reg_ymm1, instr_form_rw_ymm_1))
861864
self.assertTrue(dag.is_written(reg_ymm1, instr_form_rw_ymm_2))
862865
self.assertFalse(dag.is_written(reg_ymm1, instr_form_r_ymm))
866+
self.assertTrue(dag.is_read(reg_rcx, instr_form_rw_sar))
867+
self.assertTrue(dag.is_written(reg_rcx, instr_form_rw_sar))
863868

864869
def test_is_read_is_written_AArch64(self):
865870
# independent form HW model

0 commit comments

Comments
 (0)