2
0
Эх сурвалжийг харах

* fixed para locations at the calleeside for nostackframe assembler
routines

git-svn-id: trunk@11023 -

Jonas Maebe 17 жил өмнө
parent
commit
53d11b9a06

+ 8 - 3
compiler/i386/cpupara.pas

@@ -471,14 +471,19 @@ unit cpupara;
                           l:=paralen;
                           l:=paralen;
                         paraloc^.size:=int_cgsize(l);
                         paraloc^.size:=int_cgsize(l);
                       end;
                       end;
-                    if side=callerside then
+                    if (side=callerside) or
+                       (po_nostackframe in p.procoptions) then
                       paraloc^.reference.index:=NR_STACK_POINTER_REG
                       paraloc^.reference.index:=NR_STACK_POINTER_REG
-                    else
+                    else 
                       paraloc^.reference.index:=NR_FRAME_POINTER_REG;
                       paraloc^.reference.index:=NR_FRAME_POINTER_REG;
                     varalign:=used_align(size_2_align(l),paraalign,paraalign);
                     varalign:=used_align(size_2_align(l),paraalign,paraalign);
                     paraloc^.reference.offset:=parasize;
                     paraloc^.reference.offset:=parasize;
                     if side=calleeside then
                     if side=calleeside then
-                      inc(paraloc^.reference.offset,target_info.first_parm_offset);
+                      if not(po_nostackframe in p.procoptions) then
+                        inc(paraloc^.reference.offset,target_info.first_parm_offset)
+                      else
+                        { return addres }
+                        inc(paraloc^.reference.offset,4);
                     parasize:=align(parasize+l,varalign);
                     parasize:=align(parasize+l,varalign);
                     dec(paralen,l);
                     dec(paralen,l);
                   end;
                   end;