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