summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn van Groningen2005-10-10 11:08:35 +0000
committerJohn van Groningen2005-10-10 11:08:35 +0000
commitff260b7b72eeac9bf46715a25330080fc5db5a0f (patch)
tree69662ea1a238fda42c691bc0e9b8c31681f5fd23
parentoptimize apply with >=2 arguments and change descriptors (diff)
add code for apply with >=2 arguments to yet_args_neededed code
-rw-r--r--iap.s953
-rw-r--r--istartup.s4
2 files changed, 945 insertions, 12 deletions
diff --git a/iap.s b/iap.s
index 5f03e27..51bddf6 100644
--- a/iap.s
+++ b/iap.s
@@ -65,6 +65,34 @@
.globl add_empty_node_31
.globl add_empty_node_32
+ .globl yet_args_needed_5
+ .globl yet_args_needed_6
+ .globl yet_args_needed_7
+ .globl yet_args_needed_8
+ .globl yet_args_needed_9
+ .globl yet_args_needed_10
+ .globl yet_args_needed_11
+ .globl yet_args_needed_12
+ .globl yet_args_needed_13
+ .globl yet_args_needed_14
+ .globl yet_args_needed_15
+ .globl yet_args_needed_16
+ .globl yet_args_needed_17
+ .globl yet_args_needed_18
+ .globl yet_args_needed_19
+ .globl yet_args_needed_20
+ .globl yet_args_needed_21
+ .globl yet_args_needed_22
+ .globl yet_args_needed_23
+ .globl yet_args_needed_24
+ .globl yet_args_needed_25
+ .globl yet_args_needed_26
+ .globl yet_args_needed_27
+ .globl yet_args_needed_28
+ .globl yet_args_needed_29
+ .globl yet_args_needed_30
+ .globl yet_args_needed_31
+
ap_32:
movl (a1),a2
movl $32*8,d1
@@ -282,12 +310,13 @@ ap_2:
jne no_fast_ap2
fast_ap:
+ addl a2,d1
movzwl -2(a2),d0
- movl -6(a2,d1),d1
+ movl -6(d1),a2
#ifdef PROFILE
- subl $20,d1
+ subl $20,a2
#else
- subl $12,d1
+ subl $12,a2
#endif
cmpl $1,d0
jb repl_args_0
@@ -310,14 +339,18 @@ fast_ap:
cmpl $7,d0
jb repl_args_6
+ push d1
+
repl_args_7_:
- movl -8(a0,d0,4),a2
- movl a2,(a3)
+ movl -8(a0,d0,4),d1
+ movl d1,(a3)
subl $1,d0
addl $4,a3
cmpl $6,d0
jne repl_args_7_
+ pop d1
+
repl_args_6:
movl 16(a0),d0
movl d0,(a3)
@@ -329,28 +362,28 @@ repl_args_6:
movl (a0),a0
movl d0,12(a3)
addl $16,a3
- jmp *d1
+ jmp *a2
repl_args_0:
movl a0,a1
movl -4(a3),a0
subl $4,a3
- jmp *d1
+ jmp *a2
repl_args_1:
movl 4(a1),a1
- jmp *d1
+ jmp *a2
repl_args_2:
movl 4(a1),a1
- jmp *d1
+ jmp *a2
repl_args_3:
movl 4(a0),d0
movl (a0),a0
movl d0,(a3)
addl $4,a3
- jmp *d1
+ jmp *a2
repl_args_4:
movl 8(a0),d0
@@ -359,7 +392,7 @@ repl_args_4:
movl (a0),a0
movl d0,4(a3)
addl $8,a3
- jmp *d1
+ jmp *a2
repl_args_5:
movl 12(a0),d0
@@ -370,7 +403,7 @@ repl_args_5:
movl (a0),a0
movl d0,8(a3)
addl $12,a3
- jmp *d1
+ jmp *a2
no_fast_ap32:
call *2(a2)
@@ -927,3 +960,899 @@ add_empty_node_14_lp:
add_empty_node_14_gc:
call collect_2
jmp add_empty_node_14_gc_
+
+
+yet_args_needed_0:
+ cmpl end_heap,a4
+ jae yet_args_needed_0_gc
+yet_args_needed_0_gc_r:
+ mov a0,4(a4)
+ mov (a1),d0
+ mov a4,a0
+ add $8,d0
+ mov d0,(a4)
+ add $8,a4
+ ret
+
+yet_args_needed_0_gc:
+ call collect_2
+ jmp yet_args_needed_0_gc_r
+
+
+ align (2)
+ cmpl end_heap,a4
+ jmp build_node_2
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_1:
+ cmpl end_heap,a4
+ jae yet_args_needed_1_gc
+yet_args_needed_1_gc_r:
+ mov a0,8(a4)
+ mov (a1),d0
+ mov a4,a0
+ add $8,d0
+ mov d0,(a4)
+ mov 4(a1),d1
+ mov d1,4(a4)
+ add $12,a4
+ ret
+
+yet_args_needed_1_gc:
+ call collect_2
+ jmp yet_args_needed_1_gc_r
+
+build_node_2:
+ jae build_node_2_gc
+build_node_2_gc_r:
+ movl d1,(a4)
+ movl a1,4(a4)
+ movl a0,8(a4)
+ movl a4,a0
+ addl $12,a4
+ ret
+
+build_node_2_gc:
+ call collect_2
+ jmp build_node_2_gc_r
+
+
+ align (2)
+ cmpl end_heap,a4
+ jmp build_node_3
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_2:
+ cmpl end_heap,a4
+ jae gc_22
+gc_r_22:
+ mov (a1),d0
+ mov a0,4(a4)
+ add $8,d0
+ mov 4(a1),a2
+ mov d0,8(a4)
+ lea 8(a4),a0
+ mov a2,12(a4)
+ mov 8(a1),a2
+ mov a2,(a4)
+ mov a4,16(a4)
+ add $20,a4
+ ret
+
+gc_22: call collect_2
+ jmp gc_r_22
+
+build_node_3:
+ jae build_node_3_gc
+build_node_3_gc_r:
+ movl d1,(a4)
+ lea 12(a4),a2
+ movl a1,4(a4)
+ movl a2,8(a4)
+ movl a0,12(a4)
+ movl a4,a0
+ movl -4(a3),a2
+ subl $4,a3
+ movl a2,16(a4)
+ addl $20,a4
+ ret
+
+build_node_3_gc:
+ call collect_2
+ jmp build_node_3_gc_r
+
+
+ align (2)
+ cmpl end_heap,a4
+ jmp build_node_4
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_3:
+ cmpl end_heap,a4
+ jae gc_23
+gc_r_23:
+ mov (a1),d0
+ mov a0,8(a4)
+ add $8,d0
+ mov 4(a1),a2
+ mov d0,12(a4)
+ mov 8(a1),a1
+ mov a2,16(a4)
+ mov (a1),a2
+ mov a4,20(a4)
+ mov a2,(a4)
+ mov 4(a1),a2
+ lea 12(a4),a0
+ mov a2,4(a4)
+ add $24,a4
+ ret
+
+gc_23: call collect_2
+ jmp gc_r_23
+
+build_node_4:
+ jae build_node_4_gc
+build_node_4_gc_r:
+ movl d1,(a4)
+ lea 12(a4),a2
+ movl a1,4(a4)
+ movl a2,8(a4)
+ movl a0,12(a4)
+ movl a4,a0
+ movl -4(a3),a2
+ movl a2,16(a4)
+ movl -8(a3),a2
+ subl $8,a3
+ movl a2,20(a4)
+ addl $24,a4
+ ret
+
+build_node_4_gc:
+ call collect_2
+ jmp build_node_4_gc_r
+
+
+ align (2)
+ cmpl end_heap,a4
+ jmp build_node_5
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_4:
+ cmpl end_heap,a4
+ jae gc_24
+gc_r_24:
+ mov (a1),d0
+ mov a0,12(a4)
+ add $8,d0
+ mov 4(a1),a2
+ mov d0,16(a4)
+ mov 8(a1),a1
+ mov a2,20(a4)
+ mov (a1),a2
+ mov a4,24(a4)
+ mov a2,(a4)
+ mov 4(a1),a2
+ lea 16(a4),a0
+ mov a2,4(a4)
+ mov 8(a1),a2
+ mov a2,8(a4)
+ add $28,a4
+ ret
+
+gc_24: call collect_2
+ jmp gc_r_24
+
+build_node_5:
+ jae build_node_5_gc
+build_node_5_gc_r:
+ movl d1,(a4)
+ lea 12(a4),a2
+ movl a1,4(a4)
+ movl a2,8(a4)
+ movl a0,12(a4)
+ movl a4,a0
+ movl -4(a3),a2
+ movl a2,16(a4)
+ movl -8(a3),a2
+ movl a2,20(a4)
+ movl -12(a3),a2
+ subl $12,a3
+ movl a2,24(a4)
+ addl $28,a4
+ ret
+
+build_node_5_gc:
+ call collect_2
+ jmp build_node_5_gc_r
+
+
+ align (2)
+ movl $6,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_5:
+ mov (a1),d1
+ movl $8,d0
+ jmp yet_args_needed_
+
+
+ align (2)
+ movl $7,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_6:
+ mov (a1),d1
+ movl $9,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $8,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_7:
+ mov (a1),d1
+ movl $10,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $9,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_8:
+ mov (a1),d1
+ movl $11,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $10,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_9:
+ mov (a1),d1
+ movl $12,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $11,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_10:
+ mov (a1),d1
+ movl $13,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $12,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_11:
+ mov (a1),d1
+ movl $14,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $13,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_12:
+ mov (a1),d1
+ movl $15,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $14,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_13:
+ mov (a1),d1
+ movl $16,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $15,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_14:
+ mov (a1),d1
+ movl $17,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $16,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_15:
+ mov (a1),d1
+ movl $18,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $17,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_16:
+ mov (a1),d1
+ movl $19,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $18,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_17:
+ mov (a1),d1
+ movl $20,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $19,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_18:
+ mov (a1),d1
+ movl $21,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $20,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_19:
+ mov (a1),d1
+ movl $22,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $21,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_20:
+ mov (a1),d1
+ movl $23,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $22,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_21:
+ mov (a1),d1
+ movl $24,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $23,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_22:
+ mov (a1),d1
+ movl $25,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $24,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_23:
+ mov (a1),d1
+ movl $26,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $25,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_24:
+ mov (a1),d1
+ movl $27,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $26,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_25:
+ mov (a1),d1
+ movl $28,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $27,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_26:
+ mov (a1),d1
+ movl $29,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $28,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_27:
+ mov (a1),d1
+ movl $30,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $29,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_28:
+ mov (a1),d1
+ movl $31,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $30,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_29:
+ mov (a1),d1
+ movl $32,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $31,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_30:
+ mov (a1),d1
+ movl $33,d0
+ jmp yet_args_needed_
+
+ align (2)
+ movl $32,d0
+ jmp build_node_
+ nop
+ nop
+ align (2)
+#ifdef PROFILE
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+#endif
+yet_args_needed_31:
+ mov (a1),d1
+ movl $34,d0
+ jmp yet_args_needed_
+
+yet_args_needed:
+/ for more than 4 arguments
+ mov (a1),d1
+ movzwl -2(d1),d0
+ add $3,d0
+yet_args_needed_:
+ lea -32(a4,d0,4),a2
+ cmpl end_heap,a2
+ jae yet_args_needed_gc
+yet_args_needed_gc_r:
+ sub $3+1+4,d0
+ push d1
+ push a0
+ mov 4(a1),d1
+ mov 8(a1),a1
+ mov a4,a2
+ mov (a1),a0
+ mov a0,(a4)
+ mov 4(a1),a0
+ mov a0,4(a4)
+ mov 8(a1),a0
+ mov a0,8(a4)
+ add $12,a1
+ add $12,a4
+
+yet_args_needed_cp_a:
+ mov (a1),a0
+ add $4,a1
+ mov a0,(a4)
+ add $4,a4
+ subl $1,d0
+ jge yet_args_needed_cp_a
+
+ pop a0
+ mov a0,(a4)
+ pop d0
+ add $8,d0
+ mov d0,4(a4)
+ lea 4(a4),a0
+ mov d1,8(a4)
+ mov a2,12(a4)
+ add $16,a4
+ ret
+
+yet_args_needed_gc:
+ call collect_2l
+ jmp yet_args_needed_gc_r
+
+build_node_:
+ lea -32+8(a4,d0,4),a2
+ cmpl end_heap,a2
+ jae build_node_gc
+build_node_gc_r:
+ movl d1,(a4)
+ lea 12(a4),a2
+ movl a1,4(a4)
+ movl a2,8(a4)
+ movl a0,12(a4)
+ movl a4,a0
+ movl -4(a3),a2
+ movl a2,16(a4)
+ movl -8(a3),a2
+ movl a2,20(a4)
+ movl -12(a3),a2
+ subl $12,a3
+ movl a2,24(a4)
+ addl $28,a4
+
+ subl $5,d0
+build_node_cp_a:
+ movl -4(a3),a2
+ subl $4,a3
+ movl a2,(a4)
+ addl $4,a4
+ subl $1,d0
+ jne build_node_cp_a
+
+ ret
+
+build_node_gc:
+ call collect_2l
+ jmp build_node_gc_r
diff --git a/istartup.s b/istartup.s
index 731340a..10aa5d0 100644
--- a/istartup.s
+++ b/istartup.s
@@ -4815,6 +4815,8 @@ st_fillr5_array:
#endif
+#ifndef NEW_DESCRIPTORS
+
yet_args_needed:
/ for more than 4 arguments
mov (a1),d1
@@ -4958,6 +4960,8 @@ gc_r_24:
gc_24: call collect_2
jmp gc_r_24
+#endif
+
repl_args_b:
test d0,d0
jle repl_args_b_1