Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /MLRISC/trunk/amd64/staged-allocation/test-varargs.c
ViewVC logotype

Annotation of /MLRISC/trunk/amd64/staged-allocation/test-varargs.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3055 - (view) (download) (as text)

1 : mrainey 3042 #include <stdio.h>
2 :     #include <stdlib.h>
3 :     #include <stdarg.h>
4 :    
5 :     #define NEW(ty) (ty*)malloc(sizeof(ty))
6 :    
7 : mrainey 3055 extern void varargs (void* fun, void* args, int);
8 : mrainey 3042
9 :     typedef struct {
10 :     void* val;
11 :     void* kind;
12 :     void* loc;
13 : mrainey 3055 void* ty;
14 :     } zipped_arg_t;
15 : mrainey 3042
16 :     typedef struct varargs_s {
17 : mrainey 3055 zipped_arg_t* hd;
18 : mrainey 3042 struct varargs_s* tl;
19 :     } varargs_t;
20 :    
21 :     void Say (const char *fmt, ...)
22 :     __attribute__ ((format(printf, 1, 2)));
23 :    
24 :     void Say (const char *fmt, ...)
25 :     {
26 :     va_list ap;
27 :    
28 :     va_start (ap, fmt);
29 :     vfprintf (stdout, fmt, ap);
30 :     fflush (stdout);
31 :     va_end(ap);
32 :    
33 :     }
34 :    
35 : mrainey 3055 #define N_ARGS 3
36 :     #define GPR 0
37 :     #define FPR 1
38 :     #define STK 2
39 :     #define FSTK 3
40 :    
41 : mrainey 3042 int main ()
42 :     {
43 : mrainey 3055 varargs_t* args[N_ARGS];
44 : mrainey 3042
45 : mrainey 3055 for(int i = 0 ; i < N_ARGS; i++)
46 :     args[i] = NEW(varargs_t);
47 : mrainey 3042
48 : mrainey 3055 args[N_ARGS-1]->tl = 0;
49 :     for (int i = N_ARGS-2; i >= 0; i--)
50 :     args[i]->tl = args[i+1];
51 :    
52 :     args[0]->hd = NEW(zipped_arg_t);
53 :     args[0]->hd->val = (void*)"%f %X\n";
54 :     args[0]->hd->kind = (void*)GPR;
55 :     args[0]->hd->loc = (void*)7;
56 :     args[0]->hd->ty = (void*)64;
57 :    
58 : mrainey 3042 double f = 3.14;
59 :     void** x = (void*)&f;
60 :    
61 : mrainey 3055 args[1]->hd = NEW(zipped_arg_t);
62 :     args[1]->hd->val = *x;
63 :     args[1]->hd->kind = (void*)FPR;
64 :     args[1]->hd->loc = (void*)0;
65 :     args[1]->hd->ty = (void*)64;
66 : mrainey 3042
67 : mrainey 3055 args[2]->hd = NEW(zipped_arg_t);
68 :     args[2]->hd->val = (void*)0xdeadbeef;
69 :     args[2]->hd->kind = (void*)GPR;
70 :     args[2]->hd->loc = (void*)6;
71 :     args[2]->hd->ty = (void*)32;
72 : mrainey 3042
73 : mrainey 3055 varargs(Say, args[0], N_ARGS*sizeof(void*));
74 :    
75 : mrainey 3042 return 0;
76 :     }

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0