xref: /dflybsd-src/contrib/gdb-7/gdb/valarith.c (revision c0d274d062fd959993bf623f25f7cb6a8a676c4e)
1 /* Perform arithmetic and other operations on values, for GDB.
2 
3    Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
4    1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009,
5    2010 Free Software Foundation, Inc.
6 
7    This file is part of GDB.
8 
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13 
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18 
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21 
22 #include "defs.h"
23 #include "value.h"
24 #include "symtab.h"
25 #include "gdbtypes.h"
26 #include "expression.h"
27 #include "target.h"
28 #include "language.h"
29 #include "gdb_string.h"
30 #include "doublest.h"
31 #include "dfp.h"
32 #include <math.h>
33 #include "infcall.h"
34 #include "exceptions.h"
35 
36 /* Define whether or not the C operator '/' truncates towards zero for
37    differently signed operands (truncation direction is undefined in C). */
38 
39 #ifndef TRUNCATION_TOWARDS_ZERO
40 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
41 #endif
42 
43 void _initialize_valarith (void);
44 
45 
46 /* Given a pointer, return the size of its target.
47    If the pointer type is void *, then return 1.
48    If the target type is incomplete, then error out.
49    This isn't a general purpose function, but just a
50    helper for value_ptradd.
51 */
52 
53 static LONGEST
54 find_size_for_pointer_math (struct type *ptr_type)
55 {
56   LONGEST sz = -1;
57   struct type *ptr_target;
58 
59   gdb_assert (TYPE_CODE (ptr_type) == TYPE_CODE_PTR);
60   ptr_target = check_typedef (TYPE_TARGET_TYPE (ptr_type));
61 
62   sz = TYPE_LENGTH (ptr_target);
63   if (sz == 0)
64     {
65       if (TYPE_CODE (ptr_type) == TYPE_CODE_VOID)
66 	sz = 1;
67       else
68 	{
69 	  char *name;
70 
71 	  name = TYPE_NAME (ptr_target);
72 	  if (name == NULL)
73 	    name = TYPE_TAG_NAME (ptr_target);
74 	  if (name == NULL)
75 	    error (_("Cannot perform pointer math on incomplete types, "
76 		   "try casting to a known type, or void *."));
77 	  else
78 	    error (_("Cannot perform pointer math on incomplete type \"%s\", "
79 		   "try casting to a known type, or void *."), name);
80 	}
81     }
82   return sz;
83 }
84 
85 /* Given a pointer ARG1 and an integral value ARG2, return the
86    result of C-style pointer arithmetic ARG1 + ARG2.  */
87 
88 struct value *
89 value_ptradd (struct value *arg1, LONGEST arg2)
90 {
91   struct type *valptrtype;
92   LONGEST sz;
93 
94   arg1 = coerce_array (arg1);
95   valptrtype = check_typedef (value_type (arg1));
96   sz = find_size_for_pointer_math (valptrtype);
97 
98   return value_from_pointer (valptrtype,
99 			     value_as_address (arg1) + sz * arg2);
100 }
101 
102 /* Given two compatible pointer values ARG1 and ARG2, return the
103    result of C-style pointer arithmetic ARG1 - ARG2.  */
104 
105 LONGEST
106 value_ptrdiff (struct value *arg1, struct value *arg2)
107 {
108   struct type *type1, *type2;
109   LONGEST sz;
110 
111   arg1 = coerce_array (arg1);
112   arg2 = coerce_array (arg2);
113   type1 = check_typedef (value_type (arg1));
114   type2 = check_typedef (value_type (arg2));
115 
116   gdb_assert (TYPE_CODE (type1) == TYPE_CODE_PTR);
117   gdb_assert (TYPE_CODE (type2) == TYPE_CODE_PTR);
118 
119   if (TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1)))
120       != TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type2))))
121     error (_("\
122 First argument of `-' is a pointer and second argument is neither\n\
123 an integer nor a pointer of the same type."));
124 
125   sz = TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1)));
126   if (sz == 0)
127     {
128       warning (_("Type size unknown, assuming 1. "
129                "Try casting to a known type, or void *."));
130       sz = 1;
131     }
132 
133   return (value_as_long (arg1) - value_as_long (arg2)) / sz;
134 }
135 
136 /* Return the value of ARRAY[IDX].
137 
138    ARRAY may be of type TYPE_CODE_ARRAY or TYPE_CODE_STRING.  If the
139    current language supports C-style arrays, it may also be TYPE_CODE_PTR.
140    To access TYPE_CODE_BITSTRING values, use value_bitstring_subscript.
141 
142    See comments in value_coerce_array() for rationale for reason for
143    doing lower bounds adjustment here rather than there.
144    FIXME:  Perhaps we should validate that the index is valid and if
145    verbosity is set, warn about invalid indices (but still use them). */
146 
147 struct value *
148 value_subscript (struct value *array, LONGEST index)
149 {
150   int c_style = current_language->c_style_arrays;
151   struct type *tarray;
152 
153   array = coerce_ref (array);
154   tarray = check_typedef (value_type (array));
155 
156   if (TYPE_CODE (tarray) == TYPE_CODE_ARRAY
157       || TYPE_CODE (tarray) == TYPE_CODE_STRING)
158     {
159       struct type *range_type = TYPE_INDEX_TYPE (tarray);
160       LONGEST lowerbound, upperbound;
161 
162       get_discrete_bounds (range_type, &lowerbound, &upperbound);
163       if (VALUE_LVAL (array) != lval_memory)
164 	return value_subscripted_rvalue (array, index, lowerbound);
165 
166       if (c_style == 0)
167 	{
168 	  if (index >= lowerbound && index <= upperbound)
169 	    return value_subscripted_rvalue (array, index, lowerbound);
170 	  /* Emit warning unless we have an array of unknown size.
171 	     An array of unknown size has lowerbound 0 and upperbound -1.  */
172 	  if (upperbound > -1)
173 	    warning (_("array or string index out of range"));
174 	  /* fall doing C stuff */
175 	  c_style = 1;
176 	}
177 
178       index -= lowerbound;
179       array = value_coerce_array (array);
180     }
181 
182   if (c_style)
183     return value_ind (value_ptradd (array, index));
184   else
185     error (_("not an array or string"));
186 }
187 
188 /* Return the value of EXPR[IDX], expr an aggregate rvalue
189    (eg, a vector register).  This routine used to promote floats
190    to doubles, but no longer does.  */
191 
192 struct value *
193 value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound)
194 {
195   struct type *array_type = check_typedef (value_type (array));
196   struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type));
197   unsigned int elt_size = TYPE_LENGTH (elt_type);
198   unsigned int elt_offs = elt_size * longest_to_int (index - lowerbound);
199   struct value *v;
200 
201   if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type)
202 			     && elt_offs >= TYPE_LENGTH (array_type)))
203     error (_("no such vector element"));
204 
205   v = allocate_value (elt_type);
206   if (VALUE_LVAL (array) == lval_memory && value_lazy (array))
207     set_value_lazy (v, 1);
208   else
209     memcpy (value_contents_writeable (v),
210 	    value_contents (array) + elt_offs, elt_size);
211 
212   set_value_component_location (v, array);
213   VALUE_REGNUM (v) = VALUE_REGNUM (array);
214   VALUE_FRAME_ID (v) = VALUE_FRAME_ID (array);
215   set_value_offset (v, value_offset (array) + elt_offs);
216   return v;
217 }
218 
219 /* Return the value of BITSTRING[IDX] as (boolean) type TYPE.  */
220 
221 struct value *
222 value_bitstring_subscript (struct type *type,
223 			   struct value *bitstring, LONGEST index)
224 {
225 
226   struct type *bitstring_type, *range_type;
227   struct value *v;
228   int offset, byte, bit_index;
229   LONGEST lowerbound, upperbound;
230 
231   bitstring_type = check_typedef (value_type (bitstring));
232   gdb_assert (TYPE_CODE (bitstring_type) == TYPE_CODE_BITSTRING);
233 
234   range_type = TYPE_INDEX_TYPE (bitstring_type);
235   get_discrete_bounds (range_type, &lowerbound, &upperbound);
236   if (index < lowerbound || index > upperbound)
237     error (_("bitstring index out of range"));
238 
239   index -= lowerbound;
240   offset = index / TARGET_CHAR_BIT;
241   byte = *((char *) value_contents (bitstring) + offset);
242 
243   bit_index = index % TARGET_CHAR_BIT;
244   byte >>= (gdbarch_bits_big_endian (get_type_arch (bitstring_type)) ?
245 	    TARGET_CHAR_BIT - 1 - bit_index : bit_index);
246 
247   v = value_from_longest (type, byte & 1);
248 
249   set_value_bitpos (v, bit_index);
250   set_value_bitsize (v, 1);
251   set_value_component_location (v, bitstring);
252   VALUE_FRAME_ID (v) = VALUE_FRAME_ID (bitstring);
253 
254   set_value_offset (v, offset + value_offset (bitstring));
255 
256   return v;
257 }
258 
259 
260 /* Check to see if either argument is a structure, or a reference to
261    one.  This is called so we know whether to go ahead with the normal
262    binop or look for a user defined function instead.
263 
264    For now, we do not overload the `=' operator.  */
265 
266 int
267 binop_types_user_defined_p (enum exp_opcode op,
268 			    struct type *type1, struct type *type2)
269 {
270   if (op == BINOP_ASSIGN || op == BINOP_CONCAT)
271     return 0;
272 
273   type1 = check_typedef (type1);
274   if (TYPE_CODE (type1) == TYPE_CODE_REF)
275     type1 = check_typedef (TYPE_TARGET_TYPE (type1));
276 
277   type2 = check_typedef (type1);
278   if (TYPE_CODE (type2) == TYPE_CODE_REF)
279     type2 = check_typedef (TYPE_TARGET_TYPE (type2));
280 
281   return (TYPE_CODE (type1) == TYPE_CODE_STRUCT
282 	  || TYPE_CODE (type2) == TYPE_CODE_STRUCT);
283 }
284 
285 /* Check to see if either argument is a structure, or a reference to
286    one.  This is called so we know whether to go ahead with the normal
287    binop or look for a user defined function instead.
288 
289    For now, we do not overload the `=' operator.  */
290 
291 int
292 binop_user_defined_p (enum exp_opcode op,
293 		      struct value *arg1, struct value *arg2)
294 {
295   return binop_types_user_defined_p (op, value_type (arg1), value_type (arg2));
296 }
297 
298 /* Check to see if argument is a structure.  This is called so
299    we know whether to go ahead with the normal unop or look for a
300    user defined function instead.
301 
302    For now, we do not overload the `&' operator.  */
303 
304 int
305 unop_user_defined_p (enum exp_opcode op, struct value *arg1)
306 {
307   struct type *type1;
308 
309   if (op == UNOP_ADDR)
310     return 0;
311   type1 = check_typedef (value_type (arg1));
312   for (;;)
313     {
314       if (TYPE_CODE (type1) == TYPE_CODE_STRUCT)
315 	return 1;
316       else if (TYPE_CODE (type1) == TYPE_CODE_REF)
317 	type1 = TYPE_TARGET_TYPE (type1);
318       else
319 	return 0;
320     }
321 }
322 
323 /* Try to find an operator named OPERATOR which takes NARGS arguments
324    specified in ARGS.  If the operator found is a static member operator
325    *STATIC_MEMFUNP will be set to 1, and otherwise 0.
326    The search if performed through find_overload_match which will handle
327    member operators, non member operators, operators imported implicitly or
328    explicitly, and perform correct overload resolution in all of the above
329    situations or combinations thereof.  */
330 
331 static struct value *
332 value_user_defined_cpp_op (struct value **args, int nargs, char *operator,
333                            int *static_memfuncp)
334 {
335 
336   struct symbol *symp = NULL;
337   struct value *valp = NULL;
338   struct type **arg_types;
339   int i;
340 
341   arg_types = (struct type **) alloca (nargs * (sizeof (struct type *)));
342   /* Prepare list of argument types for overload resolution */
343   for (i = 0; i < nargs; i++)
344     arg_types[i] = value_type (args[i]);
345 
346   find_overload_match (arg_types, nargs, operator, BOTH /* could be method */,
347                        0 /* strict match */, &args[0], /* objp */
348                        NULL /* pass NULL symbol since symbol is unknown */,
349                        &valp, &symp, static_memfuncp, 0);
350 
351   if (valp)
352     return valp;
353 
354   if (symp)
355     {
356       /* This is a non member function and does not
357          expect a reference as its first argument
358          rather the explicit structure.  */
359       args[0] = value_ind (args[0]);
360       return value_of_variable (symp, 0);
361     }
362 
363   error (_("Could not find %s."), operator);
364 }
365 
366 /* Lookup user defined operator NAME.  Return a value representing the
367    function, otherwise return NULL.  */
368 
369 static struct value *
370 value_user_defined_op (struct value **argp, struct value **args, char *name,
371                        int *static_memfuncp, int nargs)
372 {
373   struct value *result = NULL;
374 
375   if (current_language->la_language == language_cplus)
376     result = value_user_defined_cpp_op (args, nargs, name, static_memfuncp);
377   else
378     result = value_struct_elt (argp, args, name, static_memfuncp,
379                                "structure");
380 
381   return result;
382 }
383 
384 /* We know either arg1 or arg2 is a structure, so try to find the right
385    user defined function.  Create an argument vector that calls
386    arg1.operator @ (arg1,arg2) and return that value (where '@' is any
387    binary operator which is legal for GNU C++).
388 
389    OP is the operatore, and if it is BINOP_ASSIGN_MODIFY, then OTHEROP
390    is the opcode saying how to modify it.  Otherwise, OTHEROP is
391    unused.  */
392 
393 struct value *
394 value_x_binop (struct value *arg1, struct value *arg2, enum exp_opcode op,
395 	       enum exp_opcode otherop, enum noside noside)
396 {
397   struct value **argvec;
398   char *ptr;
399   char tstr[13];
400   int static_memfuncp;
401 
402   arg1 = coerce_ref (arg1);
403   arg2 = coerce_ref (arg2);
404 
405   /* now we know that what we have to do is construct our
406      arg vector and find the right function to call it with.  */
407 
408   if (TYPE_CODE (check_typedef (value_type (arg1))) != TYPE_CODE_STRUCT)
409     error (_("Can't do that binary op on that type"));	/* FIXME be explicit */
410 
411   argvec = (struct value **) alloca (sizeof (struct value *) * 4);
412   argvec[1] = value_addr (arg1);
413   argvec[2] = arg2;
414   argvec[3] = 0;
415 
416   /* make the right function name up */
417   strcpy (tstr, "operator__");
418   ptr = tstr + 8;
419   switch (op)
420     {
421     case BINOP_ADD:
422       strcpy (ptr, "+");
423       break;
424     case BINOP_SUB:
425       strcpy (ptr, "-");
426       break;
427     case BINOP_MUL:
428       strcpy (ptr, "*");
429       break;
430     case BINOP_DIV:
431       strcpy (ptr, "/");
432       break;
433     case BINOP_REM:
434       strcpy (ptr, "%");
435       break;
436     case BINOP_LSH:
437       strcpy (ptr, "<<");
438       break;
439     case BINOP_RSH:
440       strcpy (ptr, ">>");
441       break;
442     case BINOP_BITWISE_AND:
443       strcpy (ptr, "&");
444       break;
445     case BINOP_BITWISE_IOR:
446       strcpy (ptr, "|");
447       break;
448     case BINOP_BITWISE_XOR:
449       strcpy (ptr, "^");
450       break;
451     case BINOP_LOGICAL_AND:
452       strcpy (ptr, "&&");
453       break;
454     case BINOP_LOGICAL_OR:
455       strcpy (ptr, "||");
456       break;
457     case BINOP_MIN:
458       strcpy (ptr, "<?");
459       break;
460     case BINOP_MAX:
461       strcpy (ptr, ">?");
462       break;
463     case BINOP_ASSIGN:
464       strcpy (ptr, "=");
465       break;
466     case BINOP_ASSIGN_MODIFY:
467       switch (otherop)
468 	{
469 	case BINOP_ADD:
470 	  strcpy (ptr, "+=");
471 	  break;
472 	case BINOP_SUB:
473 	  strcpy (ptr, "-=");
474 	  break;
475 	case BINOP_MUL:
476 	  strcpy (ptr, "*=");
477 	  break;
478 	case BINOP_DIV:
479 	  strcpy (ptr, "/=");
480 	  break;
481 	case BINOP_REM:
482 	  strcpy (ptr, "%=");
483 	  break;
484 	case BINOP_BITWISE_AND:
485 	  strcpy (ptr, "&=");
486 	  break;
487 	case BINOP_BITWISE_IOR:
488 	  strcpy (ptr, "|=");
489 	  break;
490 	case BINOP_BITWISE_XOR:
491 	  strcpy (ptr, "^=");
492 	  break;
493 	case BINOP_MOD:	/* invalid */
494 	default:
495 	  error (_("Invalid binary operation specified."));
496 	}
497       break;
498     case BINOP_SUBSCRIPT:
499       strcpy (ptr, "[]");
500       break;
501     case BINOP_EQUAL:
502       strcpy (ptr, "==");
503       break;
504     case BINOP_NOTEQUAL:
505       strcpy (ptr, "!=");
506       break;
507     case BINOP_LESS:
508       strcpy (ptr, "<");
509       break;
510     case BINOP_GTR:
511       strcpy (ptr, ">");
512       break;
513     case BINOP_GEQ:
514       strcpy (ptr, ">=");
515       break;
516     case BINOP_LEQ:
517       strcpy (ptr, "<=");
518       break;
519     case BINOP_MOD:		/* invalid */
520     default:
521       error (_("Invalid binary operation specified."));
522     }
523 
524   argvec[0] = value_user_defined_op (&arg1, argvec + 1, tstr,
525                                      &static_memfuncp, 2);
526 
527   if (argvec[0])
528     {
529       if (static_memfuncp)
530 	{
531 	  argvec[1] = argvec[0];
532 	  argvec++;
533 	}
534       if (noside == EVAL_AVOID_SIDE_EFFECTS)
535 	{
536 	  struct type *return_type;
537 
538 	  return_type
539 	    = TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0])));
540 	  return value_zero (return_type, VALUE_LVAL (arg1));
541 	}
542       return call_function_by_hand (argvec[0], 2 - static_memfuncp, argvec + 1);
543     }
544   error (_("member function %s not found"), tstr);
545 #ifdef lint
546   return call_function_by_hand (argvec[0], 2 - static_memfuncp, argvec + 1);
547 #endif
548 }
549 
550 /* We know that arg1 is a structure, so try to find a unary user
551    defined operator that matches the operator in question.
552    Create an argument vector that calls arg1.operator @ (arg1)
553    and return that value (where '@' is (almost) any unary operator which
554    is legal for GNU C++).  */
555 
556 struct value *
557 value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside)
558 {
559   struct gdbarch *gdbarch = get_type_arch (value_type (arg1));
560   struct value **argvec;
561   char *ptr, *mangle_ptr;
562   char tstr[13], mangle_tstr[13];
563   int static_memfuncp, nargs;
564 
565   arg1 = coerce_ref (arg1);
566 
567   /* now we know that what we have to do is construct our
568      arg vector and find the right function to call it with.  */
569 
570   if (TYPE_CODE (check_typedef (value_type (arg1))) != TYPE_CODE_STRUCT)
571     error (_("Can't do that unary op on that type"));	/* FIXME be explicit */
572 
573   argvec = (struct value **) alloca (sizeof (struct value *) * 4);
574   argvec[1] = value_addr (arg1);
575   argvec[2] = 0;
576 
577   nargs = 1;
578 
579   /* make the right function name up */
580   strcpy (tstr, "operator__");
581   ptr = tstr + 8;
582   strcpy (mangle_tstr, "__");
583   mangle_ptr = mangle_tstr + 2;
584   switch (op)
585     {
586     case UNOP_PREINCREMENT:
587       strcpy (ptr, "++");
588       break;
589     case UNOP_PREDECREMENT:
590       strcpy (ptr, "--");
591       break;
592     case UNOP_POSTINCREMENT:
593       strcpy (ptr, "++");
594       argvec[2] = value_from_longest (builtin_type (gdbarch)->builtin_int, 0);
595       argvec[3] = 0;
596       nargs ++;
597       break;
598     case UNOP_POSTDECREMENT:
599       strcpy (ptr, "--");
600       argvec[2] = value_from_longest (builtin_type (gdbarch)->builtin_int, 0);
601       argvec[3] = 0;
602       nargs ++;
603       break;
604     case UNOP_LOGICAL_NOT:
605       strcpy (ptr, "!");
606       break;
607     case UNOP_COMPLEMENT:
608       strcpy (ptr, "~");
609       break;
610     case UNOP_NEG:
611       strcpy (ptr, "-");
612       break;
613     case UNOP_PLUS:
614       strcpy (ptr, "+");
615       break;
616     case UNOP_IND:
617       strcpy (ptr, "*");
618       break;
619     default:
620       error (_("Invalid unary operation specified."));
621     }
622 
623   argvec[0] = value_user_defined_op (&arg1, argvec + 1, tstr,
624                                      &static_memfuncp, nargs);
625 
626   if (argvec[0])
627     {
628       if (static_memfuncp)
629 	{
630 	  argvec[1] = argvec[0];
631 	  nargs --;
632 	  argvec++;
633 	}
634       if (noside == EVAL_AVOID_SIDE_EFFECTS)
635 	{
636 	  struct type *return_type;
637 
638 	  return_type
639 	    = TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0])));
640 	  return value_zero (return_type, VALUE_LVAL (arg1));
641 	}
642       return call_function_by_hand (argvec[0], nargs, argvec + 1);
643     }
644   error (_("member function %s not found"), tstr);
645   return 0;			/* For lint -- never reached */
646 }
647 
648 
649 /* Concatenate two values with the following conditions:
650 
651    (1)  Both values must be either bitstring values or character string
652    values and the resulting value consists of the concatenation of
653    ARG1 followed by ARG2.
654 
655    or
656 
657    One value must be an integer value and the other value must be
658    either a bitstring value or character string value, which is
659    to be repeated by the number of times specified by the integer
660    value.
661 
662 
663    (2)  Boolean values are also allowed and are treated as bit string
664    values of length 1.
665 
666    (3)  Character values are also allowed and are treated as character
667    string values of length 1.
668  */
669 
670 struct value *
671 value_concat (struct value *arg1, struct value *arg2)
672 {
673   struct value *inval1;
674   struct value *inval2;
675   struct value *outval = NULL;
676   int inval1len, inval2len;
677   int count, idx;
678   char *ptr;
679   char inchar;
680   struct type *type1 = check_typedef (value_type (arg1));
681   struct type *type2 = check_typedef (value_type (arg2));
682   struct type *char_type;
683 
684   /* First figure out if we are dealing with two values to be concatenated
685      or a repeat count and a value to be repeated.  INVAL1 is set to the
686      first of two concatenated values, or the repeat count.  INVAL2 is set
687      to the second of the two concatenated values or the value to be
688      repeated. */
689 
690   if (TYPE_CODE (type2) == TYPE_CODE_INT)
691     {
692       struct type *tmp = type1;
693 
694       type1 = tmp;
695       tmp = type2;
696       inval1 = arg2;
697       inval2 = arg1;
698     }
699   else
700     {
701       inval1 = arg1;
702       inval2 = arg2;
703     }
704 
705   /* Now process the input values. */
706 
707   if (TYPE_CODE (type1) == TYPE_CODE_INT)
708     {
709       /* We have a repeat count.  Validate the second value and then
710          construct a value repeated that many times. */
711       if (TYPE_CODE (type2) == TYPE_CODE_STRING
712 	  || TYPE_CODE (type2) == TYPE_CODE_CHAR)
713 	{
714 	  count = longest_to_int (value_as_long (inval1));
715 	  inval2len = TYPE_LENGTH (type2);
716 	  ptr = (char *) alloca (count * inval2len);
717 	  if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
718 	    {
719 	      char_type = type2;
720 
721 	      inchar = (char) unpack_long (type2,
722 					   value_contents (inval2));
723 	      for (idx = 0; idx < count; idx++)
724 		{
725 		  *(ptr + idx) = inchar;
726 		}
727 	    }
728 	  else
729 	    {
730 	      char_type = TYPE_TARGET_TYPE (type2);
731 
732 	      for (idx = 0; idx < count; idx++)
733 		{
734 		  memcpy (ptr + (idx * inval2len), value_contents (inval2),
735 			  inval2len);
736 		}
737 	    }
738 	  outval = value_string (ptr, count * inval2len, char_type);
739 	}
740       else if (TYPE_CODE (type2) == TYPE_CODE_BITSTRING
741 	       || TYPE_CODE (type2) == TYPE_CODE_BOOL)
742 	{
743 	  error (_("unimplemented support for bitstring/boolean repeats"));
744 	}
745       else
746 	{
747 	  error (_("can't repeat values of that type"));
748 	}
749     }
750   else if (TYPE_CODE (type1) == TYPE_CODE_STRING
751 	   || TYPE_CODE (type1) == TYPE_CODE_CHAR)
752     {
753       /* We have two character strings to concatenate. */
754       if (TYPE_CODE (type2) != TYPE_CODE_STRING
755 	  && TYPE_CODE (type2) != TYPE_CODE_CHAR)
756 	{
757 	  error (_("Strings can only be concatenated with other strings."));
758 	}
759       inval1len = TYPE_LENGTH (type1);
760       inval2len = TYPE_LENGTH (type2);
761       ptr = (char *) alloca (inval1len + inval2len);
762       if (TYPE_CODE (type1) == TYPE_CODE_CHAR)
763 	{
764 	  char_type = type1;
765 
766 	  *ptr = (char) unpack_long (type1, value_contents (inval1));
767 	}
768       else
769 	{
770 	  char_type = TYPE_TARGET_TYPE (type1);
771 
772 	  memcpy (ptr, value_contents (inval1), inval1len);
773 	}
774       if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
775 	{
776 	  *(ptr + inval1len) =
777 	    (char) unpack_long (type2, value_contents (inval2));
778 	}
779       else
780 	{
781 	  memcpy (ptr + inval1len, value_contents (inval2), inval2len);
782 	}
783       outval = value_string (ptr, inval1len + inval2len, char_type);
784     }
785   else if (TYPE_CODE (type1) == TYPE_CODE_BITSTRING
786 	   || TYPE_CODE (type1) == TYPE_CODE_BOOL)
787     {
788       /* We have two bitstrings to concatenate. */
789       if (TYPE_CODE (type2) != TYPE_CODE_BITSTRING
790 	  && TYPE_CODE (type2) != TYPE_CODE_BOOL)
791 	{
792 	  error (_("Bitstrings or booleans can only be concatenated with other bitstrings or booleans."));
793 	}
794       error (_("unimplemented support for bitstring/boolean concatenation."));
795     }
796   else
797     {
798       /* We don't know how to concatenate these operands. */
799       error (_("illegal operands for concatenation."));
800     }
801   return (outval);
802 }
803 
804 /* Integer exponentiation: V1**V2, where both arguments are
805    integers.  Requires V1 != 0 if V2 < 0.  Returns 1 for 0 ** 0.  */
806 static LONGEST
807 integer_pow (LONGEST v1, LONGEST v2)
808 {
809   if (v2 < 0)
810     {
811       if (v1 == 0)
812 	error (_("Attempt to raise 0 to negative power."));
813       else
814 	return 0;
815     }
816   else
817     {
818       /* The Russian Peasant's Algorithm */
819       LONGEST v;
820 
821       v = 1;
822       for (;;)
823 	{
824 	  if (v2 & 1L)
825 	    v *= v1;
826 	  v2 >>= 1;
827 	  if (v2 == 0)
828 	    return v;
829 	  v1 *= v1;
830 	}
831     }
832 }
833 
834 /* Integer exponentiation: V1**V2, where both arguments are
835    integers.  Requires V1 != 0 if V2 < 0.  Returns 1 for 0 ** 0.  */
836 static ULONGEST
837 uinteger_pow (ULONGEST v1, LONGEST v2)
838 {
839   if (v2 < 0)
840     {
841       if (v1 == 0)
842 	error (_("Attempt to raise 0 to negative power."));
843       else
844 	return 0;
845     }
846   else
847     {
848       /* The Russian Peasant's Algorithm */
849       ULONGEST v;
850 
851       v = 1;
852       for (;;)
853 	{
854 	  if (v2 & 1L)
855 	    v *= v1;
856 	  v2 >>= 1;
857 	  if (v2 == 0)
858 	    return v;
859 	  v1 *= v1;
860 	}
861     }
862 }
863 
864 /* Obtain decimal value of arguments for binary operation, converting from
865    other types if one of them is not decimal floating point.  */
866 static void
867 value_args_as_decimal (struct value *arg1, struct value *arg2,
868 		       gdb_byte *x, int *len_x, enum bfd_endian *byte_order_x,
869 		       gdb_byte *y, int *len_y, enum bfd_endian *byte_order_y)
870 {
871   struct type *type1, *type2;
872 
873   type1 = check_typedef (value_type (arg1));
874   type2 = check_typedef (value_type (arg2));
875 
876   /* At least one of the arguments must be of decimal float type.  */
877   gdb_assert (TYPE_CODE (type1) == TYPE_CODE_DECFLOAT
878 	      || TYPE_CODE (type2) == TYPE_CODE_DECFLOAT);
879 
880   if (TYPE_CODE (type1) == TYPE_CODE_FLT
881       || TYPE_CODE (type2) == TYPE_CODE_FLT)
882     /* The DFP extension to the C language does not allow mixing of
883      * decimal float types with other float types in expressions
884      * (see WDTR 24732, page 12).  */
885     error (_("Mixing decimal floating types with other floating types is not allowed."));
886 
887   /* Obtain decimal value of arg1, converting from other types
888      if necessary.  */
889 
890   if (TYPE_CODE (type1) == TYPE_CODE_DECFLOAT)
891     {
892       *byte_order_x = gdbarch_byte_order (get_type_arch (type1));
893       *len_x = TYPE_LENGTH (type1);
894       memcpy (x, value_contents (arg1), *len_x);
895     }
896   else if (is_integral_type (type1))
897     {
898       *byte_order_x = gdbarch_byte_order (get_type_arch (type2));
899       *len_x = TYPE_LENGTH (type2);
900       decimal_from_integral (arg1, x, *len_x, *byte_order_x);
901     }
902   else
903     error (_("Don't know how to convert from %s to %s."), TYPE_NAME (type1),
904 	     TYPE_NAME (type2));
905 
906   /* Obtain decimal value of arg2, converting from other types
907      if necessary.  */
908 
909   if (TYPE_CODE (type2) == TYPE_CODE_DECFLOAT)
910     {
911       *byte_order_y = gdbarch_byte_order (get_type_arch (type2));
912       *len_y = TYPE_LENGTH (type2);
913       memcpy (y, value_contents (arg2), *len_y);
914     }
915   else if (is_integral_type (type2))
916     {
917       *byte_order_y = gdbarch_byte_order (get_type_arch (type1));
918       *len_y = TYPE_LENGTH (type1);
919       decimal_from_integral (arg2, y, *len_y, *byte_order_y);
920     }
921   else
922     error (_("Don't know how to convert from %s to %s."), TYPE_NAME (type1),
923 	     TYPE_NAME (type2));
924 }
925 
926 /* Perform a binary operation on two operands which have reasonable
927    representations as integers or floats.  This includes booleans,
928    characters, integers, or floats.
929    Does not support addition and subtraction on pointers;
930    use value_ptradd, value_ptrsub or value_ptrdiff for those operations.  */
931 
932 struct value *
933 value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
934 {
935   struct value *val;
936   struct type *type1, *type2, *result_type;
937 
938   arg1 = coerce_ref (arg1);
939   arg2 = coerce_ref (arg2);
940 
941   type1 = check_typedef (value_type (arg1));
942   type2 = check_typedef (value_type (arg2));
943 
944   if ((TYPE_CODE (type1) != TYPE_CODE_FLT
945        && TYPE_CODE (type1) != TYPE_CODE_DECFLOAT
946        && !is_integral_type (type1))
947       || (TYPE_CODE (type2) != TYPE_CODE_FLT
948 	  && TYPE_CODE (type2) != TYPE_CODE_DECFLOAT
949 	  && !is_integral_type (type2)))
950     error (_("Argument to arithmetic operation not a number or boolean."));
951 
952   if (TYPE_CODE (type1) == TYPE_CODE_DECFLOAT
953       || TYPE_CODE (type2) == TYPE_CODE_DECFLOAT)
954     {
955       int len_v1, len_v2, len_v;
956       enum bfd_endian byte_order_v1, byte_order_v2, byte_order_v;
957       gdb_byte v1[16], v2[16];
958       gdb_byte v[16];
959 
960       /* If only one type is decimal float, use its type.
961 	 Otherwise use the bigger type.  */
962       if (TYPE_CODE (type1) != TYPE_CODE_DECFLOAT)
963 	result_type = type2;
964       else if (TYPE_CODE (type2) != TYPE_CODE_DECFLOAT)
965 	result_type = type1;
966       else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1))
967 	result_type = type2;
968       else
969 	result_type = type1;
970 
971       len_v = TYPE_LENGTH (result_type);
972       byte_order_v = gdbarch_byte_order (get_type_arch (result_type));
973 
974       value_args_as_decimal (arg1, arg2, v1, &len_v1, &byte_order_v1,
975 					 v2, &len_v2, &byte_order_v2);
976 
977       switch (op)
978 	{
979 	case BINOP_ADD:
980 	case BINOP_SUB:
981 	case BINOP_MUL:
982 	case BINOP_DIV:
983 	case BINOP_EXP:
984 	  decimal_binop (op, v1, len_v1, byte_order_v1,
985 			     v2, len_v2, byte_order_v2,
986 			     v, len_v, byte_order_v);
987 	  break;
988 
989 	default:
990 	  error (_("Operation not valid for decimal floating point number."));
991 	}
992 
993       val = value_from_decfloat (result_type, v);
994     }
995   else if (TYPE_CODE (type1) == TYPE_CODE_FLT
996 	   || TYPE_CODE (type2) == TYPE_CODE_FLT)
997     {
998       /* FIXME-if-picky-about-floating-accuracy: Should be doing this
999          in target format.  real.c in GCC probably has the necessary
1000          code.  */
1001       DOUBLEST v1, v2, v = 0;
1002 
1003       v1 = value_as_double (arg1);
1004       v2 = value_as_double (arg2);
1005 
1006       switch (op)
1007 	{
1008 	case BINOP_ADD:
1009 	  v = v1 + v2;
1010 	  break;
1011 
1012 	case BINOP_SUB:
1013 	  v = v1 - v2;
1014 	  break;
1015 
1016 	case BINOP_MUL:
1017 	  v = v1 * v2;
1018 	  break;
1019 
1020 	case BINOP_DIV:
1021 	  v = v1 / v2;
1022 	  break;
1023 
1024 	case BINOP_EXP:
1025 	  errno = 0;
1026 	  v = pow (v1, v2);
1027 	  if (errno)
1028 	    error (_("Cannot perform exponentiation: %s"), safe_strerror (errno));
1029 	  break;
1030 
1031 	case BINOP_MIN:
1032 	  v = v1 < v2 ? v1 : v2;
1033 	  break;
1034 
1035 	case BINOP_MAX:
1036 	  v = v1 > v2 ? v1 : v2;
1037 	  break;
1038 
1039 	default:
1040 	  error (_("Integer-only operation on floating point number."));
1041 	}
1042 
1043       /* If only one type is float, use its type.
1044 	 Otherwise use the bigger type.  */
1045       if (TYPE_CODE (type1) != TYPE_CODE_FLT)
1046 	result_type = type2;
1047       else if (TYPE_CODE (type2) != TYPE_CODE_FLT)
1048 	result_type = type1;
1049       else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1))
1050 	result_type = type2;
1051       else
1052 	result_type = type1;
1053 
1054       val = allocate_value (result_type);
1055       store_typed_floating (value_contents_raw (val), value_type (val), v);
1056     }
1057   else if (TYPE_CODE (type1) == TYPE_CODE_BOOL
1058 	   || TYPE_CODE (type2) == TYPE_CODE_BOOL)
1059     {
1060       LONGEST v1, v2, v = 0;
1061 
1062       v1 = value_as_long (arg1);
1063       v2 = value_as_long (arg2);
1064 
1065       switch (op)
1066 	{
1067 	case BINOP_BITWISE_AND:
1068 	  v = v1 & v2;
1069 	  break;
1070 
1071 	case BINOP_BITWISE_IOR:
1072 	  v = v1 | v2;
1073 	  break;
1074 
1075 	case BINOP_BITWISE_XOR:
1076 	  v = v1 ^ v2;
1077           break;
1078 
1079         case BINOP_EQUAL:
1080           v = v1 == v2;
1081           break;
1082 
1083         case BINOP_NOTEQUAL:
1084           v = v1 != v2;
1085 	  break;
1086 
1087 	default:
1088 	  error (_("Invalid operation on booleans."));
1089 	}
1090 
1091       result_type = type1;
1092 
1093       val = allocate_value (result_type);
1094       store_signed_integer (value_contents_raw (val),
1095 			    TYPE_LENGTH (result_type),
1096 			    gdbarch_byte_order (get_type_arch (result_type)),
1097 			    v);
1098     }
1099   else
1100     /* Integral operations here.  */
1101     {
1102       /* Determine type length of the result, and if the operation should
1103 	 be done unsigned.  For exponentiation and shift operators,
1104 	 use the length and type of the left operand.  Otherwise,
1105 	 use the signedness of the operand with the greater length.
1106 	 If both operands are of equal length, use unsigned operation
1107 	 if one of the operands is unsigned.  */
1108       if (op == BINOP_RSH || op == BINOP_LSH || op == BINOP_EXP)
1109 	result_type = type1;
1110       else if (TYPE_LENGTH (type1) > TYPE_LENGTH (type2))
1111 	result_type = type1;
1112       else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1))
1113 	result_type = type2;
1114       else if (TYPE_UNSIGNED (type1))
1115 	result_type = type1;
1116       else if (TYPE_UNSIGNED (type2))
1117 	result_type = type2;
1118       else
1119 	result_type = type1;
1120 
1121       if (TYPE_UNSIGNED (result_type))
1122 	{
1123 	  LONGEST v2_signed = value_as_long (arg2);
1124 	  ULONGEST v1, v2, v = 0;
1125 
1126 	  v1 = (ULONGEST) value_as_long (arg1);
1127 	  v2 = (ULONGEST) v2_signed;
1128 
1129 	  switch (op)
1130 	    {
1131 	    case BINOP_ADD:
1132 	      v = v1 + v2;
1133 	      break;
1134 
1135 	    case BINOP_SUB:
1136 	      v = v1 - v2;
1137 	      break;
1138 
1139 	    case BINOP_MUL:
1140 	      v = v1 * v2;
1141 	      break;
1142 
1143 	    case BINOP_DIV:
1144 	    case BINOP_INTDIV:
1145 	      if (v2 != 0)
1146 		v = v1 / v2;
1147 	      else
1148 		error (_("Division by zero"));
1149 	      break;
1150 
1151 	    case BINOP_EXP:
1152               v = uinteger_pow (v1, v2_signed);
1153 	      break;
1154 
1155 	    case BINOP_REM:
1156 	      if (v2 != 0)
1157 		v = v1 % v2;
1158 	      else
1159 		error (_("Division by zero"));
1160 	      break;
1161 
1162 	    case BINOP_MOD:
1163 	      /* Knuth 1.2.4, integer only.  Note that unlike the C '%' op,
1164 	         v1 mod 0 has a defined value, v1. */
1165 	      if (v2 == 0)
1166 		{
1167 		  v = v1;
1168 		}
1169 	      else
1170 		{
1171 		  v = v1 / v2;
1172 		  /* Note floor(v1/v2) == v1/v2 for unsigned. */
1173 		  v = v1 - (v2 * v);
1174 		}
1175 	      break;
1176 
1177 	    case BINOP_LSH:
1178 	      v = v1 << v2;
1179 	      break;
1180 
1181 	    case BINOP_RSH:
1182 	      v = v1 >> v2;
1183 	      break;
1184 
1185 	    case BINOP_BITWISE_AND:
1186 	      v = v1 & v2;
1187 	      break;
1188 
1189 	    case BINOP_BITWISE_IOR:
1190 	      v = v1 | v2;
1191 	      break;
1192 
1193 	    case BINOP_BITWISE_XOR:
1194 	      v = v1 ^ v2;
1195 	      break;
1196 
1197 	    case BINOP_LOGICAL_AND:
1198 	      v = v1 && v2;
1199 	      break;
1200 
1201 	    case BINOP_LOGICAL_OR:
1202 	      v = v1 || v2;
1203 	      break;
1204 
1205 	    case BINOP_MIN:
1206 	      v = v1 < v2 ? v1 : v2;
1207 	      break;
1208 
1209 	    case BINOP_MAX:
1210 	      v = v1 > v2 ? v1 : v2;
1211 	      break;
1212 
1213 	    case BINOP_EQUAL:
1214 	      v = v1 == v2;
1215 	      break;
1216 
1217             case BINOP_NOTEQUAL:
1218               v = v1 != v2;
1219               break;
1220 
1221 	    case BINOP_LESS:
1222 	      v = v1 < v2;
1223 	      break;
1224 
1225 	    case BINOP_GTR:
1226 	      v = v1 > v2;
1227 	      break;
1228 
1229 	    case BINOP_LEQ:
1230 	      v = v1 <= v2;
1231 	      break;
1232 
1233 	    case BINOP_GEQ:
1234 	      v = v1 >= v2;
1235 	      break;
1236 
1237 	    default:
1238 	      error (_("Invalid binary operation on numbers."));
1239 	    }
1240 
1241 	  val = allocate_value (result_type);
1242 	  store_unsigned_integer (value_contents_raw (val),
1243 				  TYPE_LENGTH (value_type (val)),
1244 				  gdbarch_byte_order
1245 				    (get_type_arch (result_type)),
1246 				  v);
1247 	}
1248       else
1249 	{
1250 	  LONGEST v1, v2, v = 0;
1251 
1252 	  v1 = value_as_long (arg1);
1253 	  v2 = value_as_long (arg2);
1254 
1255 	  switch (op)
1256 	    {
1257 	    case BINOP_ADD:
1258 	      v = v1 + v2;
1259 	      break;
1260 
1261 	    case BINOP_SUB:
1262 	      v = v1 - v2;
1263 	      break;
1264 
1265 	    case BINOP_MUL:
1266 	      v = v1 * v2;
1267 	      break;
1268 
1269 	    case BINOP_DIV:
1270 	    case BINOP_INTDIV:
1271 	      if (v2 != 0)
1272 		v = v1 / v2;
1273 	      else
1274 		error (_("Division by zero"));
1275               break;
1276 
1277 	    case BINOP_EXP:
1278               v = integer_pow (v1, v2);
1279 	      break;
1280 
1281 	    case BINOP_REM:
1282 	      if (v2 != 0)
1283 		v = v1 % v2;
1284 	      else
1285 		error (_("Division by zero"));
1286 	      break;
1287 
1288 	    case BINOP_MOD:
1289 	      /* Knuth 1.2.4, integer only.  Note that unlike the C '%' op,
1290 	         X mod 0 has a defined value, X. */
1291 	      if (v2 == 0)
1292 		{
1293 		  v = v1;
1294 		}
1295 	      else
1296 		{
1297 		  v = v1 / v2;
1298 		  /* Compute floor. */
1299 		  if (TRUNCATION_TOWARDS_ZERO && (v < 0) && ((v1 % v2) != 0))
1300 		    {
1301 		      v--;
1302 		    }
1303 		  v = v1 - (v2 * v);
1304 		}
1305 	      break;
1306 
1307 	    case BINOP_LSH:
1308 	      v = v1 << v2;
1309 	      break;
1310 
1311 	    case BINOP_RSH:
1312 	      v = v1 >> v2;
1313 	      break;
1314 
1315 	    case BINOP_BITWISE_AND:
1316 	      v = v1 & v2;
1317 	      break;
1318 
1319 	    case BINOP_BITWISE_IOR:
1320 	      v = v1 | v2;
1321 	      break;
1322 
1323 	    case BINOP_BITWISE_XOR:
1324 	      v = v1 ^ v2;
1325 	      break;
1326 
1327 	    case BINOP_LOGICAL_AND:
1328 	      v = v1 && v2;
1329 	      break;
1330 
1331 	    case BINOP_LOGICAL_OR:
1332 	      v = v1 || v2;
1333 	      break;
1334 
1335 	    case BINOP_MIN:
1336 	      v = v1 < v2 ? v1 : v2;
1337 	      break;
1338 
1339 	    case BINOP_MAX:
1340 	      v = v1 > v2 ? v1 : v2;
1341 	      break;
1342 
1343 	    case BINOP_EQUAL:
1344 	      v = v1 == v2;
1345 	      break;
1346 
1347             case BINOP_NOTEQUAL:
1348               v = v1 != v2;
1349               break;
1350 
1351 	    case BINOP_LESS:
1352 	      v = v1 < v2;
1353 	      break;
1354 
1355 	    case BINOP_GTR:
1356 	      v = v1 > v2;
1357 	      break;
1358 
1359 	    case BINOP_LEQ:
1360 	      v = v1 <= v2;
1361 	      break;
1362 
1363 	    case BINOP_GEQ:
1364 	      v = v1 >= v2;
1365 	      break;
1366 
1367 	    default:
1368 	      error (_("Invalid binary operation on numbers."));
1369 	    }
1370 
1371 	  val = allocate_value (result_type);
1372 	  store_signed_integer (value_contents_raw (val),
1373 				TYPE_LENGTH (value_type (val)),
1374 				gdbarch_byte_order
1375 				  (get_type_arch (result_type)),
1376 				v);
1377 	}
1378     }
1379 
1380   return val;
1381 }
1382 
1383 /* Simulate the C operator ! -- return 1 if ARG1 contains zero.  */
1384 
1385 int
1386 value_logical_not (struct value *arg1)
1387 {
1388   int len;
1389   const gdb_byte *p;
1390   struct type *type1;
1391 
1392   arg1 = coerce_array (arg1);
1393   type1 = check_typedef (value_type (arg1));
1394 
1395   if (TYPE_CODE (type1) == TYPE_CODE_FLT)
1396     return 0 == value_as_double (arg1);
1397   else if (TYPE_CODE (type1) == TYPE_CODE_DECFLOAT)
1398     return decimal_is_zero (value_contents (arg1), TYPE_LENGTH (type1),
1399 			    gdbarch_byte_order (get_type_arch (type1)));
1400 
1401   len = TYPE_LENGTH (type1);
1402   p = value_contents (arg1);
1403 
1404   while (--len >= 0)
1405     {
1406       if (*p++)
1407 	break;
1408     }
1409 
1410   return len < 0;
1411 }
1412 
1413 /* Perform a comparison on two string values (whose content are not
1414    necessarily null terminated) based on their length */
1415 
1416 static int
1417 value_strcmp (struct value *arg1, struct value *arg2)
1418 {
1419   int len1 = TYPE_LENGTH (value_type (arg1));
1420   int len2 = TYPE_LENGTH (value_type (arg2));
1421   const gdb_byte *s1 = value_contents (arg1);
1422   const gdb_byte *s2 = value_contents (arg2);
1423   int i, len = len1 < len2 ? len1 : len2;
1424 
1425   for (i = 0; i < len; i++)
1426     {
1427       if (s1[i] < s2[i])
1428         return -1;
1429       else if (s1[i] > s2[i])
1430         return 1;
1431       else
1432         continue;
1433     }
1434 
1435   if (len1 < len2)
1436     return -1;
1437   else if (len1 > len2)
1438     return 1;
1439   else
1440     return 0;
1441 }
1442 
1443 /* Simulate the C operator == by returning a 1
1444    iff ARG1 and ARG2 have equal contents.  */
1445 
1446 int
1447 value_equal (struct value *arg1, struct value *arg2)
1448 {
1449   int len;
1450   const gdb_byte *p1;
1451   const gdb_byte *p2;
1452   struct type *type1, *type2;
1453   enum type_code code1;
1454   enum type_code code2;
1455   int is_int1, is_int2;
1456 
1457   arg1 = coerce_array (arg1);
1458   arg2 = coerce_array (arg2);
1459 
1460   type1 = check_typedef (value_type (arg1));
1461   type2 = check_typedef (value_type (arg2));
1462   code1 = TYPE_CODE (type1);
1463   code2 = TYPE_CODE (type2);
1464   is_int1 = is_integral_type (type1);
1465   is_int2 = is_integral_type (type2);
1466 
1467   if (is_int1 && is_int2)
1468     return longest_to_int (value_as_long (value_binop (arg1, arg2,
1469 						       BINOP_EQUAL)));
1470   else if ((code1 == TYPE_CODE_FLT || is_int1)
1471 	   && (code2 == TYPE_CODE_FLT || is_int2))
1472     {
1473       /* NOTE: kettenis/20050816: Avoid compiler bug on systems where
1474 	 `long double' values are returned in static storage (m68k).  */
1475       DOUBLEST d = value_as_double (arg1);
1476 
1477       return d == value_as_double (arg2);
1478     }
1479   else if ((code1 == TYPE_CODE_DECFLOAT || is_int1)
1480 	   && (code2 == TYPE_CODE_DECFLOAT || is_int2))
1481     {
1482       gdb_byte v1[16], v2[16];
1483       int len_v1, len_v2;
1484       enum bfd_endian byte_order_v1, byte_order_v2;
1485 
1486       value_args_as_decimal (arg1, arg2, v1, &len_v1, &byte_order_v1,
1487 					 v2, &len_v2, &byte_order_v2);
1488 
1489       return decimal_compare (v1, len_v1, byte_order_v1,
1490 			      v2, len_v2, byte_order_v2) == 0;
1491     }
1492 
1493   /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1494      is bigger.  */
1495   else if (code1 == TYPE_CODE_PTR && is_int2)
1496     return value_as_address (arg1) == (CORE_ADDR) value_as_long (arg2);
1497   else if (code2 == TYPE_CODE_PTR && is_int1)
1498     return (CORE_ADDR) value_as_long (arg1) == value_as_address (arg2);
1499 
1500   else if (code1 == code2
1501 	   && ((len = (int) TYPE_LENGTH (type1))
1502 	       == (int) TYPE_LENGTH (type2)))
1503     {
1504       p1 = value_contents (arg1);
1505       p2 = value_contents (arg2);
1506       while (--len >= 0)
1507 	{
1508 	  if (*p1++ != *p2++)
1509 	    break;
1510 	}
1511       return len < 0;
1512     }
1513   else if (code1 == TYPE_CODE_STRING && code2 == TYPE_CODE_STRING)
1514     {
1515       return value_strcmp (arg1, arg2) == 0;
1516     }
1517   else
1518     {
1519       error (_("Invalid type combination in equality test."));
1520       return 0;			/* For lint -- never reached */
1521     }
1522 }
1523 
1524 /* Compare values based on their raw contents.  Useful for arrays since
1525    value_equal coerces them to pointers, thus comparing just the address
1526    of the array instead of its contents.  */
1527 
1528 int
1529 value_equal_contents (struct value *arg1, struct value *arg2)
1530 {
1531   struct type *type1, *type2;
1532 
1533   type1 = check_typedef (value_type (arg1));
1534   type2 = check_typedef (value_type (arg2));
1535 
1536   return (TYPE_CODE (type1) == TYPE_CODE (type2)
1537 	  && TYPE_LENGTH (type1) == TYPE_LENGTH (type2)
1538 	  && memcmp (value_contents (arg1), value_contents (arg2),
1539 		     TYPE_LENGTH (type1)) == 0);
1540 }
1541 
1542 /* Simulate the C operator < by returning 1
1543    iff ARG1's contents are less than ARG2's.  */
1544 
1545 int
1546 value_less (struct value *arg1, struct value *arg2)
1547 {
1548   enum type_code code1;
1549   enum type_code code2;
1550   struct type *type1, *type2;
1551   int is_int1, is_int2;
1552 
1553   arg1 = coerce_array (arg1);
1554   arg2 = coerce_array (arg2);
1555 
1556   type1 = check_typedef (value_type (arg1));
1557   type2 = check_typedef (value_type (arg2));
1558   code1 = TYPE_CODE (type1);
1559   code2 = TYPE_CODE (type2);
1560   is_int1 = is_integral_type (type1);
1561   is_int2 = is_integral_type (type2);
1562 
1563   if (is_int1 && is_int2)
1564     return longest_to_int (value_as_long (value_binop (arg1, arg2,
1565 						       BINOP_LESS)));
1566   else if ((code1 == TYPE_CODE_FLT || is_int1)
1567 	   && (code2 == TYPE_CODE_FLT || is_int2))
1568     {
1569       /* NOTE: kettenis/20050816: Avoid compiler bug on systems where
1570 	 `long double' values are returned in static storage (m68k).  */
1571       DOUBLEST d = value_as_double (arg1);
1572 
1573       return d < value_as_double (arg2);
1574     }
1575   else if ((code1 == TYPE_CODE_DECFLOAT || is_int1)
1576 	   && (code2 == TYPE_CODE_DECFLOAT || is_int2))
1577     {
1578       gdb_byte v1[16], v2[16];
1579       int len_v1, len_v2;
1580       enum bfd_endian byte_order_v1, byte_order_v2;
1581 
1582       value_args_as_decimal (arg1, arg2, v1, &len_v1, &byte_order_v1,
1583 					 v2, &len_v2, &byte_order_v2);
1584 
1585       return decimal_compare (v1, len_v1, byte_order_v1,
1586 			      v2, len_v2, byte_order_v2) == -1;
1587     }
1588   else if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
1589     return value_as_address (arg1) < value_as_address (arg2);
1590 
1591   /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1592      is bigger.  */
1593   else if (code1 == TYPE_CODE_PTR && is_int2)
1594     return value_as_address (arg1) < (CORE_ADDR) value_as_long (arg2);
1595   else if (code2 == TYPE_CODE_PTR && is_int1)
1596     return (CORE_ADDR) value_as_long (arg1) < value_as_address (arg2);
1597   else if (code1 == TYPE_CODE_STRING && code2 == TYPE_CODE_STRING)
1598     return value_strcmp (arg1, arg2) < 0;
1599   else
1600     {
1601       error (_("Invalid type combination in ordering comparison."));
1602       return 0;
1603     }
1604 }
1605 
1606 /* The unary operators +, - and ~.  They free the argument ARG1.  */
1607 
1608 struct value *
1609 value_pos (struct value *arg1)
1610 {
1611   struct type *type;
1612 
1613   arg1 = coerce_ref (arg1);
1614   type = check_typedef (value_type (arg1));
1615 
1616   if (TYPE_CODE (type) == TYPE_CODE_FLT)
1617     return value_from_double (type, value_as_double (arg1));
1618   else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1619     return value_from_decfloat (type, value_contents (arg1));
1620   else if (is_integral_type (type))
1621     {
1622       return value_from_longest (type, value_as_long (arg1));
1623     }
1624   else
1625     {
1626       error ("Argument to positive operation not a number.");
1627       return 0;			/* For lint -- never reached */
1628     }
1629 }
1630 
1631 struct value *
1632 value_neg (struct value *arg1)
1633 {
1634   struct type *type;
1635 
1636   arg1 = coerce_ref (arg1);
1637   type = check_typedef (value_type (arg1));
1638 
1639   if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1640     {
1641       struct value *val = allocate_value (type);
1642       int len = TYPE_LENGTH (type);
1643       gdb_byte decbytes[16];  /* a decfloat is at most 128 bits long */
1644 
1645       memcpy (decbytes, value_contents (arg1), len);
1646 
1647       if (gdbarch_byte_order (get_type_arch (type)) == BFD_ENDIAN_LITTLE)
1648 	decbytes[len-1] = decbytes[len - 1] | 0x80;
1649       else
1650 	decbytes[0] = decbytes[0] | 0x80;
1651 
1652       memcpy (value_contents_raw (val), decbytes, len);
1653       return val;
1654     }
1655   else if (TYPE_CODE (type) == TYPE_CODE_FLT)
1656     return value_from_double (type, -value_as_double (arg1));
1657   else if (is_integral_type (type))
1658     {
1659       return value_from_longest (type, -value_as_long (arg1));
1660     }
1661   else
1662     {
1663       error (_("Argument to negate operation not a number."));
1664       return 0;			/* For lint -- never reached */
1665     }
1666 }
1667 
1668 struct value *
1669 value_complement (struct value *arg1)
1670 {
1671   struct type *type;
1672 
1673   arg1 = coerce_ref (arg1);
1674   type = check_typedef (value_type (arg1));
1675 
1676   if (!is_integral_type (type))
1677     error (_("Argument to complement operation not an integer or boolean."));
1678 
1679   return value_from_longest (type, ~value_as_long (arg1));
1680 }
1681 
1682 /* The INDEX'th bit of SET value whose value_type is TYPE,
1683    and whose value_contents is valaddr.
1684    Return -1 if out of range, -2 other error. */
1685 
1686 int
1687 value_bit_index (struct type *type, const gdb_byte *valaddr, int index)
1688 {
1689   struct gdbarch *gdbarch = get_type_arch (type);
1690   LONGEST low_bound, high_bound;
1691   LONGEST word;
1692   unsigned rel_index;
1693   struct type *range = TYPE_INDEX_TYPE (type);
1694 
1695   if (get_discrete_bounds (range, &low_bound, &high_bound) < 0)
1696     return -2;
1697   if (index < low_bound || index > high_bound)
1698     return -1;
1699   rel_index = index - low_bound;
1700   word = extract_unsigned_integer (valaddr + (rel_index / TARGET_CHAR_BIT), 1,
1701 				   gdbarch_byte_order (gdbarch));
1702   rel_index %= TARGET_CHAR_BIT;
1703   if (gdbarch_bits_big_endian (gdbarch))
1704     rel_index = TARGET_CHAR_BIT - 1 - rel_index;
1705   return (word >> rel_index) & 1;
1706 }
1707 
1708 int
1709 value_in (struct value *element, struct value *set)
1710 {
1711   int member;
1712   struct type *settype = check_typedef (value_type (set));
1713   struct type *eltype = check_typedef (value_type (element));
1714 
1715   if (TYPE_CODE (eltype) == TYPE_CODE_RANGE)
1716     eltype = TYPE_TARGET_TYPE (eltype);
1717   if (TYPE_CODE (settype) != TYPE_CODE_SET)
1718     error (_("Second argument of 'IN' has wrong type"));
1719   if (TYPE_CODE (eltype) != TYPE_CODE_INT
1720       && TYPE_CODE (eltype) != TYPE_CODE_CHAR
1721       && TYPE_CODE (eltype) != TYPE_CODE_ENUM
1722       && TYPE_CODE (eltype) != TYPE_CODE_BOOL)
1723     error (_("First argument of 'IN' has wrong type"));
1724   member = value_bit_index (settype, value_contents (set),
1725 			    value_as_long (element));
1726   if (member < 0)
1727     error (_("First argument of 'IN' not in range"));
1728   return member;
1729 }
1730 
1731 void
1732 _initialize_valarith (void)
1733 {
1734 }
1735