fixing stuff
[dyninst.git] / codeCoverage / sparc-sun-solaris2.8 / tests / cc1 / 1explow.i
1
2 extern int target_flags;
3
4 enum reg_class { NO_REGS, LO_FPA_REGS, FPA_REGS, FP_REGS,
5   FP_OR_FPA_REGS, DATA_REGS, DATA_OR_FPA_REGS, DATA_OR_FP_REGS,
6   DATA_OR_FP_OR_FPA_REGS, ADDR_REGS, GENERAL_REGS,
7   GENERAL_OR_FPA_REGS, GENERAL_OR_FP_REGS, ALL_REGS,
8   LIM_REG_CLASSES };
9
10 extern enum reg_class regno_reg_class[];
11
12 enum rtx_code  {
13
14   UNKNOWN , 
15
16   NIL , 
17
18   EXPR_LIST , 
19
20   INSN_LIST , 
21
22   MATCH_OPERAND , 
23
24   MATCH_DUP , 
25
26   MATCH_OPERATOR , 
27
28   DEFINE_INSN , 
29
30   DEFINE_PEEPHOLE , 
31
32   DEFINE_COMBINE , 
33
34   DEFINE_EXPAND , 
35
36   SEQUENCE , 
37
38   ADDRESS , 
39
40   INSN , 
41
42   JUMP_INSN , 
43
44   CALL_INSN , 
45
46   BARRIER , 
47
48   CODE_LABEL , 
49
50   NOTE , 
51
52   INLINE_HEADER , 
53
54   PARALLEL , 
55
56   ASM_INPUT , 
57
58   ASM_OPERANDS , 
59
60   ADDR_VEC , 
61
62   ADDR_DIFF_VEC , 
63
64   SET , 
65
66   USE , 
67
68   CLOBBER , 
69
70   CALL , 
71
72   RETURN , 
73
74   CONST_INT , 
75
76   CONST_DOUBLE , 
77
78   CONST , 
79
80   PC , 
81
82   REG , 
83
84   SUBREG , 
85
86   STRICT_LOW_PART , 
87
88   MEM , 
89
90   LABEL_REF , 
91
92   SYMBOL_REF , 
93
94   CC0 , 
95
96   QUEUED , 
97
98   IF_THEN_ELSE , 
99
100   COMPARE , 
101
102   PLUS , 
103
104   MINUS , 
105
106   NEG , 
107
108   MULT , 
109
110   DIV , 
111   MOD , 
112
113   UMULT , 
114   UDIV , 
115   UMOD , 
116
117   AND , 
118
119   IOR , 
120
121   XOR , 
122
123   NOT , 
124
125   LSHIFT , 
126   ASHIFT , 
127   ROTATE , 
128
129   ASHIFTRT , 
130   LSHIFTRT , 
131   ROTATERT , 
132
133   PRE_DEC , 
134   PRE_INC , 
135   POST_DEC , 
136   POST_INC , 
137
138   NE , 
139   EQ , 
140   GE , 
141   GT , 
142   LE , 
143   LT , 
144   GEU , 
145   GTU , 
146   LEU , 
147   LTU , 
148
149   SIGN_EXTEND , 
150
151   ZERO_EXTEND , 
152
153   TRUNCATE , 
154
155   FLOAT_EXTEND , 
156   FLOAT_TRUNCATE , 
157
158   FLOAT , 
159
160   FIX , 
161
162   UNSIGNED_FLOAT , 
163
164   UNSIGNED_FIX , 
165
166   ABS , 
167
168   SQRT , 
169
170   FFS , 
171
172   SIGN_EXTRACT , 
173
174   ZERO_EXTRACT , 
175
176   LAST_AND_UNUSED_RTX_CODE};     
177
178 extern int rtx_length[];
179
180 extern char *rtx_name[];
181
182 extern char *rtx_format[];
183
184 enum machine_mode {
185
186  VOIDmode, 
187
188  QImode,                 
189  HImode, 
190
191  PSImode, 
192  SImode, 
193  PDImode, 
194  DImode, 
195  TImode, 
196  QFmode, 
197  HFmode,                 
198  SFmode, 
199  DFmode, 
200  XFmode,         
201  TFmode, 
202  CQImode, 
203  CHImode,        
204  CSImode, 
205  CDImode, 
206  CTImode, 
207  CQFmode, 
208  CHFmode,        
209  CSFmode, 
210  CDFmode, 
211  CXFmode, 
212  CTFmode, 
213
214  BImode,         
215
216  BLKmode, 
217
218  EPmode, 
219
220 MAX_MACHINE_MODE };
221
222 extern char *mode_name[];
223
224 enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT,
225                   MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, MODE_FUNCTION };
226
227 extern enum mode_class mode_class[];
228
229 extern int mode_size[];
230
231 extern int mode_unit_size[];
232
233 typedef union rtunion_def
234 {
235   int rtint;
236   char *rtstr;
237   struct rtx_def *rtx;
238   struct rtvec_def *rtvec;
239   enum machine_mode rttype;
240 } rtunion;
241
242 typedef struct rtx_def
243 {
244
245   enum rtx_code code : 16;
246
247   enum machine_mode mode : 8;
248
249   unsigned int jump : 1;
250   unsigned int call : 1;
251
252   unsigned int unchanging : 1;
253
254   unsigned int volatil : 1;
255
256   unsigned int in_struct : 1;
257
258   unsigned int used : 1;
259
260   unsigned integrated : 1;
261
262   rtunion fld[1];
263 } *rtx;
264
265 typedef struct rtvec_def{
266   unsigned num_elem;             
267   rtunion elem[1];
268 } *rtvec;
269
270 enum reg_note { REG_DEAD = 1, REG_INC = 2, REG_EQUIV = 3, REG_WAS_0 = 4,
271                 REG_EQUAL = 5, REG_RETVAL = 6, REG_LIBCALL = 7,
272                 REG_NONNEG = 8 };
273
274 extern char *reg_note_name[];
275
276 extern char *note_insn_name[];
277
278 extern rtx rtx_alloc ();
279 extern rtvec rtvec_alloc ();
280 extern rtx find_reg_note ();
281 extern rtx gen_rtx ();
282 extern rtx copy_rtx ();
283 extern rtvec gen_rtvec ();
284 extern rtvec gen_rtvec_v ();
285 extern rtx gen_reg_rtx ();
286 extern rtx gen_label_rtx ();
287 extern rtx gen_inline_header_rtx ();
288 extern rtx gen_lowpart ();
289 extern rtx gen_highpart ();
290 extern int subreg_lowpart_p ();
291 extern rtx make_safe_from ();
292 extern rtx memory_address ();
293 extern rtx get_insns ();
294 extern rtx get_last_insn ();
295 extern rtx start_sequence ();
296 extern rtx gen_sequence ();
297 extern rtx expand_expr ();
298 extern rtx output_constant_def ();
299 extern rtx immed_real_const ();
300 extern rtx immed_real_const_1 ();
301 extern rtx immed_double_const ();
302 extern rtx force_const_double_mem ();
303 extern rtx force_const_mem ();
304 extern rtx get_parm_real_loc ();
305 extern rtx assign_stack_local ();
306 extern rtx protect_from_queue ();
307 extern void emit_queue ();
308 extern rtx emit_move_insn ();
309 extern rtx emit_insn ();
310 extern rtx emit_jump_insn ();
311 extern rtx emit_call_insn ();
312 extern rtx emit_call_insn_before ();
313 extern rtx emit_insn_before ();
314 extern rtx emit_insn_after ();
315 extern rtx emit_label ();
316 extern rtx emit_barrier ();
317 extern rtx emit_note ();
318 extern rtx emit_line_note ();
319 extern rtx emit_line_note_force ();
320 extern rtx prev_real_insn ();
321 extern rtx next_real_insn ();
322 extern rtx next_nondeleted_insn ();
323 extern rtx plus_constant ();
324 extern rtx find_equiv_reg ();
325 extern rtx delete_insn ();
326 extern rtx adj_offsetable_operand ();
327
328 extern int max_parallel;
329
330 extern int asm_noperands ();
331 extern char *decode_asm_operands ();
332
333 extern enum reg_class reg_preferred_class ();
334
335 extern rtx get_first_nonparm_insn ();
336
337 extern rtx pc_rtx;
338 extern rtx cc0_rtx;
339 extern rtx const0_rtx;
340 extern rtx const1_rtx;
341 extern rtx fconst0_rtx;
342 extern rtx dconst0_rtx;
343
344 extern rtx stack_pointer_rtx;
345 extern rtx frame_pointer_rtx;
346 extern rtx arg_pointer_rtx;
347 extern rtx struct_value_rtx;
348 extern rtx struct_value_incoming_rtx;
349 extern rtx static_chain_rtx;
350 extern rtx static_chain_incoming_rtx;
351
352 enum tree_code {
353
354   ERROR_MARK, 
355
356   IDENTIFIER_NODE, 
357
358   OP_IDENTIFIER, 
359
360   TREE_LIST, 
361
362   VOID_TYPE,     
363
364   INTEGER_TYPE, 
365
366   REAL_TYPE, 
367
368   COMPLEX_TYPE, 
369
370   ENUMERAL_TYPE, 
371
372   BOOLEAN_TYPE, 
373
374   CHAR_TYPE, 
375
376   POINTER_TYPE, 
377
378   OFFSET_TYPE, 
379
380   REFERENCE_TYPE, 
381
382   METHOD_TYPE, 
383
384   FILE_TYPE, 
385
386   ARRAY_TYPE, 
387
388   SET_TYPE, 
389
390   STRING_TYPE, 
391
392   RECORD_TYPE, 
393
394   UNION_TYPE,    
395
396   FUNCTION_TYPE, 
397
398   LANG_TYPE, 
399
400   LABEL_STMT, 
401
402   GOTO_STMT, 
403
404   RETURN_STMT, 
405
406   EXPR_STMT, 
407
408   WITH_STMT, 
409
410   LET_STMT, 
411
412   IF_STMT, 
413
414   EXIT_STMT, 
415
416   CASE_STMT, 
417
418   LOOP_STMT, 
419
420   COMPOUND_STMT, 
421
422   ASM_STMT, 
423
424   INTEGER_CST, 
425
426   REAL_CST, 
427
428   COMPLEX_CST, 
429
430   STRING_CST, 
431
432   FUNCTION_DECL, 
433   LABEL_DECL, 
434   CONST_DECL, 
435   TYPE_DECL, 
436   VAR_DECL, 
437   PARM_DECL, 
438   RESULT_DECL, 
439   FIELD_DECL, 
440   FRIEND_DECL, 
441
442   COMPONENT_REF, 
443
444   INDIRECT_REF, 
445
446   OFFSET_REF, 
447
448   BUFFER_REF, 
449
450   ARRAY_REF, 
451
452   CONSTRUCTOR, 
453
454   COMPOUND_EXPR, 
455
456   MODIFY_EXPR, 
457
458   INIT_EXPR, 
459
460   NEW_EXPR, 
461
462   DELETE_EXPR, 
463
464   COND_EXPR, 
465
466   CALL_EXPR, 
467
468   METHOD_CALL_EXPR, 
469
470   WITH_CLEANUP_EXPR, 
471
472   PLUS_EXPR, 
473   MINUS_EXPR, 
474   MULT_EXPR, 
475
476   TRUNC_DIV_EXPR, 
477
478   CEIL_DIV_EXPR, 
479
480   FLOOR_DIV_EXPR, 
481
482   ROUND_DIV_EXPR, 
483
484   TRUNC_MOD_EXPR, 
485   CEIL_MOD_EXPR, 
486   FLOOR_MOD_EXPR, 
487   ROUND_MOD_EXPR, 
488
489   RDIV_EXPR, 
490
491   FIX_TRUNC_EXPR, 
492   FIX_CEIL_EXPR, 
493   FIX_FLOOR_EXPR, 
494   FIX_ROUND_EXPR, 
495
496   FLOAT_EXPR, 
497
498   EXPON_EXPR, 
499
500   NEGATE_EXPR, 
501
502   MIN_EXPR, 
503   MAX_EXPR, 
504   ABS_EXPR, 
505   FFS_EXPR, 
506
507   LSHIFT_EXPR, 
508   RSHIFT_EXPR, 
509   LROTATE_EXPR, 
510   RROTATE_EXPR, 
511
512   BIT_IOR_EXPR, 
513   BIT_XOR_EXPR, 
514   BIT_AND_EXPR, 
515   BIT_ANDTC_EXPR, 
516   BIT_NOT_EXPR, 
517
518   TRUTH_ANDIF_EXPR, 
519   TRUTH_ORIF_EXPR, 
520   TRUTH_AND_EXPR, 
521   TRUTH_OR_EXPR, 
522   TRUTH_NOT_EXPR, 
523
524   LT_EXPR, 
525   LE_EXPR, 
526   GT_EXPR, 
527   GE_EXPR, 
528   EQ_EXPR, 
529   NE_EXPR, 
530
531   IN_EXPR, 
532   SET_LE_EXPR, 
533   CARD_EXPR, 
534   RANGE_EXPR, 
535
536   CONVERT_EXPR, 
537
538   NOP_EXPR, 
539
540   SAVE_EXPR, 
541
542   RTL_EXPR, 
543
544   ADDR_EXPR, 
545
546   REFERENCE_EXPR, 
547
548   WRAPPER_EXPR, 
549   ANTI_WRAPPER_EXPR, 
550
551   ENTRY_VALUE_EXPR, 
552
553   COMPLEX_EXPR, 
554
555   CONJ_EXPR, 
556
557   REALPART_EXPR, 
558   IMAGPART_EXPR, 
559
560   PREDECREMENT_EXPR, 
561   PREINCREMENT_EXPR, 
562   POSTDECREMENT_EXPR, 
563   POSTINCREMENT_EXPR, 
564
565   LAST_AND_UNUSED_TREE_CODE      
566
567 };
568
569 extern char *tree_code_type[];
570
571 extern int tree_code_length[];
572
573 enum built_in_function
574 {
575   NOT_BUILT_IN,
576   BUILT_IN_ALLOCA,
577   BUILT_IN_ABS,
578   BUILT_IN_FABS,
579   BUILT_IN_LABS,
580   BUILT_IN_FFS,
581   BUILT_IN_DIV,
582   BUILT_IN_LDIV,
583   BUILT_IN_FFLOOR,
584   BUILT_IN_FCEIL,
585   BUILT_IN_FMOD,
586   BUILT_IN_FREM,
587   BUILT_IN_MEMCPY,
588   BUILT_IN_MEMCMP,
589   BUILT_IN_MEMSET,
590   BUILT_IN_FSQRT,
591   BUILT_IN_GETEXP,
592   BUILT_IN_GETMAN,
593   BUILT_IN_SAVEREGS,
594
595   BUILT_IN_NEW,
596   BUILT_IN_VEC_NEW,
597   BUILT_IN_DELETE,
598   BUILT_IN_VEC_DELETE,
599 };
600
601 typedef union tree_node *tree;
602
603 struct tree_common
604 {
605   int uid;
606   union tree_node *chain;
607   union tree_node *type;
608   enum tree_code code : 8;
609
610   unsigned external_attr : 1;
611   unsigned public_attr : 1;
612   unsigned static_attr : 1;
613   unsigned volatile_attr : 1;
614   unsigned packed_attr : 1;
615   unsigned readonly_attr : 1;
616   unsigned literal_attr : 1;
617   unsigned nonlocal_attr : 1;
618   unsigned permanent_attr : 1;
619   unsigned addressable_attr : 1;
620   unsigned regdecl_attr : 1;
621   unsigned this_vol_attr : 1;
622   unsigned unsigned_attr : 1;
623   unsigned asm_written_attr: 1;
624   unsigned inline_attr : 1;
625   unsigned used_attr : 1;
626   unsigned lang_flag_1 : 1;
627   unsigned lang_flag_2 : 1;
628   unsigned lang_flag_3 : 1;
629   unsigned lang_flag_4 : 1;
630 };
631
632 struct tree_int_cst
633 {
634   char common[sizeof (struct tree_common)];
635   long int_cst_low;
636   long int_cst_high;
637 };
638
639 extern double ldexp ();
640
641 extern double atof ();
642
643 union real_extract 
644 {
645   double  d;
646   int i[sizeof (double ) / sizeof (int)];
647 };
648
649 struct tree_real_cst
650 {
651   char common[sizeof (struct tree_common)];
652   struct rtx_def *rtl;   
653
654   double  real_cst;
655 };
656
657 struct tree_string
658 {
659   char common[sizeof (struct tree_common)];
660   struct rtx_def *rtl;   
661
662   int length;
663   char *pointer;
664 };
665
666 struct tree_complex
667 {
668   char common[sizeof (struct tree_common)];
669   struct rtx_def *rtl;   
670
671   union tree_node *real;
672   union tree_node *imag;
673 };
674
675 struct tree_identifier
676 {
677   char common[sizeof (struct tree_common)];
678   int length;
679   char *pointer;
680   union tree_node *global_value;
681   union tree_node *local_value;
682   union tree_node *label_value;
683   union tree_node *implicit_decl;
684   union tree_node *error_locus;
685 };
686
687 struct tree_list
688 {
689   char common[sizeof (struct tree_common)];
690   union tree_node *purpose;
691   union tree_node *value;
692 };
693
694 struct tree_exp
695 {
696   char common[sizeof (struct tree_common)];
697   int complexity;
698   union tree_node *operands[1];
699 };
700
701 struct tree_type
702 {
703   char common[sizeof (struct tree_common)];
704   union tree_node *values;
705   union tree_node *sep;
706   union tree_node *size;
707
708   enum machine_mode mode : 8;
709   unsigned char size_unit;
710   unsigned char align;
711   unsigned char sep_unit;
712
713   union tree_node *pointer_to;
714   union tree_node *reference_to;
715   int parse_info;
716   int symtab_address;
717   union tree_node *name;
718   union tree_node *max;
719   union tree_node *next_variant;
720   union tree_node *main_variant;
721   union tree_node *basetypes;
722   union tree_node *noncopied_parts;
723   struct lang_type *lang_specific;
724 };
725
726 struct tree_decl
727 {
728   char common[sizeof (struct tree_common)];
729   char *filename;
730   int linenum;
731   union tree_node *size;
732   enum machine_mode mode;
733   unsigned char size_unit;
734   unsigned char align;
735   unsigned char voffset_unit;
736   union tree_node *name;
737   union tree_node *context;
738   int offset;
739   union tree_node *voffset;
740   union tree_node *arguments;
741   union tree_node *result;
742   union tree_node *initial;
743   struct rtx_def *rtl;   
744
745   int frame_size;                
746   struct rtx_def *saved_insns;   
747
748   int block_symtab_address;
749   struct lang_decl *lang_specific;
750 };
751
752 struct tree_stmt
753 {
754   char common[sizeof (struct tree_common)];
755   char *filename;
756   int linenum;
757   union tree_node *body;
758 };
759
760 struct tree_if_stmt
761 {
762   char common[sizeof (struct tree_common)];
763   char *filename;
764   int linenum;
765   union tree_node *cond, *thenpart, *elsepart;
766 };
767
768 struct tree_bind_stmt
769 {
770   char common[sizeof (struct tree_common)];
771   char *filename;
772   int linenum;
773   union tree_node *body, *vars, *supercontext, *bind_size, *type_tags;
774 };
775
776 struct tree_case_stmt
777 {
778   char common[sizeof (struct tree_common)];
779   char *filename;
780   int linenum;
781   union tree_node *index, *case_list;
782 };
783
784 union tree_node
785 {
786   struct tree_common common;
787   struct tree_int_cst int_cst;
788   struct tree_real_cst real_cst;
789   struct tree_string string;
790   struct tree_complex complex;
791   struct tree_identifier identifier;
792   struct tree_decl decl;
793   struct tree_type type;
794   struct tree_list list;
795   struct tree_exp exp;
796   struct tree_stmt stmt;
797   struct tree_if_stmt if_stmt;
798   struct tree_bind_stmt bind_stmt;
799   struct tree_case_stmt case_stmt;
800 };
801 extern char *oballoc ();
802 extern char *permalloc ();
803
804 extern tree make_node ();
805
806 extern tree copy_node ();
807
808 extern tree get_identifier ();
809
810 extern tree build_int_2 ();
811 extern tree build_real ();
812 extern tree build_real_from_string ();
813 extern tree build_real_from_int_cst ();
814 extern tree build_complex ();
815 extern tree build_string ();
816 extern tree build ();
817 extern tree build_nt ();
818 extern tree build_tree_list ();
819 extern tree build_op_identifier ();
820 extern tree build_decl ();
821 extern tree build_let ();
822
823 extern tree make_signed_type ();
824 extern tree make_unsigned_type ();
825 extern void fixup_unsigned_type ();
826 extern tree build_pointer_type ();
827 extern tree build_reference_type ();
828 extern tree build_index_type ();
829 extern tree build_array_type ();
830 extern tree build_function_type ();
831 extern tree build_method_type ();
832 extern tree build_offset_type ();
833 extern tree array_type_nelts ();
834
835 extern tree build_binary_op ();
836 extern tree build_indirect_ref ();
837 extern tree build_unary_op ();
838
839 extern tree build_type_variant ();
840
841 extern void layout_type ();
842
843 extern tree type_hash_canon ();
844
845 extern void layout_decl ();
846
847 extern tree fold ();
848
849 extern tree combine ();
850
851 extern tree convert ();
852 extern tree convert_units ();
853 extern tree size_in_bytes ();
854 extern tree genop ();
855 extern tree build_int ();
856 extern tree get_pending_sizes ();
857
858 extern tree sizetype;
859
860 extern tree chainon ();
861
862 extern tree tree_cons (), perm_tree_cons (), temp_tree_cons ();
863 extern tree saveable_tree_cons ();
864
865 extern tree tree_last ();
866
867 extern tree nreverse ();
868
869 extern int list_length ();
870
871 extern int integer_zerop ();
872
873 extern int integer_onep ();
874
875 extern int integer_all_onesp ();
876
877 extern int type_unsigned_p ();
878
879 extern int staticp ();
880
881 extern int lvalue_or_else ();
882
883 extern tree save_expr ();
884
885 extern tree stabilize_reference ();
886
887 extern tree get_unwidened ();
888
889 extern tree get_narrower ();
890
891 extern tree type_for_size ();
892
893 extern tree unsigned_type ();
894
895 extern tree signed_type ();
896
897 extern tree get_floating_type ();
898
899 extern char *function_cannot_inline_p ();
900
901 extern tree integer_zero_node;
902
903 extern tree integer_one_node;
904
905 extern tree size_zero_node;
906
907 extern tree size_one_node;
908
909 extern tree null_pointer_node;
910
911 extern tree error_mark_node;
912
913 extern tree void_type_node;
914
915 extern tree integer_type_node;
916
917 extern tree unsigned_type_node;
918
919 extern tree char_type_node;
920
921 extern char *input_filename;
922
923 extern int pedantic;
924
925 extern int immediate_size_expand;
926
927 extern tree current_function_decl;
928
929 extern int current_function_calls_setjmp;
930
931 extern int all_types_permanent;
932
933 extern tree expand_start_stmt_expr ();
934 extern tree expand_end_stmt_expr ();
935 extern void expand_expr_stmt(), clear_last_expr();
936 extern void expand_label(), expand_goto(), expand_asm();
937 extern void expand_start_cond(), expand_end_cond();
938 extern void expand_start_else(), expand_end_else();
939 extern void expand_start_loop(), expand_start_loop_continue_elsewhere();
940 extern void expand_loop_continue_here();
941 extern void expand_end_loop();
942 extern int expand_continue_loop();
943 extern int expand_exit_loop(), expand_exit_loop_if_false();
944 extern int expand_exit_something();
945
946 extern void expand_start_delayed_expr ();
947 extern tree expand_end_delayed_expr ();
948 extern void expand_emit_delayed_expr ();
949
950 extern void expand_null_return(), expand_return();
951 extern void expand_start_bindings(), expand_end_bindings();
952 extern void expand_start_case(), expand_end_case();
953 extern int pushcase(), pushcase_range ();
954 extern void expand_start_function(), expand_end_function();
955
956 extern char *main_input_filename;
957
958 enum debugger { NO_DEBUG = 0, GDB_DEBUG = 1, DBX_DEBUG = 2, SDB_DEBUG = 3,
959                 EXTENDED_DBX_DEBUG = 4 };
960
961 extern enum debugger write_symbols;
962
963 extern int use_gdb_dbx_extensions;
964
965 extern int optimize;
966
967 extern int obey_regdecls;
968
969 extern int quiet_flag;
970
971 extern int inhibit_warnings;
972
973 extern int extra_warnings;
974
975 extern int warn_unused;
976
977 extern int warn_shadow;
978
979 extern int warn_switch;
980
981 extern int warn_id_clash;
982 extern int id_clash_len;
983
984 extern int profile_flag;
985
986 extern int profile_block_flag;
987
988 extern int pedantic;
989
990 extern int flag_caller_saves;
991
992 extern int flag_pcc_struct_return;
993
994 extern int flag_force_mem;
995
996 extern int flag_force_addr;
997
998 extern int flag_defer_pop;
999
1000 extern int flag_float_store;
1001
1002 extern int flag_combine_regs;
1003
1004 extern int flag_strength_reduce;
1005
1006 extern int flag_writable_strings;
1007
1008 extern int flag_no_function_cse;
1009
1010 extern int flag_omit_frame_pointer;
1011
1012 extern int frame_pointer_needed;
1013
1014 extern int flag_no_peephole;
1015
1016 extern int flag_volatile;
1017
1018 extern int flag_inline_functions;
1019
1020 extern int flag_keep_inline_functions;
1021
1022 extern int flag_syntax_only;
1023
1024 extern int flag_shared_data;
1025
1026 enum expand_modifier {EXPAND_NORMAL, EXPAND_SUM, EXPAND_CONST_ADDRESS};
1027
1028 extern int cse_not_expected;
1029
1030 extern rtx save_expr_regs;
1031
1032 struct args_size
1033 {
1034   int constant;
1035   tree var;
1036 };
1037
1038 enum direction {none, upward, downward};   
1039
1040 enum insn_code {
1041   CODE_FOR_tstsi = 2,
1042   CODE_FOR_tsthi = 3,
1043   CODE_FOR_tstqi = 4,
1044   CODE_FOR_tstsf = 5,
1045   CODE_FOR_tstdf = 8,
1046   CODE_FOR_cmpsi = 11,
1047   CODE_FOR_cmphi = 12,
1048   CODE_FOR_cmpqi = 13,
1049   CODE_FOR_cmpdf = 14,
1050   CODE_FOR_cmpsf = 17,
1051   CODE_FOR_movsi = 31,
1052   CODE_FOR_movhi = 32,
1053   CODE_FOR_movstricthi = 33,
1054   CODE_FOR_movqi = 34,
1055   CODE_FOR_movstrictqi = 35,
1056   CODE_FOR_movsf = 36,
1057   CODE_FOR_movdf = 37,
1058   CODE_FOR_movdi = 38,
1059   CODE_FOR_pushasi = 39,
1060   CODE_FOR_truncsiqi2 = 40,
1061   CODE_FOR_trunchiqi2 = 41,
1062   CODE_FOR_truncsihi2 = 42,
1063   CODE_FOR_zero_extendhisi2 = 43,
1064   CODE_FOR_zero_extendqihi2 = 44,
1065   CODE_FOR_zero_extendqisi2 = 45,
1066   CODE_FOR_extendhisi2 = 49,
1067   CODE_FOR_extendqihi2 = 50,
1068   CODE_FOR_extendqisi2 = 51,
1069   CODE_FOR_extendsfdf2 = 52,
1070   CODE_FOR_truncdfsf2 = 55,
1071   CODE_FOR_floatsisf2 = 58,
1072   CODE_FOR_floatsidf2 = 61,
1073   CODE_FOR_floathisf2 = 64,
1074   CODE_FOR_floathidf2 = 65,
1075   CODE_FOR_floatqisf2 = 66,
1076   CODE_FOR_floatqidf2 = 67,
1077   CODE_FOR_ftruncdf2 = 68,
1078   CODE_FOR_ftruncsf2 = 69,
1079   CODE_FOR_fixsfqi2 = 70,
1080   CODE_FOR_fixsfhi2 = 71,
1081   CODE_FOR_fixsfsi2 = 72,
1082   CODE_FOR_fixdfqi2 = 73,
1083   CODE_FOR_fixdfhi2 = 74,
1084   CODE_FOR_fixdfsi2 = 75,
1085   CODE_FOR_fix_truncsfsi2 = 76,
1086   CODE_FOR_fix_truncdfsi2 = 77,
1087   CODE_FOR_addsi3 = 78,
1088   CODE_FOR_addhi3 = 80,
1089   CODE_FOR_addqi3 = 82,
1090   CODE_FOR_adddf3 = 84,
1091   CODE_FOR_addsf3 = 87,
1092   CODE_FOR_subsi3 = 90,
1093   CODE_FOR_subhi3 = 92,
1094   CODE_FOR_subqi3 = 94,
1095   CODE_FOR_subdf3 = 96,
1096   CODE_FOR_subsf3 = 99,
1097   CODE_FOR_mulhi3 = 102,
1098   CODE_FOR_mulhisi3 = 103,
1099   CODE_FOR_mulsi3 = 104,
1100   CODE_FOR_umulhi3 = 105,
1101   CODE_FOR_umulhisi3 = 106,
1102   CODE_FOR_umulsi3 = 107,
1103   CODE_FOR_muldf3 = 108,
1104   CODE_FOR_mulsf3 = 111,
1105   CODE_FOR_divhi3 = 114,
1106   CODE_FOR_divhisi3 = 115,
1107   CODE_FOR_divsi3 = 116,
1108   CODE_FOR_udivhi3 = 117,
1109   CODE_FOR_udivhisi3 = 118,
1110   CODE_FOR_udivsi3 = 119,
1111   CODE_FOR_divdf3 = 120,
1112   CODE_FOR_divsf3 = 123,
1113   CODE_FOR_modhi3 = 126,
1114   CODE_FOR_modhisi3 = 127,
1115   CODE_FOR_umodhi3 = 128,
1116   CODE_FOR_umodhisi3 = 129,
1117   CODE_FOR_divmodsi4 = 130,
1118   CODE_FOR_udivmodsi4 = 131,
1119   CODE_FOR_andsi3 = 132,
1120   CODE_FOR_andhi3 = 133,
1121   CODE_FOR_andqi3 = 134,
1122   CODE_FOR_iorsi3 = 137,
1123   CODE_FOR_iorhi3 = 138,
1124   CODE_FOR_iorqi3 = 139,
1125   CODE_FOR_xorsi3 = 140,
1126   CODE_FOR_xorhi3 = 141,
1127   CODE_FOR_xorqi3 = 142,
1128   CODE_FOR_negsi2 = 143,
1129   CODE_FOR_neghi2 = 144,
1130   CODE_FOR_negqi2 = 145,
1131   CODE_FOR_negsf2 = 146,
1132   CODE_FOR_negdf2 = 149,
1133   CODE_FOR_abssf2 = 152,
1134   CODE_FOR_absdf2 = 155,
1135   CODE_FOR_one_cmplsi2 = 158,
1136   CODE_FOR_one_cmplhi2 = 159,
1137   CODE_FOR_one_cmplqi2 = 160,
1138   CODE_FOR_ashlsi3 = 167,
1139   CODE_FOR_ashlhi3 = 168,
1140   CODE_FOR_ashlqi3 = 169,
1141   CODE_FOR_ashrsi3 = 170,
1142   CODE_FOR_ashrhi3 = 171,
1143   CODE_FOR_ashrqi3 = 172,
1144   CODE_FOR_lshlsi3 = 173,
1145   CODE_FOR_lshlhi3 = 174,
1146   CODE_FOR_lshlqi3 = 175,
1147   CODE_FOR_lshrsi3 = 176,
1148   CODE_FOR_lshrhi3 = 177,
1149   CODE_FOR_lshrqi3 = 178,
1150   CODE_FOR_rotlsi3 = 179,
1151   CODE_FOR_rotlhi3 = 180,
1152   CODE_FOR_rotlqi3 = 181,
1153   CODE_FOR_rotrsi3 = 182,
1154   CODE_FOR_rotrhi3 = 183,
1155   CODE_FOR_rotrqi3 = 184,
1156   CODE_FOR_extv = 188,
1157   CODE_FOR_extzv = 189,
1158   CODE_FOR_insv = 193,
1159   CODE_FOR_seq = 205,
1160   CODE_FOR_sne = 206,
1161   CODE_FOR_sgt = 207,
1162   CODE_FOR_sgtu = 208,
1163   CODE_FOR_slt = 209,
1164   CODE_FOR_sltu = 210,
1165   CODE_FOR_sge = 211,
1166   CODE_FOR_sgeu = 212,
1167   CODE_FOR_sle = 213,
1168   CODE_FOR_sleu = 214,
1169   CODE_FOR_beq = 215,
1170   CODE_FOR_bne = 216,
1171   CODE_FOR_bgt = 217,
1172   CODE_FOR_bgtu = 218,
1173   CODE_FOR_blt = 219,
1174   CODE_FOR_bltu = 220,
1175   CODE_FOR_bge = 221,
1176   CODE_FOR_bgeu = 222,
1177   CODE_FOR_ble = 223,
1178   CODE_FOR_bleu = 224,
1179   CODE_FOR_casesi_1 = 235,
1180   CODE_FOR_casesi_2 = 236,
1181   CODE_FOR_casesi = 237,
1182   CODE_FOR_jump = 239,
1183   CODE_FOR_call = 243,
1184   CODE_FOR_call_value = 244,
1185   CODE_FOR_return = 245,
1186   CODE_FOR_nothing };
1187
1188 typedef struct optab
1189 {
1190   enum rtx_code code;
1191   struct {
1192     enum insn_code insn_code;
1193     char *lib_call;
1194   } handlers [(int) MAX_MACHINE_MODE ];
1195 } * optab;
1196
1197 extern rtx (*insn_gen_function[]) ();
1198
1199 extern optab add_optab;
1200 extern optab sub_optab;
1201 extern optab smul_optab;         
1202 extern optab umul_optab;         
1203 extern optab smul_widen_optab;   
1204
1205 extern optab umul_widen_optab;
1206 extern optab sdiv_optab;         
1207 extern optab sdivmod_optab;      
1208 extern optab udiv_optab;
1209 extern optab udivmod_optab;
1210 extern optab smod_optab;         
1211 extern optab umod_optab;
1212 extern optab flodiv_optab;       
1213 extern optab ftrunc_optab;       
1214 extern optab and_optab;          
1215 extern optab andcb_optab;        
1216 extern optab ior_optab;          
1217 extern optab xor_optab;          
1218 extern optab ashl_optab;         
1219 extern optab ashr_optab;         
1220 extern optab lshl_optab;         
1221 extern optab lshr_optab;         
1222 extern optab rotl_optab;         
1223 extern optab rotr_optab;         
1224
1225 extern optab mov_optab;          
1226 extern optab movstrict_optab;    
1227
1228 extern optab cmp_optab;          
1229 extern optab tst_optab;          
1230
1231 extern optab neg_optab;          
1232 extern optab abs_optab;          
1233 extern optab one_cmpl_optab;     
1234 extern optab ffs_optab;          
1235
1236 enum optab_methods
1237 {
1238   OPTAB_DIRECT,
1239   OPTAB_LIB,
1240   OPTAB_WIDEN,
1241   OPTAB_LIB_WIDEN,
1242 };
1243 typedef rtx (*rtxfun) ();
1244
1245 extern rtxfun bcc_gen_fctn[((int)LAST_AND_UNUSED_RTX_CODE) ];
1246
1247 extern rtxfun setcc_gen_fctn[((int)LAST_AND_UNUSED_RTX_CODE) ];
1248
1249 rtx expand_binop ();
1250
1251 rtx sign_expand_binop ();
1252
1253 rtx expand_unop ();
1254
1255 rtx negate_rtx ();
1256
1257 void init_fixtab ();
1258 void init_floattab ();
1259
1260 void expand_fix ();
1261
1262 void expand_float ();
1263
1264 rtx gen_add2_insn ();
1265 rtx gen_sub2_insn ();
1266 rtx gen_move_insn ();
1267
1268 void emit_clr_insn ();
1269
1270 void emit_0_to_1_insn ();
1271
1272 void emit_cmp_insn ();
1273
1274 void convert_move ();
1275
1276 rtx convert_to_mode ();
1277
1278 void emit_library_call ();
1279
1280 rtx force_operand ();
1281
1282 rtx expr_size ();
1283
1284 rtx plus_constant ();
1285
1286 rtx lookup_static_chain ();
1287
1288 rtx eliminate_constant_term ();
1289
1290 rtx memory_address ();
1291
1292 rtx memory_address_noforce ();
1293
1294 rtx change_address ();
1295
1296 int rtx_equal_p ();
1297
1298 rtx stabilize ();
1299
1300 rtx copy_all_regs ();
1301
1302 rtx copy_to_reg ();
1303
1304 rtx copy_addr_to_reg ();
1305
1306 rtx copy_to_mode_reg ();
1307
1308 rtx copy_to_suggested_reg ();
1309
1310 rtx force_reg ();
1311
1312 rtx force_not_mem ();
1313
1314 void adjust_stack ();
1315
1316 void anti_adjust_stack ();
1317
1318 rtx function_value ();
1319
1320 rtx hard_function_value ();
1321
1322 rtx hard_libcall_value ();
1323
1324 void copy_function_value ();
1325
1326 rtx round_push ();
1327
1328 rtx store_bit_field ();
1329 rtx extract_bit_field ();
1330 rtx expand_shift ();
1331 rtx expand_bit_and ();
1332 rtx expand_mult ();
1333 rtx expand_divmod ();
1334 rtx get_structure_value_addr ();
1335 rtx expand_stmt_expr ();
1336
1337 void jumpifnot ();
1338 void jumpif ();
1339 void do_jump ();
1340
1341 rtx assemble_static_space ();
1342
1343 rtx
1344 plus_constant (x, c)
1345      register rtx x;
1346      register int c;
1347 {
1348   register enum rtx_code  code =        ((x)->code) ;
1349   register enum machine_mode mode =     ((x)->mode) ;
1350   int all_constant = 0;
1351
1352   if (c == 0)
1353     return x;
1354
1355   if (code == CONST_INT)
1356     return gen_rtx (CONST_INT, VOIDmode, (((x)->fld[0].rtint)  + c));
1357
1358   if (code == CONST)
1359     {
1360       x = ((x)->fld[ 0].rtx) ;
1361       all_constant = 1;
1362     }
1363   else if (code == SYMBOL_REF || code == LABEL_REF)
1364     all_constant = 1;
1365
1366   if (  ((x)->code)  == PLUS)
1367     {
1368       if (      ((((x)->fld[ 0].rtx) )->code)  == CONST_INT)
1369         {
1370           c += ((((x)->fld[ 0].rtx) )->fld[0].rtint) ;
1371           x = ((x)->fld[ 1].rtx) ;
1372         }
1373       else if ( ((((x)->fld[ 1].rtx) )->code)  == CONST_INT)
1374         {
1375           c += ((((x)->fld[ 1].rtx) )->fld[0].rtint) ;
1376           x = ((x)->fld[ 0].rtx) ;
1377         }
1378       else if ((        ((((x)->fld[ 0].rtx) )->code)  == LABEL_REF ||  ((((x)->fld[ 0].rtx) )->code)  == SYMBOL_REF    ||      ((((x)->fld[ 0].rtx) )->code)  == CONST_INT     ||      ((((x)->fld[ 0].rtx) )->code)  == CONST) )
1379         {
1380           return gen_rtx (PLUS, mode,
1381                           plus_constant (((x)->fld[ 0].rtx) , c),
1382                           ((x)->fld[ 1].rtx) );
1383         }
1384       else if ((        ((((x)->fld[ 1].rtx) )->code)  == LABEL_REF ||  ((((x)->fld[ 1].rtx) )->code)  == SYMBOL_REF    ||      ((((x)->fld[ 1].rtx) )->code)  == CONST_INT     ||      ((((x)->fld[ 1].rtx) )->code)  == CONST) )
1385         {
1386           return gen_rtx (PLUS, mode,
1387                           ((x)->fld[ 0].rtx) ,
1388                           plus_constant (((x)->fld[ 1].rtx) , c));
1389         }
1390
1391     }
1392   if (c != 0)
1393     x = gen_rtx (PLUS, mode, x, gen_rtx (CONST_INT, VOIDmode, c));
1394
1395   if (  ((x)->code)  == SYMBOL_REF ||   ((x)->code)  == LABEL_REF)
1396     return x;
1397   else if (all_constant)
1398     return gen_rtx (CONST, mode, x);
1399   else
1400     return x;
1401 }
1402
1403 rtx
1404 eliminate_constant_term (x, constptr)
1405      rtx x;
1406      int *constptr;
1407 {
1408   int c;
1409   register rtx x0, x1;
1410
1411   if (  ((x)->code)  != PLUS)
1412     return x;
1413
1414   if (  ((((x)->fld[ 0].rtx) )->code)  == CONST_INT)
1415     {
1416       *constptr += ((((x)->fld[ 0].rtx) )->fld[0].rtint) ;
1417       return eliminate_constant_term (((x)->fld[ 1].rtx) , constptr);
1418     }
1419
1420   if (  ((((x)->fld[ 1].rtx) )->code)  == CONST_INT)
1421     {
1422       *constptr += ((((x)->fld[ 1].rtx) )->fld[0].rtint) ;
1423       return eliminate_constant_term (((x)->fld[ 0].rtx) , constptr);
1424     }
1425
1426   c = 0;
1427   x0 = eliminate_constant_term (((x)->fld[ 0].rtx) , &c);
1428   x1 = eliminate_constant_term (((x)->fld[ 1].rtx) , &c);
1429   if (x1 != ((x)->fld[ 1].rtx)  || x0 != ((x)->fld[ 0].rtx) )
1430     {
1431       *constptr += c;
1432       return gen_rtx (PLUS,     ((x)->mode) , x0, x1);
1433     }
1434   return x;
1435 }
1436
1437 rtx
1438 expr_size (exp)
1439      tree exp;
1440 {
1441   return expand_expr (size_in_bytes (((exp)->common.type) ), 0, SImode, 0);
1442 }
1443
1444 rtx
1445 lookup_static_chain ()
1446 {
1447   abort ();
1448 }
1449
1450 static rtx
1451 break_out_memory_refs (x)
1452      register rtx x;
1453 {
1454   if (  ((x)->code)  == MEM ||  ((x)->code)  == CONST
1455       ||        ((x)->code)  == SYMBOL_REF)
1456     {
1457       register rtx temp = force_reg (SImode , x);
1458       mark_reg_pointer (temp);
1459       x = temp;
1460     }
1461   else if (     ((x)->code)  == PLUS ||         ((x)->code)  == MINUS
1462            ||   ((x)->code)  == MULT)
1463     {
1464       register rtx op0 = break_out_memory_refs (((x)->fld[ 0].rtx) );
1465       register rtx op1 = break_out_memory_refs (((x)->fld[ 1].rtx) );
1466       if (op0 != ((x)->fld[ 0].rtx)  || op1 != ((x)->fld[ 1].rtx) )
1467         x = gen_rtx (   ((x)->code) , SImode , op0, op1);
1468     }
1469   return x;
1470 }
1471
1472 rtx
1473 copy_all_regs (x)
1474      register rtx x;
1475 {
1476   if (  ((x)->code)  == REG)
1477     {
1478       if (((x)->fld[0].rtint)  != 14 )
1479         x = copy_to_reg (x);
1480     }
1481   else if (     ((x)->code)  == MEM)
1482     x = copy_to_reg (x);
1483   else if (     ((x)->code)  == PLUS ||         ((x)->code)  == MINUS
1484            ||   ((x)->code)  == MULT)
1485     {
1486       register rtx op0 = copy_all_regs (((x)->fld[ 0].rtx) );
1487       register rtx op1 = copy_all_regs (((x)->fld[ 1].rtx) );
1488       if (op0 != ((x)->fld[ 0].rtx)  || op1 != ((x)->fld[ 1].rtx) )
1489         x = gen_rtx (   ((x)->code) , SImode , op0, op1);
1490     }
1491   return x;
1492 }
1493
1494 rtx
1495 memory_address (mode, x)
1496      enum machine_mode mode;
1497      register rtx x;
1498 {
1499   register rtx oldx;
1500
1501   if (! cse_not_expected && (   ((x)->code)  == LABEL_REF ||    ((x)->code)  == SYMBOL_REF      ||      ((x)->code)  == CONST_INT       ||      ((x)->code)  == CONST) )
1502     return force_reg (SImode , x);
1503
1504   if (  ((x)->code)  == QUEUED
1505       &&        ((((x)->fld[ 0].rtx)  )->code)  == REG)
1506     return x;
1507
1508   oldx = x;
1509   if (! cse_not_expected &&     ((x)->code)  != REG)
1510     x = break_out_memory_refs (x);
1511
1512   { { if (( (   (( x)->code)  == LABEL_REF ||   (( x)->code)  == SYMBOL_REF     ||      (( x)->code)  == CONST_INT      ||      (( x)->code)  == CONST)         || (    (( x)->code)  == REG && (((( x)->fld[0].rtint)  & ~027) != 0) ) || ((   (( x)->code)  == PRE_DEC ||     (( x)->code)  == POST_INC)      && (    (((( x)->fld[ 0].rtx) )->code)  == REG)         && (((((( x)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0) )    || (    (( x)->code)  == PLUS   && (    (((( x)->fld[ 0].rtx) )->code)  == REG)  && (((((( x)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0)     &&      (((( x)->fld[ 1].rtx) )->code)  == CONST_INT    && ((unsigned) (((( x)->fld[ 1].rtx) )->fld[0].rtint)  + 0x8000) < 0x10000)) ) goto   win; } ;  { { if (        (( x)->code)  == PLUS && (((    (((( x)->fld[ 0].rtx) )->code)  == REG && (((((( x)->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )      || (    (((( x)->fld[ 0].rtx) )->code)  == SIGN_EXTEND  &&      (((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG        &&      (((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode     && (((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))  || ((target_flags & 1)  &&      (((( x)->fld[ 0].rtx) )->code)  == MULT && ((   (((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG && (((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )  || (    (((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND        &&      (((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG      &&      (((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode   && (((((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))        &&      (((((( x)->fld[ 0].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT  && ((((((( x)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2      || (((((( x)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4       || (((((( x)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )  { { if (        (((( x)->fld[ 1].rtx) )->code)  == LABEL_REF) goto     win;     if (    (((( x)->fld[ 1].rtx) )->code)  == REG && (((((( x)->fld[ 1].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto     win; } ; } if (    (( x)->code)  == PLUS && (((    (((( x)->fld[ 1].rtx) )->code)  == REG && (((((( x)->fld[ 1].rtx) )->fld[0].rtint)  ^ 020) >= 8) )      || (    (((( x)->fld[ 1].rtx) )->code)  == SIGN_EXTEND  &&      (((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG        &&      (((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->mode)  == HImode     && (((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))  || ((target_flags & 1)  &&      (((( x)->fld[ 1].rtx) )->code)  == MULT && ((   (((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG && (((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )  || (    (((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND        &&      (((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG      &&      (((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode   && (((((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))        &&      (((((( x)->fld[ 1].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT  && ((((((( x)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2      || (((((( x)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4       || (((((( x)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )  { { if (        (((( x)->fld[ 0].rtx) )->code)  == LABEL_REF) goto     win;     if (    (((( x)->fld[ 0].rtx) )->code)  == REG && (((((( x)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto     win; } ; } } ;     if (    (( x)->code)  == PLUS)  { if (  (((( x)->fld[ 1].rtx) )->code)  == CONST_INT    && (unsigned) (((( x)->fld[ 1].rtx) )->fld[0].rtint)  + 0x80 < 0x100)   { rtx go_temp = (( x)->fld[ 0].rtx) ; { if (    ((go_temp)->code)  == PLUS && (((       ((((go_temp)->fld[ 0].rtx) )->code)  == REG && ((((((go_temp)->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )    || (    ((((go_temp)->fld[ 0].rtx) )->code)  == SIGN_EXTEND     &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG   &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode        && ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))     || ((target_flags & 1)  &&      ((((go_temp)->fld[ 0].rtx) )->code)  == MULT    && ((   ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG && ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )        || (    ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode      && ((((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))   &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT     && (((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2 || ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4  || ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )     { { if (        ((((go_temp)->fld[ 1].rtx) )->code)  == LABEL_REF) goto     win;        if (    ((((go_temp)->fld[ 1].rtx) )->code)  == REG && ((((((go_temp)->fld[ 1].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto     win; } ; }       if (    ((go_temp)->code)  == PLUS && (((       ((((go_temp)->fld[ 1].rtx) )->code)  == REG && ((((((go_temp)->fld[ 1].rtx) )->fld[0].rtint)  ^ 020) >= 8) )    || (    ((((go_temp)->fld[ 1].rtx) )->code)  == SIGN_EXTEND     &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG   &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->mode)  == HImode        && ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))     || ((target_flags & 1)  &&      ((((go_temp)->fld[ 1].rtx) )->code)  == MULT    && ((   ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG && ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )        || (    ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode      && ((((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))   &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT     && (((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2 || ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4  || ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )     { { if (        ((((go_temp)->fld[ 0].rtx) )->code)  == LABEL_REF) goto     win;        if (    ((((go_temp)->fld[ 0].rtx) )->code)  == REG && ((((((go_temp)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto     win; } ; } } ; } if (    (((( x)->fld[ 0].rtx) )->code)  == CONST_INT    && (unsigned) (((( x)->fld[ 0].rtx) )->fld[0].rtint)  + 0x80 < 0x100)   { rtx go_temp = (( x)->fld[ 1].rtx) ; { if (    ((go_temp)->code)  == PLUS && (((       ((((go_temp)->fld[ 0].rtx) )->code)  == REG && ((((((go_temp)->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )    || (    ((((go_temp)->fld[ 0].rtx) )->code)  == SIGN_EXTEND     &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG   &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode        && ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))     || ((target_flags & 1)  &&      ((((go_temp)->fld[ 0].rtx) )->code)  == MULT    && ((   ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG && ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )        || (    ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode      && ((((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))   &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT     && (((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2 || ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4  || ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )     { { if (        ((((go_temp)->fld[ 1].rtx) )->code)  == LABEL_REF) goto     win;        if (    ((((go_temp)->fld[ 1].rtx) )->code)  == REG && ((((((go_temp)->fld[ 1].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto     win; } ; }       if (    ((go_temp)->code)  == PLUS && (((       ((((go_temp)->fld[ 1].rtx) )->code)  == REG && ((((((go_temp)->fld[ 1].rtx) )->fld[0].rtint)  ^ 020) >= 8) )    || (    ((((go_temp)->fld[ 1].rtx) )->code)  == SIGN_EXTEND     &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG   &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->mode)  == HImode        && ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))     || ((target_flags & 1)  &&      ((((go_temp)->fld[ 1].rtx) )->code)  == MULT    && ((   ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG && ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )        || (    ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode      && ((((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))   &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT     && (((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2 || ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4  || ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )     { { if (        ((((go_temp)->fld[ 0].rtx) )->code)  == LABEL_REF) goto     win;        if (    ((((go_temp)->fld[ 0].rtx) )->code)  == REG && ((((((go_temp)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto     win; } ; } } ; } } } ; } ;
1513
1514   if (memory_address_p (mode, oldx))
1515     goto win2;
1516
1517   { register int ch = (x) != ( oldx);   if (    ((x)->code)  == PLUS)   { if (  ((((x)->fld[ 0].rtx) )->code)  == MULT) ch = 1, ((x)->fld[ 0].rtx)  = force_operand (((x)->fld[ 0].rtx) , 0);   if (    ((((x)->fld[ 1].rtx) )->code)  == MULT) ch = 1, ((x)->fld[ 1].rtx)  = force_operand (((x)->fld[ 1].rtx) , 0);   if (ch &&       ((((x)->fld[ 1].rtx) )->code)  == REG   &&      ((((x)->fld[ 0].rtx) )->code)  == REG)  return x;       if (ch) { { { if (( (   (( x)->code)  == LABEL_REF ||   (( x)->code)  == SYMBOL_REF     ||      (( x)->code)  == CONST_INT      ||      (( x)->code)  == CONST)         || (    (( x)->code)  == REG && (((( x)->fld[0].rtint)  & ~027) != 0) ) || ((   (( x)->code)  == PRE_DEC ||     (( x)->code)  == POST_INC)      && (    (((( x)->fld[ 0].rtx) )->code)  == REG)         && (((((( x)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0) )    || (    (( x)->code)  == PLUS   && (    (((( x)->fld[ 0].rtx) )->code)  == REG)  && (((((( x)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0)     &&      (((( x)->fld[ 1].rtx) )->code)  == CONST_INT    && ((unsigned) (((( x)->fld[ 1].rtx) )->fld[0].rtint)  + 0x8000) < 0x10000)) ) goto    win; } ; { { if (        (( x)->code)  == PLUS && (((    (((( x)->fld[ 0].rtx) )->code)  == REG && (((((( x)->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )      || (    (((( x)->fld[ 0].rtx) )->code)  == SIGN_EXTEND  &&      (((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG        &&      (((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode     && (((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))  || ((target_flags & 1)  &&      (((( x)->fld[ 0].rtx) )->code)  == MULT && ((   (((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG && (((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )  || (    (((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND        &&      (((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG      &&      (((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode   && (((((((((( x)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))        &&      (((((( x)->fld[ 0].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT  && ((((((( x)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2      || (((((( x)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4       || (((((( x)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )  { { if (        (((( x)->fld[ 1].rtx) )->code)  == LABEL_REF) goto      win;    if (    (((( x)->fld[ 1].rtx) )->code)  == REG && (((((( x)->fld[ 1].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto      win; } ; }        if (    (( x)->code)  == PLUS && (((    (((( x)->fld[ 1].rtx) )->code)  == REG && (((((( x)->fld[ 1].rtx) )->fld[0].rtint)  ^ 020) >= 8) )      || (    (((( x)->fld[ 1].rtx) )->code)  == SIGN_EXTEND  &&      (((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG        &&      (((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->mode)  == HImode     && (((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))  || ((target_flags & 1)  &&      (((( x)->fld[ 1].rtx) )->code)  == MULT && ((   (((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG && (((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )  || (    (((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND        &&      (((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG      &&      (((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode   && (((((((((( x)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))        &&      (((((( x)->fld[ 1].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT  && ((((((( x)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2      || (((((( x)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4       || (((((( x)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )  { { if (        (((( x)->fld[ 0].rtx) )->code)  == LABEL_REF) goto      win;    if (    (((( x)->fld[ 0].rtx) )->code)  == REG && (((((( x)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto      win; } ; } } ;    if (    (( x)->code)  == PLUS)  { if (  (((( x)->fld[ 1].rtx) )->code)  == CONST_INT    && (unsigned) (((( x)->fld[ 1].rtx) )->fld[0].rtint)  + 0x80 < 0x100)   { rtx go_temp = (( x)->fld[ 0].rtx) ; { if (    ((go_temp)->code)  == PLUS && (((       ((((go_temp)->fld[ 0].rtx) )->code)  == REG && ((((((go_temp)->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )    || (    ((((go_temp)->fld[ 0].rtx) )->code)  == SIGN_EXTEND     &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG   &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode        && ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))     || ((target_flags & 1)  &&      ((((go_temp)->fld[ 0].rtx) )->code)  == MULT    && ((   ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG && ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )        || (    ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode      && ((((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))   &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT     && (((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2 || ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4  || ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )     { { if (        ((((go_temp)->fld[ 1].rtx) )->code)  == LABEL_REF) goto      win;       if (    ((((go_temp)->fld[ 1].rtx) )->code)  == REG && ((((((go_temp)->fld[ 1].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto      win; } ; }      if (    ((go_temp)->code)  == PLUS && (((       ((((go_temp)->fld[ 1].rtx) )->code)  == REG && ((((((go_temp)->fld[ 1].rtx) )->fld[0].rtint)  ^ 020) >= 8) )    || (    ((((go_temp)->fld[ 1].rtx) )->code)  == SIGN_EXTEND     &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG   &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->mode)  == HImode        && ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))     || ((target_flags & 1)  &&      ((((go_temp)->fld[ 1].rtx) )->code)  == MULT    && ((   ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG && ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )        || (    ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode      && ((((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))   &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT     && (((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2 || ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4  || ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )     { { if (        ((((go_temp)->fld[ 0].rtx) )->code)  == LABEL_REF) goto      win;       if (    ((((go_temp)->fld[ 0].rtx) )->code)  == REG && ((((((go_temp)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto      win; } ; } } ; }        if (    (((( x)->fld[ 0].rtx) )->code)  == CONST_INT    && (unsigned) (((( x)->fld[ 0].rtx) )->fld[0].rtint)  + 0x80 < 0x100)   { rtx go_temp = (( x)->fld[ 1].rtx) ; { if (    ((go_temp)->code)  == PLUS && (((       ((((go_temp)->fld[ 0].rtx) )->code)  == REG && ((((((go_temp)->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )    || (    ((((go_temp)->fld[ 0].rtx) )->code)  == SIGN_EXTEND     &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG   &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode        && ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))     || ((target_flags & 1)  &&      ((((go_temp)->fld[ 0].rtx) )->code)  == MULT    && ((   ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG && ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )        || (    ((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode      && ((((((((((go_temp)->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))   &&      ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT     && (((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2 || ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4  || ((((((go_temp)->fld[ 0].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )     { { if (        ((((go_temp)->fld[ 1].rtx) )->code)  == LABEL_REF) goto      win;       if (    ((((go_temp)->fld[ 1].rtx) )->code)  == REG && ((((((go_temp)->fld[ 1].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto      win; } ; }      if (    ((go_temp)->code)  == PLUS && (((       ((((go_temp)->fld[ 1].rtx) )->code)  == REG && ((((((go_temp)->fld[ 1].rtx) )->fld[0].rtint)  ^ 020) >= 8) )    || (    ((((go_temp)->fld[ 1].rtx) )->code)  == SIGN_EXTEND     &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG   &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->mode)  == HImode        && ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))     || ((target_flags & 1)  &&      ((((go_temp)->fld[ 1].rtx) )->code)  == MULT    && ((   ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG && ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) )        || (    ((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode      && ((((((((((go_temp)->fld[ 1].rtx) )->fld[ 0].rtx) )->fld[ 0].rtx) )->fld[0].rtint)  ^ 020) >= 8) ))   &&      ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->code)  == CONST_INT     && (((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 2 || ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 4  || ((((((go_temp)->fld[ 1].rtx) )->fld[ 1].rtx) )->fld[0].rtint)  == 8))) )     { { if (        ((((go_temp)->fld[ 0].rtx) )->code)  == LABEL_REF) goto      win;       if (    ((((go_temp)->fld[ 0].rtx) )->code)  == REG && ((((((go_temp)->fld[ 0].rtx) )->fld[0].rtint)  & ~027) != 0) ) goto      win; } ; } } ; } } } ; } ; }    if (    ((((x)->fld[ 0].rtx) )->code)  == REG   || (    ((((x)->fld[ 0].rtx) )->code)  == SIGN_EXTEND   &&      ((((((x)->fld[ 0].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((x)->fld[ 0].rtx) )->fld[ 0].rtx) )->mode)  == HImode))    { register rtx temp = gen_reg_rtx (SImode );    register rtx val = force_operand (((x)->fld[ 1].rtx) , 0);      emit_move_insn (temp, val);     ((x)->fld[ 1].rtx)  = temp;     return x; }     else if (       ((((x)->fld[ 1].rtx) )->code)  == REG   || (    ((((x)->fld[ 1].rtx) )->code)  == SIGN_EXTEND   &&      ((((((x)->fld[ 1].rtx) )->fld[ 0].rtx) )->code)  == REG &&      ((((((x)->fld[ 1].rtx) )->fld[ 0].rtx) )->mode)  == HImode))    { register rtx temp = gen_reg_rtx (SImode );    register rtx val = force_operand (((x)->fld[ 0].rtx) , 0);      emit_move_insn (temp, val);     ((x)->fld[ 0].rtx)  = temp;     return x; }}} ;
1518
1519   if (  ((x)->code)  == PLUS)
1520     {
1521       int constant_term = 0;
1522       rtx y = eliminate_constant_term (x, &constant_term);
1523       if (constant_term == 0
1524           || ! memory_address_p (mode, y))
1525         return force_operand (x, 0);
1526
1527       y = plus_constant (copy_to_reg (y), constant_term);
1528       if (! memory_address_p (mode, y))
1529         return force_operand (x, 0);
1530       return y;
1531     }
1532   if (  ((x)->code)  == MULT ||         ((x)->code)  == MINUS)
1533     return force_operand (x, 0);
1534
1535   return force_reg (SImode , x);
1536
1537  win2:
1538   x = oldx;
1539  win:
1540   if (flag_force_addr && optimize &&    ((x)->code)  != REG
1541
1542       && ! (    ((x)->code)  == PLUS
1543             && (((x)->fld[ 0].rtx)  == frame_pointer_rtx
1544                 || ((x)->fld[ 0].rtx)  == arg_pointer_rtx)))
1545     return force_reg (SImode , x);
1546   return x;
1547 }
1548
1549 rtx
1550 memory_address_noforce (mode, x)
1551      enum machine_mode mode;
1552      rtx x;
1553 {
1554   int ambient_force_addr = flag_force_addr;
1555   rtx val;
1556
1557   flag_force_addr = 0;
1558   val = memory_address (mode, x);
1559   flag_force_addr = ambient_force_addr;
1560   return val;
1561 }
1562
1563 rtx
1564 stabilize (x)
1565      rtx x;
1566 {
1567   register rtx addr;
1568   if (  ((x)->code)  != MEM)
1569     return x;
1570   addr = ((x)->fld[ 0].rtx) ;
1571   if (rtx_unstable_p (addr))
1572     {
1573       rtx temp = copy_all_regs (addr);
1574       rtx mem;
1575       if (      ((temp)->code)  != REG)
1576         temp = copy_to_reg (temp);
1577       mem = gen_rtx (MEM,       ((x)->mode) , temp);
1578
1579       if (      ((addr)->code)  == PLUS || ((x)->in_struct) )
1580         ((mem)->in_struct)  = 1;
1581       return mem;
1582     }
1583   return x;
1584 }
1585
1586 rtx
1587 copy_to_reg (x)
1588      rtx x;
1589 {
1590   register rtx temp = gen_reg_rtx (     ((x)->mode) );
1591   emit_move_insn (temp, x);
1592   return temp;
1593 }
1594
1595 rtx
1596 copy_addr_to_reg (x)
1597      rtx x;
1598 {
1599   register rtx temp = gen_reg_rtx (SImode );
1600   emit_move_insn (temp, x);
1601   return temp;
1602 }
1603
1604 rtx
1605 copy_to_mode_reg (mode, x)
1606      enum machine_mode mode;
1607      rtx x;
1608 {
1609   register rtx temp = gen_reg_rtx (mode);
1610   if (  ((x)->mode)  != mode &&         ((x)->mode)  != VOIDmode)
1611     abort ();
1612   emit_move_insn (temp, x);
1613   return temp;
1614 }
1615
1616 rtx
1617 force_reg (mode, x)
1618      enum machine_mode mode;
1619      rtx x;
1620 {
1621   register rtx temp, insn;
1622
1623   if (  ((x)->code)  == REG)
1624     return x;
1625   temp = gen_reg_rtx (mode);
1626   insn = emit_move_insn (temp, x);
1627
1628   if (( ((x)->code)  == LABEL_REF ||    ((x)->code)  == SYMBOL_REF      ||      ((x)->code)  == CONST_INT       ||      ((x)->code)  == CONST) )
1629     ((insn)->fld[6].rtx)  = gen_rtx (EXPR_LIST, REG_EQUIV, x, ((insn)->fld[6].rtx) );
1630   return temp;
1631 }
1632
1633 rtx
1634 force_not_mem (x)
1635      rtx x;
1636 {
1637   register rtx temp;
1638   if (  ((x)->code)  != MEM)
1639     return x;
1640   temp = gen_reg_rtx (  ((x)->mode) );
1641   emit_move_insn (temp, x);
1642   return temp;
1643 }
1644
1645 rtx
1646 copy_to_suggested_reg (x, target)
1647      rtx x, target;
1648 {
1649   register rtx temp;
1650   if (target &&         ((target)->code)  == REG)
1651     temp = target;
1652   else
1653     temp = gen_reg_rtx (        ((x)->mode) );
1654   emit_move_insn (temp, x);
1655   return temp;
1656 }
1657
1658 void
1659 adjust_stack (adjust)
1660      rtx adjust;
1661 {
1662   adjust = protect_from_queue (adjust, 0);
1663
1664   emit_insn (gen_add2_insn (stack_pointer_rtx, adjust));
1665
1666 }
1667
1668 void
1669 anti_adjust_stack (adjust)
1670      rtx adjust;
1671 {
1672   adjust = protect_from_queue (adjust, 0);
1673
1674   emit_insn (gen_sub2_insn (stack_pointer_rtx, adjust));
1675
1676 }
1677
1678 rtx
1679 round_push (size)
1680      rtx size;
1681 {
1682
1683   int align = 16  / 8 ;
1684   if (align == 1)
1685     ;
1686   if (  ((size)->code)  == CONST_INT)
1687     {
1688       int new = (((size)->fld[0].rtint)  + align - 1) / align * align;
1689       if (((size)->fld[0].rtint)  != new)
1690         size = gen_rtx (CONST_INT, VOIDmode, new);
1691     }
1692   else
1693     {
1694       size = expand_divmod (0, CEIL_DIV_EXPR, SImode , size,
1695                             gen_rtx (CONST_INT, VOIDmode, align),
1696                             0, 1);
1697       size = expand_mult (SImode , size,
1698                           gen_rtx (CONST_INT, VOIDmode, align),
1699                           0, 1);
1700     }
1701
1702   return size;
1703 }
1704
1705 rtx
1706 hard_function_value (valtype, func)
1707      tree valtype;
1708      tree func;
1709 {
1710   return gen_rtx (REG, ((valtype)->type.mode) , 0) ;
1711 }
1712
1713 rtx
1714 hard_libcall_value (mode)
1715      enum machine_mode mode;
1716 {
1717   return  gen_rtx (REG, mode, 0) ;
1718 }
1719