summaryrefslogtreecommitdiff
path: root/istartup.s
diff options
context:
space:
mode:
Diffstat (limited to 'istartup.s')
-rw-r--r--istartup.s73
1 files changed, 73 insertions, 0 deletions
diff --git a/istartup.s b/istartup.s
index b0771c9..177d2ca 100644
--- a/istartup.s
+++ b/istartup.s
@@ -410,6 +410,8 @@ start_address:
.globl cmpAC
.globl string_to_string_node
+ .globl int_array_to_node
+ .globl real_array_to_node
.globl _create_arrayB
.globl _create_arrayC
@@ -3692,6 +3694,77 @@ string_to_string_node_gc:
pop a0
jmp string_to_string_node_r
+ section (int_array_to_node)
+int_array_to_node:
+ movl -8(a0),d0
+
+ lea -32+12(a4,d0,4),a2
+ cmpl end_heap,a2
+ jae int_array_to_node_gc
+
+int_array_to_node_r:
+ movl $__ARRAY__+2,(a4)
+ movl a0,a1
+ movl d0,4(a4)
+ movl a4,a0
+ movl $INT+2,8(a4)
+ addl $12,a4
+ jmp int_array_to_node_4
+
+int_array_to_node_2:
+ movl (a1),d1
+ addl $4,a1
+ movl d1,(a4)
+ addl $4,a4
+int_array_to_node_4:
+ subl $1,d0
+ jge int_array_to_node_2
+
+ ret
+
+int_array_to_node_gc:
+ push a0
+ call collect_0l
+ pop a0
+ jmp int_array_to_node_r
+
+ section (real_array_to_node)
+real_array_to_node:
+ movl -8(a0),d0
+
+ lea -32+12+4(a4,d0,8),a2
+ cmpl end_heap,a2
+ jae real_array_to_node_gc
+
+real_array_to_node_r:
+ orl $4,a4
+ movl a0,a1
+ movl $__ARRAY__+2,(a4)
+ movl d0,4(a4)
+ movl a4,a0
+ movl $REAL+2,8(a4)
+ addl $12,a4
+ jmp real_array_to_node_4
+
+real_array_to_node_2:
+ movl (a1),d1
+ movl d1,(a4)
+ movl 4(a1),a2
+ addl $8,a1
+ movl a2,4(a4)
+ addl $8,a4
+real_array_to_node_4:
+ subl $1,d0
+ jge real_array_to_node_2
+
+ ret
+
+real_array_to_node_gc:
+ push a0
+ call collect_0l
+ pop a0
+ jmp real_array_to_node_r
+
align (2)
.long 3
_c3: jmp __cycle__in__spine