URL
https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk
Subversion Repositories open8_urisc
[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [cpu/] [openrisc.opc] - Rev 161
Compare with Previous | Blame | View Log
/* OpenRISC opcode support. -*- C -*-Copyright 2000, 2001, 2003, 2005, 2011 Free Software Foundation, Inc.Contributed by Red Hat Inc;This file is part of the GNU Binutils.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street - Fifth Floor, Boston,MA 02110-1301, USA. *//* This file is an addendum to or32.cpu. Heavy use of C code isn'tappropriate in .cpu files, so it resides here. This especially appliesto assembly/disassembly where parsing/printing can be quite involved.Such things aren't really part of the specification of the cpu, per se,so .cpu files provide the general framework and .opc files handle thenitty-gritty details as necessary.Each section is delimited with start and end markers.<arch>-opc.h additions use: "-- opc.h"<arch>-opc.c additions use: "-- opc.c"<arch>-asm.c additions use: "-- asm.c"<arch>-dis.c additions use: "-- dis.c"<arch>-ibd.h additions use: "-- ibd.h" *//* -- opc.h */#undef CGEN_DIS_HASH_SIZE#define CGEN_DIS_HASH_SIZE 64#undef CGEN_DIS_HASH#define CGEN_DIS_HASH(buffer, value) (((unsigned char *) (buffer))[0] >> 2)extern long openrisc_sign_extend_16bit (long);/* -- *//* -- opc.c *//* -- *//* -- asm.c */static const char * MISSING_CLOSING_PARENTHESIS = N_("missing `)'");#define CGEN_VERBOSE_ASSEMBLER_ERRORSlongopenrisc_sign_extend_16bit (long value){return ((value & 0xffff) ^ 0x8000) - 0x8000;}/* Handle hi(). */static const char *parse_hi16 (CGEN_CPU_DESC cd, const char ** strp, int opindex, long * valuep){const char *errmsg;enum cgen_parse_operand_result result_type;unsigned long ret;if (**strp == '#')++*strp;if (strncasecmp (*strp, "hi(", 3) == 0){bfd_vma value;*strp += 3;errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_HI16,& result_type, & value);if (**strp != ')')return MISSING_CLOSING_PARENTHESIS;++*strp;if (errmsg == NULL&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)value >>= 16;ret = value;}else{if (**strp == '-'){long value;errmsg = cgen_parse_signed_integer (cd, strp, opindex, &value);ret = value;}else{unsigned long value;errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, &value);ret = value;}}*valuep = ((ret & 0xffff) ^ 0x8000) - 0x8000;return errmsg;}/* Handle lo(). */static const char *parse_lo16 (CGEN_CPU_DESC cd, const char ** strp, int opindex, long * valuep){const char *errmsg;enum cgen_parse_operand_result result_type;unsigned long ret;if (**strp == '#')++*strp;if (strncasecmp (*strp, "lo(", 3) == 0){bfd_vma value;*strp += 3;errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LO16,& result_type, & value);if (**strp != ')')return MISSING_CLOSING_PARENTHESIS;++*strp;ret = value;}else{if (**strp == '-'){long value;errmsg = cgen_parse_signed_integer (cd, strp, opindex, &value);ret = value;}else{unsigned long value;errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, &value);ret = value;}}*valuep = ((ret & 0xffff) ^ 0x8000) - 0x8000;return errmsg;}/* -- *//* -- ibd.h */extern long openrisc_sign_extend_16bit (long);/* -- */
