diff options
author | CVS2SVN | 2006-12-13 11:05:11 +0000 |
---|---|---|
committer | CVS2SVN | 2006-12-13 11:05:11 +0000 |
commit | dd6ec019f296cdaca3546d6218cb20246475faf7 (patch) | |
tree | 93722996bf9201333b83a96612513a9a226a31da | |
parent | mark using pointer reversal ifthe stack becomes too large (diff) |
This commit was manufactured by cvs2svn to create tag 'clean-2-2'.clean-2-2
-rw-r--r-- | acopy.asm | 3 | ||||
-rw-r--r-- | astartup.asm | 8 | ||||
-rw-r--r-- | icopy.s | 1 | ||||
-rw-r--r-- | iwrite_heap.c | 18 |
4 files changed, 18 insertions, 12 deletions
@@ -788,7 +788,8 @@ record_arguments_already_copied_3_b: mov rdx,qword ptr [rcx] pop rax - mov qword ptr 16 [rsi],rdx + sub rdx,1 + mov qword ptr 16[rsi],rdx sub rbx,1 jae copy_lp2 diff --git a/astartup.asm b/astartup.asm index ca39b2b..0d126dd 100644 --- a/astartup.asm +++ b/astartup.asm @@ -25,7 +25,9 @@ _DATA ends ifndef LINUX extrn convert_real_to_string:near endif + ifndef LINUX extrn write_heap:near + endif extrn return_code:near extrn execution_aborted:near extrn e____system__kFinalizerGCTemp:near @@ -1233,7 +1235,7 @@ printD: test al,2 DtoAC_record: ifdef NEW_DESCRIPTORS - movsxd rbp,dword ptr (-6)[rbp] + movsxd rbp,dword ptr (-6)[rax] else movsx rbp,dword ptr (-4)[rbp] endif @@ -1266,7 +1268,7 @@ DtoAC_: endif DtoAC_string_a2: - mov rax,qword ptr [rbp] + mov eax,dword ptr [rbp] lea rcx,4[rbp] jmp build_string @@ -2552,7 +2554,9 @@ gc1: mov rcx,rax sub rsp,32 endif + ifndef LINUX call write_heap + endif mov rsp,rbp add rsp,128 @@ -850,6 +850,7 @@ record_arguments_already_copied_3_b: movl (a0),a1 popl d0 + subl $1,a1 movl a1,8(a3) subl $1,d1 diff --git a/iwrite_heap.c b/iwrite_heap.c index 3ab9146..fcb6c4c 100644 --- a/iwrite_heap.c +++ b/iwrite_heap.c @@ -31,12 +31,12 @@ struct heap_info { int *data_begin; int *small_integers; int *characters; - int int_descriptor; - int char_descriptor; - int real_descriptor; - int bool_descriptor; - int string_descriptor; - int array_descriptor; + size_t int_descriptor; + size_t char_descriptor; + size_t real_descriptor; + size_t bool_descriptor; + size_t string_descriptor; + size_t array_descriptor; }; static int heap_written_count=0; @@ -166,15 +166,15 @@ void write_heap (struct heap_info *h) /* write stack */ if (fileOk) - fileOk = WriteFile (heap_file_h, h->stack_begin, (int)(h->stack_end) - (int)(h->stack_begin), &NumberOfBytesWritten, NULL); + fileOk = WriteFile (heap_file_h, h->stack_begin, (size_t)(h->stack_end) - (size_t)(h->stack_begin), &NumberOfBytesWritten, NULL); /* write heap1 */ if (fileOk) - fileOk = WriteFile (heap_file_h, h->heap1_begin, (int)(h->heap1_end) - (int)(h->heap1_begin), &NumberOfBytesWritten, NULL); + fileOk = WriteFile (heap_file_h, h->heap1_begin, (size_t)(h->heap1_end) - (size_t)(h->heap1_begin), &NumberOfBytesWritten, NULL); /* write heap2 */ if (fileOk) - fileOk = WriteFile (heap_file_h, h->heap2_begin, (int)(h->heap2_end) - (int)(h->heap2_begin), &NumberOfBytesWritten, NULL); + fileOk = WriteFile (heap_file_h, h->heap2_begin, (size_t)(h->heap2_end) - (size_t)(h->heap2_begin), &NumberOfBytesWritten, NULL); if (!fileOk){ heap_written_count = MAX_N_HEAPS; |