gensys.sh - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
gensys.sh (825B)
---
1 #!/bin/sh
2
3 awk '! /^#/ && $2 == "'$1'" {
4 syscall=$2
5 fname=$2".s"
6 noper=$3
7
8 printf("\t.file\t"\
9 "\"fname\"\n"\
10 "\t.globl\t%s\n"\
11 "%s:\n"\
12 "\tpushl\t%%ebp\n"\
13 "\tpushl\t%%ebx\n"\
14 "\tpushl\t%%esi\n\n"\
15 "\tpushl\t%%edi\n"\
16 "\tmovl\t%%esp,%%ebp\n",
17 syscall, syscall)
18
19 if (noper > 0)
20 printf "\tmovl\t20(%%ebp),%%ebx\n"
21 if (noper > 1)
22 printf "\tmovl\t24(%%ebp),%%ecx\n"
23 if (noper > 2)
24 printf "\tmovl\t28(%%ebp),%%edx\n"
25 if (noper > 3)
26 printf "\tmovl\t28(%%ebp),%%esi\n"
27 if (noper > 4)
28 printf "\tmovl\t28(%%ebp),%%edi\n"
29
30 printf "\tmovl\t$%d,%%eax\n"\
31 "\tint\t$0x80\n"\
32 "\tpopl\t%%edi\n"\
33 "\tpopl\t%%esi\n"\
34 "\tpopl\t%%ebx\n"\
35 "\tpopl\t%%ebp\n"\
36 "\tjmp\t_cerrno\n", $1
37
38 } ' syscall.lst > $1.s