aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgrischka <grischka>2007-11-23 00:03:03 +0000
committergrischka <grischka>2007-11-23 00:03:03 +0000
commit3e8b9e6d1051c1d8d7ce13137ffbe51f4f7f53c5 (patch)
treea151631f218c6b8e8da175a595c8c6595862be59
parentd778bde7f9683d046f421ac4399fbbdfd9726f98 (diff)
downloadtinycc-3e8b9e6d1051c1d8d7ce13137ffbe51f4f7f53c5.tar.gz
tinycc-3e8b9e6d1051c1d8d7ce13137ffbe51f4f7f53c5.tar.bz2
New files: alloca86.S alloca86-bt.S
-rw-r--r--alloca86-bt.S42
-rw-r--r--alloca86.S27
2 files changed, 69 insertions, 0 deletions
diff --git a/alloca86-bt.S b/alloca86-bt.S
new file mode 100644
index 0000000..50a671e
--- /dev/null
+++ b/alloca86-bt.S
@@ -0,0 +1,42 @@
+/* ---------------------------------------------- */
+/* alloca86b.S */
+
+.globl __bound___alloca
+
+__bound___alloca:
+ pop %edx
+ pop %eax
+ mov %eax, %ecx
+ add $3,%eax
+ and $-4,%eax
+ jz p6
+
+p4:
+ cmp $4096,%eax
+ jle p5
+ sub $4096,%esp
+ sub $4096,%eax
+ test %eax,(%esp)
+ jmp p4
+
+p5:
+ sub %eax,%esp
+ mov %esp,%eax
+
+ push %edx
+ push %eax
+
+ push %ecx
+ push %eax
+ call __bound_new_region
+ add $8, %esp
+
+ pop %eax
+ pop %edx
+
+p6:
+ push %edx
+ push %edx
+ ret
+
+/* ---------------------------------------------- */
diff --git a/alloca86.S b/alloca86.S
new file mode 100644
index 0000000..c8f0c25
--- /dev/null
+++ b/alloca86.S
@@ -0,0 +1,27 @@
+/* ---------------------------------------------- */
+/* alloca86.S */
+
+.globl _alloca
+
+_alloca:
+ pop %edx
+ pop %eax
+ add $3,%eax
+ and $-4,%eax
+ jz p3
+p1:
+ cmp $4096,%eax
+ jle p2
+ sub $4096,%esp
+ sub $4096,%eax
+ test %eax,(%esp)
+ jmp p1
+p2:
+ sub %eax,%esp
+ mov %esp,%eax
+p3:
+ push %edx
+ push %edx
+ ret
+
+/* ---------------------------------------------- */