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 /* For shift and integer exponentiation operations,
880 only promote the first argument. */
881 if ((op
== BINOP_LSH
|| op
== BINOP_RSH
|| op
== BINOP_EXP
)
882 && is_integral_type (value_type (arg2
)))
883 unop_promote (current_language
, current_gdbarch
, &arg1
);
885 binop_promote (current_language
, current_gdbarch
, &arg1
, &arg2
);
887 arg1
= coerce_ref (arg1
);
888 arg2
= coerce_ref (arg2
);
890 type1
= check_typedef (value_type (arg1
));
891 type2
= check_typedef (value_type (arg2
));
893 if ((TYPE_CODE (type1
) != TYPE_CODE_FLT
894 && TYPE_CODE (type1
) != TYPE_CODE_DECFLOAT
895 && !is_integral_type (type1
))
896 || (TYPE_CODE (type2
) != TYPE_CODE_FLT
897 && TYPE_CODE (type2
) != TYPE_CODE_DECFLOAT
898 && !is_integral_type (type2
)))
899 error (_("Argument to arithmetic operation not a number or boolean."));
901 if (TYPE_CODE (type1
) == TYPE_CODE_DECFLOAT
902 || TYPE_CODE (type2
) == TYPE_CODE_DECFLOAT
)
905 int len_v1
, len_v2
, len_v
;
906 gdb_byte v1
[16], v2
[16];
909 value_args_as_decimal (arg1
, arg2
, v1
, &len_v1
, v2
, &len_v2
);
918 decimal_binop (op
, v1
, len_v1
, v2
, len_v2
, v
, &len_v
);
922 error (_("Operation not valid for decimal floating point number."));
925 /* If only one type is decimal float, use its type.
926 Otherwise use the bigger type. */
927 if (TYPE_CODE (type1
) != TYPE_CODE_DECFLOAT
)
929 else if (TYPE_CODE (type2
) != TYPE_CODE_DECFLOAT
)
931 else if (TYPE_LENGTH (type2
) > TYPE_LENGTH (type1
))
936 val
= value_from_decfloat (result_type
, v
);
938 else if (TYPE_CODE (type1
) == TYPE_CODE_FLT
939 || TYPE_CODE (type2
) == TYPE_CODE_FLT
)
941 /* FIXME-if-picky-about-floating-accuracy: Should be doing this
942 in target format. real.c in GCC probably has the necessary
944 DOUBLEST v1
, v2
, v
= 0;
945 v1
= value_as_double (arg1
);
946 v2
= value_as_double (arg2
);
970 error (_("Cannot perform exponentiation: %s"), safe_strerror (errno
));
974 v
= v1
< v2
? v1
: v2
;
978 v
= v1
> v2
? v1
: v2
;
982 error (_("Integer-only operation on floating point number."));
985 /* If only one type is float, use its type.
986 Otherwise use the bigger type. */
987 if (TYPE_CODE (type1
) != TYPE_CODE_FLT
)
989 else if (TYPE_CODE (type2
) != TYPE_CODE_FLT
)
991 else if (TYPE_LENGTH (type2
) > TYPE_LENGTH (type1
))
996 val
= allocate_value (result_type
);
997 store_typed_floating (value_contents_raw (val
), value_type (val
), v
);
999 else if (TYPE_CODE (type1
) == TYPE_CODE_BOOL
1000 || TYPE_CODE (type2
) == TYPE_CODE_BOOL
)
1002 LONGEST v1
, v2
, v
= 0;
1003 v1
= value_as_long (arg1
);
1004 v2
= value_as_long (arg2
);
1008 case BINOP_BITWISE_AND
:
1012 case BINOP_BITWISE_IOR
:
1016 case BINOP_BITWISE_XOR
:
1024 case BINOP_NOTEQUAL
:
1029 error (_("Invalid operation on booleans."));
1032 result_type
= type1
;
1034 val
= allocate_value (result_type
);
1035 store_signed_integer (value_contents_raw (val
),
1036 TYPE_LENGTH (result_type
),
1040 /* Integral operations here. */
1042 /* Determine type length of the result, and if the operation should
1043 be done unsigned. For exponentiation and shift operators,
1044 use the length and type of the left operand. Otherwise,
1045 use the signedness of the operand with the greater length.
1046 If both operands are of equal length, use unsigned operation
1047 if one of the operands is unsigned. */
1048 if (op
== BINOP_RSH
|| op
== BINOP_LSH
|| op
== BINOP_EXP
)
1049 result_type
= type1
;
1050 else if (TYPE_LENGTH (type1
) > TYPE_LENGTH (type2
))
1051 result_type
= type1
;
1052 else if (TYPE_LENGTH (type2
) > TYPE_LENGTH (type1
))
1053 result_type
= type2
;
1054 else if (TYPE_UNSIGNED (type1
))
1055 result_type
= type1
;
1056 else if (TYPE_UNSIGNED (type2
))
1057 result_type
= type2
;
1059 result_type
= type1
;
1061 if (TYPE_UNSIGNED (result_type
))
1063 LONGEST v2_signed
= value_as_long (arg2
);
1064 ULONGEST v1
, v2
, v
= 0;
1065 v1
= (ULONGEST
) value_as_long (arg1
);
1066 v2
= (ULONGEST
) v2_signed
;
1087 error (_("Division by zero"));
1091 v
= uinteger_pow (v1
, v2_signed
);
1098 error (_("Division by zero"));
1102 /* Knuth 1.2.4, integer only. Note that unlike the C '%' op,
1103 v1 mod 0 has a defined value, v1. */
1111 /* Note floor(v1/v2) == v1/v2 for unsigned. */
1124 case BINOP_BITWISE_AND
:
1128 case BINOP_BITWISE_IOR
:
1132 case BINOP_BITWISE_XOR
:
1136 case BINOP_LOGICAL_AND
:
1140 case BINOP_LOGICAL_OR
:
1145 v
= v1
< v2
? v1
: v2
;
1149 v
= v1
> v2
? v1
: v2
;
1156 case BINOP_NOTEQUAL
:
1165 error (_("Invalid binary operation on numbers."));
1168 val
= allocate_value (result_type
);
1169 store_unsigned_integer (value_contents_raw (val
),
1170 TYPE_LENGTH (value_type (val
)),
1175 LONGEST v1
, v2
, v
= 0;
1176 v1
= value_as_long (arg1
);
1177 v2
= value_as_long (arg2
);
1198 error (_("Division by zero"));
1202 v
= integer_pow (v1
, v2
);
1209 error (_("Division by zero"));
1213 /* Knuth 1.2.4, integer only. Note that unlike the C '%' op,
1214 X mod 0 has a defined value, X. */
1222 /* Compute floor. */
1223 if (TRUNCATION_TOWARDS_ZERO
&& (v
< 0) && ((v1
% v2
) != 0))
1239 case BINOP_BITWISE_AND
:
1243 case BINOP_BITWISE_IOR
:
1247 case BINOP_BITWISE_XOR
:
1251 case BINOP_LOGICAL_AND
:
1255 case BINOP_LOGICAL_OR
:
1260 v
= v1
< v2
? v1
: v2
;
1264 v
= v1
> v2
? v1
: v2
;
1276 error (_("Invalid binary operation on numbers."));
1279 val
= allocate_value (result_type
);
1280 store_signed_integer (value_contents_raw (val
),
1281 TYPE_LENGTH (value_type (val
)),
1289 /* Simulate the C operator ! -- return 1 if ARG1 contains zero. */
1292 value_logical_not (struct value
*arg1
)
1298 arg1
= coerce_number (arg1
);
1299 type1
= check_typedef (value_type (arg1
));
1301 if (TYPE_CODE (type1
) == TYPE_CODE_FLT
)
1302 return 0 == value_as_double (arg1
);
1303 else if (TYPE_CODE (type1
) == TYPE_CODE_DECFLOAT
)
1304 return decimal_is_zero (value_contents (arg1
), TYPE_LENGTH (type1
));
1306 len
= TYPE_LENGTH (type1
);
1307 p
= value_contents (arg1
);
1318 /* Perform a comparison on two string values (whose content are not
1319 necessarily null terminated) based on their length */
1322 value_strcmp (struct value
*arg1
, struct value
*arg2
)
1324 int len1
= TYPE_LENGTH (value_type (arg1
));
1325 int len2
= TYPE_LENGTH (value_type (arg2
));
1326 const gdb_byte
*s1
= value_contents (arg1
);
1327 const gdb_byte
*s2
= value_contents (arg2
);
1328 int i
, len
= len1
< len2
? len1
: len2
;
1330 for (i
= 0; i
< len
; i
++)
1334 else if (s1
[i
] > s2
[i
])
1342 else if (len1
> len2
)
1348 /* Simulate the C operator == by returning a 1
1349 iff ARG1 and ARG2 have equal contents. */
1352 value_equal (struct value
*arg1
, struct value
*arg2
)
1357 struct type
*type1
, *type2
;
1358 enum type_code code1
;
1359 enum type_code code2
;
1360 int is_int1
, is_int2
;
1362 arg1
= coerce_array (arg1
);
1363 arg2
= coerce_array (arg2
);
1365 type1
= check_typedef (value_type (arg1
));
1366 type2
= check_typedef (value_type (arg2
));
1367 code1
= TYPE_CODE (type1
);
1368 code2
= TYPE_CODE (type2
);
1369 is_int1
= is_integral_type (type1
);
1370 is_int2
= is_integral_type (type2
);
1372 if (is_int1
&& is_int2
)
1373 return longest_to_int (value_as_long (value_binop (arg1
, arg2
,
1375 else if ((code1
== TYPE_CODE_FLT
|| is_int1
)
1376 && (code2
== TYPE_CODE_FLT
|| is_int2
))
1378 /* NOTE: kettenis/20050816: Avoid compiler bug on systems where
1379 `long double' values are returned in static storage (m68k). */
1380 DOUBLEST d
= value_as_double (arg1
);
1381 return d
== value_as_double (arg2
);
1383 else if ((code1
== TYPE_CODE_DECFLOAT
|| is_int1
)
1384 && (code2
== TYPE_CODE_DECFLOAT
|| is_int2
))
1386 gdb_byte v1
[16], v2
[16];
1389 value_args_as_decimal (arg1
, arg2
, v1
, &len_v1
, v2
, &len_v2
);
1391 return decimal_compare (v1
, len_v1
, v2
, len_v2
) == 0;
1394 /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1396 else if (code1
== TYPE_CODE_PTR
&& is_int2
)
1397 return value_as_address (arg1
) == (CORE_ADDR
) value_as_long (arg2
);
1398 else if (code2
== TYPE_CODE_PTR
&& is_int1
)
1399 return (CORE_ADDR
) value_as_long (arg1
) == value_as_address (arg2
);
1401 else if (code1
== code2
1402 && ((len
= (int) TYPE_LENGTH (type1
))
1403 == (int) TYPE_LENGTH (type2
)))
1405 p1
= value_contents (arg1
);
1406 p2
= value_contents (arg2
);
1414 else if (code1
== TYPE_CODE_STRING
&& code2
== TYPE_CODE_STRING
)
1416 return value_strcmp (arg1
, arg2
) == 0;
1420 error (_("Invalid type combination in equality test."));
1421 return 0; /* For lint -- never reached */
1425 /* Simulate the C operator < by returning 1
1426 iff ARG1's contents are less than ARG2's. */
1429 value_less (struct value
*arg1
, struct value
*arg2
)
1431 enum type_code code1
;
1432 enum type_code code2
;
1433 struct type
*type1
, *type2
;
1434 int is_int1
, is_int2
;
1436 arg1
= coerce_array (arg1
);
1437 arg2
= coerce_array (arg2
);
1439 type1
= check_typedef (value_type (arg1
));
1440 type2
= check_typedef (value_type (arg2
));
1441 code1
= TYPE_CODE (type1
);
1442 code2
= TYPE_CODE (type2
);
1443 is_int1
= is_integral_type (type1
);
1444 is_int2
= is_integral_type (type2
);
1446 if (is_int1
&& is_int2
)
1447 return longest_to_int (value_as_long (value_binop (arg1
, arg2
,
1449 else if ((code1
== TYPE_CODE_FLT
|| is_int1
)
1450 && (code2
== TYPE_CODE_FLT
|| is_int2
))
1452 /* NOTE: kettenis/20050816: Avoid compiler bug on systems where
1453 `long double' values are returned in static storage (m68k). */
1454 DOUBLEST d
= value_as_double (arg1
);
1455 return d
< value_as_double (arg2
);
1457 else if ((code1
== TYPE_CODE_DECFLOAT
|| is_int1
)
1458 && (code2
== TYPE_CODE_DECFLOAT
|| is_int2
))
1460 gdb_byte v1
[16], v2
[16];
1463 value_args_as_decimal (arg1
, arg2
, v1
, &len_v1
, v2
, &len_v2
);
1465 return decimal_compare (v1
, len_v1
, v2
, len_v2
) == -1;
1467 else if (code1
== TYPE_CODE_PTR
&& code2
== TYPE_CODE_PTR
)
1468 return value_as_address (arg1
) < value_as_address (arg2
);
1470 /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1472 else if (code1
== TYPE_CODE_PTR
&& is_int2
)
1473 return value_as_address (arg1
) < (CORE_ADDR
) value_as_long (arg2
);
1474 else if (code2
== TYPE_CODE_PTR
&& is_int1
)
1475 return (CORE_ADDR
) value_as_long (arg1
) < value_as_address (arg2
);
1476 else if (code1
== TYPE_CODE_STRING
&& code2
== TYPE_CODE_STRING
)
1477 return value_strcmp (arg1
, arg2
) < 0;
1480 error (_("Invalid type combination in ordering comparison."));
1485 /* The unary operators +, - and ~. They free the argument ARG1. */
1488 value_pos (struct value
*arg1
)
1492 unop_promote (current_language
, current_gdbarch
, &arg1
);
1494 arg1
= coerce_ref (arg1
);
1495 type
= check_typedef (value_type (arg1
));
1497 if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
1498 return value_from_double (type
, value_as_double (arg1
));
1499 else if (TYPE_CODE (type
) == TYPE_CODE_DECFLOAT
)
1500 return value_from_decfloat (type
, value_contents (arg1
));
1501 else if (is_integral_type (type
))
1503 return value_from_longest (type
, value_as_long (arg1
));
1507 error ("Argument to positive operation not a number.");
1508 return 0; /* For lint -- never reached */
1513 value_neg (struct value
*arg1
)
1517 unop_promote (current_language
, current_gdbarch
, &arg1
);
1519 arg1
= coerce_ref (arg1
);
1520 type
= check_typedef (value_type (arg1
));
1522 if (TYPE_CODE (type
) == TYPE_CODE_DECFLOAT
)
1524 struct value
*val
= allocate_value (type
);
1525 int len
= TYPE_LENGTH (type
);
1526 gdb_byte decbytes
[16]; /* a decfloat is at most 128 bits long */
1528 memcpy (decbytes
, value_contents (arg1
), len
);
1530 if (gdbarch_byte_order (current_gdbarch
) == BFD_ENDIAN_LITTLE
)
1531 decbytes
[len
-1] = decbytes
[len
- 1] | 0x80;
1533 decbytes
[0] = decbytes
[0] | 0x80;
1535 memcpy (value_contents_raw (val
), decbytes
, len
);
1538 else if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
1539 return value_from_double (type
, -value_as_double (arg1
));
1540 else if (is_integral_type (type
))
1542 return value_from_longest (type
, -value_as_long (arg1
));
1546 error (_("Argument to negate operation not a number."));
1547 return 0; /* For lint -- never reached */
1552 value_complement (struct value
*arg1
)
1556 unop_promote (current_language
, current_gdbarch
, &arg1
);
1558 arg1
= coerce_ref (arg1
);
1559 type
= check_typedef (value_type (arg1
));
1561 if (!is_integral_type (type
))
1562 error (_("Argument to complement operation not an integer or boolean."));
1564 return value_from_longest (type
, ~value_as_long (arg1
));
1567 /* The INDEX'th bit of SET value whose value_type is TYPE,
1568 and whose value_contents is valaddr.
1569 Return -1 if out of range, -2 other error. */
1572 value_bit_index (struct type
*type
, const gdb_byte
*valaddr
, int index
)
1574 LONGEST low_bound
, high_bound
;
1577 struct type
*range
= TYPE_FIELD_TYPE (type
, 0);
1578 if (get_discrete_bounds (range
, &low_bound
, &high_bound
) < 0)
1580 if (index
< low_bound
|| index
> high_bound
)
1582 rel_index
= index
- low_bound
;
1583 word
= unpack_long (builtin_type_unsigned_char
,
1584 valaddr
+ (rel_index
/ TARGET_CHAR_BIT
));
1585 rel_index
%= TARGET_CHAR_BIT
;
1586 if (gdbarch_bits_big_endian (current_gdbarch
))
1587 rel_index
= TARGET_CHAR_BIT
- 1 - rel_index
;
1588 return (word
>> rel_index
) & 1;
1592 value_in (struct value
*element
, struct value
*set
)
1595 struct type
*settype
= check_typedef (value_type (set
));
1596 struct type
*eltype
= check_typedef (value_type (element
));
1597 if (TYPE_CODE (eltype
) == TYPE_CODE_RANGE
)
1598 eltype
= TYPE_TARGET_TYPE (eltype
);
1599 if (TYPE_CODE (settype
) != TYPE_CODE_SET
)
1600 error (_("Second argument of 'IN' has wrong type"));
1601 if (TYPE_CODE (eltype
) != TYPE_CODE_INT
1602 && TYPE_CODE (eltype
) != TYPE_CODE_CHAR
1603 && TYPE_CODE (eltype
) != TYPE_CODE_ENUM
1604 && TYPE_CODE (eltype
) != TYPE_CODE_BOOL
)
1605 error (_("First argument of 'IN' has wrong type"));
1606 member
= value_bit_index (settype
, value_contents (set
),
1607 value_as_long (element
));
1609 error (_("First argument of 'IN' not in range"));
1614 _initialize_valarith (void)