x86: remove ModRM.mod decoding layer from AVX512F VMOVS{S,D}
[external/binutils.git] / sim / m32r / m32r-sim.h
1 /* collection of junk waiting time to sort out
2    Copyright (C) 1996-2019 Free Software Foundation, Inc.
3    Contributed by Cygnus Support.
4
5    This file is part of GDB, the GNU debugger.
6
7    This program 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
10    (at your option) any later version.
11
12    This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #ifndef M32R_SIM_H
21 #define M32R_SIM_H
22
23 /* GDB register numbers.  */
24 #define PSW_REGNUM      16
25 #define CBR_REGNUM      17
26 #define SPI_REGNUM      18
27 #define SPU_REGNUM      19
28 #define BPC_REGNUM      20
29 #define PC_REGNUM       21
30 #define ACCL_REGNUM     22
31 #define ACCH_REGNUM     23
32 #define ACC1L_REGNUM    24
33 #define ACC1H_REGNUM    25
34 #define BBPSW_REGNUM    26
35 #define BBPC_REGNUM     27
36 #define EVB_REGNUM      28
37
38 extern int m32r_decode_gdb_ctrl_regnum (int);
39
40 /* Cover macros for hardware accesses.
41    FIXME: Eventually move to cgen.  */
42 #define GET_H_SM() ((CPU (h_psw) & 0x80) != 0)
43
44 #ifndef GET_H_CR
45 extern USI  m32rbf_h_cr_get_handler (SIM_CPU *, UINT);
46 extern void m32rbf_h_cr_set_handler (SIM_CPU *, UINT, USI);
47
48 #define GET_H_CR(regno) \
49   XCONCAT2 (WANT_CPU,_h_cr_get_handler) (current_cpu, (regno))
50 #define SET_H_CR(regno, val) \
51   XCONCAT2 (WANT_CPU,_h_cr_set_handler) (current_cpu, (regno), (val))
52 #endif
53
54 #ifndef  GET_H_PSW
55 extern UQI  m32rbf_h_psw_get_handler (SIM_CPU *);
56 extern void m32rbf_h_psw_set_handler (SIM_CPU *, UQI);
57
58 #define GET_H_PSW() \
59   XCONCAT2 (WANT_CPU,_h_psw_get_handler) (current_cpu)
60 #define SET_H_PSW(val) \
61   XCONCAT2 (WANT_CPU,_h_psw_set_handler) (current_cpu, (val))
62 #endif
63
64 #ifndef  GET_H_ACCUM
65 extern DI   m32rbf_h_accum_get_handler (SIM_CPU *);
66 extern void m32rbf_h_accum_set_handler (SIM_CPU *, DI);
67
68 #define GET_H_ACCUM() \
69   XCONCAT2 (WANT_CPU,_h_accum_get_handler) (current_cpu)
70 #define SET_H_ACCUM(val) \
71   XCONCAT2 (WANT_CPU,_h_accum_set_handler) (current_cpu, (val))
72 #endif
73 \f
74 /* Misc. profile data.  */
75
76 typedef struct {
77   /* nop insn slot filler count */
78   unsigned int fillnop_count;
79   /* number of parallel insns */
80   unsigned int parallel_count;
81
82   /* FIXME: generalize this to handle all insn lengths, move to common.  */
83   /* number of short insns, not including parallel ones */
84   unsigned int short_count;
85   /* number of long insns */
86   unsigned int long_count;
87
88   /* Working area for computing cycle counts.  */
89   unsigned long insn_cycles; /* FIXME: delete */
90   unsigned long cti_stall;
91   unsigned long load_stall;
92   unsigned long biggest_cycles;
93
94   /* Bitmask of registers loaded by previous insn.  */
95   unsigned int load_regs;
96   /* Bitmask of registers loaded by current insn.  */
97   unsigned int load_regs_pending;
98 } M32R_MISC_PROFILE;
99
100 /* Initialize the working area.  */
101 void m32r_init_insn_cycles (SIM_CPU *, int);
102 /* Update the totals for the insn.  */
103 void m32r_record_insn_cycles (SIM_CPU *, int);
104
105 /* This is invoked by the nop pattern in the .cpu file.  */
106 #define PROFILE_COUNT_FILLNOPS(cpu, addr) \
107 do { \
108   if (PROFILE_INSN_P (cpu) \
109       && (addr & 3) != 0) \
110     ++ CPU_M32R_MISC_PROFILE (cpu)->fillnop_count; \
111 } while (0)
112
113 /* This is invoked by the execute section of mloop{,x}.in.  */
114 #define PROFILE_COUNT_PARINSNS(cpu) \
115 do { \
116   if (PROFILE_INSN_P (cpu)) \
117     ++ CPU_M32R_MISC_PROFILE (cpu)->parallel_count; \
118 } while (0)
119
120 /* This is invoked by the execute section of mloop{,x}.in.  */
121 #define PROFILE_COUNT_SHORTINSNS(cpu) \
122 do { \
123   if (PROFILE_INSN_P (cpu)) \
124     ++ CPU_M32R_MISC_PROFILE (cpu)->short_count; \
125 } while (0)
126
127 /* This is invoked by the execute section of mloop{,x}.in.  */
128 #define PROFILE_COUNT_LONGINSNS(cpu) \
129 do { \
130   if (PROFILE_INSN_P (cpu)) \
131     ++ CPU_M32R_MISC_PROFILE (cpu)->long_count; \
132 } while (0)
133 \f
134 #define GETTWI GETTSI
135 #define SETTWI SETTSI
136 \f
137 /* Additional execution support.  */
138
139 \f
140 /* Hardware/device support.
141    ??? Will eventually want to move device stuff to config files.  */
142
143 /* Exception, Interrupt, and Trap addresses */
144 #define EIT_SYSBREAK_ADDR       0x10
145 #define EIT_RSVD_INSN_ADDR      0x20
146 #define EIT_ADDR_EXCP_ADDR      0x30
147 #define EIT_TRAP_BASE_ADDR      0x40
148 #define EIT_EXTERN_ADDR         0x80
149 #define EIT_RESET_ADDR          0x7ffffff0
150 #define EIT_WAKEUP_ADDR         0x7ffffff0
151
152 /* Special purpose traps.  */
153 #define TRAP_SYSCALL    0
154 #define TRAP_BREAKPOINT 1
155
156 /* Handle the trap insn.  */
157 USI m32r_trap (SIM_CPU *, PCADDR, int);
158
159 #endif /* M32R_SIM_H */