-/* Register numbers of various important registers. Note that some of
- these values are "real" register numbers, and correspond to the
- general registers of the machine, and some are "phony" register
- numbers which are too large to be actual register numbers as far as
- the user is concerned but do serve to get the desired values when
- passed to read_register. */
+/* Some MIPS boards don't support floating point while others only
+ support single-precision floating-point operations. */
+
+enum mips_fpu_type
+{
+ MIPS_FPU_DOUBLE, /* Full double precision floating point. */
+ MIPS_FPU_SINGLE, /* Single precision floating point (R4650). */
+ MIPS_FPU_NONE /* No floating point. */
+};
+
+/* MIPS specific per-architecture information. */
+struct mips_gdbarch_tdep : gdbarch_tdep
+{
+ /* from the elf header */
+ int elf_flags = 0;
+
+ /* mips options */
+ enum mips_abi mips_abi {};
+ enum mips_abi found_abi {};
+ enum mips_isa mips_isa {};
+ enum mips_fpu_type mips_fpu_type {};
+ int mips_last_arg_regnum = 0;
+ int mips_last_fp_arg_regnum = 0;
+ int default_mask_address_p = 0;
+ /* Is the target using 64-bit raw integer registers but only
+ storing a left-aligned 32-bit value in each? */
+ int mips64_transfers_32bit_regs_p = 0;
+ /* Indexes for various registers. IRIX and embedded have
+ different values. This contains the "public" fields. Don't
+ add any that do not need to be public. */
+ const struct mips_regnum *regnum = nullptr;
+ /* Register names table for the current register set. */
+ const char * const *mips_processor_reg_names = nullptr;
+
+ /* The size of register data available from the target, if known.
+ This doesn't quite obsolete the manual
+ mips64_transfers_32bit_regs_p, since that is documented to force
+ left alignment even for big endian (very strange). */
+ int register_size_valid_p = 0;
+ int register_size = 0;
+
+ /* Return the expected next PC if FRAME is stopped at a syscall
+ instruction. */
+ CORE_ADDR (*syscall_next_pc) (struct frame_info *frame) = nullptr;
+};
+
+/* Register numbers of various important registers. */