X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fcommon%2Fcgen-utils.c;h=4b69ac5a5748457a01a33fab9ba368277a442246;hb=a435742a7fb32f6320ce0e6074e2500e28378104;hp=e7407ed57260d13e08575bab1f676db3b7dda1e1;hpb=d0352a18a504a4e7b761f6b3264cf11347d8d056;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/cgen-utils.c b/sim/common/cgen-utils.c index e7407ed572..4b69ac5a57 100644 --- a/sim/common/cgen-utils.c +++ b/sim/common/cgen-utils.c @@ -1,23 +1,23 @@ /* Support code for various pieces of CGEN simulators. - Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. 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 2, or (at your option) -any later version. +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, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ +#include "config.h" #include "bfd.h" #include "sim-main.h" #include "dis-asm.h" @@ -28,10 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define SEMOPS_DEFINE_INLINE #include "cgen-ops.h" -#undef min -#define min(a,b) ((a) < (b) ? (a) : (b)) - -const char *mode_names[] = { +const char * const mode_names[] = { "VOID", "BI", "QI", @@ -321,6 +318,74 @@ CONVDISI (val) #endif /* DI_FN_SUPPORT */ +QI +RORQI (val, shift) + QI val; + int shift; +{ + if (shift != 0) + { + int remain = 8 - shift; + int mask = (1 << shift) - 1; + QI result = (val & mask) << remain; + mask = (1 << remain) - 1; + result |= (val >> shift) & mask; + return result; + } + return val; +} + +QI +ROLQI (val, shift) + QI val; + int shift; +{ + if (shift != 0) + { + int remain = 8 - shift; + int mask = (1 << remain) - 1; + QI result = (val & mask) << shift; + mask = (1 << shift) - 1; + result |= (val >> remain) & mask; + return result; + } + return val; +} + +HI +RORHI (val, shift) + HI val; + int shift; +{ + if (shift != 0) + { + int remain = 16 - shift; + int mask = (1 << shift) - 1; + HI result = (val & mask) << remain; + mask = (1 << remain) - 1; + result |= (val >> shift) & mask; + return result; + } + return val; +} + +HI +ROLHI (val, shift) + HI val; + int shift; +{ + if (shift != 0) + { + int remain = 16 - shift; + int mask = (1 << remain) - 1; + HI result = (val & mask) << shift; + mask = (1 << shift) - 1; + result |= (val >> remain) & mask; + return result; + } + return val; +} + SI RORSI (val, shift) SI val; @@ -355,3 +420,16 @@ ROLSI (val, shift) return val; } + +/* Emit an error message from CGEN RTL. */ + +void +cgen_rtx_error (SIM_CPU *cpu, const char * msg) +{ + SIM_DESC sd = CPU_STATE (cpu); + + sim_io_printf (sd, msg); + sim_io_printf (sd, "\n"); + + sim_engine_halt (sd, cpu, NULL, CPU_PC_GET (cpu), sim_stopped, SIM_SIGTRAP); +}