(* *********************************************************************)
(*                                                                     *)
(*              The Compcert verified compiler                         *)
(*                                                                     *)
(*         Xavier Leroy, Collège de France and INRIA Paris             *)
(*                                                                     *)
(*  Copyright Institut National de Recherche en Informatique et en     *)
(*  Automatique.  All rights reserved.  This file is distributed       *)
(*  under the terms of the INRIA Non-Commercial License Agreement.     *)
(*                                                                     *)
(* *********************************************************************)
(** ** Machine registers *)
(** Integer register 16 is reserved as temporary and for call veeners. Integer register 18 is reserved as the platform register. Integer register 30 is reserved for the return address. *)
Inductive mreg: Type :=
(** Allocatable integer regs *)
| R0  | R1  | R2  | R3  | R4  | R5  | R6  | R7
| R8  | R9  | R10 | R11 | R12 | R13 | R14 | R15
| R17 | R19 | R20 | R21 |  R22 | R23
| R24 | R25 | R26 | R27 | R28 | R29
(** Allocatable floating-point regs *)
| 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.

Lemma mreg_eq: forall (r1 r2: mreg), {r1 = r2} + {r1 <> r2}.