(** This module defines a common interface to specify target architectures. *)

module type S = sig

  (** The type of hardware registers. *)
  type register

  (** Hardware registers that can be used by register allocation. *)
  val allocable_registers : register list

  (** Registers used as effective arguments for functions. *)
  val argument_passing_registers : register list

  (** Registers that must be preserved through function calls. *)
  val callee_saved_registers : register list

  (** Registers that are *not* preserved by function calls. *)
  val caller_saved_registers : register list

  (** The register that holds the value returned by a function. *)
  val return_register : register

  (** A human representation of register identifier. *)
  val string_of_register : register -> string

end