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