OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [gdb/] [testsuite/] [gdb.base/] [call-ar-st.c] - Blame information for rev 227

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 227 jeremybenn
 
2
#include <stdio.h>
3
#include <stdlib.h>
4
#include <string.h>
5
 
6
/**************************************************************************
7
 * TESTS :
8
 *   -- function arguments that are enumerated types
9
 *   -- small structure arguments ( <= 64 bits )
10
 *            -- stored in registers
11
 *            -- stored on the stack
12
 *   -- large structure arguments ( > 64 bits )
13
 *            -- stored in registers
14
 *            -- stored on the stack
15
 *   -- array arguments
16
 *   -- caller is a leaf routine :
17
 *            -- use the call command from within an init routine (i.e.
18
 *               init_bit_flags, init_bit_flags_combo, init_array_rep)
19
 *   -- caller doesn't have enough space for all the function arguments :
20
 *            -- call print_long_arg_list from inside print_small_structs
21
 ***************************************************************************/
22
 
23
/* Some enumerated types -- used to test that the structureal data type is
24
 * retrieved for function arguments with typedef data types.
25
 */
26
typedef int id_int;
27
 
28
typedef enum {
29
              BLACK,
30
              BLUE,
31
              BROWN,
32
              ECRUE,
33
              GOLD,
34
              GRAY,
35
              GREEN,
36
              IVORY,
37
              MAUVE,
38
              ORANGE,
39
              PINK,
40
              PURPLE,
41
              RED,
42
              SILVER,
43
              TAN,
44
              VIOLET,
45
              WHITE,
46
              YELLOW} colors;
47
 
48
/* A large structure (> 64 bits) used to test passing large structures as
49
 * parameters
50
 */
51
 
52
struct array_rep_info_t {
53
   int   next_index[10];
54
   int   values[10];
55
   int   head;
56
};
57
 
58
/*****************************************************************************
59
 * Small structures ( <= 64 bits). These are used to test passing small
60
 * structures as parameters and test argument size promotion.
61
 *****************************************************************************/
62
 
63
 /* 64 bits
64
  */
65
struct small_rep_info_t {
66
   int   value;
67
   int   head;
68
};
69
 
70
/* 6 bits : really fits in 8 bits and is promoted to 32 bits
71
 */
72
struct bit_flags_t {
73
       unsigned alpha   :1;
74
       unsigned beta    :1;
75
       unsigned gamma   :1;
76
       unsigned delta   :1;
77
       unsigned epsilon :1;
78
       unsigned omega   :1;
79
};
80
 
81
/* 22 bits : really fits in 40 bits and is promoted to 64 bits
82
 */
83
struct bit_flags_combo_t {
84
       unsigned alpha   :1;
85
       unsigned beta    :1;
86
       char     ch1;
87
       unsigned gamma   :1;
88
       unsigned delta   :1;
89
       char     ch2;
90
       unsigned epsilon :1;
91
       unsigned omega   :1;
92
};
93
 
94
/* 64 bits
95
 */
96
struct one_double_t {
97
       double double1;
98
};
99
 
100
/* 64 bits
101
 */
102
struct two_floats_t {
103
       float float1;
104
       float float2;
105
};
106
 
107
/* 16 bits : promoted to 32 bits
108
 */
109
struct two_char_t {
110
       char ch1;
111
       char ch2;
112
};
113
 
114
/* 24 bits : promoted to 32 bits
115
 */
116
struct three_char_t {
117
       char ch1;
118
       char ch2;
119
       char ch3;
120
};
121
 
122
/* 40 bits : promoted to 64 bits
123
 */
124
struct five_char_t {
125
       char ch1;
126
       char ch2;
127
       char ch3;
128
       char ch4;
129
       char ch5;
130
};
131
 
132
/* 40 bits : promoted to 64 bits
133
 */
134
struct int_char_combo_t {
135
       int  int1;
136
       char ch1;
137
};
138
 
139
/*****************************************************************
140
 * PRINT_STUDENT_ID_SHIRT_COLOR :
141
 * IN     id_int student       -- enumerated type
142
 * IN     colors shirt         -- enumerated type
143
 *****************************************************************/
144
#ifdef PROTOTYPES
145
void print_student_id_shirt_color (id_int student, colors shirt)
146
#else
147
void print_student_id_shirt_color ( student, shirt )
148
 id_int student;
149
 colors shirt;
150
#endif
151
{
152
 
153
 printf("student id : %d\t", student);
154
 printf("shirt color : ");
155
 switch (shirt) {
156
   case BLACK :  printf("BLACK\n");
157
                 break;
158
   case BLUE :   printf("BLUE\n");
159
                 break;
160
   case BROWN :  printf("BROWN\n");
161
                 break;
162
   case ECRUE :  printf("ECRUE\n");
163
                 break;
164
   case GOLD :   printf("GOLD\n");
165
                 break;
166
   case GRAY :   printf("GRAY\n");
167
                 break;
168
   case GREEN :  printf("GREEN\n");
169
                 break;
170
   case IVORY :  printf("IVORY\n");
171
                 break;
172
   case MAUVE :  printf("MAUVE\n");
173
                 break;
174
   case ORANGE : printf("ORANGE\n");
175
                 break;
176
   case PINK :   printf("PINK\n");
177
                 break;
178
   case PURPLE : printf("PURPLE\n");
179
                 break;
180
   case RED :    printf("RED\n");
181
                 break;
182
   case SILVER : printf("SILVER\n");
183
                 break;
184
   case TAN :    printf("TAN\n");
185
                 break;
186
   case VIOLET : printf("VIOLET\n");
187
                 break;
188
   case WHITE :  printf("WHITE\n");
189
                 break;
190
   case YELLOW : printf("YELLOW\n");
191
                 break;
192
 }
193
}
194
 
195
/*****************************************************************
196
 * PRINT_CHAR_ARRAY :
197
 * IN     char  array_c[]      -- character array
198
 *****************************************************************/
199
#ifdef PROTOTYPES
200
void print_char_array (char array_c[])
201
#else
202
void print_char_array ( array_c )
203
     char    array_c[];
