1 /* target.h -- Public #include File (module.h template V1.0)
2 Copyright (C) 1995, 1996 Free Software Foundation, Inc.
3 Contributed by James Craig Burley.
5 This file is part of GNU Fortran.
7 GNU Fortran is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU Fortran 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.
17 You should have received a copy of the GNU General Public License
18 along with GNU Fortran; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
28 /* Allow multiple inclusion to work. */
30 #ifndef GCC_F_TARGET_H
31 #define GCC_F_TARGET_H
34 #define HOST_WIDE_INT long
41 /* Simple definitions and enumerations. */
43 #define FFETARGET_charactersizeNONE (-1)
44 #ifndef FFETARGET_charactersizeMAXIMUM
45 #define FFETARGET_charactersizeMAXIMUM 2147483647
48 #ifndef FFETARGET_defaultIS_90
49 #define FFETARGET_defaultIS_90 0
51 #ifndef FFETARGET_defaultIS_AUTOMATIC
52 #define FFETARGET_defaultIS_AUTOMATIC 1
54 #ifndef FFETARGET_defaultIS_BACKSLASH
55 #define FFETARGET_defaultIS_BACKSLASH 1
57 #ifndef FFETARGET_defaultIS_INIT_LOCAL_ZERO
58 #define FFETARGET_defaultIS_INIT_LOCAL_ZERO 0
60 #ifndef FFETARGET_defaultIS_DOLLAR_OK
61 #define FFETARGET_defaultIS_DOLLAR_OK 0
63 #ifndef FFETARGET_defaultIS_F2C
64 #define FFETARGET_defaultIS_F2C 1
66 #ifndef FFETARGET_defaultIS_F2C_LIBRARY
67 #define FFETARGET_defaultIS_F2C_LIBRARY 1
69 #ifndef FFETARGET_defaultIS_FREE_FORM
70 #define FFETARGET_defaultIS_FREE_FORM 0
72 #ifndef FFETARGET_defaultIS_PEDANTIC
73 #define FFETARGET_defaultIS_PEDANTIC 0
75 #ifndef FFETARGET_defaultCASE_INTRIN
76 #define FFETARGET_defaultCASE_INTRIN FFE_caseLOWER
78 #ifndef FFETARGET_defaultCASE_MATCH
79 #define FFETARGET_defaultCASE_MATCH FFE_caseLOWER
81 #ifndef FFETARGET_defaultCASE_SOURCE
82 #define FFETARGET_defaultCASE_SOURCE FFE_caseLOWER
84 #ifndef FFETARGET_defaultCASE_SYMBOL
85 #define FFETARGET_defaultCASE_SYMBOL FFE_caseNONE
88 #ifndef FFETARGET_defaultFIXED_LINE_LENGTH
89 #define FFETARGET_defaultFIXED_LINE_LENGTH 72
92 /* 1 if external Fortran names ("FOO" in SUBROUTINE FOO, COMMON /FOO/,
93 and even enforced/default-for-unnamed PROGRAM, blank-COMMON, and
94 BLOCK DATA names, but not names of library functions implementing
95 intrinsics or names of local/internal variables) should have an
96 underscore appended (for compatibility with existing systems). */
98 #ifndef FFETARGET_defaultEXTERNAL_UNDERSCORED
99 #define FFETARGET_defaultEXTERNAL_UNDERSCORED 1
102 /* 1 if external Fortran names with underscores already in them should
103 have an extra underscore appended (in addition to the one they
104 might already have appened if FFETARGET_defaultEXTERNAL_UNDERSCORED). */
106 #ifndef FFETARGET_defaultUNDERSCORED_EXTERNAL_UNDERSCORED
107 #define FFETARGET_defaultUNDERSCORED_EXTERNAL_UNDERSCORED 1
110 /* If FFETARGET_defaultEXTERNAL_UNDERSCORED is 0, the following definitions
111 might also need to be overridden to make g77 objects compatible with
112 f2c+gcc objects. Although I don't think the unnamed BLOCK DATA one
113 is an issue at all. Of course, on some systems it isn't f2c
114 compatibility that is the issue -- maybe compatibility with some
115 other compiler(s). I don't know what to recommend for systems where
116 there is no existing Fortran compiler -- I suppose porting f2c and
117 pretending it's the existing one is best for now. */
119 /* 1 if the "FOO" in "PROGRAM FOO" should be overridden and a particular
120 name imposed in place of it in the actual code (normally the case,
121 because the library's main entry point on most systems calls the main
122 function by a particular name). Someday g77 might do the f2c trick
123 of also outputting a "FOO" procedure that just calls the main procedure,
124 but that'll wait until somebody shows why it is needed. */
126 #ifndef FFETARGET_isENFORCED_MAIN
127 #define FFETARGET_isENFORCED_MAIN 1
130 /* The enforced name of the main program if ENFORCED_MAIN is 1. */
132 #ifndef FFETARGET_nameENFORCED_MAIN_NAME
133 #define FFETARGET_nameENFORCED_MAIN_NAME "MAIN__"
136 /* The name used for an unnamed main program if ENFORCED_MAIN is 0. */
138 #ifndef FFETARGET_nameUNNAMED_MAIN
139 #define FFETARGET_nameUNNAMED_MAIN "MAIN__"
142 /* The name used for an unnamed block data program. */
144 #ifndef FFETARGET_nameUNNAMED_BLOCK_DATA
145 #define FFETARGET_nameUNNAMED_BLOCK_DATA "_BLOCK_DATA__"
148 /* The name used for blank common. */
150 #ifndef FFETARGET_nameBLANK_COMMON
151 #define FFETARGET_nameBLANK_COMMON "_BLNK__"
154 #ifndef FFETARGET_integerSMALLEST_POSITIVE
155 #define FFETARGET_integerSMALLEST_POSITIVE 0
157 #ifndef FFETARGET_integerLARGEST_POSITIVE
158 #define FFETARGET_integerLARGEST_POSITIVE 2147483647
160 #ifndef FFETARGET_integerBIG_MAGICAL
161 #define FFETARGET_integerBIG_MAGICAL 020000000000 /* 2147483648 */
163 #ifndef FFETARGET_integerALMOST_BIG_MAGICAL
164 #define FFETARGET_integerALMOST_BIG_MAGICAL 214748364
166 #ifndef FFETARGET_integerALMOST_BIG_OVERFLOW_BINARY
167 #define FFETARGET_integerALMOST_BIG_OVERFLOW_BINARY 0x80000000
169 #ifndef FFETARGET_integerALMOST_BIG_OVERFLOW_HEX
170 #define FFETARGET_integerALMOST_BIG_OVERFLOW_HEX 0x10000000
172 #ifndef FFETARGET_integerALMOST_BIG_OVERFLOW_OCTAL
173 #define FFETARGET_integerALMOST_BIG_OVERFLOW_OCTAL 0x20000000
175 #ifndef FFETARGET_integerFINISH_BIG_MAGICAL
176 #define FFETARGET_integerFINISH_BIG_MAGICAL 8
178 #ifndef FFETARGET_integerFINISH_BIG_OVERFLOW_BINARY
179 #define FFETARGET_integerFINISH_BIG_OVERFLOW_BINARY 0
181 #ifndef FFETARGET_integerFINISH_BIG_OVERFLOW_HEX
182 #define FFETARGET_integerFINISH_BIG_OVERFLOW_HEX 0
184 #ifndef FFETARGET_integerFINISH_BIG_OVERFLOW_OCTAL
185 #define FFETARGET_integerFINISH_BIG_OVERFLOW_OCTAL 0
188 #ifndef FFETARGET_offsetNONE
189 #define FFETARGET_offsetNONE 0 /* Not used by FFE, for backend if needed. */
192 #define FFETARGET_okINTEGER1 1
193 #define FFETARGET_okINTEGER2 1
194 #define FFETARGET_okINTEGER3 1
195 #define FFETARGET_okINTEGER4 1
196 #define FFETARGET_okLOGICAL1 1
197 #define FFETARGET_okLOGICAL2 1
198 #define FFETARGET_okLOGICAL3 1
199 #define FFETARGET_okLOGICAL4 1
200 #define FFETARGET_okREAL1 1
201 #define FFETARGET_okREAL2 1
202 #define FFETARGET_okREAL3 0
203 #define FFETARGET_okREALQUAD FFETARGET_okREAL3
204 #define FFETARGET_okCOMPLEX1 1
205 #define FFETARGET_okCOMPLEX2 1
206 #define FFETARGET_okCOMPLEX3 0
207 #define FFETARGET_okCOMPLEXDOUBLE FFETARGET_okCOMPLEX2
208 #define FFETARGET_okCOMPLEXQUAD FFETARGET_okCOMPLEX3
209 #define FFETARGET_okCHARACTER1 1
211 #define FFETARGET_f2cTYUNKNOWN 0
212 #define FFETARGET_f2cTYADDR 1
213 #define FFETARGET_f2cTYSHORT 2
214 #define FFETARGET_f2cTYLONG 3
215 #define FFETARGET_f2cTYREAL 4
216 #define FFETARGET_f2cTYDREAL 5
217 #define FFETARGET_f2cTYCOMPLEX 6
218 #define FFETARGET_f2cTYDCOMPLEX 7
219 #define FFETARGET_f2cTYLOGICAL 8
220 #define FFETARGET_f2cTYCHAR 9
221 #define FFETARGET_f2cTYSUBR 10
222 #define FFETARGET_f2cTYINT1 11
223 #define FFETARGET_f2cTYLOGICAL1 12
224 #define FFETARGET_f2cTYLOGICAL2 13
225 #define FFETARGET_f2cTYQUAD 14
227 #if !defined(__alpha__) && (!defined (_ARCH_PPC) || !defined (__64BIT__)) && (!defined(__sparc__) || (!defined(__sparcv9) && !defined(__arch64__))) && (!defined(__ia64__) || !defined(__LP64__)) && (!defined(__hppa__) || !defined(__LP64__)) && !defined(__s390x__)
228 #define FFETARGET_32bit_longs
233 typedef unsigned char ffetargetAlign; /* ffetargetOffset for alignment. */
234 #define ffetargetAlign_f ""
235 typedef long ffetargetCharacterSize;
236 #define ffetargetCharacterSize_f "l"
237 typedef void (*ffetargetCopyfunc) (void *, void *, size_t);
238 typedef ffetargetCharacterSize ffetargetHollerithSize;
239 #define ffetargetHollerithSize_f "l"
240 typedef long long ffetargetOffset;
241 #define ffetargetOffset_f "ll"
243 #if FFETARGET_okINTEGER1
244 #ifdef FFETARGET_32bit_longs
245 typedef long int ffetargetInteger1;
246 #define ffetargetInteger1_f "l"
248 typedef int ffetargetInteger1;
249 #define ffetargetInteger1_f ""
252 #if FFETARGET_okINTEGER2
253 typedef signed char ffetargetInteger2;
254 #define ffetargetInteger2_f ""
256 #if FFETARGET_okINTEGER3
257 typedef short int ffetargetInteger3;
258 #define ffetargetInteger3_f ""
260 #if FFETARGET_okINTEGER4
261 typedef long long int ffetargetInteger4;
262 #define ffetargetInteger4_f "ll"
264 #if FFETARGET_okINTEGER5
265 typedef ? ffetargetInteger5;
266 #define ffetargetInteger5_f
269 #if FFETARGET_okINTEGER6
270 typedef ? ffetargetInteger6;
271 #define ffetargetInteger6_f
274 #if FFETARGET_okINTEGER7
275 typedef ? ffetargetInteger7;
276 #define ffetargetInteger7_f
279 #if FFETARGET_okINTEGER8
280 typedef ? ffetargetInteger8;
281 #define ffetargetInteger8_f
284 #if FFETARGET_okLOGICAL1
285 #ifdef FFETARGET_32bit_longs
286 typedef long int ffetargetLogical1;
287 #define ffetargetLogical1_f "l"
289 typedef int ffetargetLogical1;
290 #define ffetargetLogical1_f ""
293 #if FFETARGET_okLOGICAL2
294 typedef signed char ffetargetLogical2;
295 #define ffetargetLogical2_f ""
297 #if FFETARGET_okLOGICAL3
298 typedef short int ffetargetLogical3;
299 #define ffetargetLogical3_f ""
301 #if FFETARGET_okLOGICAL4
302 typedef long long int ffetargetLogical4;
303 #define ffetargetLogical4_f "ll"
305 #if FFETARGET_okLOGICAL5
306 typedef ? ffetargetLogical5;
307 #define ffetargetLogical5_f
310 #if FFETARGET_okLOGICAL6
311 typedef ? ffetargetLogical6;
312 #define ffetargetLogical6_f
315 #if FFETARGET_okLOGICAL7
316 typedef ? ffetargetLogical7;
317 #define ffetargetLogical7_f
320 #if FFETARGET_okLOGICAL8
321 typedef ? ffetargetLogical8;
322 #define ffetargetLogical8_f
325 #if FFETARGET_okREAL1
326 #ifdef FFETARGET_32bit_longs
327 typedef long int ffetargetReal1;
328 #define ffetargetReal1_f "l"
329 #define ffetarget_cvt_r1_to_rv_ REAL_VALUE_UNTO_TARGET_SINGLE
330 #define ffetarget_cvt_rv_to_r1_ REAL_VALUE_TO_TARGET_SINGLE
332 typedef int ffetargetReal1;
333 #define ffetargetReal1_f ""
334 #define ffetarget_cvt_r1_to_rv_(in) \
335 ({ REAL_VALUE_TYPE _rv; \
336 _rv = REAL_VALUE_UNTO_TARGET_SINGLE ((long) (in)); \
338 #define ffetarget_cvt_rv_to_r1_(in, out) \
340 REAL_VALUE_TO_TARGET_SINGLE ((in), _tmp); \
341 (out) = (ffetargetReal1) _tmp; })
344 #if FFETARGET_okREAL2
345 #ifdef FFETARGET_32bit_longs
351 #define ffetargetReal2_f "l"
352 #define ffetarget_cvt_r2_to_rv_ REAL_VALUE_UNTO_TARGET_DOUBLE
353 #define ffetarget_cvt_rv_to_r2_ REAL_VALUE_TO_TARGET_DOUBLE
360 #define ffetargetReal2_f ""
361 #define ffetarget_cvt_r2_to_rv_(in) \
362 ({ REAL_VALUE_TYPE _rv; \
366 _rv = REAL_VALUE_UNTO_TARGET_DOUBLE (_tmp); \
368 #define ffetarget_cvt_rv_to_r2_(in, out) \
370 REAL_VALUE_TO_TARGET_DOUBLE ((in), _tmp); \
371 (out)[0] = (int) (_tmp[0]); \
372 (out)[1] = (int) (_tmp[1]); })
375 #if FFETARGET_okREAL3
376 typedef long ffetargetReal3[?];
379 #if FFETARGET_okREAL4
380 typedef long ffetargetReal4[?];
383 #if FFETARGET_okREAL5
384 typedef long ffetargetReal5[?];
387 #if FFETARGET_okREAL6
388 typedef long ffetargetReal6[?];
391 #if FFETARGET_okREAL7
392 typedef long ffetargetReal7[?];
395 #if FFETARGET_okREAL8
396 typedef long ffetargetReal8[?];
399 #if FFETARGET_okCOMPLEX1
400 struct _ffetarget_complex_1_
403 ffetargetReal1 imaginary;
405 typedef struct _ffetarget_complex_1_ ffetargetComplex1;
407 #if FFETARGET_okCOMPLEX2
408 struct _ffetarget_complex_2_
411 ffetargetReal2 imaginary;
413 typedef struct _ffetarget_complex_2_ ffetargetComplex2;
415 #if FFETARGET_okCOMPLEX3
416 struct _ffetarget_complex_3_
419 ffetargetReal3 imaginary;
421 typedef struct _ffetarget_complex_3_ ffetargetComplex3;
423 #if FFETARGET_okCOMPLEX4
424 struct _ffetarget_complex_4_
427 ffetargetReal4 imaginary;
429 typedef struct _ffetarget_complex_4_ ffetargetComplex4;
431 #if FFETARGET_okCOMPLEX5
432 struct _ffetarget_complex_5_
435 ffetargetReal5 imaginary;
437 typedef struct _ffetarget_complex_5_ ffetargetComplex5;
439 #if FFETARGET_okCOMPLEX6
440 struct _ffetarget_complex_6_
443 ffetargetReal6 imaginary;
445 typedef struct _ffetarget_complex_6_ ffetargetComplex6;
447 #if FFETARGET_okCOMPLEX7
448 struct _ffetarget_complex_7_
451 ffetargetReal7 imaginary;
453 typedef struct _ffetarget_complex_7_ ffetargetComplex7;
455 #if FFETARGET_okCOMPLEX8
456 struct _ffetarget_complex_8_
459 ffetargetReal8 imaginary;
461 typedef struct _ffetarget_complex_8_ ffetargetComplex8;
463 #if FFETARGET_okCHARACTER1
464 struct _ffetarget_char_1_
466 ffetargetCharacterSize length;
469 typedef struct _ffetarget_char_1_ ffetargetCharacter1;
470 typedef unsigned char ffetargetCharacterUnit1;
472 #if FFETARGET_okCHARACTER2
473 typedef ? ffetargetCharacter2;
474 typedef ? ffetargetCharacterUnit2;
476 #if FFETARGET_okCHARACTER3
477 typedef ? ffetargetCharacter3;
478 typedef ? ffetargetCharacterUnit3;
480 #if FFETARGET_okCHARACTER4
481 typedef ? ffetargetCharacter4;
482 typedef ? ffetargetCharacterUnit4;
484 #if FFETARGET_okCHARACTER5
485 typedef ? ffetargetCharacter5;
486 typedef ? ffetargetCharacterUnit5;
488 #if FFETARGET_okCHARACTER6
489 typedef ? ffetargetCharacter6;
490 typedef ? ffetargetCharacterUnit6;
492 #if FFETARGET_okCHARACTER7
493 typedef ? ffetargetCharacter7;
494 typedef ? ffetargetCharacterUnit7;
496 #if FFETARGET_okCHARACTER8
497 typedef ? ffetargetCharacter8;
498 typedef ? ffetargetCharacterUnit8;
501 typedef unsigned long long int ffetargetTypeless;
503 struct _ffetarget_hollerith_
505 ffetargetHollerithSize length;
508 typedef struct _ffetarget_hollerith_ ffetargetHollerith;
510 typedef ffetargetCharacter1 ffetargetCharacterDefault;
511 typedef ffetargetComplex1 ffetargetComplexDefault;
512 #if FFETARGET_okCOMPLEXDOUBLE
513 typedef ffetargetComplex2 ffetargetComplexDouble;
515 #if FFETARGET_okCOMPLEXQUAD
516 typedef ffetargetComplex3 ffetargetComplexQuad;
518 typedef ffetargetInteger1 ffetargetIntegerDefault;
519 #define ffetargetIntegerDefault_f ffetargetInteger1_f
520 typedef ffetargetLogical1 ffetargetLogicalDefault;
521 #define ffetargetLogicalDefault_f ffetargetLogical1_f
522 typedef ffetargetReal1 ffetargetRealDefault;
523 #define ffetargetRealDefault_f ffetargetReal1_f
524 typedef ffetargetReal2 ffetargetRealDouble;
525 #define ffetargetRealDouble_f ffetargetReal2_f
526 #if FFETARGET_okREALQUAD
527 typedef ffetargetReal3 ffetargetRealQuad;
528 #define ffetargetRealQuad_f ffetargetReal3_f
531 /* Include files needed by this one. */
538 /* Structure definitions. */
541 /* Global objects accessed by users of this module. */
543 extern char ffetarget_string_[40]; /* Temp for ascii-to-double (atof). */
544 extern HOST_WIDE_INT ffetarget_long_val_;
545 extern HOST_WIDE_INT ffetarget_long_junk_;
547 /* Declare functions with prototypes. */
549 void ffetarget_aggregate_info (ffeinfoBasictype *ebt, ffeinfoKindtype *ekt,
550 ffetargetAlign *units, ffeinfoBasictype abt,
551 ffeinfoKindtype akt);
552 ffetargetAlign ffetarget_align (ffetargetAlign *updated_alignment,
553 ffetargetAlign *updated_modulo,
554 ffetargetOffset offset,
555 ffetargetAlign alignment,
556 ffetargetAlign modulo);
557 #if FFETARGET_okCHARACTER1
558 bool ffetarget_character1 (ffetargetCharacter1 *val, ffelexToken character,
560 int ffetarget_cmp_character1 (ffetargetCharacter1 l, ffetargetCharacter1 r);
561 ffebad ffetarget_concatenate_character1 (ffetargetCharacter1 *res,
562 ffetargetCharacter1 l,
563 ffetargetCharacter1 r,
565 ffetargetCharacterSize *len);
566 ffebad ffetarget_convert_character1_character1 (ffetargetCharacter1 *res,
567 ffetargetCharacterSize res_size,
568 ffetargetCharacter1 l,
570 ffebad ffetarget_convert_character1_hollerith (ffetargetCharacter1 *res,
571 ffetargetCharacterSize res_size,
572 ffetargetHollerith l,
574 ffebad ffetarget_convert_character1_integer4 (ffetargetCharacter1 *res,
575 ffetargetCharacterSize res_size,
578 ffebad ffetarget_convert_character1_logical4 (ffetargetCharacter1 *res,
579 ffetargetCharacterSize res_size,
582 ffebad ffetarget_convert_character1_typeless (ffetargetCharacter1 *res,
583 ffetargetCharacterSize res_size,
586 ffebad ffetarget_eq_character1 (bool *res, ffetargetCharacter1 l,
587 ffetargetCharacter1 r);
588 ffebad ffetarget_le_character1 (bool *res, ffetargetCharacter1 l,
589 ffetargetCharacter1 r);
590 ffebad ffetarget_ge_character1 (bool *res, ffetargetCharacter1 l,
591 ffetargetCharacter1 r);
592 ffebad ffetarget_gt_character1 (bool *res, ffetargetCharacter1 l,
593 ffetargetCharacter1 r);
594 ffebad ffetarget_lt_character1 (bool *res, ffetargetCharacter1 l,
595 ffetargetCharacter1 r);
596 ffebad ffetarget_ne_character1 (bool *res, ffetargetCharacter1 l,
597 ffetargetCharacter1 r);
598 ffebad ffetarget_substr_character1 (ffetargetCharacter1 *res,
599 ffetargetCharacter1 l,
600 ffetargetCharacterSize first,
601 ffetargetCharacterSize last,
603 ffetargetCharacterSize *len);
605 int ffetarget_cmp_hollerith (ffetargetHollerith l, ffetargetHollerith r);
606 bool ffetarget_hollerith (ffetargetHollerith *val, ffelexToken hollerith,
608 int ffetarget_cmp_typeless (ffetargetTypeless l, ffetargetTypeless r);
609 ffebad ffetarget_convert_any_character1_ (char *res, size_t size,
610 ffetargetCharacter1 l);
611 ffebad ffetarget_convert_any_hollerith_ (char *res, size_t size,
612 ffetargetHollerith l);
613 ffebad ffetarget_convert_any_typeless_ (char *res, size_t size,
614 ffetargetTypeless l);
615 #if FFETARGET_okCOMPLEX1
616 ffebad ffetarget_divide_complex1 (ffetargetComplex1 *res, ffetargetComplex1 l,
617 ffetargetComplex1 r);
619 #if FFETARGET_okCOMPLEX2
620 ffebad ffetarget_divide_complex2 (ffetargetComplex2 *res, ffetargetComplex2 l,
621 ffetargetComplex2 r);
623 #if FFETARGET_okCOMPLEX3
624 ffebad ffetarget_divide_complex3 (ffetargetComplex3 *res, ffetargetComplex3 l,
625 ffetargetComplex3 r);
627 #if FFETARGET_okCOMPLEX4
628 ffebad ffetarget_divide_complex4 (ffetargetComplex4 *res, ffetargetComplex4 l,
629 ffetargetComplex4 r);
631 #if FFETARGET_okCOMPLEX5
632 ffebad ffetarget_divide_complex5 (ffetargetComplex5 *res, ffetargetComplex5 l,
633 ffetargetComplex5 r);
635 #if FFETARGET_okCOMPLEX6
636 ffebad ffetarget_divide_complex6 (ffetargetComplex6 *res, ffetargetComplex6 l,
637 ffetargetComplex6 r);
639 #if FFETARGET_okCOMPLEX7
640 ffebad ffetarget_divide_complex7 (ffetargetComplex7 *res, ffetargetComplex7 l,
641 ffetargetComplex7 r);
643 #if FFETARGET_okCOMPLEX8
644 ffebad ffetarget_divide_complex8 (ffetargetComplex8 *res, ffetargetComplex8 l,
645 ffetargetComplex8 r);
647 #if FFETARGET_okINTEGER1
648 bool ffetarget_integer1 (ffetargetInteger1 *val, ffelexToken integer);
650 #if FFETARGET_okINTEGER2
651 bool ffetarget_integer2 (ffetargetInteger2 *val, ffelexToken integer);
653 #if FFETARGET_okINTEGER3
654 bool ffetarget_integer3 (ffetargetInteger3 *val, ffelexToken integer);
656 #if FFETARGET_okINTEGER4
657 bool ffetarget_integer4 (ffetargetInteger4 *val, ffelexToken integer);
659 #if FFETARGET_okINTEGER5
660 bool ffetarget_integer5 (ffetargetInteger5 *val, ffelexToken integer);
662 #if FFETARGET_okINTEGER6
663 bool ffetarget_integer6 (ffetargetInteger6 *val, ffelexToken integer);
665 #if FFETARGET_okINTEGER7
666 bool ffetarget_integer7 (ffetargetInteger7 *val, ffelexToken integer);
668 #if FFETARGET_okINTEGER8
669 bool ffetarget_integer8 (ffetargetInteger8 *val, ffelexToken integer);
671 bool ffetarget_integerbinary (ffetargetIntegerDefault *val,
672 ffelexToken integer);
673 bool ffetarget_integerhex (ffetargetIntegerDefault *val,
674 ffelexToken integer);
675 bool ffetarget_integeroctal (ffetargetIntegerDefault *val,
676 ffelexToken integer);
677 void ffetarget_integer_bad_magical (ffelexToken t);
678 void ffetarget_integer_bad_magical_binary (ffelexToken integer, ffelexToken minus);
679 void ffetarget_integer_bad_magical_precedence (ffelexToken integer,
681 ffelexToken higher_op);
682 void ffetarget_integer_bad_magical_precedence_binary (ffelexToken integer,
684 ffelexToken higher_op);
685 #if FFETARGET_okCHARACTER1
686 bool ffetarget_iszero_character1 (ffetargetCharacter1 constant);
688 bool ffetarget_iszero_hollerith (ffetargetHollerith constant);
689 void ffetarget_layout (const char *error_text, ffetargetAlign *alignment,
690 ffetargetAlign *modulo, ffetargetOffset *size,
691 ffeinfoBasictype bt, ffeinfoKindtype kt,
692 ffetargetCharacterSize charsize,
693 ffetargetIntegerDefault num_elements);
694 #if FFETARGET_okCOMPLEX1
695 ffebad ffetarget_multiply_complex1 (ffetargetComplex1 *res,
697 ffetargetComplex1 r);
699 #if FFETARGET_okCOMPLEX2
700 ffebad ffetarget_multiply_complex2 (ffetargetComplex2 *res,
702 ffetargetComplex2 r);
704 #if FFETARGET_okCOMPLEX3
705 ffebad ffetarget_multiply_complex3 (ffetargetComplex3 *res,
707 ffetargetComplex3 r);
709 #if FFETARGET_okCOMPLEX4
710 ffebad ffetarget_multiply_complex4 (ffetargetComplex4 *res,
712 ffetargetComplex4 r);
714 #if FFETARGET_okCOMPLEX5
715 ffebad ffetarget_multiply_complex5 (ffetargetComplex5 *res,
717 ffetargetComplex5 r);
719 #if FFETARGET_okCOMPLEX6
720 ffebad ffetarget_multiply_complex6 (ffetargetComplex6 *res,
722 ffetargetComplex6 r);
724 #if FFETARGET_okCOMPLEX7
725 ffebad ffetarget_multiply_complex7 (ffetargetComplex7 *res,
727 ffetargetComplex7 r);
729 #if FFETARGET_okCOMPLEX8
730 ffebad ffetarget_multiply_complex8 (ffetargetComplex8 *res,
732 ffetargetComplex8 r);
734 ffebad ffetarget_power_complexdefault_integerdefault (ffetargetComplexDefault *res,
735 ffetargetComplexDefault l,
736 ffetargetIntegerDefault r);
737 #if FFETARGET_okCOMPLEXDOUBLE
738 ffebad ffetarget_power_complexdouble_integerdefault (ffetargetComplexDouble *res,
739 ffetargetComplexDouble l,
740 ffetargetIntegerDefault r);
742 ffebad ffetarget_power_integerdefault_integerdefault (ffetargetIntegerDefault *res,
743 ffetargetIntegerDefault l,
744 ffetargetIntegerDefault r);
745 ffebad ffetarget_power_realdefault_integerdefault (ffetargetRealDefault *res,
746 ffetargetRealDefault l,
747 ffetargetIntegerDefault r);
748 ffebad ffetarget_power_realdouble_integerdefault (ffetargetRealDouble *res,
749 ffetargetRealDouble l,
750 ffetargetIntegerDefault r);
751 void ffetarget_print_binary (FILE *f, ffetargetTypeless val);
752 void ffetarget_print_character1 (FILE *f, ffetargetCharacter1 val);
753 void ffetarget_print_hollerith (FILE *f, ffetargetHollerith val);
754 void ffetarget_print_octal (FILE *f, ffetargetTypeless val);
755 void ffetarget_print_hex (FILE *f, ffetargetTypeless val);
756 #if FFETARGET_okREAL1
757 bool ffetarget_real1 (ffetargetReal1 *value, ffelexToken integer,
758 ffelexToken decimal, ffelexToken fraction,
759 ffelexToken exponent, ffelexToken exponent_sign,
760 ffelexToken exponent_digits);
762 #if FFETARGET_okREAL2
763 bool ffetarget_real2 (ffetargetReal2 *value, ffelexToken integer,
764 ffelexToken decimal, ffelexToken fraction,
765 ffelexToken exponent, ffelexToken exponent_sign,
766 ffelexToken exponent_digits);
768 #if FFETARGET_okREAL3
769 bool ffetarget_real3 (ffetargetReal3 *value, ffelexToken integer,
770 ffelexToken decimal, ffelexToken fraction,
771 ffelexToken exponent, ffelexToken exponent_sign,
772 ffelexToken exponent_digits);
774 #if FFETARGET_okREAL4
775 bool ffetarget_real4 (ffetargetReal4 *value, ffelexToken integer,
776 ffelexToken decimal, ffelexToken fraction,
777 ffelexToken exponent, ffelexToken exponent_sign,
778 ffelexToken exponent_digits);
780 #if FFETARGET_okREAL5
781 bool ffetarget_real5 (ffetargetReal5 *value, ffelexToken integer,
782 ffelexToken decimal, ffelexToken fraction,
783 ffelexToken exponent, ffelexToken exponent_sign,
784 ffelexToken exponent_digits);
786 #if FFETARGET_okREAL6
787 bool ffetarget_real6 (ffetargetReal6 *value, ffelexToken integer,
788 ffelexToken decimal, ffelexToken fraction,
789 ffelexToken exponent, ffelexToken exponent_sign,
790 ffelexToken exponent_digits);
792 #if FFETARGET_okREAL7
793 bool ffetarget_real7 (ffetargetReal7 *value, ffelexToken integer,
794 ffelexToken decimal, ffelexToken fraction,
795 ffelexToken exponent, ffelexToken exponent_sign,
796 ffelexToken exponent_digits);
798 #if FFETARGET_okREAL8
799 bool ffetarget_real8 (ffetargetReal8 *value, ffelexToken integer,
800 ffelexToken decimal, ffelexToken fraction,
801 ffelexToken exponent, ffelexToken exponent_sign,
802 ffelexToken exponent_digits);
804 bool ffetarget_typeless_binary (ffetargetTypeless *value, ffelexToken token);
805 bool ffetarget_typeless_octal (ffetargetTypeless *value, ffelexToken token);
806 bool ffetarget_typeless_hex (ffetargetTypeless *value, ffelexToken token);
807 void ffetarget_verify_character1 (mallocPool pool, ffetargetCharacter1 val);
808 int ffetarget_num_digits_ (ffelexToken t);
809 void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
813 #define FFETARGET_REAL_VALUE_FROM_INT_(resr, lf, kt) \
814 REAL_VALUE_FROM_INT (resr, (long) lf, (long) ((lf < 0) ? -1 : 0), \
815 ((kt == 1) ? SFmode : DFmode))
817 #define ffetarget_add_complex1(res,l,r) \
818 ({ REAL_VALUE_TYPE lr, li, rr, ri, resr, resi; \
819 lr = ffetarget_cvt_r1_to_rv_ ((l).real); \
820 li = ffetarget_cvt_r1_to_rv_ ((l).imaginary); \
821 rr = ffetarget_cvt_r1_to_rv_ ((r).real); \
822 ri = ffetarget_cvt_r1_to_rv_ ((r).imaginary); \
823 REAL_ARITHMETIC (resr, PLUS_EXPR, lr, rr); \
824 REAL_ARITHMETIC (resi, PLUS_EXPR, li, ri); \
825 ffetarget_cvt_rv_to_r1_ (resr, (res)->real); \
826 ffetarget_cvt_rv_to_r1_ (resi, (res)->imaginary); \
828 #define ffetarget_add_complex2(res,l,r) \
829 ({ REAL_VALUE_TYPE lr, li, rr, ri, resr, resi; \
830 lr = ffetarget_cvt_r2_to_rv_ (&((l).real.v[0])); \
831 li = ffetarget_cvt_r2_to_rv_ (&((l).imaginary.v[0])); \
832 rr = ffetarget_cvt_r2_to_rv_ (&((r).real.v[0])); \
833 ri = ffetarget_cvt_r2_to_rv_ (&((r).imaginary.v[0])); \
834 REAL_ARITHMETIC (resr, PLUS_EXPR, lr, rr); \
835 REAL_ARITHMETIC (resi, PLUS_EXPR, li, ri); \
836 ffetarget_cvt_rv_to_r2_ (resr, &((res)->real.v[0])); \
837 ffetarget_cvt_rv_to_r2_ (resi, &((res)->imaginary.v[0])); \
839 #define ffetarget_add_integer1(res,l,r) (*(res) = (l) + (r), FFEBAD)
840 #define ffetarget_add_integer2(res,l,r) (*(res) = (l) + (r), FFEBAD)
841 #define ffetarget_add_integer3(res,l,r) (*(res) = (l) + (r), FFEBAD)
842 #define ffetarget_add_integer4(res,l,r) (*(res) = (l) + (r), FFEBAD)
843 #define ffetarget_add_real1(res,l,r) \
844 ({ REAL_VALUE_TYPE lr, rr, resr; \
845 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
846 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
847 REAL_ARITHMETIC (resr, PLUS_EXPR, lr, rr); \
848 ffetarget_cvt_rv_to_r1_ (resr, *(res)); \
850 #define ffetarget_add_real2(res,l,r) \
851 ({ REAL_VALUE_TYPE lr, rr, resr; \
852 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
853 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
854 REAL_ARITHMETIC (resr, PLUS_EXPR, lr, rr); \
855 ffetarget_cvt_rv_to_r2_ (resr, &((res)->v[0])); \
857 #define ffetarget_aggregate_ptr_memcpy(dbt,dkt,sbt,skt) \
858 ((ffetargetCopyfunc) ffetarget_memcpy_)
859 #define ffetarget_and_integer1(res,l,r) (*(res) = (l) & (r), FFEBAD)
860 #define ffetarget_and_integer2(res,l,r) (*(res) = (l) & (r), FFEBAD)
861 #define ffetarget_and_integer3(res,l,r) (*(res) = (l) & (r), FFEBAD)
862 #define ffetarget_and_integer4(res,l,r) (*(res) = (l) & (r), FFEBAD)
863 #define ffetarget_and_logical1(res,l,r) (*(res) = (l) && (r), FFEBAD)
864 #define ffetarget_and_logical2(res,l,r) (*(res) = (l) && (r), FFEBAD)
865 #define ffetarget_and_logical3(res,l,r) (*(res) = (l) && (r), FFEBAD)
866 #define ffetarget_and_logical4(res,l,r) (*(res) = (l) && (r), FFEBAD)
867 #define ffetarget_binarymil(v,t) ffetarget_typeless_binary (v, t)
868 #define ffetarget_binaryvxt(v,t) ffetarget_typeless_binary (v, t)
869 #define ffetarget_cmp_integer1(l,r) ((l) == (r) ? 0 : ((l) < (r) ? -1 : 1))
870 #define ffetarget_cmp_integer2(l,r) ((l) == (r) ? 0 : ((l) < (r) ? -1 : 1))
871 #define ffetarget_cmp_integer3(l,r) ((l) == (r) ? 0 : ((l) < (r) ? -1 : 1))
872 #define ffetarget_cmp_integer4(l,r) ((l) == (r) ? 0 : ((l) < (r) ? -1 : 1))
873 #define ffetarget_cmp_logical1(l,r) ((l) == (r) ? 0 : ((l) < (r) ? -1 : 1))
874 #define ffetarget_cmp_logical2(l,r) ((l) == (r) ? 0 : ((l) < (r) ? -1 : 1))
875 #define ffetarget_cmp_logical3(l,r) ((l) == (r) ? 0 : ((l) < (r) ? -1 : 1))
876 #define ffetarget_cmp_logical4(l,r) ((l) == (r) ? 0 : ((l) < (r) ? -1 : 1))
877 #define ffetarget_cmp_real1(l,r) memcmp (&(l), &(r), sizeof(l))
878 #define ffetarget_cmp_real2(l,r) memcmp (&(l), &(r), sizeof(l))
879 #define ffetarget_cmp_real3(l,r) memcmp (&(l), &(r), sizeof(l))
880 #define ffetarget_cmp_typeless(l,r) \
881 memcmp (&(l), &(r), sizeof ((l)))
882 #define ffetarget_convert_character1_integer1(res,res_size,l,pool) \
883 ffetarget_convert_character1_integer4(res,res_size,(ffetargetInteger4)l,pool)
884 #define ffetarget_convert_character1_integer2(res,res_size,l,pool) \
885 ffetarget_convert_character1_integer4(res,res_size,(ffetargetInteger4)l,pool)
886 #define ffetarget_convert_character1_integer3(res,res_size,l,pool) \
887 ffetarget_convert_character1_integer4(res,res_size,(ffetargetInteger4)l,pool)
888 #define ffetarget_convert_character1_logical1(res,res_size,l,pool) \
889 ffetarget_convert_character1_logical4(res,res_size,(ffetargetLogical4)l,pool)
890 #define ffetarget_convert_character1_logical2(res,res_size,l,pool) \
891 ffetarget_convert_character1_logical4(res,res_size,(ffetargetLogical4)l,pool)
892 #define ffetarget_convert_character1_logical3(res,res_size,l,pool) \
893 ffetarget_convert_character1_logical4(res,res_size,(ffetargetLogical4)l,pool)
894 #define ffetarget_convert_complex1_character1(res,l) \
895 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
896 #define ffetarget_convert_complex1_hollerith(res,l) \
897 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
898 #define ffetarget_convert_complex1_typeless(res,l) \
899 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
900 #define ffetarget_convert_complex1_complex2(res,l) \
901 ({ REAL_VALUE_TYPE lr, li; \
902 lr = ffetarget_cvt_r2_to_rv_ (&((l).real.v[0])); \
903 li = ffetarget_cvt_r2_to_rv_ (&((l).imaginary.v[0])); \
904 ffetarget_cvt_rv_to_r1_ (lr, (res)->real); \
905 ffetarget_cvt_rv_to_r1_ (li, (res)->imaginary), \
907 #define ffetarget_convert_complex1_integer(res,l) \
908 ({ REAL_VALUE_TYPE resi, resr; \
909 ffetargetInteger1 lf = (l); \
910 FFETARGET_REAL_VALUE_FROM_INT_ (resr, lf, 1); \
912 ffetarget_cvt_rv_to_r1_ (resr, (res)->real); \
913 ffetarget_cvt_rv_to_r1_ (resi, (res)->imaginary); \
915 #define ffetarget_convert_complex1_integer1 ffetarget_convert_complex1_integer
916 #define ffetarget_convert_complex1_integer2 ffetarget_convert_complex1_integer
917 #define ffetarget_convert_complex1_integer3 ffetarget_convert_complex1_integer
918 #define ffetarget_convert_complex1_integer4(res,l) FFEBAD_NOCANDO
919 #define ffetarget_convert_complex1_real1(res,l) \
920 ((res)->real = (l), \
921 ffetarget_cvt_rv_to_r1_ (dconst0, (res)->imaginary), \
923 #define ffetarget_convert_complex1_real2(res,l) \
924 ({ REAL_VALUE_TYPE lr; \
925 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
926 ffetarget_cvt_rv_to_r1_ (lr, (res)->real); \
927 ffetarget_cvt_rv_to_r1_ (dconst0, (res)->imaginary), \
929 #define ffetarget_convert_complex2_character1(res,l) \
930 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
931 #define ffetarget_convert_complex2_hollerith(res,l) \
932 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
933 #define ffetarget_convert_complex2_typeless(res,l) \
934 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
935 #define ffetarget_convert_complex2_complex1(res,l) \
936 ({ REAL_VALUE_TYPE lr, li; \
937 lr = ffetarget_cvt_r1_to_rv_ ((l).real); \
938 li = ffetarget_cvt_r1_to_rv_ ((l).imaginary); \
939 ffetarget_cvt_rv_to_r2_ (lr, &((res)->real.v[0])); \
940 ffetarget_cvt_rv_to_r2_ (li, &((res)->imaginary.v[0])), \
942 #define ffetarget_convert_complex2_integer(res,l) \
943 ({ REAL_VALUE_TYPE resi, resr; \
944 ffetargetInteger1 lf = (l); \
945 FFETARGET_REAL_VALUE_FROM_INT_ (resr, lf, 2); \
947 ffetarget_cvt_rv_to_r2_ (resr, &((res)->real.v[0])); \
948 ffetarget_cvt_rv_to_r2_ (resi, &((res)->imaginary.v[0])); \
950 #define ffetarget_convert_complex2_integer1 ffetarget_convert_complex2_integer
951 #define ffetarget_convert_complex2_integer2 ffetarget_convert_complex2_integer
952 #define ffetarget_convert_complex2_integer3 ffetarget_convert_complex2_integer
953 #define ffetarget_convert_complex2_integer4(res,l) FFEBAD_NOCANDO
954 #define ffetarget_convert_complex2_real1(res,l) \
955 ({ REAL_VALUE_TYPE lr; \
956 lr = ffetarget_cvt_r1_to_rv_ (l); \
957 ffetarget_cvt_rv_to_r2_ (lr, &((res)->real.v[0])); \
958 ffetarget_cvt_rv_to_r2_ (dconst0, &((res)->imaginary.v[0])), \
960 #define ffetarget_convert_complex2_real2(res,l) \
961 ((res)->real = (l), \
962 ffetarget_cvt_rv_to_r2_ (dconst0, &((res)->imaginary.v[0])), \
964 #define ffetarget_convert_integer2_character1(res,l) \
965 ffetarget_convert_integer1_character1(res,l)
966 #define ffetarget_convert_integer2_complex1(res,l) \
967 ffetarget_convert_integer1_complex1(res,l)
968 #define ffetarget_convert_integer2_complex2(res,l) \
969 ffetarget_convert_integer1_complex2(res,l)
970 #define ffetarget_convert_integer2_hollerith(res,l) \
971 ffetarget_convert_integer1_hollerith(res,l)
972 #define ffetarget_convert_integer2_integer1(res,l) (*(res) = (l), FFEBAD)
973 #define ffetarget_convert_integer2_integer3(res,l) (*(res) = (l), FFEBAD)
974 #define ffetarget_convert_integer2_integer4(res,l) (*(res) = (l), FFEBAD)
975 #define ffetarget_convert_integer2_logical1(res,l) \
976 ffetarget_convert_integer1_logical1(res,l)
977 #define ffetarget_convert_integer2_logical2(res,l) \
978 ffetarget_convert_integer2_logical1(res,l)
979 #define ffetarget_convert_integer2_logical3(res,l) \
980 ffetarget_convert_integer2_logical1(res,l)
981 #define ffetarget_convert_integer2_logical4(res,l) \
982 ffetarget_convert_integer2_logical1(res,l)
983 #define ffetarget_convert_integer2_real1(res,l) \
984 ffetarget_convert_integer1_real1(res,l)
985 #define ffetarget_convert_integer2_real2(res,l) \
986 ffetarget_convert_integer1_real2(res,l)
987 #define ffetarget_convert_integer2_typeless(res,l) \
988 ffetarget_convert_integer1_typeless(res,l)
989 #define ffetarget_convert_integer3_character1(res,l) \
990 ffetarget_convert_integer1_character1(res,l)
991 #define ffetarget_convert_integer3_complex1(res,l) \
992 ffetarget_convert_integer1_complex1(res,l)
993 #define ffetarget_convert_integer3_complex2(res,l) \
994 ffetarget_convert_integer1_complex2(res,l)
995 #define ffetarget_convert_integer3_hollerith(res,l) \
996 ffetarget_convert_integer1_hollerith(res,l)
997 #define ffetarget_convert_integer3_integer1(res,l) (*(res) = (l), FFEBAD)
998 #define ffetarget_convert_integer3_integer2(res,l) (*(res) = (l), FFEBAD)
999 #define ffetarget_convert_integer3_integer4(res,l) (*(res) = (l), FFEBAD)
1000 #define ffetarget_convert_integer3_logical1(res,l) \
1001 ffetarget_convert_integer1_logical1(res,l)
1002 #define ffetarget_convert_integer3_logical2(res,l) \
1003 ffetarget_convert_integer3_logical1(res,l)
1004 #define ffetarget_convert_integer3_logical3(res,l) \
1005 ffetarget_convert_integer3_logical1(res,l)
1006 #define ffetarget_convert_integer3_logical4(res,l) \
1007 ffetarget_convert_integer3_logical1(res,l)
1008 #define ffetarget_convert_integer3_real1(res,l) \
1009 ffetarget_convert_integer1_real1(res,l)
1010 #define ffetarget_convert_integer3_real2(res,l) \
1011 ffetarget_convert_integer1_real2(res,l)
1012 #define ffetarget_convert_integer3_typeless(res,l) \
1013 ffetarget_convert_integer1_typeless(res,l)
1014 #define ffetarget_convert_integer4_character1(res,l) \
1015 ffetarget_convert_integer1_character1(res,l)
1016 #define ffetarget_convert_integer4_complex1(res,l) FFEBAD_NOCANDO
1017 #define ffetarget_convert_integer4_complex2(res,l) FFEBAD_NOCANDO
1018 #define ffetarget_convert_integer4_hollerith(res,l) \
1019 ffetarget_convert_integer1_hollerith(res,l)
1020 #define ffetarget_convert_integer4_integer1(res,l) (*(res) = (l), FFEBAD)
1021 #define ffetarget_convert_integer4_integer2(res,l) (*(res) = (l), FFEBAD)
1022 #define ffetarget_convert_integer4_integer3(res,l) (*(res) = (l), FFEBAD)
1023 #define ffetarget_convert_integer4_logical1(res,l) \
1024 ffetarget_convert_integer1_logical1(res,l)
1025 #define ffetarget_convert_integer4_logical2(res,l) \
1026 ffetarget_convert_integer1_logical1(res,l)
1027 #define ffetarget_convert_integer4_logical3(res,l) \
1028 ffetarget_convert_integer1_logical1(res,l)
1029 #define ffetarget_convert_integer4_logical4(res,l) \
1030 ffetarget_convert_integer1_logical1(res,l)
1031 #define ffetarget_convert_integer4_real1(res,l) FFEBAD_NOCANDO
1032 #define ffetarget_convert_integer4_real2(res,l) FFEBAD_NOCANDO
1033 #define ffetarget_convert_integer4_typeless(res,l) \
1034 ffetarget_convert_integer1_typeless(res,l)
1035 #define ffetarget_convert_logical1_character1(res,l) \
1036 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
1037 #define ffetarget_convert_logical1_hollerith(res,l) \
1038 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
1039 #define ffetarget_convert_logical1_typeless(res,l) \
1040 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
1041 #define ffetarget_convert_logical1_logical2(res,l) (*(res) = (l), FFEBAD)
1042 #define ffetarget_convert_logical1_logical3(res,l) (*(res) = (l), FFEBAD)
1043 #define ffetarget_convert_logical1_logical4(res,l) (*(res) = (l), FFEBAD)
1044 #define ffetarget_convert_logical1_integer1(res,l) (*(res) = (l), FFEBAD)
1045 #define ffetarget_convert_logical1_integer2(res,l) (*(res) = (l), FFEBAD)
1046 #define ffetarget_convert_logical1_integer3(res,l) (*(res) = (l), FFEBAD)
1047 #define ffetarget_convert_logical1_integer4(res,l) (*(res) = (l), FFEBAD)
1048 #define ffetarget_convert_logical2_character1(res,l) \
1049 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
1050 #define ffetarget_convert_logical2_hollerith(res,l) \
1051 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
1052 #define ffetarget_convert_logical2_typeless(res,l) \
1053 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
1054 #define ffetarget_convert_logical2_logical1(res,l) (*(res) = (l), FFEBAD)
1055 #define ffetarget_convert_logical2_logical3(res,l) (*(res) = (l), FFEBAD)
1056 #define ffetarget_convert_logical2_logical4(res,l) (*(res) = (l), FFEBAD)
1057 #define ffetarget_convert_logical2_integer1(res,l) (*(res) = (l), FFEBAD)
1058 #define ffetarget_convert_logical2_integer2(res,l) (*(res) = (l), FFEBAD)
1059 #define ffetarget_convert_logical2_integer3(res,l) (*(res) = (l), FFEBAD)
1060 #define ffetarget_convert_logical2_integer4(res,l) (*(res) = (l), FFEBAD)
1061 #define ffetarget_convert_logical3_character1(res,l) \
1062 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
1063 #define ffetarget_convert_logical3_hollerith(res,l) \
1064 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
1065 #define ffetarget_convert_logical3_typeless(res,l) \
1066 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
1067 #define ffetarget_convert_logical3_logical1(res,l) (*(res) = (l), FFEBAD)
1068 #define ffetarget_convert_logical3_logical2(res,l) (*(res) = (l), FFEBAD)
1069 #define ffetarget_convert_logical3_logical4(res,l) (*(res) = (l), FFEBAD)
1070 #define ffetarget_convert_logical3_integer1(res,l) (*(res) = (l), FFEBAD)
1071 #define ffetarget_convert_logical3_integer2(res,l) (*(res) = (l), FFEBAD)
1072 #define ffetarget_convert_logical3_integer3(res,l) (*(res) = (l), FFEBAD)
1073 #define ffetarget_convert_logical3_integer4(res,l) (*(res) = (l), FFEBAD)
1074 #define ffetarget_convert_logical4_character1(res,l) \
1075 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
1076 #define ffetarget_convert_logical4_hollerith(res,l) \
1077 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
1078 #define ffetarget_convert_logical4_typeless(res,l) \
1079 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
1080 #define ffetarget_convert_logical4_logical1(res,l) (*(res) = (l), FFEBAD)
1081 #define ffetarget_convert_logical4_logical2(res,l) (*(res) = (l), FFEBAD)
1082 #define ffetarget_convert_logical4_logical3(res,l) (*(res) = (l), FFEBAD)
1083 #define ffetarget_convert_logical4_integer1(res,l) (*(res) = (l), FFEBAD)
1084 #define ffetarget_convert_logical4_integer2(res,l) (*(res) = (l), FFEBAD)
1085 #define ffetarget_convert_logical4_integer3(res,l) (*(res) = (l), FFEBAD)
1086 #define ffetarget_convert_logical4_integer4(res,l) (*(res) = (l), FFEBAD)
1087 #define ffetarget_convert_integer1_character1(res,l) \
1088 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
1089 #define ffetarget_convert_integer1_hollerith(res,l) \
1090 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
1091 #define ffetarget_convert_integer1_typeless(res,l) \
1092 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
1093 #define ffetarget_convert_integer1_integer2(res,l) (*(res) = (l), FFEBAD)
1094 #define ffetarget_convert_integer1_integer3(res,l) (*(res) = (l), FFEBAD)
1095 #define ffetarget_convert_integer1_integer4(res,l) (*(res) = (l), FFEBAD)
1096 #define ffetarget_convert_integer1_logical1(res,l) (*(res) = (l), FFEBAD)
1097 #define ffetarget_convert_integer1_logical2(res,l) (*(res) = (l), FFEBAD)
1098 #define ffetarget_convert_integer1_logical3(res,l) (*(res) = (l), FFEBAD)
1099 #define ffetarget_convert_integer1_logical4(res,l) (*(res) = (l), FFEBAD)
1100 #define ffetarget_convert_integer1_real1(res,l) \
1101 ({ REAL_VALUE_TYPE lr; \
1102 lr = ffetarget_cvt_r1_to_rv_ (l); \
1103 REAL_VALUE_TO_INT (&ffetarget_long_val_, &ffetarget_long_junk_, lr); \
1104 *(res) = ffetarget_long_val_; \
1106 #define ffetarget_convert_integer1_real2(res,l) \
1107 ({ REAL_VALUE_TYPE lr; \
1108 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1109 REAL_VALUE_TO_INT (&ffetarget_long_val_, &ffetarget_long_junk_, lr); \
1110 *(res) = ffetarget_long_val_; \
1112 #define ffetarget_convert_integer1_complex1(res,l) \
1113 ({ REAL_VALUE_TYPE lr; \
1114 lr = ffetarget_cvt_r1_to_rv_ ((l).real); \
1115 REAL_VALUE_TO_INT (&ffetarget_long_val_, &ffetarget_long_junk_, lr); \
1116 *(res) = ffetarget_long_val_; \
1118 #define ffetarget_convert_integer1_complex2(res,l) \
1119 ({ REAL_VALUE_TYPE lr; \
1120 lr = ffetarget_cvt_r2_to_rv_ (&((l).real.v[0])); \
1121 REAL_VALUE_TO_INT (&ffetarget_long_val_, &ffetarget_long_junk_, lr); \
1122 *(res) = ffetarget_long_val_; \
1124 #define ffetarget_convert_real1_character1(res,l) \
1125 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
1126 #define ffetarget_convert_real1_hollerith(res,l) \
1127 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
1128 #define ffetarget_convert_real1_integer2(res,l) \
1129 ffetarget_convert_real1_integer1(res,l)
1130 #define ffetarget_convert_real1_integer3(res,l) \
1131 ffetarget_convert_real1_integer1(res,l)
1132 #define ffetarget_convert_real1_integer4(res,l) FFEBAD_NOCANDO
1133 #define ffetarget_convert_real1_typeless(res,l) \
1134 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
1135 #define ffetarget_convert_real1_complex1(res,l) (*(res) = (l).real, FFEBAD)
1136 #define ffetarget_convert_real1_complex2(res,l) \
1137 ffetarget_convert_real1_real2 ((res), (l).real)
1138 #define ffetarget_convert_real1_integer1(res,l) \
1139 ({ REAL_VALUE_TYPE resr; \
1140 ffetargetInteger1 lf = (l); \
1141 FFETARGET_REAL_VALUE_FROM_INT_ (resr, lf, 1); \
1142 ffetarget_cvt_rv_to_r1_ (resr, *(res)); \
1144 #define ffetarget_convert_real1_real2(res,l) \
1145 ({ REAL_VALUE_TYPE lr; \
1146 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1147 ffetarget_cvt_rv_to_r1_ (lr, *(res)); \
1149 #define ffetarget_convert_real2_character1(res,l) \
1150 ffetarget_convert_any_character1_ ((char *) (res), sizeof(*(res)), l)
1151 #define ffetarget_convert_real2_hollerith(res,l) \
1152 ffetarget_convert_any_hollerith_ ((char *) (res), sizeof(*(res)), l)
1153 #define ffetarget_convert_real2_integer2(res,l) \
1154 ffetarget_convert_real2_integer1(res,l)
1155 #define ffetarget_convert_real2_integer3(res,l) \
1156 ffetarget_convert_real2_integer1(res,l)
1157 #define ffetarget_convert_real2_integer4(res,l) FFEBAD_NOCANDO
1158 #define ffetarget_convert_real2_typeless(res,l) \
1159 ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
1160 #define ffetarget_convert_real2_complex1(res,l) \
1161 ffetarget_convert_real2_real1 ((res), (l).real)
1162 #define ffetarget_convert_real2_complex2(res,l) (*(res) = (l).real, FFEBAD)
1163 #define ffetarget_convert_real2_integer(res,l) \
1164 ({ REAL_VALUE_TYPE resr; \
1165 ffetargetInteger1 lf = (l); \
1166 FFETARGET_REAL_VALUE_FROM_INT_ (resr, lf, 2); \
1167 ffetarget_cvt_rv_to_r2_ (resr, &((res)->v[0])); \
1169 #define ffetarget_convert_real2_integer1 ffetarget_convert_real2_integer
1170 #define ffetarget_convert_real2_real1(res,l) \
1171 ({ REAL_VALUE_TYPE lr; \
1172 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1173 ffetarget_cvt_rv_to_r2_ (lr, &((res)->v[0])); \
1175 #define ffetarget_divide_integer1(res,l,r) \
1176 (((r) == 0) ? (*(res) = 0, FFEBAD_DIV_BY_ZERO) \
1177 : (*(res) = (l) / (r), FFEBAD))
1178 #define ffetarget_divide_integer2(res,l,r) \
1179 ffetarget_divide_integer1(res,l,r)
1180 #define ffetarget_divide_integer3(res,l,r) \
1181 ffetarget_divide_integer1(res,l,r)
1182 #define ffetarget_divide_integer4(res,l,r) \
1183 ffetarget_divide_integer1(res,l,r)
1184 #define ffetarget_divide_real1(res,l,r) \
1185 ({ REAL_VALUE_TYPE lr, rr, resr; \
1186 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1187 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1188 REAL_VALUES_EQUAL (rr, dconst0) \
1189 ? ({ ffetarget_cvt_rv_to_r1_ (dconst0, *(res)); \
1190 FFEBAD_DIV_BY_ZERO; \
1192 : ({ REAL_ARITHMETIC (resr, RDIV_EXPR, lr, rr); \
1193 ffetarget_cvt_rv_to_r1_ (resr, *(res)); \
1197 #define ffetarget_divide_real2(res,l,r) \
1198 ({ REAL_VALUE_TYPE lr, rr, resr; \
1199 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1200 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1201 REAL_VALUES_EQUAL (rr, dconst0) \
1202 ? ({ ffetarget_cvt_rv_to_r2_ (dconst0, &((res)->v[0])); \
1203 FFEBAD_DIV_BY_ZERO; \
1205 : ({ REAL_ARITHMETIC (resr, RDIV_EXPR, lr, rr); \
1206 ffetarget_cvt_rv_to_r2_ (resr, &((res)->v[0])); \
1210 #define ffetarget_eq_complex1(res,l,r) \
1211 ({ REAL_VALUE_TYPE lr, li, rr, ri; \
1212 lr = ffetarget_cvt_r1_to_rv_ ((l).real); \
1213 li = ffetarget_cvt_r1_to_rv_ ((l).imaginary); \
1214 rr = ffetarget_cvt_r1_to_rv_ ((r).real); \
1215 ri = ffetarget_cvt_r1_to_rv_ ((r).imaginary); \
1216 *(res) = (REAL_VALUES_EQUAL (lr, rr) && REAL_VALUES_EQUAL (li, ri)) \
1219 #define ffetarget_eq_complex2(res,l,r) \
1220 ({ REAL_VALUE_TYPE lr, li, rr, ri; \
1221 lr = ffetarget_cvt_r2_to_rv_ (&((l).real.v[0])); \
1222 li = ffetarget_cvt_r2_to_rv_ (&((l).imaginary.v[0])); \
1223 rr = ffetarget_cvt_r2_to_rv_ (&((r).real.v[0])); \
1224 ri = ffetarget_cvt_r2_to_rv_ (&((r).imaginary.v[0])); \
1225 *(res) = (REAL_VALUES_EQUAL (lr, rr) && REAL_VALUES_EQUAL (li, ri)) \
1228 #define ffetarget_eq_integer1(res,l,r) \
1229 (*(res) = ((l) == (r)) ? TRUE : FALSE, FFEBAD)
1230 #define ffetarget_eq_integer2(res,l,r) \
1231 (*(res) = ((l) == (r)) ? TRUE : FALSE, FFEBAD)
1232 #define ffetarget_eq_integer3(res,l,r) \
1233 (*(res) = ((l) == (r)) ? TRUE : FALSE, FFEBAD)
1234 #define ffetarget_eq_integer4(res,l,r) \
1235 (*(res) = ((l) == (r)) ? TRUE : FALSE, FFEBAD)
1236 #define ffetarget_eq_real1(res,l,r) \
1237 ({ REAL_VALUE_TYPE lr, rr; \
1238 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1239 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1240 *(res) = REAL_VALUES_EQUAL (lr, rr) ? TRUE : FALSE; \
1242 #define ffetarget_eq_real2(res,l,r) \
1243 ({ REAL_VALUE_TYPE lr, rr; \
1244 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1245 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1246 *(res) = REAL_VALUES_EQUAL (lr, rr) ? TRUE : FALSE; \
1248 #define ffetarget_eqv_integer1(res,l,r) (*(res) = (l) ^ ~(r), FFEBAD)
1249 #define ffetarget_eqv_integer2(res,l,r) (*(res) = (l) ^ ~(r), FFEBAD)
1250 #define ffetarget_eqv_integer3(res,l,r) (*(res) = (l) ^ ~(r), FFEBAD)
1251 #define ffetarget_eqv_integer4(res,l,r) (*(res) = (l) ^ ~(r), FFEBAD)
1252 #define ffetarget_eqv_logical1(res,l,r) (*(res) = (l) == (r), FFEBAD)
1253 #define ffetarget_eqv_logical2(res,l,r) (*(res) = (l) == (r), FFEBAD)
1254 #define ffetarget_eqv_logical3(res,l,r) (*(res) = (l) == (r), FFEBAD)
1255 #define ffetarget_eqv_logical4(res,l,r) (*(res) = (l) == (r), FFEBAD)
1256 #define ffetarget_ge_integer1(res,l,r) \
1257 (*(res) = ((l) >= (r)) ? TRUE : FALSE, FFEBAD)
1258 #define ffetarget_ge_integer2(res,l,r) \
1259 (*(res) = ((l) >= (r)) ? TRUE : FALSE, FFEBAD)
1260 #define ffetarget_ge_integer3(res,l,r) \
1261 (*(res) = ((l) >= (r)) ? TRUE : FALSE, FFEBAD)
1262 #define ffetarget_ge_integer4(res,l,r) \
1263 (*(res) = ((l) >= (r)) ? TRUE : FALSE, FFEBAD)
1264 #define ffetarget_ge_real1(res,l,r) \
1265 ({ REAL_VALUE_TYPE lr, rr; \
1266 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1267 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1268 *(res) = REAL_VALUES_LESS (lr, rr) ? FALSE : TRUE; \
1270 #define ffetarget_ge_real2(res,l,r) \
1271 ({ REAL_VALUE_TYPE lr, rr; \
1272 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1273 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1274 *(res) = REAL_VALUES_LESS (lr, rr) ? FALSE : TRUE; \
1276 #define ffetarget_gt_integer1(res,l,r) \
1277 (*(res) = ((l) > (r)) ? TRUE : FALSE, FFEBAD)
1278 #define ffetarget_gt_integer2(res,l,r) \
1279 (*(res) = ((l) > (r)) ? TRUE : FALSE, FFEBAD)
1280 #define ffetarget_gt_integer3(res,l,r) \
1281 (*(res) = ((l) > (r)) ? TRUE : FALSE, FFEBAD)
1282 #define ffetarget_gt_integer4(res,l,r) \
1283 (*(res) = ((l) > (r)) ? TRUE : FALSE, FFEBAD)
1284 #define ffetarget_gt_real1(res,l,r) \
1285 ({ REAL_VALUE_TYPE lr, rr; \
1286 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1287 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1288 *(res) = (REAL_VALUES_LESS (lr, rr) || REAL_VALUES_EQUAL (lr, rr)) \
1291 #define ffetarget_gt_real2(res,l,r) \
1292 ({ REAL_VALUE_TYPE lr, rr; \
1293 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1294 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1295 *(res) = (REAL_VALUES_LESS (lr, rr) || REAL_VALUES_EQUAL (lr, rr)) \
1298 #define ffetarget_hexxmil(v,t) ffetarget_typeless_hex (v, t)
1299 #define ffetarget_hexxvxt(v,t) ffetarget_typeless_hex (v, t)
1300 #define ffetarget_hexzmil(v,t) ffetarget_typeless_hex (v, t)
1301 #define ffetarget_hexzvxt(v,t) ffetarget_typeless_hex (v, t)
1302 #define ffetarget_init_0()
1303 #define ffetarget_init_1()
1304 #define ffetarget_init_2()
1305 #define ffetarget_init_3()
1306 #define ffetarget_init_4()
1307 #ifdef FFETARGET_32bit_longs
1308 #define ffetarget_integerdefault_is_magical(i) \
1309 (((unsigned long int) i) == FFETARGET_integerBIG_MAGICAL)
1311 #define ffetarget_integerdefault_is_magical(i) \
1312 (((unsigned int) i) == FFETARGET_integerBIG_MAGICAL)
1314 #define ffetarget_iszero_real1(l) \
1315 ({ REAL_VALUE_TYPE lr; \
1316 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1317 REAL_VALUES_EQUAL (lr, dconst0); \
1319 #define ffetarget_iszero_real2(l) \
1320 ({ REAL_VALUE_TYPE lr; \
1321 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1322 REAL_VALUES_EQUAL (lr, dconst0); \
1324 #define ffetarget_iszero_typeless(l) ((l) == 0)
1325 #define ffetarget_logical1(v,truth) (*(v) = truth ? 1 : 0)
1326 #define ffetarget_le_integer1(res,l,r) \
1327 (*(res) = ((l) <= (r)) ? TRUE : FALSE, FFEBAD)
1328 #define ffetarget_le_integer2(res,l,r) \
1329 (*(res) = ((l) <= (r)) ? TRUE : FALSE, FFEBAD)
1330 #define ffetarget_le_integer3(res,l,r) \
1331 (*(res) = ((l) <= (r)) ? TRUE : FALSE, FFEBAD)
1332 #define ffetarget_le_integer4(res,l,r) \
1333 (*(res) = ((l) <= (r)) ? TRUE : FALSE, FFEBAD)
1334 #define ffetarget_le_real1(res,l,r) \
1335 ({ REAL_VALUE_TYPE lr, rr; \
1336 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1337 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1338 *(res) = (REAL_VALUES_LESS (lr, rr) || REAL_VALUES_EQUAL (lr, rr)) \
1341 #define ffetarget_le_real2(res,l,r) \
1342 ({ REAL_VALUE_TYPE lr, rr; \
1343 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1344 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1345 *(res) = (REAL_VALUES_LESS (lr, rr) || REAL_VALUES_EQUAL (lr, rr)) \
1348 #define ffetarget_lt_integer1(res,l,r) \
1349 (*(res) = ((l) < (r)) ? TRUE : FALSE, FFEBAD)
1350 #define ffetarget_lt_integer2(res,l,r) \
1351 (*(res) = ((l) < (r)) ? TRUE : FALSE, FFEBAD)
1352 #define ffetarget_lt_integer3(res,l,r) \
1353 (*(res) = ((l) < (r)) ? TRUE : FALSE, FFEBAD)
1354 #define ffetarget_lt_integer4(res,l,r) \
1355 (*(res) = ((l) < (r)) ? TRUE : FALSE, FFEBAD)
1356 #define ffetarget_lt_real1(res,l,r) \
1357 ({ REAL_VALUE_TYPE lr, rr; \
1358 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1359 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1360 *(res) = REAL_VALUES_LESS (lr, rr) ? TRUE : FALSE; \
1362 #define ffetarget_lt_real2(res,l,r) \
1363 ({ REAL_VALUE_TYPE lr, rr; \
1364 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1365 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1366 *(res) = REAL_VALUES_LESS (lr, rr) ? TRUE : FALSE; \
1368 #define ffetarget_length_character1(c) ((c).length)
1369 #define ffetarget_length_characterdefault ffetarget_length_character1
1370 #define ffetarget_make_real1(res,lr) \
1371 ffetarget_cvt_rv_to_r1_ ((lr), *(res))
1372 #define ffetarget_make_real2(res,lr) \
1373 ffetarget_cvt_rv_to_r2_ ((lr), &((res)->v[0]))
1374 #define ffetarget_multiply_integer1(res,l,r) (*(res) = (l) * (r), FFEBAD)
1375 #define ffetarget_multiply_integer2(res,l,r) (*(res) = (l) * (r), FFEBAD)
1376 #define ffetarget_multiply_integer3(res,l,r) (*(res) = (l) * (r), FFEBAD)
1377 #define ffetarget_multiply_integer4(res,l,r) (*(res) = (l) * (r), FFEBAD)
1378 #define ffetarget_multiply_real1(res,l,r) \
1379 ({ REAL_VALUE_TYPE lr, rr, resr; \
1380 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1381 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1382 REAL_ARITHMETIC (resr, MULT_EXPR, lr, rr); \
1383 ffetarget_cvt_rv_to_r1_ (resr, *(res)); \
1385 #define ffetarget_multiply_real2(res,l,r) \
1386 ({ REAL_VALUE_TYPE lr, rr, resr; \
1387 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1388 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1389 REAL_ARITHMETIC (resr, MULT_EXPR, lr, rr); \
1390 ffetarget_cvt_rv_to_r2_ (resr, &((res)->v[0])); \
1392 #define ffetarget_ne_complex1(res,l,r) \
1393 ({ REAL_VALUE_TYPE lr, li, rr, ri; \
1394 lr = ffetarget_cvt_r1_to_rv_ ((l).real); \
1395 li = ffetarget_cvt_r1_to_rv_ ((l).imaginary); \
1396 rr = ffetarget_cvt_r1_to_rv_ ((r).real); \
1397 ri = ffetarget_cvt_r1_to_rv_ ((r).imaginary); \
1398 *(res) = (REAL_VALUES_EQUAL (lr, rr) && REAL_VALUES_EQUAL (li, ri)) \
1401 #define ffetarget_ne_complex2(res,l,r) \
1402 ({ REAL_VALUE_TYPE lr, li, rr, ri; \
1403 lr = ffetarget_cvt_r2_to_rv_ (&((l).real.v[0])); \
1404 li = ffetarget_cvt_r2_to_rv_ (&((l).imaginary.v[0])); \
1405 rr = ffetarget_cvt_r2_to_rv_ (&((r).real.v[0])); \
1406 ri = ffetarget_cvt_r2_to_rv_ (&((r).imaginary.v[0])); \
1407 *(res) = (REAL_VALUES_EQUAL (lr, rr) && REAL_VALUES_EQUAL (li, ri)) \
1410 #define ffetarget_ne_integer1(res,l,r) \
1411 (*(res) = ((l) != (r)) ? TRUE : FALSE, FFEBAD)
1412 #define ffetarget_ne_integer2(res,l,r) \
1413 (*(res) = ((l) != (r)) ? TRUE : FALSE, FFEBAD)
1414 #define ffetarget_ne_integer3(res,l,r) \
1415 (*(res) = ((l) != (r)) ? TRUE : FALSE, FFEBAD)
1416 #define ffetarget_ne_integer4(res,l,r) \
1417 (*(res) = ((l) != (r)) ? TRUE : FALSE, FFEBAD)
1418 #define ffetarget_ne_real1(res,l,r) \
1419 ({ REAL_VALUE_TYPE lr, rr; \
1420 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1421 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1422 *(res) = REAL_VALUES_EQUAL (lr, rr) ? FALSE : TRUE; \
1424 #define ffetarget_ne_real2(res,l,r) \
1425 ({ REAL_VALUE_TYPE lr, rr; \
1426 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1427 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1428 *(res) = REAL_VALUES_EQUAL (lr, rr) ? FALSE : TRUE; \
1430 #define ffetarget_neqv_integer1(res,l,r) (*(res) = (l) ^ (r), FFEBAD)
1431 #define ffetarget_neqv_integer2(res,l,r) (*(res) = (l) ^ (r), FFEBAD)
1432 #define ffetarget_neqv_integer3(res,l,r) (*(res) = (l) ^ (r), FFEBAD)
1433 #define ffetarget_neqv_integer4(res,l,r) (*(res) = (l) ^ (r), FFEBAD)
1434 #define ffetarget_neqv_logical1(res,l,r) (*(res) = (l) != (r), FFEBAD)
1435 #define ffetarget_neqv_logical2(res,l,r) (*(res) = (l) != (r), FFEBAD)
1436 #define ffetarget_neqv_logical3(res,l,r) (*(res) = (l) != (r), FFEBAD)
1437 #define ffetarget_neqv_logical4(res,l,r) (*(res) = (l) != (r), FFEBAD)
1438 #define ffetarget_not_integer1(res,l) (*(res) = ~(l), FFEBAD)
1439 #define ffetarget_not_integer2(res,l) (*(res) = ~(l), FFEBAD)
1440 #define ffetarget_not_integer3(res,l) (*(res) = ~(l), FFEBAD)
1441 #define ffetarget_not_integer4(res,l) (*(res) = ~(l), FFEBAD)
1442 #define ffetarget_not_logical1(res,l) (*(res) = !(l), FFEBAD)
1443 #define ffetarget_not_logical2(res,l) (*(res) = !(l), FFEBAD)
1444 #define ffetarget_not_logical3(res,l) (*(res) = !(l), FFEBAD)
1445 #define ffetarget_not_logical4(res,l) (*(res) = !(l), FFEBAD)
1446 #define ffetarget_octalmil(v,t) ffetarget_typeless_octal (v, t)
1447 #define ffetarget_octalvxt(v,t) ffetarget_typeless_octal (v, t)
1448 #define ffetarget_offset(res,l) (*(res) = (l), TRUE) /* Overflow? */
1449 #define ffetarget_offset_add(res,l,r) (*(res) = (l) + (r), TRUE) /* Overflow? */
1450 #define ffetarget_offset_charsize(res,l,u) (*(res) = (l) * (u), TRUE) /* Ov? */
1451 #define ffetarget_offset_multiply(res,l,r) (*(res) = (l) * (r), TRUE) /* Ov? */
1452 #define ffetarget_offset_overflow(text) ((void) 0) /* ~~no message? */
1453 #define ffetarget_or_integer1(res,l,r) (*(res) = (l) | (r), FFEBAD)
1454 #define ffetarget_or_integer2(res,l,r) (*(res) = (l) | (r), FFEBAD)
1455 #define ffetarget_or_integer3(res,l,r) (*(res) = (l) | (r), FFEBAD)
1456 #define ffetarget_or_integer4(res,l,r) (*(res) = (l) | (r), FFEBAD)
1457 #define ffetarget_or_logical1(res,l,r) (*(res) = (l) || (r), FFEBAD)
1458 #define ffetarget_or_logical2(res,l,r) (*(res) = (l) || (r), FFEBAD)
1459 #define ffetarget_or_logical3(res,l,r) (*(res) = (l) || (r), FFEBAD)
1460 #define ffetarget_or_logical4(res,l,r) (*(res) = (l) || (r), FFEBAD)
1461 #define ffetarget_print_binarymil(f,v) ffetarget_print_binary (f, v)
1462 #define ffetarget_print_binaryvxt(f,v) ffetarget_print_binary (f, v)
1463 #define ffetarget_print_hexxmil(f,v) ffetarget_print_hex (f, v)
1464 #define ffetarget_print_hexxvxt(f,v) ffetarget_print_hex (f, v)
1465 #define ffetarget_print_hexzmil(f,v) ffetarget_print_hex (f, v)
1466 #define ffetarget_print_hexzvxt(f,v) ffetarget_print_hex (f, v)
1467 #define ffetarget_print_integer1(f,v) \
1468 fprintf ((f), "%" ffetargetInteger1_f "d", (v))
1469 #define ffetarget_print_integer2(f,v) \
1470 fprintf ((f), "%" ffetargetInteger2_f "d", (v))
1471 #define ffetarget_print_integer3(f,v) \
1472 fprintf ((f), "%" ffetargetInteger3_f "d", (v))
1473 #define ffetarget_print_integer4(f,v) \
1474 fprintf ((f), "%" ffetargetInteger4_f "d", (v))
1475 #define ffetarget_print_logical1(f,v) \
1476 fprintf ((f), "%" ffetargetLogical1_f "d", (v))
1477 #define ffetarget_print_logical2(f,v) \
1478 fprintf ((f), "%" ffetargetLogical2_f "d", (v))
1479 #define ffetarget_print_logical3(f,v) \
1480 fprintf ((f), "%" ffetargetLogical3_f "d", (v))
1481 #define ffetarget_print_logical4(f,v) \
1482 fprintf ((f), "%" ffetargetLogical4_f "d", (v))
1483 #define ffetarget_print_octalmil(f,v) ffetarget_print_octal(f,v)
1484 #define ffetarget_print_octalvxt(f,v) ffetarget_print_octal(f,v)
1485 #define ffetarget_print_real1(f,l) \
1486 ({ REAL_VALUE_TYPE lr; \
1487 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1488 REAL_VALUE_TO_DECIMAL (lr, bad_fmt_val??, ffetarget_string_); \
1489 fputs (ffetarget_string_, (f)); \
1491 #define ffetarget_print_real2(f,l) \
1492 ({ REAL_VALUE_TYPE lr; \
1493 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1494 REAL_VALUE_TO_DECIMAL (lr, bad_fmt_val??, ffetarget_string_); \
1495 fputs (ffetarget_string_, (f)); \
1497 #define ffetarget_real1_one(res) ffetarget_cvt_rv_to_r1_ (dconst1, *(res))
1498 #define ffetarget_real2_one(res) ffetarget_cvt_rv_to_r2_ (dconst1, &((res)->v[0]))
1499 #define ffetarget_real1_two(res) ffetarget_cvt_rv_to_r1_ (dconst2, *(res))
1500 #define ffetarget_real2_two(res) ffetarget_cvt_rv_to_r2_ (dconst2, &((res)->v[0]))
1501 #define ffetarget_real1_zero(res) ffetarget_cvt_rv_to_r1_ (dconst0, *(res))
1502 #define ffetarget_real2_zero(res) ffetarget_cvt_rv_to_r2_ (dconst0, &((res)->v[0]))
1503 #define ffetarget_size_typeless_binary(t) ((ffetarget_num_digits_(t) + 7) / 8)
1504 #define ffetarget_size_typeless_octal(t) \
1505 ((ffetarget_num_digits_(t) * 3 + 7) / 8)
1506 #define ffetarget_size_typeless_hex(t) ((ffetarget_num_digits_(t) + 1) / 2)
1507 #define ffetarget_subtract_complex1(res,l,r) \
1508 ({ REAL_VALUE_TYPE lr, li, rr, ri, resr, resi; \
1509 lr = ffetarget_cvt_r1_to_rv_ ((l).real); \
1510 li = ffetarget_cvt_r1_to_rv_ ((l).imaginary); \
1511 rr = ffetarget_cvt_r1_to_rv_ ((r).real); \
1512 ri = ffetarget_cvt_r1_to_rv_ ((r).imaginary); \
1513 REAL_ARITHMETIC (resr, MINUS_EXPR, lr, rr); \
1514 REAL_ARITHMETIC (resi, MINUS_EXPR, li, ri); \
1515 ffetarget_cvt_rv_to_r1_ (resr, (res)->real); \
1516 ffetarget_cvt_rv_to_r1_ (resi, (res)->imaginary); \
1518 #define ffetarget_subtract_complex2(res,l,r) \
1519 ({ REAL_VALUE_TYPE lr, li, rr, ri, resr, resi; \
1520 lr = ffetarget_cvt_r2_to_rv_ (&((l).real.v[0])); \
1521 li = ffetarget_cvt_r2_to_rv_ (&((l).imaginary.v[0])); \
1522 rr = ffetarget_cvt_r2_to_rv_ (&((r).real.v[0])); \
1523 ri = ffetarget_cvt_r2_to_rv_ (&((r).imaginary.v[0])); \
1524 REAL_ARITHMETIC (resr, MINUS_EXPR, lr, rr); \
1525 REAL_ARITHMETIC (resi, MINUS_EXPR, li, ri); \
1526 ffetarget_cvt_rv_to_r2_ (resr, &((res)->real.v[0])); \
1527 ffetarget_cvt_rv_to_r2_ (resi, &((res)->imaginary.v[0])); \
1529 #define ffetarget_subtract_integer1(res,l,r) (*(res) = (l) - (r), FFEBAD)
1530 #define ffetarget_subtract_integer2(res,l,r) (*(res) = (l) - (r), FFEBAD)
1531 #define ffetarget_subtract_integer3(res,l,r) (*(res) = (l) - (r), FFEBAD)
1532 #define ffetarget_subtract_integer4(res,l,r) (*(res) = (l) - (r), FFEBAD)
1533 #define ffetarget_subtract_real1(res,l,r) \
1534 ({ REAL_VALUE_TYPE lr, rr, resr; \
1535 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1536 rr = ffetarget_cvt_r1_to_rv_ ((r)); \
1537 REAL_ARITHMETIC (resr, MINUS_EXPR, lr, rr); \
1538 ffetarget_cvt_rv_to_r1_ (resr, *(res)); \
1540 #define ffetarget_subtract_real2(res,l,r) \
1541 ({ REAL_VALUE_TYPE lr, rr, resr; \
1542 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1543 rr = ffetarget_cvt_r2_to_rv_ (&((r).v[0])); \
1544 REAL_ARITHMETIC (resr, MINUS_EXPR, lr, rr); \
1545 ffetarget_cvt_rv_to_r2_ (resr, &((res)->v[0])); \
1547 #define ffetarget_terminate_0()
1548 #define ffetarget_terminate_1()
1549 #define ffetarget_terminate_2()
1550 #define ffetarget_terminate_3()
1551 #define ffetarget_terminate_4()
1552 #define ffetarget_text_character1(c) ((c).text)
1553 #define ffetarget_text_characterdefault ffetarget_text_character1
1554 #define ffetarget_uminus_complex1(res,l) \
1555 ({ REAL_VALUE_TYPE lr, li, resr, resi; \
1556 lr = ffetarget_cvt_r1_to_rv_ ((l).real); \
1557 li = ffetarget_cvt_r1_to_rv_ ((l).imaginary); \
1558 resr = REAL_VALUE_NEGATE (lr); \
1559 resi = REAL_VALUE_NEGATE (li); \
1560 ffetarget_cvt_rv_to_r1_ (resr, (res)->real); \
1561 ffetarget_cvt_rv_to_r1_ (resi, (res)->imaginary); \
1563 #define ffetarget_uminus_complex2(res,l) \
1564 ({ REAL_VALUE_TYPE lr, li, resr, resi; \
1565 lr = ffetarget_cvt_r2_to_rv_ (&((l).real.v[0])); \
1566 li = ffetarget_cvt_r2_to_rv_ (&((l).imaginary.v[0])); \
1567 resr = REAL_VALUE_NEGATE (lr); \
1568 resi = REAL_VALUE_NEGATE (li); \
1569 ffetarget_cvt_rv_to_r2_ (resr, &((res)->real.v[0])); \
1570 ffetarget_cvt_rv_to_r2_ (resi, &((res)->imaginary.v[0])); \
1572 #define ffetarget_uminus_integer1(res,l) (*(res) = -(l), FFEBAD)
1573 #define ffetarget_uminus_integer2(res,l) (*(res) = -(l), FFEBAD)
1574 #define ffetarget_uminus_integer3(res,l) (*(res) = -(l), FFEBAD)
1575 #define ffetarget_uminus_integer4(res,l) (*(res) = -(l), FFEBAD)
1576 #define ffetarget_uminus_real1(res,l) \
1577 ({ REAL_VALUE_TYPE lr, resr; \
1578 lr = ffetarget_cvt_r1_to_rv_ ((l)); \
1579 resr = REAL_VALUE_NEGATE (lr); \
1580 ffetarget_cvt_rv_to_r1_ (resr, *(res)); \
1582 #define ffetarget_uminus_real2(res,l) \
1583 ({ REAL_VALUE_TYPE lr, resr; \
1584 lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
1585 resr = REAL_VALUE_NEGATE (lr); \
1586 ffetarget_cvt_rv_to_r2_ (resr, &((res)->v[0])); \
1588 #define ffetarget_value_real1(lr) ffetarget_cvt_r1_to_rv_ ((lr))
1589 #define ffetarget_value_real2(lr) ffetarget_cvt_r2_to_rv_ (&((lr).v[0]))
1590 #define ffetarget_xor_integer1(res,l,r) (*(res) = (l) ^ (r), FFEBAD)
1591 #define ffetarget_xor_integer2(res,l,r) (*(res) = (l) ^ (r), FFEBAD)
1592 #define ffetarget_xor_integer3(res,l,r) (*(res) = (l) ^ (r), FFEBAD)
1593 #define ffetarget_xor_integer4(res,l,r) (*(res) = (l) ^ (r), FFEBAD)
1594 #define ffetarget_xor_logical1(res,l,r) (*(res) = (l) != (r), FFEBAD)
1595 #define ffetarget_xor_logical2(res,l,r) (*(res) = (l) != (r), FFEBAD)
1596 #define ffetarget_xor_logical3(res,l,r) (*(res) = (l) != (r), FFEBAD)
1597 #define ffetarget_xor_logical4(res,l,r) (*(res) = (l) != (r), FFEBAD)
1599 /* End of #include file. */
1601 #endif /* ! GCC_F_TARGET_H */