소스 검색

* on i8086 convert the 'ret' inline asm instruction to either 'retn' or 'retf',
depending on the call model of the current function (which is BP7 compatible
behaviour)

git-svn-id: trunk@32157 -

nickysn 9 년 전
부모
커밋
c068c96302
1개의 변경된 파일12개의 추가작업 그리고 1개의 파일을 삭제
  1. 12 1
      compiler/x86/rax86int.pas

+ 12 - 1
compiler/x86/rax86int.pas

@@ -85,7 +85,7 @@ Unit Rax86int;
        { aasm }
        aasmtai,aasmdata,aasmcpu,
        { symtable }
-       symconst,symbase,symtype,symsym,symdef,symtable,
+       symconst,symbase,symtype,symsym,symdef,symtable,symcpu,
        { parser }
        scanner,pbase,
        { register allocator }
@@ -2072,6 +2072,17 @@ Unit Rax86int;
         else if (instr.opcode=A_POPA) then
           instr.opcode:=A_POPAW
 {$endif x86_64}
+{$ifdef i8086}
+        { ret is converted to retn or retf, depending on the call model of the
+          current procedure (BP7 compatible) }
+        else if (instr.opcode=A_RET) then
+          begin
+            if is_proc_far(current_procinfo.procdef) then
+              instr.opcode:=A_RETF
+            else
+              instr.opcode:=A_RETN;
+          end
+{$endif i8086}
         ;
         { We are reading operands, so opcode will be an AS_ID }
         { process operands backwards to get them in AT&T order }