]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gas/config/xtensa-istack.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / gas / config / xtensa-istack.h
index d9697e116bfc86585080facd2221956ce2aea8ad..d87336753817b83a9557090c36c51dcaec3a0421 100644 (file)
@@ -1,11 +1,11 @@
 /* Declarations for stacks of tokenized Xtensa instructions.
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS 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)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
 #ifndef XTENSA_ISTACK_H
 #define XTENSA_ISTACK_H
 
-#include "dwarf2dbg.h"
 #include "xtensa-isa.h"
 
 #define MAX_ISTACK 12
-#define MAX_INSN_ARGS 10
+#define MAX_INSN_ARGS 64
 
 enum itype_enum
 {
@@ -43,21 +42,28 @@ typedef struct tinsn_struct
   enum itype_enum insn_type;
 
   xtensa_opcode opcode;        /* Literals have an invalid opcode.  */
-  bfd_boolean is_specific_opcode; 
-  bfd_boolean keep_wide; 
+  bfd_boolean is_specific_opcode;
+  bfd_boolean keep_wide;
   int ntok;
   expressionS tok[MAX_INSN_ARGS];
-  struct dwarf2_line_info loc;
+  bfd_boolean loc_directive_seen;
+  struct dwarf2_line_info debug_line;
 
-  struct fixP *fixup;
+  /* This field is used for two types of special pseudo ops:
+     1. TLS-related operations.  Eg:  callx8.tls
+     2. j.l  label, a2
+
+     For the tls-related operations, it will hold a tls-related opcode
+     and info to be used in a fixup.  For j.l it will hold a
+     register to be used during relaxation.  */
+  expressionS extra_arg;
 
   /* Filled out by relaxation_requirements:  */
-  bfd_boolean record_fix;
   enum xtensa_relax_statesE subtype;
   int literal_space;
+
   /* Filled out by vinsn_to_insnbuf:  */
   symbolS *symbol;
-  symbolS *sub_symbol;
   offsetT offset;
   fragS *literal_frag;
 } TInsn;
@@ -77,12 +83,11 @@ bfd_boolean istack_empty (IStack *);
 bfd_boolean istack_full (IStack *);
 TInsn *istack_top (IStack *);
 void istack_push (IStack *, TInsn *);
-TInsn *istack_push_space (IStack *); 
+TInsn *istack_push_space (IStack *);
 void istack_pop (IStack *);
 
 /* TInsn utilities.  */
 void tinsn_init (TInsn *);
-expressionS *tinsn_get_tok (TInsn *, int);
 
 
 /* vliw_insn: bundles of TInsns.  */
@@ -90,10 +95,10 @@ expressionS *tinsn_get_tok (TInsn *, int);
 typedef struct vliw_insn
 {
   xtensa_format format;
-  xtensa_insnbuf insnbuf;
   int num_slots;
   unsigned int inside_bundle;
   TInsn slots[MAX_SLOTS];
+  xtensa_insnbuf insnbuf;
   xtensa_insnbuf slotbuf[MAX_SLOTS];
 } vliw_insn;