diff options
author | John van Groningen | 2007-02-27 14:02:47 +0000 |
---|---|---|
committer | John van Groningen | 2007-02-27 14:02:47 +0000 |
commit | 8b8e1ff8cc4fd4f718f007f1fb4e3ba9be893dca (patch) | |
tree | 8877d80492d2ec830d85942e14e8f46c30473aa5 | |
parent | improve accuracy of printing very large and very small numbers on amd64 (diff) |
add int_array_to_node and real_array_to_node
-rw-r--r-- | istartup.s | 73 |
1 files changed, 73 insertions, 0 deletions
@@ -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 |