1 /* Perform arithmetic and other operations on values, for GDB.
3 Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
4 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
5 Free Software Foundation, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
26 #include "expression.h"
29 #include "gdb_string.h"
35 /* Define whether or not the C operator '/' truncates towards zero for
36 differently signed operands (truncation direction is undefined in C). */
38 #ifndef TRUNCATION_TOWARDS_ZERO
39 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
42 void _initialize_valarith (void);
45 /* Given a pointer, return the size of its target.
46 If the pointer type is void *, then return 1.
47 If the target type is incomplete, then error out.
48 This isn't a general purpose function, but just a
49 helper for value_ptrsub & value_ptradd.
53 find_size_for_pointer_math (struct type
*ptr_type
)
56 struct type
*ptr_target
;
58 gdb_assert (TYPE_CODE (ptr_type
) == TYPE_CODE_PTR
);
59 ptr_target
= check_typedef (TYPE_TARGET_TYPE (ptr_type
));
61 sz
= TYPE_LENGTH (ptr_target
);
64 if (TYPE_CODE (ptr_type
) == TYPE_CODE_VOID
)
70 name
= TYPE_NAME (ptr_target
);
72 name
= TYPE_TAG_NAME (ptr_target
);
74 error (_("Cannot perform pointer math on incomplete types, "
75 "try casting to a known type, or void *."));
77 error (_("Cannot perform pointer math on incomplete type \"%s\", "
78 "try casting to a known type, or void *."), name
);
84 /* Given a pointer ARG1 and an integral value ARG2, return the
85 result of C-style pointer arithmetic ARG1 + ARG2. */
88 value_ptradd (struct value
*arg1
, struct value
*arg2
)
90 struct type
*valptrtype
;
93 arg1
= coerce_array (arg1
);
94 valptrtype
= check_typedef (value_type (arg1
));
95 sz
= find_size_for_pointer_math (valptrtype
);
97 if (!is_integral_type (value_type (arg2
)))
98 error (_("Argument to arithmetic operation not a number or boolean."));
100 return value_from_pointer (valptrtype
,
101 value_as_address (arg1
)
102 + (sz
* value_as_long (arg2
)));
105 /* Given a pointer ARG1 and an integral value ARG2, return the
106 result of C-style pointer arithmetic ARG1 - ARG2. */
109 value_ptrsub (struct value
*arg1
, struct value
*arg2
)
111 struct type
*valptrtype
;
114 arg1
= coerce_array (arg1
);
115 valptrtype
= check_typedef (value_type (arg1
));
116 sz
= find_size_for_pointer_math (valptrtype
);
118 if (!is_integral_type (value_type (arg2
)))
119 error (_("Argument to arithmetic operation not a number or boolean."));
121 return value_from_pointer (valptrtype
,
122 value_as_address (arg1
)
123 - (sz
* value_as_long (arg2
)));
126 /* Given two compatible pointer values ARG1 and ARG2, return the
127 result of C-style pointer arithmetic ARG1 - ARG2. */
130 value_ptrdiff (struct value
*arg1
, struct value
*arg2
)
132 struct type
*type1
, *type2
;
135 arg1
= coerce_array (arg1
);
136 arg2
= coerce_array (arg2
);
137 type1
= check_typedef (value_type (arg1
));
138 type2
= check_typedef (value_type (arg2
));
140 gdb_assert (TYPE_CODE (type1
) == TYPE_CODE_PTR
);
141 gdb_assert (TYPE_CODE (type2
) == TYPE_CODE_PTR
);
143 if (TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1
)))
144 != TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type2
))))
146 First argument of `-' is a pointer and second argument is neither\n\
147 an integer nor a pointer of the same type."));
149 sz
= TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1
)));
150 return (value_as_long (arg1
) - value_as_long (arg2
)) / sz
;
153 /* Return the value of ARRAY[IDX].
155 ARRAY may be of type TYPE_CODE_ARRAY or TYPE_CODE_STRING. If the
156 current language supports C-style arrays, it may also be TYPE_CODE_PTR.
157 To access TYPE_CODE_BITSTRING values, use value_bitstring_subscript.
159 See comments in value_coerce_array() for rationale for reason for
160 doing lower bounds adjustment here rather than there.
161 FIXME: Perhaps we should validate that the index is valid and if
162 verbosity is set, warn about invalid indices (but still use them). */
165 value_subscript (struct value
*array
, struct value
*idx
)
168 int c_style
= current_language
->c_style_arrays
;
171 array
= coerce_ref (array
);
172 tarray
= check_typedef (value_type (array
));
174 if (TYPE_CODE (tarray
) == TYPE_CODE_ARRAY
175 || TYPE_CODE (tarray
) == TYPE_CODE_STRING
)
177 struct type
*range_type
= TYPE_INDEX_TYPE (tarray
);
178 LONGEST lowerbound
, upperbound
;
179 get_discrete_bounds (range_type
, &lowerbound
, &upperbound
);
181 if (VALUE_LVAL (array
) != lval_memory
)
182 return value_subscripted_rvalue (array
, idx
, lowerbound
);
186 LONGEST index
= value_as_long (idx
);
187 if (index
>= lowerbound
&& index
<= upperbound
)
188 return value_subscripted_rvalue (array
, idx
, lowerbound
);
189 /* Emit warning unless we have an array of unknown size.
190 An array of unknown size has lowerbound 0 and upperbound -1. */
192 warning (_("array or string index out of range"));
193 /* fall doing C stuff */
199 bound
= value_from_longest (value_type (idx
), (LONGEST
) lowerbound
);
200 idx
= value_binop (idx
, bound
, BINOP_SUB
);
203 array
= value_coerce_array (array
);
207 return value_ind (value_ptradd (array
, idx
));
209 error (_("not an array or string"));
212 /* Return the value of EXPR[IDX], expr an aggregate rvalue
213 (eg, a vector register). This routine used to promote floats
214 to doubles, but no longer does. */
217 value_subscripted_rvalue (struct value
*array
, struct value
*idx
, int lowerbound
)
219 struct type
*array_type
= check_typedef (value_type (array
));
220 struct type
*elt_type
= check_typedef (TYPE_TARGET_TYPE (array_type
));
221 unsigned int elt_size
= TYPE_LENGTH (elt_type
);
222 LONGEST index
= value_as_long (idx
);
223 unsigned int elt_offs
= elt_size
* longest_to_int (index
- lowerbound
);
226 if (index
< lowerbound
|| elt_offs
>= TYPE_LENGTH (array_type
))
227 error (_("no such vector element"));
229 v
= allocate_value (elt_type
);
230 if (VALUE_LVAL (array
) == lval_memory
&& value_lazy (array
))
231 set_value_lazy (v
, 1);
233 memcpy (value_contents_writeable (v
),
234 value_contents (array
) + elt_offs
, elt_size
);
236 if (VALUE_LVAL (array
) == lval_internalvar
)
237 VALUE_LVAL (v
) = lval_internalvar_component
;
239 VALUE_LVAL (v
) = VALUE_LVAL (array
);
240 VALUE_ADDRESS (v
) = VALUE_ADDRESS (array
);
241 VALUE_REGNUM (v
) = VALUE_REGNUM (array
);
242 VALUE_FRAME_ID (v
) = VALUE_FRAME_ID (array
);
243 set_value_offset (v
, value_offset (array
) + elt_offs
);
247 /* Return the value of BITSTRING[IDX] as (boolean) type TYPE. */
250 value_bitstring_subscript (struct type
*type
,
251 struct value
*bitstring
, struct value
*idx
)
254 struct type
*bitstring_type
, *range_type
;
255 LONGEST index
= value_as_long (idx
);
257 int offset
, byte
, bit_index
;
258 LONGEST lowerbound
, upperbound
;
260 bitstring_type
= check_typedef (value_type (bitstring
));
261 gdb_assert (TYPE_CODE (bitstring_type
) == TYPE_CODE_BITSTRING
);
263 range_type
= TYPE_INDEX_TYPE (bitstring_type
);
264 get_discrete_bounds (range_type
, &lowerbound
, &upperbound
);
265 if (index
< lowerbound
|| index
> upperbound
)
266 error (_("bitstring index out of range"));
269 offset
= index
/ TARGET_CHAR_BIT
;
270 byte
= *((char *) value_contents (bitstring
) + offset
);
272 bit_index
= index
% TARGET_CHAR_BIT
;
273 byte
>>= (gdbarch_bits_big_endian (current_gdbarch
) ?
274 TARGET_CHAR_BIT
- 1 - bit_index
: bit_index
);
276 v
= value_from_longest (type
, byte
& 1);
278 set_value_bitpos (v
, bit_index
);
279 set_value_bitsize (v
, 1);
281 VALUE_LVAL (v
) = VALUE_LVAL (bitstring
);
282 if (VALUE_LVAL (bitstring
) == lval_internalvar
)
283 VALUE_LVAL (v
) = lval_internalvar_component
;
284 VALUE_ADDRESS (v
) = VALUE_ADDRESS (bitstring
);
285 VALUE_FRAME_ID (v
) = VALUE_FRAME_ID (bitstring
);
287 set_value_offset (v
, offset
+ value_offset (bitstring
));
293 /* Check to see if either argument is a structure, or a reference to
294 one. This is called so we know whether to go ahead with the normal
295 binop or look for a user defined function instead.
297 For now, we do not overload the `=' operator. */
300 binop_user_defined_p (enum exp_opcode op
, struct value
*arg1
, struct value
*arg2
)
302 struct type
*type1
, *type2
;
303 if (op
== BINOP_ASSIGN
|| op
== BINOP_CONCAT
)
306 type1
= check_typedef (value_type (arg1
));
307 if (TYPE_CODE (type1
) == TYPE_CODE_REF
)
308 type1
= check_typedef (TYPE_TARGET_TYPE (type1
));
310 type2
= check_typedef (value_type (arg2
));
311 if (TYPE_CODE (type2
) == TYPE_CODE_REF
)
312 type2
= check_typedef (TYPE_TARGET_TYPE (type2
));
314 return (TYPE_CODE (type1
) == TYPE_CODE_STRUCT
315 || TYPE_CODE (type2
) == TYPE_CODE_STRUCT
);
318 /* Check to see if argument is a structure. This is called so
319 we know whether to go ahead with the normal unop or look for a
320 user defined function instead.
322 For now, we do not overload the `&' operator. */
325 unop_user_defined_p (enum exp_opcode op
, struct value
*arg1
)
330 type1
= check_typedef (value_type (arg1
));
333 if (TYPE_CODE (type1
) == TYPE_CODE_STRUCT
)
335 else if (TYPE_CODE (type1
) == TYPE_CODE_REF
)
336 type1
= TYPE_TARGET_TYPE (type1
);
342 /* We know either arg1 or arg2 is a structure, so try to find the right
343 user defined function. Create an argument vector that calls
344 arg1.operator @ (arg1,arg2) and return that value (where '@' is any
345 binary operator which is legal for GNU C++).
347 OP is the operatore, and if it is BINOP_ASSIGN_MODIFY, then OTHEROP
348 is the opcode saying how to modify it. Otherwise, OTHEROP is
352 value_x_binop (struct value
*arg1
, struct value
*arg2
, enum exp_opcode op
,
353 enum exp_opcode otherop
, enum noside noside
)
355 struct value
**argvec
;
360 arg1
= coerce_ref (arg1
);
361 arg2
= coerce_ref (arg2
);
362 arg1
= coerce_enum (arg1
);
363 arg2
= coerce_enum (arg2
);
365 /* now we know that what we have to do is construct our
366 arg vector and find the right function to call it with. */
368 if (TYPE_CODE (check_typedef (value_type (arg1
))) != TYPE_CODE_STRUCT
)
369 error (_("Can't do that binary op on that type")); /* FIXME be explicit */
371 argvec
= (struct value
**) alloca (sizeof (struct value
*) * 4);
372 argvec
[1] = value_addr (arg1
);
376 /* make the right function name up */
377 strcpy (tstr
, "operator__");
402 case BINOP_BITWISE_AND
:
405 case BINOP_BITWISE_IOR
:
408 case BINOP_BITWISE_XOR
:
411 case BINOP_LOGICAL_AND
:
414 case BINOP_LOGICAL_OR
:
426 case BINOP_ASSIGN_MODIFY
:
444 case BINOP_BITWISE_AND
:
447 case BINOP_BITWISE_IOR
:
450 case BINOP_BITWISE_XOR
:
453 case BINOP_MOD
: /* invalid */
455 error (_("Invalid binary operation specified."));
458 case BINOP_SUBSCRIPT
:
479 case BINOP_MOD
: /* invalid */
481 error (_("Invalid binary operation specified."));
484 argvec
[0] = value_struct_elt (&arg1
, argvec
+ 1, tstr
, &static_memfuncp
, "structure");
490 argvec
[1] = argvec
[0];
493 if (noside
== EVAL_AVOID_SIDE_EFFECTS
)
495 struct type
*return_type
;
497 = TYPE_TARGET_TYPE (check_typedef (value_type (argvec
[0])));
498 return value_zero (return_type
, VALUE_LVAL (arg1
));
500 return call_function_by_hand (argvec
[0], 2 - static_memfuncp
, argvec
+ 1);
502 error (_("member function %s not found"), tstr
);
504 return call_function_by_hand (argvec
[0], 2 - static_memfuncp
, argvec
+ 1);
508 /* We know that arg1 is a structure, so try to find a unary user
509 defined operator that matches the operator in question.
510 Create an argument vector that calls arg1.operator @ (arg1)
511 and return that value (where '@' is (almost) any unary operator which
512 is legal for GNU C++). */
515 value_x_unop (struct value
*arg1
, enum exp_opcode op
, enum noside noside
)
517 struct value
**argvec
;
518 char *ptr
, *mangle_ptr
;
519 char tstr
[13], mangle_tstr
[13];
520 int static_memfuncp
, nargs
;
522 arg1
= coerce_ref (arg1
);
523 arg1
= coerce_enum (arg1
);
525 /* now we know that what we have to do is construct our
526 arg vector and find the right function to call it with. */
528 if (TYPE_CODE (check_typedef (value_type (arg1
))) != TYPE_CODE_STRUCT
)
529 error (_("Can't do that unary op on that type")); /* FIXME be explicit */
531 argvec
= (struct value
**) alloca (sizeof (struct value
*) * 4);
532 argvec
[1] = value_addr (arg1
);
537 /* make the right function name up */
538 strcpy (tstr
, "operator__");
540 strcpy (mangle_tstr
, "__");
541 mangle_ptr
= mangle_tstr
+ 2;
544 case UNOP_PREINCREMENT
:
547 case UNOP_PREDECREMENT
:
550 case UNOP_POSTINCREMENT
:
552 argvec
[2] = value_from_longest (builtin_type_int
, 0);
556 case UNOP_POSTDECREMENT
:
558 argvec
[2] = value_from_longest (builtin_type_int
, 0);
562 case UNOP_LOGICAL_NOT
:
565 case UNOP_COMPLEMENT
:
578 error (_("Invalid unary operation specified."));
581 argvec
[0] = value_struct_elt (&arg1
, argvec
+ 1, tstr
, &static_memfuncp
, "structure");
587 argvec
[1] = argvec
[0];
591 if (noside
== EVAL_AVOID_SIDE_EFFECTS
)
593 struct type
*return_type
;
595 = TYPE_TARGET_TYPE (check_typedef (value_type (argvec
[0])));
596 return value_zero (return_type
, VALUE_LVAL (arg1
));
598 return call_function_by_hand (argvec
[0], nargs
, argvec
+ 1);
600 error (_("member function %s not found"), tstr
);
601 return 0; /* For lint -- never reached */
605 /* Concatenate two values with the following conditions:
607 (1) Both values must be either bitstring values or character string
608 values and the resulting value consists of the concatenation of
609 ARG1 followed by ARG2.
613 One value must be an integer value and the other value must be
614 either a bitstring value or character string value, which is
615 to be repeated by the number of times specified by the integer
619 (2) Boolean values are also allowed and are treated as bit string
622 (3) Character values are also allowed and are treated as character
623 string values of length 1.
627 value_concat (struct value
*arg1
, struct value
*arg2
)
629 struct value
*inval1
;
630 struct value
*inval2
;
631 struct value
*outval
= NULL
;
632 int inval1len
, inval2len
;
636 struct type
*type1
= check_typedef (value_type (arg1
));
637 struct type
*type2
= check_typedef (value_type (arg2
));
639 /* First figure out if we are dealing with two values to be concatenated
640 or a repeat count and a value to be repeated. INVAL1 is set to the
641 first of two concatenated values, or the repeat count. INVAL2 is set
642 to the second of the two concatenated values or the value to be
645 if (TYPE_CODE (type2
) == TYPE_CODE_INT
)
647 struct type
*tmp
= type1
;
659 /* Now process the input values. */
661 if (TYPE_CODE (type1
) == TYPE_CODE_INT
)
663 /* We have a repeat count. Validate the second value and then
664 construct a value repeated that many times. */
665 if (TYPE_CODE (type2
) == TYPE_CODE_STRING
666 || TYPE_CODE (type2
) == TYPE_CODE_CHAR
)
668 count
= longest_to_int (value_as_long (inval1
));
669 inval2len
= TYPE_LENGTH (type2
);
670 ptr
= (char *) alloca (count
* inval2len
);
671 if (TYPE_CODE (type2
) == TYPE_CODE_CHAR
)
673 inchar
= (char) unpack_long (type2
,
674 value_contents (inval2
));
675 for (idx
= 0; idx
< count
; idx
++)
677 *(ptr
+ idx
) = inchar
;
682 for (idx
= 0; idx
< count
; idx
++)
684 memcpy (ptr
+ (idx
* inval2len
), value_contents (inval2
),
688 outval
= value_string (ptr
, count
* inval2len
);
690 else if (TYPE_CODE (type2
) == TYPE_CODE_BITSTRING
691 || TYPE_CODE (type2
) == TYPE_CODE_BOOL
)
693 error (_("unimplemented support for bitstring/boolean repeats"));
697 error (_("can't repeat values of that type"));
700 else if (TYPE_CODE (type1
) == TYPE_CODE_STRING
701 || TYPE_CODE (type1
) == TYPE_CODE_CHAR
)
703 /* We have two character strings to concatenate. */
704 if (TYPE_CODE (type2
) != TYPE_CODE_STRING
705 && TYPE_CODE (type2
) != TYPE_CODE_CHAR
)
707 error (_("Strings can only be concatenated with other strings."));
709 inval1len
= TYPE_LENGTH (type1
);
710 inval2len
= TYPE_LENGTH (type2
);
711 ptr
= (char *) alloca (inval1len
+ inval2len
);
712 if (TYPE_CODE (type1
) == TYPE_CODE_CHAR
)
714 *ptr
= (char) unpack_long (type1
, value_contents (inval1
));
718 memcpy (ptr
, value_contents (inval1
), inval1len
);
720 if (TYPE_CODE (type2
) == TYPE_CODE_CHAR
)
723 (char) unpack_long (type2
, value_contents (inval2
));
727 memcpy (ptr
+ inval1len
, value_contents (inval2
), inval2len
);
729 outval
= value_string (ptr
, inval1len
+ inval2len
);
731 else if (TYPE_CODE (type1
) == TYPE_CODE_BITSTRING
732 || TYPE_CODE (type1
) == TYPE_CODE_BOOL
)
734 /* We have two bitstrings to concatenate. */
735 if (TYPE_CODE (type2
) != TYPE_CODE_BITSTRING
736 && TYPE_CODE (type2
) != TYPE_CODE_BOOL
)
738 error (_("Bitstrings or booleans can only be concatenated with other bitstrings or booleans."));
740 error (_("unimplemented support for bitstring/boolean concatenation."));
744 /* We don't know how to concatenate these operands. */
745 error (_("illegal operands for concatenation."));
750 /* Integer exponentiation: V1**V2, where both arguments are
751 integers. Requires V1 != 0 if V2 < 0. Returns 1 for 0 ** 0. */
753 integer_pow (LONGEST v1
, LONGEST v2
)
758 error (_("Attempt to raise 0 to negative power."));
764 /* The Russian Peasant's Algorithm */
780 /* Integer exponentiation: V1**V2, where both arguments are
781 integers. Requires V1 != 0 if V2 < 0. Returns 1 for 0 ** 0. */
783 uinteger_pow (ULONGEST v1
, LONGEST v2
)
788 error (_("Attempt to raise 0 to negative power."));
794 /* The Russian Peasant's Algorithm */
810 /* Obtain decimal value of arguments for binary operation, converting from
811 other types if one of them is not decimal floating point. */
813 value_args_as_decimal (struct value
*arg1
, struct value
*arg2
,
814 gdb_byte
*x
, int *len_x
, gdb_byte
*y
, int *len_y
)
816 struct type
*type1
, *type2
;
818 type1
= check_typedef (value_type (arg1
));
819 type2
= check_typedef (value_type (arg2
));
821 /* At least one of the arguments must be of decimal float type. */
822 gdb_assert (TYPE_CODE (type1
) == TYPE_CODE_DECFLOAT
823 || TYPE_CODE (type2
) == TYPE_CODE_DECFLOAT
);
825 if (TYPE_CODE (type1
) == TYPE_CODE_FLT
826 || TYPE_CODE (type2
) == TYPE_CODE_FLT
)
827 /* The DFP extension to the C language does not allow mixing of
828 * decimal float types with other float types in expressions
829 * (see WDTR 24732, page 12). */
830 error (_("Mixing decimal floating types with other floating types is not allowed."));
832 /* Obtain decimal value of arg1, converting from other types
835 if (TYPE_CODE (type1
) == TYPE_CODE_DECFLOAT
)
837 *len_x
= TYPE_LENGTH (type1
);
838 memcpy (x
, value_contents (arg1
), *len_x
);
840 else if (is_integral_type (type1
))
842 *len_x
= TYPE_LENGTH (type2
);
843 decimal_from_integral (arg1
, x
, *len_x
);
846 error (_("Don't know how to convert from %s to %s."), TYPE_NAME (type1
),
849 /* Obtain decimal value of arg2, converting from other types
852 if (TYPE_CODE (type2
) == TYPE_CODE_DECFLOAT
)
854 *len_y
= TYPE_LENGTH (type2
);
855 memcpy (y
, value_contents (arg2
), *len_y
);
857 else if (is_integral_type (type2
))
859 *len_y
= TYPE_LENGTH (type1
);
860 decimal_from_integral (arg2
, y
, *len_y
);
863 error (_("Don't know how to convert from %s to %s."), TYPE_NAME (type1
),
867 /* Perform a binary operation on two operands which have reasonable
868 representations as integers or floats. This includes booleans,
869 characters, integers, or floats.
870 Does not support addition and subtraction on pointers;
871 use value_ptradd, value_ptrsub or value_ptrdiff for those operations. */
874 value_binop (struct value
*arg1
, struct value
*arg2
, enum exp_opcode op
)
877 struct type
*type1
, *type2
, *result_type
;
879 arg1
= coerce_ref (arg1
);
880 arg2
= coerce_ref (arg2
);
882 type1
= check_typedef (value_type (arg1
));
883 type2
= check_typedef (value_type (arg2
));
885 if ((TYPE_CODE (type1
) != TYPE_CODE_FLT
886 && TYPE_CODE (type1
) != TYPE_CODE_DECFLOAT
887 && !is_integral_type (type1
))
888 || (TYPE_CODE (type2
) != TYPE_CODE_FLT
889 && TYPE_CODE (type2
) != TYPE_CODE_DECFLOAT
890 && !is_integral_type (type2
)))
891 error (_("Argument to arithmetic operation not a number or boolean."));
893 if (TYPE_CODE (type1
) == TYPE_CODE_DECFLOAT
894 || TYPE_CODE (type2
) == TYPE_CODE_DECFLOAT
)
897 int len_v1
, len_v2
, len_v
;
898 gdb_byte v1
[16], v2
[16];
901 value_args_as_decimal (arg1
, arg2
, v1
, &len_v1
, v2
, &len_v2
);
910 decimal_binop (op
, v1
, len_v1
, v2
, len_v2
, v
, &len_v
);
914 error (_("Operation not valid for decimal floating point number."));
917 /* If only one type is decimal float, use its type.
918 Otherwise use the bigger type. */
919 if (TYPE_CODE (type1
) != TYPE_CODE_DECFLOAT
)
921 else if (TYPE_CODE (type2
) != TYPE_CODE_DECFLOAT
)
923 else if (TYPE_LENGTH (type2
) > TYPE_LENGTH (type1
))
928 val
= value_from_decfloat (result_type
, v
);
930 else if (TYPE_CODE (type1
) == TYPE_CODE_FLT
931 || TYPE_CODE (type2
) == TYPE_CODE_FLT
)
933 /* FIXME-if-picky-about-floating-accuracy: Should be doing this
934 in target format. real.c in GCC probably has the necessary
936 DOUBLEST v1
, v2
, v
= 0;
937 v1
= value_as_double (arg1
);
938 v2
= value_as_double (arg2
);
962 error (_("Cannot perform exponentiation: %s"), safe_strerror (errno
));
966 v
= v1
< v2
? v1
: v2
;
970 v
= v1
> v2
? v1
: v2
;
974 error (_("Integer-only operation on floating point number."));
977 /* If only one type is float, use its type.
978 Otherwise use the bigger type. */
979 if (TYPE_CODE (type1
) != TYPE_CODE_FLT
)
981 else if (TYPE_CODE (type2
) != TYPE_CODE_FLT
)
983 else if (TYPE_LENGTH (type2
) > TYPE_LENGTH (type1
))
988 val
= allocate_value (result_type
);
989 store_typed_floating (value_contents_raw (val
), value_type (val
), v
);
991 else if (TYPE_CODE (type1
) == TYPE_CODE_BOOL
992 || TYPE_CODE (type2
) == TYPE_CODE_BOOL
)
994 LONGEST v1
, v2
, v
= 0;
995 v1
= value_as_long (arg1
);
996 v2
= value_as_long (arg2
);
1000 case BINOP_BITWISE_AND
:
1004 case BINOP_BITWISE_IOR
:
1008 case BINOP_BITWISE_XOR
:
1016 case BINOP_NOTEQUAL
:
1021 error (_("Invalid operation on booleans."));
1024 result_type
= type1
;
1026 val
= allocate_value (result_type
);
1027 store_signed_integer (value_contents_raw (val
),
1028 TYPE_LENGTH (result_type
),
1032 /* Integral operations here. */
1034 /* Determine type length of the result, and if the operation should
1035 be done unsigned. For exponentiation and shift operators,
1036 use the length and type of the left operand. Otherwise,
1037 use the signedness of the operand with the greater length.
1038 If both operands are of equal length, use unsigned operation
1039 if one of the operands is unsigned. */
1040 if (op
== BINOP_RSH
|| op
== BINOP_LSH
|| op
== BINOP_EXP
)
1041 result_type
= type1
;
1042 else if (TYPE_LENGTH (type1
) > TYPE_LENGTH (type2
))
1043 result_type
= type1
;
1044 else if (TYPE_LENGTH (type2
) > TYPE_LENGTH (type1
))
1045 result_type
= type2
;
1046 else if (TYPE_UNSIGNED (type1
))
1047 result_type
= type1
;
1048 else if (TYPE_UNSIGNED (type2
))
1049 result_type
= type2
;
1051 result_type
= type1
;
1053 if (TYPE_UNSIGNED (result_type
))
1055 LONGEST v2_signed
= value_as_long (arg2
);
1056 ULONGEST v1
, v2
, v
= 0;
1057 v1
= (ULONGEST
) value_as_long (arg1
);
1058 v2
= (ULONGEST
) v2_signed
;
1079 error (_("Division by zero"));
1083 v
= uinteger_pow (v1
, v2_signed
);
1090 error (_("Division by zero"));
1094 /* Knuth 1.2.4, integer only. Note that unlike the C '%' op,
1095 v1 mod 0 has a defined value, v1. */
1103 /* Note floor(v1/v2) == v1/v2 for unsigned. */
1116 case BINOP_BITWISE_AND
:
1120 case BINOP_BITWISE_IOR
:
1124 case BINOP_BITWISE_XOR
:
1128 case BINOP_LOGICAL_AND
:
1132 case BINOP_LOGICAL_OR
:
1137 v
= v1
< v2
? v1
: v2
;
1141 v
= v1
> v2
? v1
: v2
;
1148 case BINOP_NOTEQUAL
:
1157 error (_("Invalid binary operation on numbers."));
1160 val
= allocate_value (result_type
);
1161 store_unsigned_integer (value_contents_raw (val
),
1162 TYPE_LENGTH (value_type (val
)),
1167 LONGEST v1
, v2
, v
= 0;
1168 v1
= value_as_long (arg1
);
1169 v2
= value_as_long (arg2
);
1190 error (_("Division by zero"));
1194 v
= integer_pow (v1
, v2
);
1201 error (_("Division by zero"));
1205 /* Knuth 1.2.4, integer only. Note that unlike the C '%' op,
1206 X mod 0 has a defined value, X. */
1214 /* Compute floor. */
1215 if (TRUNCATION_TOWARDS_ZERO
&& (v
< 0) && ((v1
% v2
) != 0))
1231 case BINOP_BITWISE_AND
:
1235 case BINOP_BITWISE_IOR
:
1239 case BINOP_BITWISE_XOR
:
1243 case BINOP_LOGICAL_AND
:
1247 case BINOP_LOGICAL_OR
:
1252 v
= v1
< v2
? v1
: v2
;
1256 v
= v1
> v2
? v1
: v2
;
1268 error (_("Invalid binary operation on numbers."));
1271 val
= allocate_value (result_type
);
1272 store_signed_integer (value_contents_raw (val
),
1273 TYPE_LENGTH (value_type (val
)),
1281 /* Simulate the C operator ! -- return 1 if ARG1 contains zero. */
1284 value_logical_not (struct value
*arg1
)
1290 arg1
= coerce_number (arg1
);
1291 type1
= check_typedef (value_type (arg1
));
1293 if (TYPE_CODE (type1
) == TYPE_CODE_FLT
)
1294 return 0 == value_as_double (arg1
);
1295 else if (TYPE_CODE (type1
) == TYPE_CODE_DECFLOAT
)
1296 return decimal_is_zero (value_contents (arg1
), TYPE_LENGTH (type1
));
1298 len
= TYPE_LENGTH (type1
);
1299 p
= value_contents (arg1
);
1310 /* Perform a comparison on two string values (whose content are not
1311 necessarily null terminated) based on their length */
1314 value_strcmp (struct value
*arg1
, struct value
*arg2
)
1316 int len1
= TYPE_LENGTH (value_type (arg1
));
1317 int len2
= TYPE_LENGTH (value_type (arg2
));
1318 const gdb_byte
*s1
= value_contents (arg1
);
1319 const gdb_byte
*s2
= value_contents (arg2
);
1320 int i
, len
= len1
< len2
? len1
: len2
;
1322 for (i
= 0; i
< len
; i
++)
1326 else if (s1
[i
] > s2
[i
])
1334 else if (len1
> len2
)
1340 /* Simulate the C operator == by returning a 1
1341 iff ARG1 and ARG2 have equal contents. */
1344 value_equal (struct value
*arg1
, struct value
*arg2
)
1349 struct type
*type1
, *type2
;
1350 enum type_code code1
;
1351 enum type_code code2
;
1352 int is_int1
, is_int2
;
1354 arg1
= coerce_array (arg1
);
1355 arg2
= coerce_array (arg2
);
1357 type1
= check_typedef (value_type (arg1
));
1358 type2
= check_typedef (value_type (arg2
));
1359 code1
= TYPE_CODE (type1
);
1360 code2
= TYPE_CODE (type2
);
1361 is_int1
= is_integral_type (type1
);
1362 is_int2
= is_integral_type (type2
);
1364 if (is_int1
&& is_int2
)
1365 return longest_to_int (value_as_long (value_binop (arg1
, arg2
,
1367 else if ((code1
== TYPE_CODE_FLT
|| is_int1
)
1368 && (code2
== TYPE_CODE_FLT
|| is_int2
))
1370 /* NOTE: kettenis/20050816: Avoid compiler bug on systems where
1371 `long double' values are returned in static storage (m68k). */
1372 DOUBLEST d
= value_as_double (arg1
);
1373 return d
== value_as_double (arg2
);
1375 else if ((code1
== TYPE_CODE_DECFLOAT
|| is_int1
)
1376 && (code2
== TYPE_CODE_DECFLOAT
|| is_int2
))
1378 gdb_byte v1
[16], v2
[16];
1381 value_args_as_decimal (arg1
, arg2
, v1
, &len_v1
, v2
, &len_v2
);
1383 return decimal_compare (v1
, len_v1
, v2
, len_v2
) == 0;
1386 /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1388 else if (code1
== TYPE_CODE_PTR
&& is_int2
)
1389 return value_as_address (arg1
) == (CORE_ADDR
) value_as_long (arg2
);
1390 else if (code2
== TYPE_CODE_PTR
&& is_int1
)
1391 return (CORE_ADDR
) value_as_long (arg1
) == value_as_address (arg2
);
1393 else if (code1
== code2
1394 && ((len
= (int) TYPE_LENGTH (type1
))
1395 == (int) TYPE_LENGTH (type2
)))
1397 p1
= value_contents (arg1
);
1398 p2
= value_contents (arg2
);
1406 else if (code1
== TYPE_CODE_STRING
&& code2
== TYPE_CODE_STRING
)
1408 return value_strcmp (arg1
, arg2
) == 0;
1412 error (_("Invalid type combination in equality test."));
1413 return 0; /* For lint -- never reached */
1417 /* Simulate the C operator < by returning 1
1418 iff ARG1's contents are less than ARG2's. */
1421 value_less (struct value
*arg1
, struct value
*arg2
)
1423 enum type_code code1
;
1424 enum type_code code2
;
1425 struct type
*type1
, *type2
;
1426 int is_int1
, is_int2
;
1428 arg1
= coerce_array (arg1
);
1429 arg2
= coerce_array (arg2
);
1431 type1
= check_typedef (value_type (arg1
));
1432 type2
= check_typedef (value_type (arg2
));
1433 code1
= TYPE_CODE (type1
);
1434 code2
= TYPE_CODE (type2
);
1435 is_int1
= is_integral_type (type1
);
1436 is_int2
= is_integral_type (type2
);
1438 if (is_int1
&& is_int2
)
1439 return longest_to_int (value_as_long (value_binop (arg1
, arg2
,
1441 else if ((code1
== TYPE_CODE_FLT
|| is_int1
)
1442 && (code2
== TYPE_CODE_FLT
|| is_int2
))
1444 /* NOTE: kettenis/20050816: Avoid compiler bug on systems where
1445 `long double' values are returned in static storage (m68k). */
1446 DOUBLEST d
= value_as_double (arg1
);
1447 return d
< value_as_double (arg2
);
1449 else if ((code1
== TYPE_CODE_DECFLOAT
|| is_int1
)
1450 && (code2
== TYPE_CODE_DECFLOAT
|| is_int2
))
1452 gdb_byte v1
[16], v2
[16];
1455 value_args_as_decimal (arg1
, arg2
, v1
, &len_v1
, v2
, &len_v2
);
1457 return decimal_compare (v1
, len_v1
, v2
, len_v2
) == -1;
1459 else if (code1
== TYPE_CODE_PTR
&& code2
== TYPE_CODE_PTR
)
1460 return value_as_address (arg1
) < value_as_address (arg2
);
1462 /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1464 else if (code1
== TYPE_CODE_PTR
&& is_int2
)
1465 return value_as_address (arg1
) < (CORE_ADDR
) value_as_long (arg2
);
1466 else if (code2
== TYPE_CODE_PTR
&& is_int1
)
1467 return (CORE_ADDR
) value_as_long (arg1
) < value_as_address (arg2
);
1468 else if (code1
== TYPE_CODE_STRING
&& code2
== TYPE_CODE_STRING
)
1469 return value_strcmp (arg1
, arg2
) < 0;
1472 error (_("Invalid type combination in ordering comparison."));
1477 /* The unary operators +, - and ~. They free the argument ARG1. */
1480 value_pos (struct value
*arg1
)
1484 arg1
= coerce_ref (arg1
);
1485 type
= check_typedef (value_type (arg1
));
1487 if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
1488 return value_from_double (type
, value_as_double (arg1
));
1489 else if (TYPE_CODE (type
) == TYPE_CODE_DECFLOAT
)
1490 return value_from_decfloat (type
, value_contents (arg1
));
1491 else if (is_integral_type (type
))
1493 return value_from_longest (type
, value_as_long (arg1
));
1497 error ("Argument to positive operation not a number.");
1498 return 0; /* For lint -- never reached */
1503 value_neg (struct value
*arg1
)
1507 arg1
= coerce_ref (arg1
);
1508 type
= check_typedef (value_type (arg1
));
1510 if (TYPE_CODE (type
) == TYPE_CODE_DECFLOAT
)
1512 struct value
*val
= allocate_value (type
);
1513 int len
= TYPE_LENGTH (type
);
1514 gdb_byte decbytes
[16]; /* a decfloat is at most 128 bits long */
1516 memcpy (decbytes
, value_contents (arg1
), len
);
1518 if (gdbarch_byte_order (current_gdbarch
) == BFD_ENDIAN_LITTLE
)
1519 decbytes
[len
-1] = decbytes
[len
- 1] | 0x80;
1521 decbytes
[0] = decbytes
[0] | 0x80;
1523 memcpy (value_contents_raw (val
), decbytes
, len
);
1526 else if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
1527 return value_from_double (type
, -value_as_double (arg1
));
1528 else if (is_integral_type (type
))
1530 return value_from_longest (type
, -value_as_long (arg1
));
1534 error (_("Argument to negate operation not a number."));
1535 return 0; /* For lint -- never reached */
1540 value_complement (struct value
*arg1
)
1544 arg1
= coerce_ref (arg1
);
1545 type
= check_typedef (value_type (arg1
));
1547 if (!is_integral_type (type
))
1548 error (_("Argument to complement operation not an integer or boolean."));
1550 return value_from_longest (type
, ~value_as_long (arg1
));
1553 /* The INDEX'th bit of SET value whose value_type is TYPE,
1554 and whose value_contents is valaddr.
1555 Return -1 if out of range, -2 other error. */
1558 value_bit_index (struct type
*type
, const gdb_byte
*valaddr
, int index
)
1560 LONGEST low_bound
, high_bound
;
1563 struct type
*range
= TYPE_FIELD_TYPE (type
, 0);
1564 if (get_discrete_bounds (range
, &low_bound
, &high_bound
) < 0)
1566 if (index
< low_bound
|| index
> high_bound
)
1568 rel_index
= index
- low_bound
;
1569 word
= unpack_long (builtin_type_unsigned_char
,
1570 valaddr
+ (rel_index
/ TARGET_CHAR_BIT
));
1571 rel_index
%= TARGET_CHAR_BIT
;
1572 if (gdbarch_bits_big_endian (current_gdbarch
))
1573 rel_index
= TARGET_CHAR_BIT
- 1 - rel_index
;
1574 return (word
>> rel_index
) & 1;
1578 value_in (struct value
*element
, struct value
*set
)
1581 struct type
*settype
= check_typedef (value_type (set
));
1582 struct type
*eltype
= check_typedef (value_type (element
));
1583 if (TYPE_CODE (eltype
) == TYPE_CODE_RANGE
)
1584 eltype
= TYPE_TARGET_TYPE (eltype
);
1585 if (TYPE_CODE (settype
) != TYPE_CODE_SET
)
1586 error (_("Second argument of 'IN' has wrong type"));
1587 if (TYPE_CODE (eltype
) != TYPE_CODE_INT
1588 && TYPE_CODE (eltype
) != TYPE_CODE_CHAR
1589 && TYPE_CODE (eltype
) != TYPE_CODE_ENUM
1590 && TYPE_CODE (eltype
) != TYPE_CODE_BOOL
)
1591 error (_("First argument of 'IN' has wrong type"));
1592 member
= value_bit_index (settype
, value_contents (set
),
1593 value_as_long (element
));
1595 error (_("First argument of 'IN' not in range"));
1600 _initialize_valarith (void)