204
#endif
205
{
206
 
207
  int index;
208
 
209
  printf("array_c :\n");
210
  printf("=========\n\n");
211
  for (index = 0; index < 120; index++) {
212
      printf("%1c", array_c[index]);
213
      if ((index%50) == 0) printf("\n");
214
  }
215
  printf("\n\n");
216
}
217
 
218
/*****************************************************************
219
 * PRINT_DOUBLE_ARRAY :
220
 * IN     double array_d[]      -- array of doubles
221
 *****************************************************************/
222
#ifdef PROTOTYPES
223
void print_double_array (double  array_d[])
224
#else
225
void print_double_array (array_d)
226
     double  array_d[];
227
#endif
228
{
229
 
230
  int index;
231
 
232
  printf("array_d :\n");
233
  printf("=========\n\n");
234
  for (index = 0; index < 9; index++) {
235
      printf("%f  ", array_d[index]);
236
      if ((index%8) == 0) printf("\n");
237
  }
238
  printf("\n\n");
239
}
240
 
241
/*****************************************************************
242
 * PRINT_FLOAT_ARRAY:
243
 * IN     float array_f[]      -- array of floats
244
 *****************************************************************/
245
#ifdef PROTOTYPES
246
void print_float_array (float array_f[])
247
#else
248
void print_float_array ( array_f )
249
     float array_f[];
250
#endif
251
{
252
 
253
  int index;
254
 
255
  printf("array_f :\n");
256
  printf("=========\n\n");
257
  for (index = 0; index < 15; index++) {
258
      printf("%f  ", array_f[index]);
259
      if ((index%8) == 0) printf("\n");
260
 
261
  }
262
  printf("\n\n");
263
}
264
 
265
/*****************************************************************
266
 * PRINT_INT_ARRAY:
267
 * IN     int  array_i[]      -- array of integers
268
 *****************************************************************/
269
#ifdef PROTOTYPES
270
void print_int_array (int array_i[])
271
#else
272
void print_int_array ( array_i )
273
     int array_i[];
274
#endif
275
{
276
 
277
  int index;
278
 
279
  printf("array_i :\n");
280
  printf("=========\n\n");
281
  for (index = 0; index < 50; index++) {
282
      printf("%d  ", array_i[index]);
283
      if ((index%8) == 0) printf("\n");
284
  }
285
  printf("\n\n");
286
 
287
}
288
 
289
/*****************************************************************
290
 * PRINT_ALL_ARRAYS:
291
 * IN     int  array_i[]      -- array of integers
292
 * IN     char array_c[]      -- array of characters
293
 * IN     float array_f[]      -- array of floats
294
 * IN     double array_d[]      -- array of doubles
295
 *****************************************************************/
296
#ifdef PROTOTYPES
297
void print_all_arrays(int array_i[], char array_c[], float array_f[], double array_d[])
298
#else
299
void print_all_arrays( array_i, array_c, array_f, array_d )
300
     int array_i[];
301
     char array_c[];
302
     float array_f[];
303
     double array_d[];
304
#endif
305
{
306
  print_int_array(array_i);
307
  print_char_array(array_c);
308
  print_float_array(array_f);
309
  print_double_array(array_d);
310
}
311
 
312
/*****************************************************************
313
 * LOOP_COUNT :
314
 * A do nothing function. Used to provide a point at which calls can be made.
315
 *****************************************************************/
316
void loop_count () {
317
 
318
     int index;
319
 
320
     for (index=0; index<4; index++);
321
}
322
 
323
/*****************************************************************
324
 * COMPUTE_WITH_SMALL_STRUCTS :
325
 * A do nothing function. Used to provide a point at which calls can be made.
326
 * IN  int seed
327
 *****************************************************************/
328
#ifdef PROTOTYPES
329
void compute_with_small_structs (int seed)
330
#else
331
void compute_with_small_structs ( seed )
332
 int seed;
333
#endif
334
{
335
 
336
     struct small_rep_info_t array[4];
337
     int index;
338
 
339
     for (index = 0; index < 4; index++) {
340
         array[index].value = index*seed;
341
         array[index].head = (index+1)*seed;
342
     }
343
 
344
     for (index = 1; index < 4; index++) {
345
         array[index].value = array[index].value + array[index-1].value;
346
         array[index].head = array[index].head + array[index-1].head;
347
     }
348
}
349
 
350
/*****************************************************************
351
 * INIT_BIT_FLAGS :
352
 * Initializes a bit_flags_t structure. Can call this function see
353
 * the call command behavior when integer arguments do not fit into
354
 * registers and must be placed on the stack.
355
 * OUT struct bit_flags_t *bit_flags -- structure to be filled
356
 * IN  unsigned a  -- 0 or 1
357
 * IN  unsigned b  -- 0 or 1
358
 * IN  unsigned g  -- 0 or 1
359
 * IN  unsigned d  -- 0 or 1
360
 * IN  unsigned e  -- 0 or 1
361
 * IN  unsigned o  -- 0 or 1
362
 *****************************************************************/
363
#ifdef PROTOTYPES
364
void init_bit_flags (struct bit_flags_t *bit_flags, unsigned a, unsigned b, unsigned g, unsigned d, unsigned e, unsigned o)
365
#else
366
void init_bit_flags ( bit_flags, a, b, g, d, e, o )
367
struct bit_flags_t *bit_flags;
368
unsigned a;
369
unsigned b;
370
unsigned g;
371
unsigned d;
372
unsigned e;
373
unsigned o;
374
#endif
375
{
376
 
377
   bit_flags->alpha = a;
378
   bit_flags->beta = b;
379
   bit_flags->gamma = g;
380
   bit_flags->delta = d;
381
   bit_flags->epsilon = e;
382
   bit_flags->omega = o;
383
}
384
 
385
/*****************************************************************
386
 * INIT_BIT_FLAGS_COMBO :
387
 * Initializes a bit_flags_combo_t structure. Can call this function
388
 * to see the call command behavior when integer and character arguments
389
 * do not fit into registers and must be placed on the stack.
390
 * OUT struct bit_flags_combo_t *bit_flags_combo -- structure to fill
391
 * IN  unsigned a  -- 0 or 1
392
 * IN  unsigned b  -- 0 or 1
393
 * IN  char     ch1
394
 * IN  unsigned g  -- 0 or 1
395
 * IN  unsigned d  -- 0 or 1
396
 * IN  char     ch2
397
 * IN  unsigned e  -- 0 or 1
398
 * IN  unsigned o  -- 0 or 1
399
 *****************************************************************/
