1 /* Program execution for Emacs.
2
3 Copyright (C) 2023 Free Software Foundation, Inc.
4
5 This file is part of GNU Emacs.
6
7 GNU Emacs is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or (at
10 your option) any later version.
11
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
19
20
21
22 #ifndef _MIPSFPU_H_
23 #define _MIPSFPU_H_
24
25 #include "exec.h"
26
27 struct mips_elf_abi_flags
28 {
29 /* Version of flags structure. */
30 uint16_t version;
31
32 /* The level of the ISA: 1-5, 32, 64. */
33 uint8_t isa_level;
34
35 /* The revision of ISA: 0 for MIPS V and below, 1-n otherwise. */
36 uint8_t isa_rev;
37
38 /* The size of general purpose registers. */
39 uint8_t gpr_size;
40
41 /* The size of co-processor 1 registers. */
42 uint8_t cpr1_size;
43
44 /* The size of co-processor 2 registers. */
45 uint8_t cpr2_size;
46
47 /* The floating-point ABI. */
48 uint8_t fp_abi;
49
50 /* Mask of processor-specific extensions. */
51 uint32_t isa_ext;
52
53 /* Mask of ASEs used. */
54 uint32_t ases;
55
56 /* Mask of general flags. */
57 uint32_t flags1;
58
59 /* Mask of general flags. */
60 uint32_t flags2;
61 };
62
63
64
65 /* Floating point modes. */
66
67 #define FP_FR0 0
68 #define FP_FR1 1
69 #define FP_FRE 3
70
71
72
73 /* Defined in mipsfpu.c. */
74
75 extern bool cpu_supports_fr0_p (void);
76 extern int determine_fpu_mode (elf_header *, elf_header *,
77 int *, struct mips_elf_abi_flags *,
78 struct mips_elf_abi_flags *);
79
80
81
82 #endif /* _MIPSFPU_H_ */