aboutsummaryrefslogtreecommitdiffstats
path: root/powerpc/Machregs.v
diff options
context:
space:
mode:
Diffstat (limited to 'powerpc/Machregs.v')
-rw-r--r--powerpc/Machregs.v31
1 files changed, 30 insertions, 1 deletions
diff --git a/powerpc/Machregs.v b/powerpc/Machregs.v
index 4ee6493c..24065254 100644
--- a/powerpc/Machregs.v
+++ b/powerpc/Machregs.v
@@ -12,6 +12,7 @@
Require Import String.
Require Import Coqlib.
+Require Import Decidableplus.
Require Import Maps.
Require Import AST.
Require Import Op.
@@ -53,6 +54,34 @@ Lemma mreg_eq: forall (r1 r2: mreg), {r1 = r2} + {r1 <> r2}.
Proof. decide equality. Defined.
Global Opaque mreg_eq.
+Definition all_mregs :=
+ R3 :: R4 :: R5 :: R6 :: R7 :: R8 :: R9 :: R10
+ :: R11 :: R12 :: R14 :: R15 :: R16 :: R17 :: R18 :: R19 :: R20
+ :: R21 :: R22 :: R23 :: R24 :: R25 :: R26 :: R27 :: R28
+ :: R29 :: R30 :: R31
+ :: F0 :: F1 :: F2 :: F3 :: F4
+ :: F5 :: F6 :: F7 :: F8
+ :: F9 :: F10 :: F11 :: F12
+ :: F13 :: F14 :: F15
+ :: F16 :: F17 :: F18 :: F19
+ :: F20 :: F21 :: F22 :: F23
+ :: F24 :: F25 :: F26 :: F27
+ :: F28 :: F29 :: F30 :: F31 :: nil.
+
+Lemma all_mregs_complete:
+ forall (r: mreg), In r all_mregs.
+Proof.
+ assert (forall r, proj_sumbool (In_dec mreg_eq r all_mregs) = true) by (destruct r; reflexivity).
+ intros. specialize (H r). InvBooleans. auto.
+Qed.
+
+Instance Decidable_eq_mreg : forall (x y: mreg), Decidable (eq x y) := Decidable_eq mreg_eq.
+
+Instance Finite_mreg : Finite mreg := {
+ Finite_elements := all_mregs;
+ Finite_elements_spec := all_mregs_complete
+}.
+
Definition mreg_type (r: mreg): typ :=
match r with
| R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 | R11 | R12
@@ -92,7 +121,7 @@ Module IndexedMreg <: INDEXED_TYPE.
Lemma index_inj:
forall r1 r2, index r1 = index r2 -> r1 = r2.
Proof.
- destruct r1; destruct r2; simpl; intro; discriminate || reflexivity.
+ decide_goal.
Qed.
End IndexedMreg.