400
#ifdef PROTOTYPES
401
void init_bit_flags_combo (struct bit_flags_combo_t *bit_flags_combo, unsigned a, unsigned b, char ch1, unsigned g, unsigned d, char ch2, unsigned e, unsigned o)
402
#else
403
void init_bit_flags_combo ( bit_flags_combo, a, b, ch1, g, d, ch2, e, o )
404
     struct bit_flags_combo_t *bit_flags_combo;
405
     unsigned a;
406
     unsigned b;
407
     char     ch1;
408
     unsigned g;
409
     unsigned d;
410
     char     ch2;
411
     unsigned e;
412
     unsigned o;
413
#endif
414
{
415
 
416
   bit_flags_combo->alpha = a;
417
   bit_flags_combo->beta = b;
418
   bit_flags_combo->ch1 = ch1;
419
   bit_flags_combo->gamma = g;
420
   bit_flags_combo->delta = d;
421
   bit_flags_combo->ch2 = ch2;
422
   bit_flags_combo->epsilon = e;
423
   bit_flags_combo->omega = o;
424
}
425
 
426
 
427
/*****************************************************************
428
 * INIT_ONE_DOUBLE :
429
 * OUT  struct one_double_t *one_double  -- structure to fill
430
 * IN   double init_val
431
 *****************************************************************/
432
#ifdef PROTOTYPES
433
void init_one_double (struct one_double_t *one_double, double init_val)
434
#else
435
void init_one_double ( one_double, init_val )
436
     struct one_double_t *one_double;
437
     double init_val;
438
#endif
439
{
440
 
441
     one_double->double1  = init_val;
442
}
443
 
444
/*****************************************************************
445
 * INIT_TWO_FLOATS :
446
 * OUT struct two_floats_t *two_floats -- structure to be filled
447
 * IN  float init_val1
448
 * IN  float init_val2
449
 *****************************************************************/
450
#ifdef PROTOTYPES
451
void init_two_floats (struct two_floats_t *two_floats, float init_val1, float init_val2)
452
#else
453
void init_two_floats ( two_floats, init_val1, init_val2 )
454
     struct two_floats_t *two_floats;
455
     float init_val1;
456
     float init_val2;
457
#endif
458
{
459
     two_floats->float1 = init_val1;
460
     two_floats->float2 = init_val2;
461
}
462
 
463
/*****************************************************************
464
 * INIT_TWO_CHARS :
465
 * OUT struct two_char_t *two_char -- structure to be filled
466
 * IN  char init_val1
467
 * IN  char init_val2
468
 *****************************************************************/
469
#ifdef PROTOTYPES
470
void init_two_chars (struct two_char_t *two_char, char init_val1, char init_val2)
471
#else
472
void init_two_chars ( two_char, init_val1, init_val2 )
473
     struct two_char_t *two_char;
474
     char init_val1;
475
     char init_val2;
476
#endif
477
{
478
 
479
     two_char->ch1 = init_val1;
480
     two_char->ch2 = init_val2;
481
}
482
 
483
/*****************************************************************
484
 * INIT_THREE_CHARS :
485
 * OUT struct three_char_t *three_char -- structure to be filled
486
 * IN  char init_val1
487
 * IN  char init_val2
488
 * IN  char init_val3
489
 *****************************************************************/
490
#ifdef PROTOTYPES
491
void init_three_chars (struct three_char_t *three_char, char init_val1, char init_val2, char init_val3)
492
#else
493
void init_three_chars ( three_char, init_val1, init_val2, init_val3 )
494
     struct three_char_t *three_char;
495
     char init_val1;
496
     char init_val2;
497
     char init_val3;
498
#endif
499
{
500
 
501
     three_char->ch1 = init_val1;
502
     three_char->ch2 = init_val2;
503
     three_char->ch3 = init_val3;
504
}
505
 
506
/*****************************************************************
507
 * INIT_FIVE_CHARS :
508
 * OUT struct five_char_t *five_char -- structure to be filled
509
 * IN  char init_val1
510
 * IN  char init_val2
511
 * IN  char init_val3
512
 * IN  char init_val4
513
 * IN  char init_val5
514
 *****************************************************************/
515
#ifdef PROTOTYPES
516
void init_five_chars (struct five_char_t *five_char, char init_val1, char init_val2, char init_val3, char init_val4, char init_val5)
517
#else
518
void init_five_chars ( five_char, init_val1, init_val2, init_val3,init_val4,init_val5 )
519
     struct five_char_t *five_char;
520
     char init_val1;
521
     char init_val2;
522
     char init_val3;
523
     char init_val4;
524
     char init_val5;
525
#endif
526
{
527
     five_char->ch1 = init_val1;
528
     five_char->ch2 = init_val2;
529
     five_char->ch3 = init_val3;
530
     five_char->ch4 = init_val4;
531
     five_char->ch5 = init_val5;
532
}
533
 
534
/*****************************************************************
535
 * INIT_INT_CHAR_COMBO :
536
 * OUT struct int_char_combo_t *combo -- structure to be filled
537
 * IN  int  init_val1
538
 * IN  char init_val2
539
 *****************************************************************/
540
#ifdef PROTOTYPES
541
void init_int_char_combo (struct int_char_combo_t *combo, int init_val1, char init_val2)
542
#else
543
void init_int_char_combo ( combo, init_val1, init_val2 )
544
     struct int_char_combo_t *combo;
545
     int init_val1;
546
     char init_val2;
547
#endif
548
{
549
 
550
     combo->int1 = init_val1;
551
     combo->ch1 = init_val2;
552
}
553
 
554
/*****************************************************************
555
 * INIT_STRUCT_REP :
556
 * OUT struct small_rep_into_t *small_struct -- structure to be filled
557
 * IN  int  seed
558
 *****************************************************************/
559
#ifdef PROTOTYPES
560
void init_struct_rep(struct small_rep_info_t *small_struct, int seed)
561
#else
562
void init_struct_rep( small_struct, seed )
563
     struct small_rep_info_t *small_struct;
564
     int    seed;
