aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2018-04-04 13:58:10 +0200
committerCyril SIX <cyril.six@kalray.eu>2018-04-04 16:30:10 +0200
commitca090744f399788a81f103206947d4d56cba9d87 (patch)
tree16462b290e69695be393aa48d44ed0fe9aa8e797 /mppa_k1c
parent36076263491312d634bd0d39f8de718f32462da2 (diff)
downloadcompcert-kvx-ca090744f399788a81f103206947d4d56cba9d87.tar.gz
compcert-kvx-ca090744f399788a81f103206947d4d56cba9d87.zip
MPPA - Added non immediate comparison
Diffstat (limited to 'mppa_k1c')
-rw-r--r--mppa_k1c/Asmgen.v8
-rw-r--r--mppa_k1c/Asmgenproof.v6
-rw-r--r--mppa_k1c/Asmgenproof1.v12
3 files changed, 21 insertions, 5 deletions
diff --git a/mppa_k1c/Asmgen.v b/mppa_k1c/Asmgen.v
index bd65bab9..f1ff363d 100644
--- a/mppa_k1c/Asmgen.v
+++ b/mppa_k1c/Asmgen.v
@@ -134,13 +134,13 @@ Definition transl_cbranch
| Ccompuimm c n, a1 :: nil =>
do r1 <- ireg_of a1;
OK (loadimm32 RTMP n (transl_comp c Unsigned r1 RTMP lbl k))
-(*| Ccomp c, a1 :: a2 :: nil =>
+ | Ccomp c, a1 :: a2 :: nil =>
do r1 <- ireg_of a1; do r2 <- ireg_of a2;
- OK (transl_cond_int32s c rd r1 r2 k)
+ OK (transl_comp c Signed r1 r2 lbl k)
| Ccompu c, a1 :: a2 :: nil =>
do r1 <- ireg_of a1; do r2 <- ireg_of a2;
- OK (transl_cond_int32u c rd r1 r2 k)
-*)| Ccompimm c n, a1 :: nil =>
+ OK (transl_comp c Unsigned r1 r2 lbl k)
+ | Ccompimm c n, a1 :: nil =>
do r1 <- ireg_of a1;
OK (loadimm32 RTMP n (transl_comp c Signed r1 RTMP lbl k))
(*| Ccompl c, a1 :: a2 :: nil =>
diff --git a/mppa_k1c/Asmgenproof.v b/mppa_k1c/Asmgenproof.v
index cc5383a0..1e616a01 100644
--- a/mppa_k1c/Asmgenproof.v
+++ b/mppa_k1c/Asmgenproof.v
@@ -179,7 +179,11 @@ Remark transl_cbranch_label:
forall cond args lbl k c,
transl_cbranch cond args lbl k = OK c -> tail_nolabel k c.
Proof.
- intros. unfold transl_cbranch in H. (* unfold transl_cond_op in H. *) destruct cond; TailNoLabel.
+ intros. unfold transl_cbranch in H. destruct cond; TailNoLabel.
+(* Ccomp *)
+ - unfold transl_comp; TailNoLabel.
+(* Ccompu *)
+ - unfold transl_comp; TailNoLabel.
(* Ccompimm *)
- unfold loadimm32. destruct (make_immed32 n); TailNoLabel. unfold transl_comp; TailNoLabel.
(* Ccompuimm *)
diff --git a/mppa_k1c/Asmgenproof1.v b/mppa_k1c/Asmgenproof1.v
index 1d5a26c9..e83ef307 100644
--- a/mppa_k1c/Asmgenproof1.v
+++ b/mppa_k1c/Asmgenproof1.v
@@ -408,6 +408,18 @@ Proof.
{ apply eval_condition_lessdef with (map ms args) m; auto. eapply preg_vals; eauto. }
clear EVAL MEXT AG.
destruct cond; simpl in TRANSL; ArgsInv.
+(* Ccomp *)
+- exploit (transl_comp_correct c0 x x0 lbl); eauto. intros (rs' & A & B & C).
+ exists rs', (Pcb BTwnez GPR31 lbl).
+ split.
+ + constructor. eexact A.
+ + split; auto. apply C; auto.
+(* Ccompu *)
+- exploit (transl_compu_correct c0 x x0 lbl); eauto. intros (rs' & A & B & C).
+ exists rs', (Pcb BTwnez GPR31 lbl).
+ split.
+ + constructor. eexact A.
+ + split; auto. apply C; auto.
(* Ccompimm *)
- exploit (loadimm32_correct GPR31 n); eauto. intros (rs' & A & B & C).
exploit (transl_comp_correct c0 x GPR31 lbl); eauto. intros (rs'2 & A' & B' & C').