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/vararg-ccall/test/ia32-test-varargs.c
ViewVC logotype

Annotation of /MLRISC/trunk/vararg-ccall/test/ia32-test-varargs.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3063 - (view) (download) (as text)
Original Path: MLRISC/trunk/x86/staged-allocation/test-varargs.c

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

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