565
#endif
566
{
567
 
568
      small_struct->value = 2 + (seed*2);
569
      small_struct->head = 0;
570
}
571
 
572
/*****************************************************************
573
 * INIT_SMALL_STRUCTS :
574
 * Takes all the small structures as input and calls the appropriate
575
 * initialization routine for each structure
576
 *****************************************************************/
577
#ifdef PROTOTYPES
578
void init_small_structs (
579
     struct small_rep_info_t  *struct1,
580
     struct small_rep_info_t  *struct2,
581
     struct small_rep_info_t  *struct3,
582
     struct small_rep_info_t  *struct4,
583
     struct bit_flags_t       *flags,
584
     struct bit_flags_combo_t *flags_combo,
585
     struct three_char_t      *three_char,
586
     struct five_char_t       *five_char,
587
     struct int_char_combo_t  *int_char_combo,
588
     struct one_double_t      *d1,
589
     struct one_double_t      *d2,
590
     struct one_double_t      *d3,
591
     struct two_floats_t      *f1,
592
     struct two_floats_t      *f2,
593
     struct two_floats_t      *f3)
594
#else
595
void init_small_structs (struct1, struct2, struct3,struct4,flags,flags_combo,
596
three_char, five_char,int_char_combo, d1, d2,d3,f1,f2,f3)
597
     struct small_rep_info_t  *struct1;
598
     struct small_rep_info_t  *struct2;
599
     struct small_rep_info_t  *struct3;
600
     struct small_rep_info_t  *struct4;
601
     struct bit_flags_t       *flags;
602
     struct bit_flags_combo_t *flags_combo;
603
     struct three_char_t      *three_char;
604
     struct five_char_t       *five_char;
605
     struct int_char_combo_t  *int_char_combo;
606
     struct one_double_t      *d1;
607
     struct one_double_t      *d2;
608
     struct one_double_t      *d3;
609
     struct two_floats_t      *f1;
610
     struct two_floats_t      *f2;
611
     struct two_floats_t      *f3;
612
#endif
613
{
614
 
615
     init_bit_flags(flags, (unsigned)1, (unsigned)0, (unsigned)1,
616
                           (unsigned)0, (unsigned)1, (unsigned)0 );
617
     init_bit_flags_combo(flags_combo, (unsigned)1, (unsigned)0, 'y',
618
                                       (unsigned)1, (unsigned)0, 'n',
619
                                       (unsigned)1, (unsigned)0 );
620
     init_three_chars(three_char, 'a', 'b', 'c');
621
     init_five_chars(five_char, 'l', 'm', 'n', 'o', 'p');
622
     init_int_char_combo(int_char_combo, 123, 'z');
623
     init_struct_rep(struct1, 2);
624
     init_struct_rep(struct2, 4);
625
     init_struct_rep(struct3, 5);
626
     init_struct_rep(struct4, 6);
627
     init_one_double ( d1, 10.5);
628
     init_one_double ( d2, -3.375);
629
     init_one_double ( d3, 675.09375);
630
     init_two_floats ( f1, 45.234, 43.6);
631
     init_two_floats ( f2, 78.01, 122.10);
632
     init_two_floats ( f3, -1232.345, -199.21);
633
}
634
 
635
/*****************************************************************
636
 * PRINT_TEN_DOUBLES :
637
 * ?????????????????????????????
638
 ****************************************************************/
639
#ifdef PROTOTYPES
640
void print_ten_doubles (
641
     double d1,
642
     double d2,
643
     double d3,
644
     double d4,
645
     double d5,
646
     double d6,
647
     double d7,
648
     double d8,
649
     double d9,
650
     double d10)
651
#else
652
void print_ten_doubles ( d1, d2, d3, d4, d5, d6, d7, d8, d9, d10 )
653
     double d1;
654
     double d2;
655
     double d3;
656
     double d4;
657
     double d5;
658
     double d6;
659
     double d7;
660
     double d8;
661
     double d9;
662
     double d10;
663
#endif
664
{
665
 
666
  printf("Two Doubles : %f\t%f\n", d1, d2);
667
  printf("Two Doubles : %f\t%f\n", d3, d4);
668
  printf("Two Doubles : %f\t%f\n", d5, d6);
669
  printf("Two Doubles : %f\t%f\n", d7, d8);
670
  printf("Two Doubles : %f\t%f\n", d9, d10);
671
}
672
 
673
/*****************************************************************
674
 * PRINT_BIT_FLAGS :
675
 * IN struct bit_flags_t bit_flags
676
 ****************************************************************/
677
#ifdef PROTOTYPES
678
void print_bit_flags (struct bit_flags_t bit_flags)
679
#else
680
void print_bit_flags ( bit_flags )
681
struct bit_flags_t bit_flags;
682
#endif
683
{
684
 
685
     if (bit_flags.alpha) printf("alpha\n");
686
     if (bit_flags.beta) printf("beta\n");
687
     if (bit_flags.gamma) printf("gamma\n");
688
     if (bit_flags.delta) printf("delta\n");
689
     if (bit_flags.epsilon) printf("epsilon\n");
690
     if (bit_flags.omega) printf("omega\n");
691
}
692
 
693
/*****************************************************************
694
 * PRINT_BIT_FLAGS_COMBO :
695
 * IN struct bit_flags_combo_t bit_flags_combo
696
 ****************************************************************/
697
#ifdef PROTOTYPES
698
void print_bit_flags_combo (struct bit_flags_combo_t bit_flags_combo)
699
#else
700
void print_bit_flags_combo ( bit_flags_combo )
701
     struct bit_flags_combo_t bit_flags_combo;
702
#endif
703
{
704
 
705
     if (bit_flags_combo.alpha) printf("alpha\n");
706
     if (bit_flags_combo.beta) printf("beta\n");
707
     if (bit_flags_combo.gamma) printf("gamma\n");
708
     if (bit_flags_combo.delta) printf("delta\n");
709
     if (bit_flags_combo.epsilon) printf("epsilon\n");
710
     if (bit_flags_combo.omega) printf("omega\n");
711
     printf("ch1: %c\tch2: %c\n", bit_flags_combo.ch1, bit_flags_combo.ch2);
712
}
713
 
714
/*****************************************************************
715
 * PRINT_ONE_DOUBLE :
716
 * IN struct one_double_t one_double
717
 ****************************************************************/
