瀏覽代碼

* fixed para locations at the calleeside for nostackframe assembler
routines

git-svn-id: trunk@11023 -

Jonas Maebe 17 年之前
父節點
當前提交
53d11b9a06
共有 1 個文件被更改,包括 8 次插入3 次删除
  1. 8 3
      compiler/i386/cpupara.pas

+ 8 - 3
compiler/i386/cpupara.pas

@@ -471,14 +471,19 @@ unit cpupara;
                           l:=paralen;
                         paraloc^.size:=int_cgsize(l);
                       end;
-                    if side=callerside then
+                    if (side=callerside) or
+                       (po_nostackframe in p.procoptions) then
                       paraloc^.reference.index:=NR_STACK_POINTER_REG
-                    else
+                    else 
                       paraloc^.reference.index:=NR_FRAME_POINTER_REG;
                     varalign:=used_align(size_2_align(l),paraalign,paraalign);
                     paraloc^.reference.offset:=parasize;
                     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);
                     dec(paralen,l);
                   end;