summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCVS2SVN2006-12-13 11:05:11 +0000
committerCVS2SVN2006-12-13 11:05:11 +0000
commitdd6ec019f296cdaca3546d6218cb20246475faf7 (patch)
tree93722996bf9201333b83a96612513a9a226a31da
parentmark 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.asm3
-rw-r--r--astartup.asm8
-rw-r--r--icopy.s1
-rw-r--r--iwrite_heap.c18
4 files changed, 18 insertions, 12 deletions
diff --git a/acopy.asm b/acopy.asm
index fadf47e..13f66ed 100644
--- a/acopy.asm
+++ b/acopy.asm
@@ -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
diff --git a/icopy.s b/icopy.s
index f03527f..25d0d31 100644
--- a/icopy.s
+++ b/icopy.s
@@ -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;