/* dbg_cp.h -- ARMulator debug interface: ARM6 Instruction Emulator. Copyright (C) 1994 Advanced RISC Machines Ltd. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>. */ #ifndef Dbg_CP__h #define Dbg_CP__h #define Dbg_Access_Readable 1 #define Dbg_Access_Writable 2 #define Dbg_Access_CPDT 4 /* else CPRT */ typedef struct { unsigned short rmin, rmax; /* a single description can be used for a range of registers with the same properties *accessed via CPDT instructions* */ unsigned char nbytes; /* size of register */ unsigned char access; /* see above (Access_xxx) */ union { struct { /* CPDT instructions do not allow the coprocessor much freedom: only bit 22 ('N') and 12-15 ('CRd') are free for the coprocessor to use as it sees fit. */ unsigned char nbit; unsigned char rdbits; } cpdt; struct { /* CPRT instructions have much more latitude. The bits fixed by the ARM are 24..31 (condition mask & opcode) 20 (direction) 8..15 (cpnum, arm register) 4 (CPRT not CPDO) leaving 14 bits free to the coprocessor (fortunately falling within two bytes). */ unsigned char read_b0, read_b1, write_b0, write_b1; } cprt; } accessinst; } Dbg_CoProRegDesc; struct Dbg_CoProDesc { int entries; Dbg_CoProRegDesc regdesc[1 /* really nentries */ ]; }; #define Dbg_CoProDesc_Size(n) (sizeof(struct Dbg_CoProDesc) + (n-1)*sizeof(Dbg_CoProRegDesc)) #endif