X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fcommon%2Fcgen-utils.c;h=4b69ac5a5748457a01a33fab9ba368277a442246;hb=a435742a7fb32f6320ce0e6074e2500e28378104;hp=2faff5c2948d47b55977a37bf47fd2055b643c52;hpb=1996fae84682e8ddd146215dd2959ad1ec924c09;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/cgen-utils.c b/sim/common/cgen-utils.c index 2faff5c294..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,11 +28,8 @@ 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[] = { - "VM", +const char * const mode_names[] = { + "VOID", "BI", "QI", "HI", @@ -59,28 +56,22 @@ const char *mode_names[] = { static const CGEN_IBASE virtual_insn_entries[] = { { - VIRTUAL_INSN_X_INVALID, "--invalid--", NULL, 0, - { CGEN_INSN_NBOOL_ATTRS, V, { 0 } } + VIRTUAL_INSN_X_INVALID, "--invalid--", NULL, 0, { V, { 0 } } }, { - VIRTUAL_INSN_X_BEFORE, "--before--", NULL, 0, - { CGEN_INSN_NBOOL_ATTRS, V, { 0 } } + VIRTUAL_INSN_X_BEFORE, "--before--", NULL, 0, { V, { 0 } } }, { - VIRTUAL_INSN_X_AFTER, "--after--", NULL, 0, - { CGEN_INSN_NBOOL_ATTRS, V, { 0 } } + VIRTUAL_INSN_X_AFTER, "--after--", NULL, 0, { V, { 0 } } }, { - VIRTUAL_INSN_X_BEGIN, "--begin--", NULL, 0, - { CGEN_INSN_NBOOL_ATTRS, V, { 0 } } + VIRTUAL_INSN_X_BEGIN, "--begin--", NULL, 0, { V, { 0 } } }, { - VIRTUAL_INSN_X_CHAIN, "--chain--", NULL, 0, - { CGEN_INSN_NBOOL_ATTRS, V, { 0 } } + VIRTUAL_INSN_X_CHAIN, "--chain--", NULL, 0, { V, { 0 } } }, { - VIRTUAL_INSN_X_CTI_CHAIN, "--cti-chain--", NULL, 0, - { CGEN_INSN_NBOOL_ATTRS, V, { 0 } } + VIRTUAL_INSN_X_CTI_CHAIN, "--cti-chain--", NULL, 0, { V, { 0 } } } }; @@ -326,3 +317,119 @@ 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; + int shift; +{ + if (shift != 0) + { + int remain = 32 - shift; + int mask = (1 << shift) - 1; + SI result = (val & mask) << remain; + mask = (1 << remain) - 1; + result |= (val >> shift) & mask; + return result; + } + return val; +} + +SI +ROLSI (val, shift) + SI val; + int shift; +{ + if (shift != 0) + { + int remain = 32 - shift; + int mask = (1 << remain) - 1; + SI result = (val & mask) << shift; + mask = (1 << shift) - 1; + result |= (val >> remain) & mask; + return result; + } + + 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); +}