(linenum→info "unix/slp.c:2238")

binutils/2.18/include/xtensa-isa.h

    1: /* Interface definition for configurable Xtensa ISA support.
    2:    Copyright 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
    3: 
    4:    This file is part of BFD, the Binary File Descriptor library.
    5: 
    6:    This program is free software; you can redistribute it and/or modify
    7:    it under the terms of the GNU General Public License as published by
    8:    the Free Software Foundation; either version 2 of the License, or
    9:    (at your option) any later version.
   10: 
   11:    This program is distributed in the hope that it will be useful,
   12:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   13:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   14:    GNU General Public License for more details.
   15: 
   16:    You should have received a copy of the GNU General Public License
   17:    along with this program; if not, write to the Free Software
   18:    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
   19: 
   20: #ifndef XTENSA_LIBISA_H
   21: #define XTENSA_LIBISA_H
   22: 
   23: #ifdef __cplusplus
   24: extern "C" {
   25: #endif
   26: 
   27: /* Version number: This is intended to help support code that works with
   28:    versions of this library from multiple Xtensa releases.  */
   29: 
   30: #define XTENSA_ISA_VERSION 7000
   31: 
   32: #ifndef uint32
   33: #define uint32 unsigned int
   34: #endif
   35: 
   36: /* This file defines the interface to the Xtensa ISA library.  This
   37:    library contains most of the ISA-specific information for a
   38:    particular Xtensa processor.  For example, the set of valid
   39:    instructions, their opcode encodings and operand fields are all
   40:    included here.
   41: 
   42:    This interface basically defines a number of abstract data types.
   43: 
   44:    . an instruction buffer - for holding the raw instruction bits
   45:    . ISA info - information about the ISA as a whole
   46:    . instruction formats - instruction size and slot structure
   47:    . opcodes - information about individual instructions
   48:    . operands - information about register and immediate instruction operands
   49:    . stateOperands - information about processor state instruction operands
   50:    . interfaceOperands - information about interface instruction operands
   51:    . register files - register file information
   52:    . processor states - internal processor state information
   53:    . system registers - "special registers" and "user registers"
   54:    . interfaces - TIE interfaces that are external to the processor
   55:    . functional units - TIE shared functions
   56: 
   57:    The interface defines a set of functions to access each data type.
   58:    With the exception of the instruction buffer, the internal
   59:    representations of the data structures are hidden.  All accesses must
   60:    be made through the functions defined here.  */
   61: 
   62: typedef struct xtensa_isa_opaque { int unused; } *xtensa_isa;
   63: 
   64: 
   65: /* Most of the Xtensa ISA entities (e.g., opcodes, regfiles, etc.) are
   66:    represented here using sequential integers beginning with 0.  The
   67:    specific values are only fixed for a particular instantiation of an
   68:    xtensa_isa structure, so these values should only be used
   69:    internally.  */
   70: 
   71: typedef int xtensa_opcode;
   72: typedef int xtensa_format;
   73: typedef int xtensa_regfile;
   74: typedef int xtensa_state;
   75: typedef int xtensa_sysreg;
   76: typedef int xtensa_interface;
   77: typedef int xtensa_funcUnit;
   78: 
   79: 
   80: /* Define a unique value for undefined items.  */
   81: 
   82: #define XTENSA_UNDEFINED -1
   83: 
   84: 
   85: /* Overview of using this interface to decode/encode instructions:
   86: 
   87:    Each Xtensa instruction is associated with a particular instruction
   88:    format, where the format defines a fixed number of slots for
   89:    operations.  The formats for the core Xtensa ISA have only one slot,
   90:    but FLIX instructions may have multiple slots.  Within each slot,
   91:    there is a single opcode and some number of associated operands.
   92: 
   93:    The encoding and decoding functions operate on instruction buffers,
   94:    not on the raw bytes of the instructions.  The same instruction
   95:    buffer data structure is used for both entire instructions and
   96:    individual slots in those instructions -- the contents of a slot need
   97:    to be extracted from or inserted into the buffer for the instruction
   98:    as a whole.
   99: 
  100:    Decoding an instruction involves first finding the format, which
  101:    identifies the number of slots, and then decoding each slot
  102:    separately.  A slot is decoded by finding the opcode and then using
  103:    the opcode to determine how many operands there are.  For example:
  104: 
  105:    xtensa_insnbuf_from_chars
  106:    xtensa_format_decode
  107:    for each slot {
  108:      xtensa_format_get_slot
  109:      xtensa_opcode_decode
  110:      for each operand {
  111:        xtensa_operand_get_field
  112:        xtensa_operand_decode
  113:      }
  114:    }
  115: 
  116:    Encoding an instruction is roughly the same procedure in reverse:
  117: 
  118:    xtensa_format_encode
  119:    for each slot {
  120:      xtensa_opcode_encode
  121:      for each operand {
  122:        xtensa_operand_encode
  123:        xtensa_operand_set_field
  124:      }
  125:      xtensa_format_set_slot
  126:    }
  127:    xtensa_insnbuf_to_chars
  128: */
  129: 
  130: ^L
  131: /* Error handling.  */
  132: 
  133: /* Error codes.  The code for the most recent error condition can be
  134:    retrieved with the "errno" function.  For any result other than
  135:    xtensa_isa_ok, an error message containing additional information
  136:    about the problem can be retrieved using the "error_msg" function.
  137:    The error messages are stored in an internal buffer, which should
  138:    not be freed and may be overwritten by subsequent operations.  */
  139: 
  140: typedef enum xtensa_isa_status_enum
  141: {
  142:   xtensa_isa_ok = 0,
  143:   xtensa_isa_bad_format,
  144:   xtensa_isa_bad_slot,
  145:   xtensa_isa_bad_opcode,
  146:   xtensa_isa_bad_operand,
  147:   xtensa_isa_bad_field,
  148:   xtensa_isa_bad_iclass,
  149:   xtensa_isa_bad_regfile,
  150:   xtensa_isa_bad_sysreg,
  151:   xtensa_isa_bad_state,
  152:   xtensa_isa_bad_interface,
  153:   xtensa_isa_bad_funcUnit,
  154:   xtensa_isa_wrong_slot,
  155:   xtensa_isa_no_field,
  156:   xtensa_isa_out_of_memory,
  157:   xtensa_isa_buffer_overflow,
  158:   xtensa_isa_internal_error,
  159:   xtensa_isa_bad_value
  160: } xtensa_isa_status;
  161: 
  162: extern xtensa_isa_status
  163: xtensa_isa_errno (xtensa_isa isa);
  164: 
  165: extern char *
  166: xtensa_isa_error_msg (xtensa_isa isa);
  167: 
  168: 
  169: ^L
  170: /* Instruction buffers.  */
  171: 
  172: typedef uint32 xtensa_insnbuf_word;
  173: typedef xtensa_insnbuf_word *xtensa_insnbuf;
  174: 
  175: 
  176: /* Get the size in "insnbuf_words" of the xtensa_insnbuf array.  */
  177: 
  178: extern int
  179: xtensa_insnbuf_size (xtensa_isa isa); 
  180: 
  181: 
  182: /* Allocate an xtensa_insnbuf of the right size.  */
  183: 
  184: extern xtensa_insnbuf
  185: xtensa_insnbuf_alloc (xtensa_isa isa);
  186: 
  187: 
  188: /* Release an xtensa_insnbuf.  */
  189: 
  190: extern void
  191: xtensa_insnbuf_free (xtensa_isa isa, xtensa_insnbuf buf);
  192: 
  193: 
  194: /* Conversion between raw memory (char arrays) and our internal
  195:    instruction representation.  This is complicated by the Xtensa ISA's
  196:    variable instruction lengths.  When converting to chars, the buffer
  197:    must contain a valid instruction so we know how many bytes to copy;
  198:    thus, the "to_chars" function returns the number of bytes copied or
  199:    XTENSA_UNDEFINED on error.  The "from_chars" function first reads the
  200:    minimal number of bytes required to decode the instruction length and
  201:    then proceeds to copy the entire instruction into the buffer; if the
  202:    memory does not contain a valid instruction, it copies the maximum
  203:    number of bytes required for the longest Xtensa instruction.  The
  204:    "num_chars" argument may be used to limit the number of bytes that
  205:    can be read or written.  Otherwise, if "num_chars" is zero, the
  206:    functions may read or write past the end of the code.  */
  207: 
  208: extern int
  209: xtensa_insnbuf_to_chars (xtensa_isa isa, const xtensa_insnbuf insn,
  210:                          unsigned char *cp, int num_chars);
  211: 
  212: extern void
  213: xtensa_insnbuf_from_chars (xtensa_isa isa, xtensa_insnbuf insn,
  214:                            const unsigned char *cp, int num_chars);
  215: 
  216: 
  217: ^L
  218: /* ISA information.  */
  219: 
  220: /* Initialize the ISA information.  */
  221: 
  222: extern xtensa_isa
  223: xtensa_isa_init (xtensa_isa_status *errno_p, char **error_msg_p);
  224: 
  225: 
  226: /* Deallocate an xtensa_isa structure.  */
  227: 
  228: extern void
  229: xtensa_isa_free (xtensa_isa isa);
  230: 
  231: 
  232: /* Get the maximum instruction size in bytes.  */
  233: 
  234: extern int
  235: xtensa_isa_maxlength (xtensa_isa isa); 
  236: 
  237: 
  238: /* Decode the length in bytes of an instruction in raw memory (not an
  239:    insnbuf).  This function reads only the minimal number of bytes
  240:    required to decode the instruction length.  Returns
  241:    XTENSA_UNDEFINED on error.  */
  242: 
  243: extern int
  244: xtensa_isa_length_from_chars (xtensa_isa isa, const unsigned char *cp);
  245: 
  246: 
  247: /* Get the number of stages in the processor's pipeline.  The pipeline
  248:    stage values returned by other functions in this library will range
  249:    from 0 to N-1, where N is the value returned by this function.
  250:    Note that the stage numbers used here may not correspond to the
  251:    actual processor hardware, e.g., the hardware may have additional
  252:    stages before stage 0.  Returns XTENSA_UNDEFINED on error.  */
  253: 
  254: extern int
  255: xtensa_isa_num_pipe_stages (xtensa_isa isa); 
  256: 
  257: 
  258: /* Get the number of various entities that are defined for this processor.  */
  259: 
  260: extern int
  261: xtensa_isa_num_formats (xtensa_isa isa);
  262: 
  263: extern int
  264: xtensa_isa_num_opcodes (xtensa_isa isa);
  265: 
  266: extern int
  267: xtensa_isa_num_regfiles (xtensa_isa isa);
  268: 
  269: extern int
  270: xtensa_isa_num_states (xtensa_isa isa);
  271: 
  272: extern int
  273: xtensa_isa_num_sysregs (xtensa_isa isa);
  274: 
  275: extern int
  276: xtensa_isa_num_interfaces (xtensa_isa isa);
  277: 
  278: extern int
  279: xtensa_isa_num_funcUnits (xtensa_isa isa);
  280: 
  281: 
  282: ^L
  283: /* Instruction formats.  */
  284: 
  285: /* Get the name of a format.  Returns null on error.  */
  286: 
  287: extern const char *
  288: xtensa_format_name (xtensa_isa isa, xtensa_format fmt);
  289: 
  290: 
  291: /* Given a format name, return the format number.  Returns
  292:    XTENSA_UNDEFINED if the name is not a valid format.  */
  293: 
  294: extern xtensa_format
  295: xtensa_format_lookup (xtensa_isa isa, const char *fmtname);
  296: 
  297: 
  298: /* Decode the instruction format from a binary instruction buffer.
  299:    Returns XTENSA_UNDEFINED if the format is not recognized.  */
  300: 
  301: extern xtensa_format
  302: xtensa_format_decode (xtensa_isa isa, const xtensa_insnbuf insn);
  303: 
  304: 
  305: /* Set the instruction format field(s) in a binary instruction buffer.
  306:    All the other fields are set to zero.  Returns non-zero on error.  */
  307: 
  308: extern int
  309: xtensa_format_encode (xtensa_isa isa, xtensa_format fmt, xtensa_insnbuf insn);
  310: 
  311: 
  312: /* Find the length (in bytes) of an instruction.  Returns
  313:    XTENSA_UNDEFINED on error.  */
  314: 
  315: extern int
  316: xtensa_format_length (xtensa_isa isa, xtensa_format fmt);
  317: 
  318: 
  319: /* Get the number of slots in an instruction.  Returns XTENSA_UNDEFINED
  320:    on error.  */
  321: 
  322: extern int
  323: xtensa_format_num_slots (xtensa_isa isa, xtensa_format fmt);
  324: 
  325: 
  326: /* Get the opcode for a no-op in a particular slot.
  327:    Returns XTENSA_UNDEFINED on error.  */
  328: 
  329: extern xtensa_opcode
  330: xtensa_format_slot_nop_opcode (xtensa_isa isa, xtensa_format fmt, int slot);
  331: 
  332: 
  333: /* Get the bits for a specified slot out of an insnbuf for the
  334:    instruction as a whole and put them into an insnbuf for that one
  335:    slot, and do the opposite to set a slot.  Return non-zero on error.  */
  336: 
  337: extern int
  338: xtensa_format_get_slot (xtensa_isa isa, xtensa_format fmt, int slot,
  339:                         const xtensa_insnbuf insn, xtensa_insnbuf slotbuf);
  340: 
  341: extern int
  342: xtensa_format_set_slot (xtensa_isa isa, xtensa_format fmt, int slot,
  343:                         xtensa_insnbuf insn, const xtensa_insnbuf slotbuf);
  344: 
  345: 
  346: ^L
  347: /* Opcode information.  */
  348: 
  349: /* Translate a mnemonic name to an opcode.  Returns XTENSA_UNDEFINED if
  350:    the name is not a valid opcode mnemonic.  */
  351: 
  352: extern xtensa_opcode
  353: xtensa_opcode_lookup (xtensa_isa isa, const char *opname);
  354: 
  355: 
  356: /* Decode the opcode for one instruction slot from a binary instruction
  357:    buffer.  Returns the opcode or XTENSA_UNDEFINED if the opcode is
  358:    illegal.  */
  359: 
  360: extern xtensa_opcode
  361: xtensa_opcode_decode (xtensa_isa isa, xtensa_format fmt, int slot,
  362:                       const xtensa_insnbuf slotbuf);
  363: 
  364: 
  365: /* Set the opcode field(s) for an instruction slot.  All other fields
  366:    in the slot are set to zero.  Returns non-zero if the opcode cannot
  367:    be encoded.  */
  368: 
  369: extern int
  370: xtensa_opcode_encode (xtensa_isa isa, xtensa_format fmt, int slot,
  371:                       xtensa_insnbuf slotbuf, xtensa_opcode opc);
  372: 
  373: 
  374: /* Get the mnemonic name for an opcode.  Returns null on error.  */
  375: 
  376: extern const char *
  377: xtensa_opcode_name (xtensa_isa isa, xtensa_opcode opc);
  378: 
  379: 
  380: /* Check various properties of opcodes.  These functions return 0 if
  381:    the condition is false, 1 if the condition is true, and
  382:    XTENSA_UNDEFINED on error.  The instructions are classified as
  383:    follows:
  384: 
  385:    branch: conditional branch; may fall through to next instruction (B*)
  386:    jump: unconditional branch (J, JX, RET*, RF*)
  387:    loop: zero-overhead loop (LOOP*)
  388:    call: unconditional call; control returns to next instruction (CALL*)
  389: 
  390:    For the opcodes that affect control flow in some way, the branch
  391:    target may be specified by an immediate operand or it may be an
  392:    address stored in a register.  You can distinguish these by
  393:    checking if the instruction has a PC-relative immediate
  394:    operand.  */
  395: 
  396: extern int
  397: xtensa_opcode_is_branch (xtensa_isa isa, xtensa_opcode opc);
  398: 
  399: extern int
  400: xtensa_opcode_is_jump (xtensa_isa isa, xtensa_opcode opc);
  401: 
  402: extern int
  403: xtensa_opcode_is_loop (xtensa_isa isa, xtensa_opcode opc);
  404: 
  405: extern int
  406: xtensa_opcode_is_call (xtensa_isa isa, xtensa_opcode opc);
  407: 
  408: 
  409: /* Find the number of ordinary operands, state operands, and interface
  410:    operands for an instruction.  These return XTENSA_UNDEFINED on
  411:    error.  */
  412: 
  413: extern int
  414: xtensa_opcode_num_operands (xtensa_isa isa, xtensa_opcode opc);
  415: 
  416: extern int
  417: xtensa_opcode_num_stateOperands (xtensa_isa isa, xtensa_opcode opc);
  418: 
  419: extern int
  420: xtensa_opcode_num_interfaceOperands (xtensa_isa isa, xtensa_opcode opc);
  421: 
  422: 
  423: /* Get functional unit usage requirements for an opcode.  Each "use"
  424:    is identified by a <functional unit, pipeline stage> pair.  The
  425:    "num_funcUnit_uses" function returns the number of these "uses" or
  426:    XTENSA_UNDEFINED on error.  The "funcUnit_use" function returns
  427:    a pointer to a "use" pair or null on error.  */
  428: 
  429: typedef struct xtensa_funcUnit_use_struct
  430: {
  431:   xtensa_funcUnit unit;
  432:   int stage;
  433: } xtensa_funcUnit_use;
  434: 
  435: extern int
  436: xtensa_opcode_num_funcUnit_uses (xtensa_isa isa, xtensa_opcode opc);
  437: 
  438: extern xtensa_funcUnit_use *
  439: xtensa_opcode_funcUnit_use (xtensa_isa isa, xtensa_opcode opc, int u);
  440: 
  441: 
  442: ^L
  443: /* Operand information.  */
  444: 
  445: /* Get the name of an operand.  Returns null on error.  */
  446: 
  447: extern const char *
  448: xtensa_operand_name (xtensa_isa isa, xtensa_opcode opc, int opnd);
  449: 
  450: 
  451: /* Some operands are "invisible", i.e., not explicitly specified in
  452:    assembly language.  When assembling an instruction, you need not set
  453:    the values of invisible operands, since they are either hardwired or
  454:    derived from other field values.  The values of invisible operands
  455:    can be examined in the same way as other operands, but remember that
  456:    an invisible operand may get its value from another visible one, so
  457:    the entire instruction must be available before examining the
  458:    invisible operand values.  This function returns 1 if an operand is
  459:    visible, 0 if it is invisible, or XTENSA_UNDEFINED on error.  Note
  460:    that whether an operand is visible is orthogonal to whether it is
  461:    "implicit", i.e., whether it is encoded in a field in the
  462:    instruction.  */
  463: 
  464: extern int
  465: xtensa_operand_is_visible (xtensa_isa isa, xtensa_opcode opc, int opnd);
  466: 
  467: 
  468: /* Check if an operand is an input ('i'), output ('o'), or inout ('m')
  469:    operand.  Note: The output operand of a conditional assignment
  470:    (e.g., movnez) appears here as an inout ('m') even if it is declared
  471:    in the TIE code as an output ('o'); this allows the compiler to
  472:    properly handle register allocation for conditional assignments.
  473:    Returns 0 on error.  */
  474: 
  475: extern char
  476: xtensa_operand_inout (xtensa_isa isa, xtensa_opcode opc, int opnd);
  477: 
  478: 
  479: /* Get and set the raw (encoded) value of the field for the specified
  480:    operand.  The "set" function does not check if the value fits in the
  481:    field; that is done by the "encode" function below.  Both of these
  482:    functions return non-zero on error, e.g., if the field is not defined
  483:    for the specified slot.  */
  484: 
  485: extern int
  486: xtensa_operand_get_field (xtensa_isa isa, xtensa_opcode opc, int opnd,
  487:                           xtensa_format fmt, int slot,
  488:                           const xtensa_insnbuf slotbuf, uint32 *valp);
  489: 
  490: extern int 
  491: xtensa_operand_set_field (xtensa_isa isa, xtensa_opcode opc, int opnd,
  492:                           xtensa_format fmt, int slot,
  493:                           xtensa_insnbuf slotbuf, uint32 val);
  494: 
  495: 
  496: /* Encode and decode operands.  The raw bits in the operand field may
  497:    be encoded in a variety of different ways.  These functions hide
  498:    the details of that encoding.  The result values are returned through
  499:    the argument pointer.  The return value is non-zero on error.  */
  500: 
  501: extern int
  502: xtensa_operand_encode (xtensa_isa isa, xtensa_opcode opc, int opnd,
  503:                        uint32 *valp);
  504: 
  505: extern int
  506: xtensa_operand_decode (xtensa_isa isa, xtensa_opcode opc, int opnd,
  507:                        uint32 *valp);
  508: 
  509: 
  510: /* An operand may be either a register operand or an immediate of some
  511:    sort (e.g., PC-relative or not).  The "is_register" function returns
  512:    0 if the operand is an immediate, 1 if it is a register, and
  513:    XTENSA_UNDEFINED on error.  The "regfile" function returns the
  514:    regfile for a register operand, or XTENSA_UNDEFINED on error.  */
  515: 
  516: extern int
  517: xtensa_operand_is_register (xtensa_isa isa, xtensa_opcode opc, int opnd);
  518: 
  519: extern xtensa_regfile
  520: xtensa_operand_regfile (xtensa_isa isa, xtensa_opcode opc, int opnd);
  521: 
  522: 
  523: /* Register operands may span multiple consecutive registers, e.g., a
  524:    64-bit data type may occupy two 32-bit registers.  Only the first
  525:    register is encoded in the operand field.  This function specifies
  526:    the number of consecutive registers occupied by this operand.  For
  527:    non-register operands, the return value is undefined.  Returns
  528:    XTENSA_UNDEFINED on error.  */
  529: 
  530: extern int
  531: xtensa_operand_num_regs (xtensa_isa isa, xtensa_opcode opc, int opnd);
  532:                                  
  533: 
  534: /* Some register operands do not completely identify the register being
  535:    accessed.  For example, the operand value may be added to an internal
  536:    state value.  By definition, this implies that the corresponding
  537:    regfile is not allocatable.  Unknown registers should generally be
  538:    treated with worst-case assumptions.  The function returns 0 if the
  539:    register value is unknown, 1 if known, and XTENSA_UNDEFINED on
  540:    error.  */
  541: 
  542: extern int
  543: xtensa_operand_is_known_reg (xtensa_isa isa, xtensa_opcode opc, int opnd);
  544: 
  545: 
  546: /* Check if an immediate operand is PC-relative.  Returns 0 for register
  547:    operands and non-PC-relative immediates, 1 for PC-relative
  548:    immediates, and XTENSA_UNDEFINED on error.  */
  549:  
  550: extern int
  551: xtensa_operand_is_PCrelative (xtensa_isa isa, xtensa_opcode opc, int opnd);
  552: 
  553: 
  554: /* For PC-relative offset operands, the interpretation of the offset may
  555:    vary between opcodes, e.g., is it relative to the current PC or that
  556:    of the next instruction?  The following functions are defined to
  557:    perform PC-relative relocations and to undo them (as in the
  558:    disassembler).  The "do_reloc" function takes the desired address
  559:    value and the PC of the current instruction and sets the value to the
  560:    corresponding PC-relative offset (which can then be encoded and
  561:    stored into the operand field).  The "undo_reloc" function takes the
  562:    unencoded offset value and the current PC and sets the value to the
  563:    appropriate address.  The return values are non-zero on error.  Note
  564:    that these functions do not replace the encode/decode functions; the
  565:    operands must be encoded/decoded separately and the encode functions
  566:    are responsible for detecting invalid operand values.  */
  567: 
  568: extern int
  569: xtensa_operand_do_reloc (xtensa_isa isa, xtensa_opcode opc, int opnd,
  570:                          uint32 *valp, uint32 pc);
  571: 
  572: extern int
  573: xtensa_operand_undo_reloc (xtensa_isa isa, xtensa_opcode opc, int opnd,
  574:                            uint32 *valp, uint32 pc);
  575: 
  576: 
  577: ^L
  578: /* State Operands.  */
  579: 
  580: /* Get the state accessed by a state operand.  Returns XTENSA_UNDEFINED
  581:    on error.  */
  582: 
  583: extern xtensa_state
  584: xtensa_stateOperand_state (xtensa_isa isa, xtensa_opcode opc, int stOp);
  585: 
  586: 
  587: /* Check if a state operand is an input ('i'), output ('o'), or inout
  588:    ('m') operand.  Returns 0 on error.  */
  589: 
  590: extern char
  591: xtensa_stateOperand_inout (xtensa_isa isa, xtensa_opcode opc, int stOp);
  592: 
  593: 
  594: ^L
  595: /* Interface Operands.  */
  596: 
  597: /* Get the external interface accessed by an interface operand.
  598:    Returns XTENSA_UNDEFINED on error.  */
  599: 
  600: extern xtensa_interface
  601: xtensa_interfaceOperand_interface (xtensa_isa isa, xtensa_opcode opc,
  602:                                    int ifOp);
  603: 
  604: 
  605: ^L
  606: /* Register Files.  */
  607: 
  608: /* Regfiles include both "real" regfiles and "views", where a view
  609:    allows a group of adjacent registers in a real "parent" regfile to be<