718
#ifdef PROTOTYPES
719
void print_one_double (struct one_double_t one_double)
720
#else
721
void print_one_double ( one_double )
722
struct one_double_t one_double;
723
#endif
724
{
725
 
726
     printf("Contents of one_double_t: \n\n");
727
     printf("%f\n", one_double.double1);
728
}
729
 
730
/*****************************************************************
731
 * PRINT_TWO_FLOATS :
732
 * IN struct two_floats_t two_floats
733
 ****************************************************************/
734
#ifdef PROTOTYPES
735
void print_two_floats (struct two_floats_t two_floats)
736
#else
737
void print_two_floats ( two_floats )
738
struct two_floats_t two_floats;
739
#endif
740
{
741
 
742
     printf("Contents of two_floats_t: \n\n");
743
     printf("%f\t%f\n", two_floats.float1, two_floats.float2);
744
}
745
 
746
/*****************************************************************
747
 * PRINT_TWO_CHARS :
748
 * IN struct two_char_t two_char
749
 ****************************************************************/
750
#ifdef PROTOTYPES
751
void print_two_chars (struct two_char_t two_char)
752
#else
753
void print_two_chars ( two_char )
754
struct two_char_t two_char;
755
#endif
756
{
757
 
758
     printf("Contents of two_char_t: \n\n");
759
     printf("%c\t%c\n", two_char.ch1, two_char.ch2);
760
}
761
 
762
/*****************************************************************
763
 * PRINT_THREE_CHARS :
764
 * IN struct three_char_t three_char
765
 ****************************************************************/
766
#ifdef PROTOTYPES
767
void print_three_chars (struct three_char_t three_char)
768
#else
769
void print_three_chars ( three_char )
770
struct three_char_t three_char;
771
#endif
772
{
773
 
774
     printf("Contents of three_char_t: \n\n");
775
     printf("%c\t%c\t%c\n", three_char.ch1, three_char.ch2, three_char.ch3);
776
}
777
 
778
/*****************************************************************
779
 * PRINT_FIVE_CHARS :
780
 * IN struct five_char_t five_char
781
 ****************************************************************/
782
#ifdef PROTOTYPES
783
void print_five_chars (struct five_char_t five_char)
784
#else
785
void print_five_chars ( five_char )
786
struct five_char_t five_char;
787
#endif
788
{
789
 
790
     printf("Contents of five_char_t: \n\n");
791
     printf("%c\t%c\t%c\t%c\t%c\n", five_char.ch1, five_char.ch2,
792
                                    five_char.ch3, five_char.ch4,
793
                                    five_char.ch5);
794
}
795
 
796
/*****************************************************************
797
 * PRINT_INT_CHAR_COMBO :
798
 * IN struct int_char_combo_t int_char_combo
799
 ****************************************************************/
800
#ifdef PROTOTYPES
801
void print_int_char_combo (struct int_char_combo_t int_char_combo)
802
#else
803
void print_int_char_combo ( int_char_combo )
804
struct int_char_combo_t int_char_combo;
805
#endif
806
{
807
 
808
     printf("Contents of int_char_combo_t: \n\n");
809
     printf("%d\t%c\n", int_char_combo.int1, int_char_combo.ch1);
810
}
811
 
812
/*****************************************************************
813
 * PRINT_STRUCT_REP :
814
 * The last parameter must go onto the stack rather than into a register.
815
 * This is a good function to call to test small structures.
816
 * IN struct small_rep_info_t  struct1
817
 * IN struct small_rep_info_t  struct2
818
 * IN struct small_rep_info_t  struct3
819
 ****************************************************************/
820
#ifdef PROTOTYPES
821
void print_struct_rep(
822
     struct small_rep_info_t struct1,
823
     struct small_rep_info_t struct2,
824
     struct small_rep_info_t struct3)
825
#else
826
void print_struct_rep( struct1, struct2, struct3)
827
     struct small_rep_info_t struct1;
828
     struct small_rep_info_t struct2;
829
     struct small_rep_info_t struct3;
830
#endif
831
{
832
 
833
 
834
  printf("Contents of struct1: \n\n");
835
  printf("%10d%10d\n", struct1.value, struct1.head);
836
  printf("Contents of struct2: \n\n");
837
  printf("%10d%10d\n", struct2.value, struct2.head);
838
  printf("Contents of struct3: \n\n");
839
  printf("%10d%10d\n", struct3.value, struct3.head);
840
 
841
}
842
 
843
/*****************************************************************
844
 * SUM_STRUCT_PRINT :
845
 * The last two parameters must go onto the stack rather than into a register.
846
 * This is a good function to call to test small structures.
847
 * IN struct small_rep_info_t  struct1
848
 * IN struct small_rep_info_t  struct2
849
 * IN struct small_rep_info_t  struct3
850
 * IN struct small_rep_info_t  struct4
851
 ****************************************************************/
852
#ifdef PROTOTYPES
853
void sum_struct_print (
854
     int seed,
855
     struct small_rep_info_t struct1,
856
     struct small_rep_info_t struct2,
857
     struct small_rep_info_t struct3,
858
     struct small_rep_info_t struct4)
859
#else
860
void sum_struct_print ( seed, struct1, struct2, struct3, struct4)
861
     int seed;
862
     struct small_rep_info_t struct1;
863
     struct small_rep_info_t struct2;
864
     struct small_rep_info_t struct3;
865
     struct small_rep_info_t struct4;
866
#endif
867
{
868
     int sum;
869
 
870
     printf("Sum of the 4 struct values and seed : \n\n");
871
     sum = seed + struct1.value + struct2.value + struct3.value + struct4.value;
872
     printf("%10d\n", sum);
873
}
874
 
875
/*****************************************************************
876
 * PRINT_SMALL_STRUCTS :
877
 * This is a good function to call to test small structures.
878
 * All of the small structures of odd sizes (40 bits, 8bits, etc.)
879
 * are pushed onto the stack.
880
 ****************************************************************/
