Enable support for the AArch64 dot-prod instruction in the Cortex A55 and A75 cpus.
[deliverable/binutils-gdb.git] / gdb / expprint.c
index b3337cdaae8b344ba82c4350994f0cacf11cb209..9b8ac4c070b4db0729eff48261405ab8117492ad 100644 (file)
@@ -1,6 +1,6 @@
 /* Print in infix form a struct expression.
 
-   Copyright (C) 1986-2016 Free Software Foundation, Inc.
+   Copyright (C) 1986-2017 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -62,7 +62,7 @@ print_subexp_standard (struct expression *exp, int *pos,
   const struct op_print *op_print_tab;
   int pc;
   unsigned nargs;
-  char *op_str;
+  const char *op_str;
   int assign_modify = 0;
   enum exp_opcode opcode;
   enum precedence myprec = PREC_NULL;
@@ -559,6 +559,26 @@ print_subexp_standard (struct expression *exp, int *pos,
        return;
       }
 
+    case OP_RANGE:
+      {
+       enum range_type range_type;
+
+       range_type = (enum range_type)
+         longest_to_int (exp->elts[pc + 1].longconst);
+       *pos += 2;
+
+       fputs_filtered ("RANGE(", stream);
+       if (range_type == HIGH_BOUND_DEFAULT
+           || range_type == NONE_BOUND_DEFAULT)
+         print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
+       fputs_filtered ("..", stream);
+       if (range_type == LOW_BOUND_DEFAULT
+           || range_type == NONE_BOUND_DEFAULT)
+         print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
+       fputs_filtered (")", stream);
+       return;
+      }
+
       /* Default ops */
 
     default:
@@ -629,7 +649,7 @@ print_subexp_standard (struct expression *exp, int *pos,
 /* Return the operator corresponding to opcode OP as
    a string.   NULL indicates that the opcode was not found in the
    current language table.  */
-char *
+const char *
 op_string (enum exp_opcode op)
 {
   int tem;
@@ -649,7 +669,7 @@ static int dump_subexp_body (struct expression *exp, struct ui_file *, int);
 
 /* Name for OPCODE, when it appears in expression EXP.  */
 
-char *
+const char *
 op_name (struct expression *exp, enum exp_opcode opcode)
 {
   return exp->language_defn->la_exp_desc->op_name (opcode);
@@ -658,7 +678,7 @@ op_name (struct expression *exp, enum exp_opcode opcode)
 /* Default name for the standard operator OPCODE (i.e., one defined in
    the definition of enum exp_opcode).  */
 
-char *
+const char *
 op_name_standard (enum exp_opcode opcode)
 {
   switch (opcode)
@@ -683,10 +703,9 @@ op_name_standard (enum exp_opcode opcode)
 
 void
 dump_raw_expression (struct expression *exp, struct ui_file *stream,
-                    char *note)
+                    const char *note)
 {
   int elt;
-  char *opcode_name;
   char *eltscan;
   int eltsize;
 
@@ -702,9 +721,10 @@ dump_raw_expression (struct expression *exp, struct ui_file *stream,
   for (elt = 0; elt < exp->nelts; elt++)
     {
       fprintf_filtered (stream, "\t%5d  ", elt);
-      opcode_name = op_name (exp, exp->elts[elt].opcode);
 
+      const char *opcode_name = op_name (exp, exp->elts[elt].opcode);
       fprintf_filtered (stream, "%20s  ", opcode_name);
+
       print_longest (stream, 'd', 0, exp->elts[elt].longconst);
       fprintf_filtered (stream, "  ");
 
@@ -1025,6 +1045,42 @@ dump_subexp_body_standard (struct expression *exp,
        elt += 2;
       }
       break;
+    case OP_RANGE:
+      {
+       enum range_type range_type;
+
+       range_type = (enum range_type)
+         longest_to_int (exp->elts[elt].longconst);
+       elt += 2;
+
+       switch (range_type)
+         {
+         case BOTH_BOUND_DEFAULT:
+           fputs_filtered ("Range '..'", stream);
+           break;
+         case LOW_BOUND_DEFAULT:
+           fputs_filtered ("Range '..EXP'", stream);
+           break;
+         case HIGH_BOUND_DEFAULT:
+           fputs_filtered ("Range 'EXP..'", stream);
+           break;
+         case NONE_BOUND_DEFAULT:
+           fputs_filtered ("Range 'EXP..EXP'", stream);
+           break;
+         default:
+           fputs_filtered ("Invalid Range!", stream);
+           break;
+         }
+
+       if (range_type == HIGH_BOUND_DEFAULT
+           || range_type == NONE_BOUND_DEFAULT)
+         elt = dump_subexp (exp, stream, elt);
+       if (range_type == LOW_BOUND_DEFAULT
+           || range_type == NONE_BOUND_DEFAULT)
+         elt = dump_subexp (exp, stream, elt);
+      }
+      break;
+
     default:
     case OP_NULL:
     case MULTI_SUBSCRIPT:
This page took 0.026757 seconds and 4 git commands to generate.