diff --git a/compiler/i8086/cgcpu.pas b/compiler/i8086/cgcpu.pas index c636dba17b..e3f0805783 100644 --- a/compiler/i8086/cgcpu.pas +++ b/compiler/i8086/cgcpu.pas @@ -1777,7 +1777,8 @@ unit cgcpu; end else begin - if current_settings.x86memorymodel=mm_huge then + if (current_settings.x86memorymodel=mm_huge) and + not (po_interrupt in current_procinfo.procdef.procoptions) then list.concat(Taicpu.Op_reg(A_POP,S_W,NR_DS)); generate_leave(list); end; diff --git a/compiler/x86/cgx86.pas b/compiler/x86/cgx86.pas index 59f52e1926..8c0b1e36ef 100644 --- a/compiler/x86/cgx86.pas +++ b/compiler/x86/cgx86.pas @@ -2893,6 +2893,13 @@ unit cgx86; list.concat(Taicpu.Op_reg_reg(A_MOV,S_W,NR_AX,NR_DS)); end; end + else if current_settings.x86memorymodel=mm_huge then + begin + reference_reset(fardataseg,0); + fardataseg.refaddr:=addr_fardataseg; + list.concat(Taicpu.Op_ref_reg(A_MOV,S_W,fardataseg,NR_AX)); + list.concat(Taicpu.Op_reg_reg(A_MOV,S_W,NR_AX,NR_DS)); + end else begin reference_reset(dgroup,0); @@ -2977,7 +2984,8 @@ unit cgx86; end; {$ifdef i8086} - if current_settings.x86memorymodel=mm_huge then + if (current_settings.x86memorymodel=mm_huge) and + not (po_interrupt in current_procinfo.procdef.procoptions) then begin list.concat(Taicpu.op_reg(A_PUSH,S_W,NR_DS)); reference_reset(fardataseg,0);