annotate s-code-intel64-mac.c @ 21:06763fed18e4

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 12 Oct 2022 16:37:44 +0900
parents d71b36deaa9d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
1 /*
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
2 Very Simple Code Generator for Intel x86
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
3 $Id$
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
4 */
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
5
18
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
6 #include "s-compile.h"
12
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
7
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
8 int label = 0;
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
9 char *comments = "#####";
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
10 static
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
11 char *intro[] = {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
12 " .cstring\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
13 "LC0:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
14 " .ascii \"%d\\n\\0\"\n"
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
15 " .text\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
16 ".globl _print\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
17 "_print:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
18 "LFB2:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
19 " pushq %rbp\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
20 "LCFI0:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
21 " movq %rsp, %rbp\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
22 "LCFI1:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
23 " subq $16, %rsp\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
24 "LCFI2:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
25 " movl %edi, -4(%rbp)\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
26 " movl -4(%rbp), %esi\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
27 " leaq LC0(%rip), %rdi\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
28 " movl $0, %eax\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
29 " call _printf\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
30 " leave\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
31 " ret\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
32 "LFE2:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
33 ".globl _main\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
34 "_main:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
35 "LFB3:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
36 " pushq %rbp\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
37 "LCFI3:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
38 " movq %rsp, %rbp\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
39 "LCFI4:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
40 " subq $16, %rsp\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
41 "LCFI5:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
42 "\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
43 "\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
44 NULL
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
45 };
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
46
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
47 static
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
48 char *ending[] = {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
49 " movq %rax, %rdi\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
50 " call _print\n",
18
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
51 " movq $0,%rax\n",
12
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
52 " leave\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
53 " ret\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
54 "LFE3:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
55 ".comm _v,96,5\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
56 " .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
57 "EH_frame1:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
58 " .set L$set$0,LECIE1-LSCIE1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
59 " .long L$set$0\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
60 "LSCIE1:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
61 " .long 0x0\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
62 " .byte 0x1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
63 " .ascii \"zR\\0\"\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
64 " .byte 0x1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
65 " .byte 0x78\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
66 " .byte 0x10\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
67 " .byte 0x1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
68 " .byte 0x10\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
69 " .byte 0xc\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
70 " .byte 0x7\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
71 " .byte 0x8\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
72 " .byte 0x90\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
73 " .byte 0x1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
74 " .align 3\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
75 "LECIE1:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
76 " .globl _print.eh\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
77 "_print.eh:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
78 "LSFDE1:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
79 " .set L$set$1,LEFDE1-LASFDE1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
80 " .long L$set$1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
81 "LASFDE1:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
82 " .long LASFDE1-EH_frame1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
83 " .quad LFB2-.\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
84 " .set L$set$2,LFE2-LFB2\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
85 " .quad L$set$2\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
86 " .byte 0x0\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
87 " .byte 0x4\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
88 " .set L$set$3,LCFI0-LFB2\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
89 " .long L$set$3\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
90 " .byte 0xe\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
91 " .byte 0x10\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
92 " .byte 0x86\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
93 " .byte 0x2\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
94 " .byte 0x4\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
95 " .set L$set$4,LCFI1-LCFI0\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
96 " .long L$set$4\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
97 " .byte 0xd\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
98 " .byte 0x6\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
99 " .align 3\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
100 "LEFDE1:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
101 " .globl _main.eh\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
102 "_main.eh:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
103 "LSFDE3:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
104 " .set L$set$5,LEFDE3-LASFDE3\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
105 " .long L$set$5\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
106 "LASFDE3:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
107 " .long LASFDE3-EH_frame1\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
108 " .quad LFB3-.\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
109 " .set L$set$6,LFE3-LFB3\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
110 " .quad L$set$6\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
111 " .byte 0x0\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
112 " .byte 0x4\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
113 " .set L$set$7,LCFI3-LFB3\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
114 " .long L$set$7\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
115 " .byte 0xe\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
116 " .byte 0x10\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
117 " .byte 0x86\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
118 " .byte 0x2\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
119 " .byte 0x4\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
120 " .set L$set$8,LCFI4-LCFI3\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
121 " .long L$set$8\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
122 " .byte 0xd\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
123 " .byte 0x6\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
124 " .align 3\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
125 "LEFDE3:\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
126 " .subsections_via_symbols\n",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
127 NULL
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
128 };
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
129
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
130 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
131 emit_push()
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
132 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
133 printf("\tpushq %%rax\n");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
134 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
135
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
136 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
137 emit_compare()
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
138 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
139 printf("\tcmpq %%rax,(%%rsp)\n");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
140 printf("\t%s %%al\n","setg");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
141 printf("\tmovzbq %%al,%%rax\n");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
142 printf("\taddq $8,%%rsp\n");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
143 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
144
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
145 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
146 emit_store( int d )
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
147 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
148 printf("\tmovq _v@GOTPCREL(%%rip), %%rcx\n");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
149 printf("\tmovq %%rax, %d(%%rcx)\n" ,d*8);
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
150 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
151
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
152 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
153 emit_load(int d)
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
154 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
155 printf("\tmovq _v@GOTPCREL(%%rip), %%rcx\n");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
156 printf("\tmovq %d(%%rcx),%%rax\n" ,d*8);
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
157 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
158
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
159
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
160 static
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
161 char *opcode[] = {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
162 "",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
163 "subq",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
164 "addq",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
165 "imulq",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
166 "idivq",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
167 "",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
168 "",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
169 "",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
170 "",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
171 "subq",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
172 "idivq",
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
173 };
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
174
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
175 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
176 emit_calc(enum opcode op)
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
177 {
20
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
178 if(op==O_DIV ) {
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
179 printf("\tmovq %%rax,%%rbx\n");
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
180 printf("\tpopq %%rax\n");
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
181 printf("\tcltd\n");
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
182 printf("\tidivq %%rbx\n");
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
183 } else if( op==O_DIV_R ) {
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
184 printf("\tpopq %%rbx\n");
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
185 printf("\tcltd\n");
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
186 printf("\tidivq %%rbx\n");
12
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
187 } else if(op==O_SUB) {
20
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
188 printf("\tpopq %%rbx\n");
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
189 printf("\t%s %%rbx,%%rax\n",opcode[op]);
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
190 printf("\tnegq %%rax\n");
12
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
191 } else {
20
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
192 printf("\tpopq %%rbx\n");
d71b36deaa9d fix div in intel64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
193 printf("\t%s %%rbx,%%rax\n",opcode[op]);
12
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
194 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
195 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
196
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
197 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
198 emit_value(d)
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
199 int d;
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
200 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
201 printf("\tmovq $%d,%%rax\n",d);
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
202 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
203
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
204 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
205 emit_comment()
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
206 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
207 if (before < ptr) {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
208 putchar('#'); putchar('#'); putchar(' ');
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
209 while (before < ptr) {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
210 if(*before && *before!='\n') {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
211 putchar(*before);
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
212 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
213 before++;
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
214 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
215 putchar('\n');
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
216 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
217 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
218
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
219 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
220 emit_print()
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
221 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
222 printf("\tmovq %%rax, %%rdi\n");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
223 printf("\tcall _print\n");
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
224 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
225
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
226
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
227 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
228 emit_intro()
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
229 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
230 char **iptr;
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
231 for(iptr=intro;*iptr;iptr++) {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
232 printf("%s",*iptr);
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
233 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
234 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
235
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
236 void
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
237 emit_ending()
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
238 {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
239 char **iptr;
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
240 for(iptr=ending;*iptr;iptr++) {
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
241 printf("%s",*iptr);
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
242 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
243 }
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
244
c5c4771a6be2 working on intel64 (Lion)
kono
parents:
diff changeset
245 /* end */