881
#ifdef PROTOTYPES
882
void print_small_structs (
883
     struct small_rep_info_t  struct1,
884
     struct small_rep_info_t  struct2,
885
     struct small_rep_info_t  struct3,
886
     struct small_rep_info_t  struct4,
887
     struct bit_flags_t       flags,
888
     struct bit_flags_combo_t flags_combo,
889
     struct three_char_t      three_char,
890
     struct five_char_t       five_char,
891
     struct int_char_combo_t  int_char_combo,
892
     struct one_double_t      d1,
893
     struct one_double_t      d2,
894
     struct one_double_t      d3,
895
     struct two_floats_t      f1,
896
     struct two_floats_t      f2,
897
     struct two_floats_t      f3)
898
#else
899
void print_small_structs ( struct1, struct2, struct3,  struct4, flags,
900
flags_combo, three_char, five_char, int_char_combo, d1, d2,d3,f1,f2,f3)
901
     struct small_rep_info_t  struct1;
902
     struct small_rep_info_t  struct2;
903
     struct small_rep_info_t  struct3;
904
     struct small_rep_info_t  struct4;
905
     struct bit_flags_t       flags;
906
     struct bit_flags_combo_t flags_combo;
907
     struct three_char_t      three_char;
908
     struct five_char_t       five_char;
909
     struct int_char_combo_t  int_char_combo;
910
     struct one_double_t      d1;
911
     struct one_double_t      d2;
912
     struct one_double_t      d3;
913
     struct two_floats_t      f1;
914
     struct two_floats_t      f2;
915
     struct two_floats_t      f3;
916
#endif
917
{
918
   print_bit_flags(flags);
919
   print_bit_flags_combo(flags_combo);
920
   print_three_chars(three_char);
921
   print_five_chars(five_char);
922
   print_int_char_combo(int_char_combo);
923
   sum_struct_print(10, struct1, struct2, struct3, struct4);
924
   print_struct_rep(struct1, struct2, struct3);
925
   print_one_double(d1);
926
   print_one_double(d2);
927
   print_one_double(d3);
928
   print_two_floats(f1);
929
   print_two_floats(f2);
930
   print_two_floats(f3);
931
}
932
 
933
/*****************************************************************
934
 * PRINT_LONG_ARG_LIST :
935
 * This is a good function to call to test small structures.
936
 * The first two parameters ( the doubles ) go into registers. The
937
 * remaining arguments are pushed onto the stack. Depending on where
938
 * print_long_arg_list is called from, the size of the argument list
939
 * may force more space to be pushed onto the stack as part of the callers
940
 * frame.
941
 ****************************************************************/
942
#ifdef PROTOTYPES
943
void print_long_arg_list (
944
     double a,
945
     double b,
946
     int c,
947
     int d,
948
     int e,
949
     int f,
950
     struct small_rep_info_t  struct1,
951
     struct small_rep_info_t  struct2,
952
     struct small_rep_info_t  struct3,
953
     struct small_rep_info_t  struct4,
954
     struct bit_flags_t       flags,
955
     struct bit_flags_combo_t flags_combo,
956
     struct three_char_t      three_char,
957
     struct five_char_t       five_char,
958
     struct int_char_combo_t  int_char_combo,
959
     struct one_double_t      d1,
960
     struct one_double_t      d2,
961
     struct one_double_t      d3,
962
     struct two_floats_t      f1,
963
     struct two_floats_t      f2,
964
     struct two_floats_t      f3)
965
#else
966
void print_long_arg_list ( a, b, c, d, e, f, struct1, struct2, struct3,
967
struct4, flags, flags_combo, three_char, five_char, int_char_combo, d1,d2,d3,
968
f1, f2, f3 )
969
     double a;
970
     double b;
971
     int c;
972
     int d;
973
     int e;
974
     int f;
975
     struct small_rep_info_t  struct1;
976
     struct small_rep_info_t  struct2;
977
     struct small_rep_info_t  struct3;
978
     struct small_rep_info_t  struct4;
979
     struct bit_flags_t       flags;
980
     struct bit_flags_combo_t flags_combo;
981
     struct three_char_t      three_char;
982
     struct five_char_t       five_char;
983
     struct int_char_combo_t  int_char_combo;
984
     struct one_double_t      d1;
985
     struct one_double_t      d2;
986
     struct one_double_t      d3;
987
     struct two_floats_t      f1;
988
     struct two_floats_t      f2;
989
     struct two_floats_t      f3;
990
#endif
991
{
992
    printf("double : %f\n", a);
993
    printf("double : %f\n", b);
994
    printf("int : %d\n", c);
995
    printf("int : %d\n", d);
996
    printf("int : %d\n", e);
997
    printf("int : %d\n", f);
998
    print_small_structs( struct1, struct2, struct3, struct4, flags, flags_combo,
999
                         three_char, five_char, int_char_combo, d1, d2, d3,
1000
                         f1, f2, f3);
1001
}
1002
 
1003
 
1004
#ifdef PROTOTYPES
1005
void print_one_large_struct (struct array_rep_info_t linked_list1)
1006
#else
1007
void print_one_large_struct( linked_list1 )
1008
     struct array_rep_info_t linked_list1;
1009
#endif
1010
{
1011
 
1012
 /* printf("Contents of linked list1: \n\n");
1013
  printf("Element Value | Index of Next Element\n");
1014
  printf("-------------------------------------\n");
1015
  printf("              |                      \n");*/
1016
  /*for (index = 0; index < 10; index++) {*/
1017
 
1018
      printf("%10d%10d\n", linked_list1.values[0],
1019
                           linked_list1.next_index[0]);
1020
  /*}*/
1021
}
1022
 
1023
/*****************************************************************
1024
 * PRINT_ARRAY_REP :
1025
 * The three structure parameters should fit into registers.
1026
 * IN struct array_rep_info_t linked_list1
1027
 * IN struct array_rep_info_t linked_list2
1028
 * IN struct array_rep_info_t linked_list3
1029
 ****************************************************************/
1030
#ifdef PROTOTYPES
1031
void print_array_rep(
1032
     struct array_rep_info_t linked_list1,
1033
     struct array_rep_info_t linked_list2,
1034
     struct array_rep_info_t linked_list3)
1035
#else
1036
void print_array_rep( linked_list1, linked_list2, linked_list3 )
1037
     struct array_rep_info_t linked_list1;
1038
     struct array_rep_info_t linked_list2;
