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