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