123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /* This file is part of the program psim.
- Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
- 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/>.
-
- */
- /* Instruction field macros:
- The macro's below greatly simplify the process of translating the
- pseudo code found in the PowerPC manual into C.
- In addition to the below, more will be found in the gen program's
- cache table */
- #include "symcat.h"
- /* map some statements and variables directly across */
- #define is_64bit_implementation (WITH_TARGET_WORD_BITSIZE == 64)
- #define is_64bit_mode IS_64BIT_MODE(processor)
- #define NIA nia
- #define CIA cia
- /* reservation */
- #define RESERVE cpu_reservation(processor)->valid
- #define RESERVE_ADDR cpu_reservation(processor)->addr
- #define RESERVE_DATA cpu_reservation(processor)->data
- #define real_addr(EA, IS_READ) vm_real_data_addr(cpu_data_map(processor), \
- EA, \
- IS_READ, \
- processor, \
- cia)
- /* depending on mode return a 32 or 64bit number */
- #define IEA(X) (is_64bit_mode \
- ? (X) \
- : MASKED((X), 32, 63))
- /* Expand argument to current architecture size */
- #define EXTS(X) EXTS_##X
- /* Gen translates text of the form A{XX:YY} into A_XX_YY_ the macro's
- below define such translated text into real expressions */
- /* the spr field as it normally is used */
- #define SPR_5_9_ (SPR & 0x1f)
- #define SPR_0_4_ (SPR >> 5)
- #define SPR_0_ ((SPR & BIT10(0)) != 0)
- #define tbr_5_9_ (tbr & 0x1f)
- #define tbr_0_4_ (tbr >> 5)
- #define TB cpu_get_time_base(processor)
- /* various registers with important masks */
- #define LR_0b00 (LR & ~3)
- #define CTR_0b00 (CTR & ~3)
- #define CR_BI_ ((CR & BIT32_BI) != 0)
- #define CR_BA_ ((CR & BIT32_BA) != 0)
- #define CR_BB_ ((CR & BIT32_BB) != 0)
- /* extended extracted fields */
- #define TO_0_ ((TO & BIT5(0)) != 0)
- #define TO_1_ ((TO & BIT5(1)) != 0)
- #define TO_2_ ((TO & BIT5(2)) != 0)
- #define TO_3_ ((TO & BIT5(3)) != 0)
- #define TO_4_ ((TO & BIT5(4)) != 0)
- #define BO_0_ ((BO & BIT5(0)) != 0)
- #define BO_1_ ((BO & BIT5(1)) != 0)
- #define BO_2_ ((BO & BIT5(2)) != 0)
- #define BO_3_ ((BO & BIT5(3)) != 0)
- #define BO_4_ ((BO & BIT5(4)) != 0)
- #define GOTO(dest) goto XCONCAT4(label__,dest,__,MY_PREFIX)
- #define LABEL(dest) XCONCAT4(label__,dest,__,MY_PREFIX)
|