1039
     struct array_rep_info_t linked_list3;
1040
#endif
1041
{
1042
 
1043
  int index;
1044
 
1045
  printf("Contents of linked list1: \n\n");
1046
  printf("Element Value | Index of Next Element\n");
1047
  printf("-------------------------------------\n");
1048
  printf("              |                      \n");
1049
  for (index = 0; index < 10; index++) {
1050
 
1051
      printf("%10d%10d\n", linked_list1.values[index],
1052
                           linked_list1.next_index[index]);
1053
  }
1054
 
1055
  printf("Contents of linked list2: \n\n");
1056
  printf("Element Value | Index of Next Element\n");
1057
  printf("-------------------------------------\n");
1058
  printf("              |                      \n");
1059
  for (index = 0; index < 10; index++) {
1060
 
1061
      printf("%10d%10d\n", linked_list2.values[index],
1062
                           linked_list2.next_index[index]);
1063
  }
1064
 
1065
  printf("Contents of linked list3: \n\n");
1066
  printf("Element Value | Index of Next Element\n");
1067
  printf("-------------------------------------\n");
1068
  printf("              |                      \n");
1069
  for (index = 0; index < 10; index++) {
1070
 
1071
      printf("%10d%10d\n", linked_list3.values[index],
1072
                           linked_list3.next_index[index]);
1073
  }
1074
 
1075
}
1076
 
1077
/*****************************************************************
1078
 * SUM_ARRAY_PRINT :
1079
 * The last structure parameter must be pushed onto the stack
1080
 * IN int    seed
1081
 * IN struct array_rep_info_t linked_list1
1082
 * IN struct array_rep_info_t linked_list2
1083
 * IN struct array_rep_info_t linked_list3
1084
 * IN struct array_rep_info_t linked_list4
1085
 ****************************************************************/
1086
#ifdef PROTOTYPES
1087
void sum_array_print (
1088
     int seed,
1089
     struct array_rep_info_t linked_list1,
1090
     struct array_rep_info_t linked_list2,
1091
     struct array_rep_info_t linked_list3,
1092
     struct array_rep_info_t linked_list4)
1093
#else
1094
void sum_array_print ( seed, linked_list1, linked_list2, linked_list3,linked_list4)
1095
     int seed;
1096
     struct array_rep_info_t linked_list1;
1097
     struct array_rep_info_t linked_list2;
1098
     struct array_rep_info_t linked_list3;
1099
     struct array_rep_info_t linked_list4;
1100
#endif
1101
{
1102
     int index;
1103
     int sum;
1104
 
1105
     printf("Sum of 4 arrays, by element (add in seed as well): \n\n");
1106
     printf("Seed: %d\n", seed);
1107
     printf("Element Index | Sum \n");
1108
     printf("-------------------------\n");
1109
     printf("              |          \n");
1110
 
1111
     for (index = 0; index < 10; index++) {
1112
 
1113
         sum = seed + linked_list1.values[index] + linked_list2.values[index] +
1114
               linked_list3.values[index] + linked_list4.values[index];
1115
         printf("%10d%10d\n", index, sum);
1116
     }
1117
}
1118
 
1119
/*****************************************************************
1120
 * INIT_ARRAY_REP :
1121
 * IN struct array_rep_info_t *linked_list
1122
 * IN int    seed
1123
 ****************************************************************/
1124
#ifdef PROTOTYPES
1125
void init_array_rep(
1126
     struct array_rep_info_t *linked_list,
1127
     int    seed)
1128
#else
1129
void init_array_rep( linked_list, seed )
1130
     struct array_rep_info_t *linked_list;
1131
     int    seed;
1132
#endif
1133
{
1134
 
1135
  int index;
1136
 
1137
  for (index = 0; index < 10; index++) {
1138
 
1139
      linked_list->values[index] = (2*index) + (seed*2);
1140
      linked_list->next_index[index] = index + 1;
1141
  }
1142
  linked_list->head = 0;
1143
}
1144
 
1145
 
1146
int main ()  {
1147
 
1148
  /* variables for array and enumerated type testing
1149
   */
1150
  static char     char_array[121];
1151
  static double   double_array[9];
1152
  static float    float_array[15];
1153
  static int      integer_array[50];
1154
  static int      index;
1155
  static id_int   student_id = 23;
1156
  static colors   my_shirt = YELLOW;
1157
 
1158
  /* variables for large structure testing
1159
   */
1160
  static int number = 10;
1161
  static struct array_rep_info_t *list1;
1162
  static struct array_rep_info_t *list2;
1163
  static struct array_rep_info_t *list3;
1164
  static struct array_rep_info_t *list4;
1165
 
1166
  /* variables for testing a very long argument list
1167
   */
1168
   static double                    a;
1169
   static double                    b;
1170
   static int                       c;
1171
   static int                       d;
1172
   static int                       e;
1173
   static int                       f;
1174
 
1175
  /* variables for testing a small structures and a very long argument list
1176
   */
1177
   static struct small_rep_info_t  *struct1;
1178
   static struct small_rep_info_t  *struct2;
1179
   static struct small_rep_info_t  *struct3;
1180
   static struct small_rep_info_t  *struct4;
1181
   static struct bit_flags_t       *flags;
1182
   static struct bit_flags_combo_t *flags_combo;
1183
   static struct three_char_t      *three_char;
1184
   static struct five_char_t       *five_char;
1185
   static struct int_char_combo_t  *int_char_combo;
1186
   static struct one_double_t      *d1;
1187
   static struct one_double_t      *d2;
1188
   static struct one_double_t      *d3;
1189
   static struct two_floats_t      *f1;
1190
   static struct two_floats_t      *f2;
1191
   static struct two_floats_t      *f3;
1192
 
1193
  /* Initialize arrays
1194
   */
1195
  for (index = 0; index < 120; index++) {
1196
      if ((index%2) == 0) char_array[index] = 'Z';
1197
         else char_array[index] = 'a';
1198
  }
1199
  char_array[120] = '\0';
1200
 
1201
  for (index = 0; index < 9; index++) {
1202
      double_array[index] = index*23.4567;
1203
  }
1204
 
1205
  for (index = 0; index < 15; index++) {
1206
      float_array[index] = index/7.02;
1207
  }
1208
 
1209
  for (index = 0; index < 50; index++) {
1210
      integer_array[index] = -index;
1211
  }
1212
 
1213
  /* Print arrays
1214
   */
1215
  print_char_array(char_array);
1216
  print_double_array(double_array);
1217
  print_float_array(float_array);
1218
  print_student_id_shirt_color(student_id, my_shirt);
1219
  print_int_array(integer_array);
1220
  print_all_arrays(integer_array, char_array, float_array, double_array);
1221
 
1222
  /* Allocate space for large structures
1223
   */
1224
  list1 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
1225
  list2 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
1226
  list3 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
1227
  list4 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
1228
 
1229
  /* Initialize large structures
1230
   */
1231
  init_array_rep(list1, 2);
1232
  init_array_rep(list2, 4);
1233
  init_array_rep(list3, 5);
1234
  init_array_rep(list4, 10);
1235
  printf("HELLO WORLD\n");
1236
  printf("BYE BYE FOR NOW\n");
1237
  printf("VERY GREEN GRASS\n");
1238
 
1239
  /* Print large structures
1240
   */
1241
  sum_array_print(10, *list1, *list2, *list3, *list4);
1242
  print_array_rep(*list1, *list2, *list3);
1243
  print_one_large_struct(*list1);
1244
 
1245
  /* Allocate space for small structures
1246
   */
1247
  struct1     = (struct small_rep_info_t  *)malloc(sizeof(struct small_rep_info_t));
1248
  struct2     = (struct small_rep_info_t  *)malloc(sizeof(struct small_rep_info_t));
1249
  struct3     = (struct small_rep_info_t  *)malloc(sizeof(struct small_rep_info_t));
1250
  struct4     = (struct small_rep_info_t  *)malloc(sizeof(struct small_rep_info_t));
1251
  flags       = (struct bit_flags_t *)malloc(sizeof(struct bit_flags_t));
1252
  flags_combo = (struct bit_flags_combo_t *)malloc(sizeof(struct bit_flags_combo_t));
1253
  three_char  = (struct three_char_t *)malloc(sizeof(struct three_char_t));
1254
  five_char   = (struct five_char_t *)malloc(sizeof(struct five_char_t));
1255
  int_char_combo = (struct int_char_combo_t *)malloc(sizeof(struct int_char_combo_t));
1256
 
1257
  d1 = (struct one_double_t *)malloc(sizeof(struct one_double_t));
1258
  d2 = (struct one_double_t *)malloc(sizeof(struct one_double_t));
1259
  d3 = (struct one_double_t *)malloc(sizeof(struct one_double_t));
1260
 
1261
  f1 = (struct two_floats_t *)malloc(sizeof(struct two_floats_t));
1262
  f2 = (struct two_floats_t *)malloc(sizeof(struct two_floats_t));
1263
  f3 = (struct two_floats_t *)malloc(sizeof(struct two_floats_t));
1264
 
1265
  /* Initialize small structures
1266
   */
1267
  init_small_structs ( struct1, struct2, struct3, struct4, flags,
1268
                       flags_combo, three_char, five_char, int_char_combo,
1269
                       d1, d2, d3, f1, f2, f3);
1270
 
1271
  /* Print small structures
1272
   */
1273
  print_small_structs ( *struct1, *struct2, *struct3, *struct4, *flags,
1274
                        *flags_combo, *three_char, *five_char, *int_char_combo,
1275
                        *d1, *d2, *d3, *f1, *f2, *f3);
1276
 
1277
  /* Print a very long arg list
1278
   */
1279
  a = 22.25;
1280
  b = 33.375;
1281
  c = 0;
1282
  d = -25;
1283
  e = 100;
1284
  f = 2345;
1285
 
1286
  print_long_arg_list ( a, b, c, d, e, f, *struct1, *struct2, *struct3, *struct4,
1287
                        *flags, *flags_combo, *three_char, *five_char, *int_char_combo,
1288
                        *d1, *d2, *d3, *f1, *f2, *f3);
1289
 
1290
  /* Initialize small structures
1291
   */
1292
  init_one_double ( d1, 1.11111);
1293
  init_one_double ( d2, -345.34);
1294
  init_one_double ( d3, 546464.2);
1295
  init_two_floats ( f1, 0.234, 453.1);
1296
  init_two_floats ( f2, 78.345, 23.09);
1297
  init_two_floats ( f3, -2.345, 1.0);
1298
  init_bit_flags(flags, (unsigned)1, (unsigned)0, (unsigned)1,
1299
                 (unsigned)0, (unsigned)1, (unsigned)0 );
1300
  init_bit_flags_combo(flags_combo, (unsigned)1, (unsigned)0, 'y',
1301
                                     (unsigned)1, (unsigned)0, 'n',
1302
                                     (unsigned)1, (unsigned)0 );
1303
  init_three_chars(three_char, 'x', 'y', 'z');
1304
  init_five_chars(five_char, 'h', 'e', 'l', 'l', 'o');
1305
  init_int_char_combo(int_char_combo, 13, '!');
1306
  init_struct_rep(struct1, 10);
1307
  init_struct_rep(struct2, 20);
1308
  init_struct_rep(struct3, 30);
1309
  init_struct_rep(struct4, 40);
1310
 
1311
  compute_with_small_structs(35);
1312
  loop_count();
1313
  printf("HELLO WORLD\n");
1314
  printf("BYE BYE FOR NOW\n");
1315
  printf("VERY GREEN GRASS\n");
1316
 
1317
  /* Print small structures
1318
   */
1319
  print_one_double(*d1);
1320
  print_one_double(*d2);
1321
  print_one_double(*d3);
1322
  print_two_floats(*f1);
1323
  print_two_floats(*f2);
1324
  print_two_floats(*f3);
1325
  print_bit_flags(*flags);
1326
  print_bit_flags_combo(*flags_combo);
1327
  print_three_chars(*three_char);
1328
  print_five_chars(*five_char);
1329
  print_int_char_combo(*int_char_combo);
1330
  sum_struct_print(10, *struct1, *struct2, *struct3, *struct4);
1331
  print_struct_rep(*struct1, *struct2, *struct3);
1332
 
1333
  return 0;
1334
}
1335
 
1336
 
1337
 
1338
 
1339
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.