diff options
Diffstat (limited to 'compiler/x86/cgx86.pas')
-rw-r--r-- | compiler/x86/cgx86.pas | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/compiler/x86/cgx86.pas b/compiler/x86/cgx86.pas index 4571b2d0b7..3bb13dc526 100644 --- a/compiler/x86/cgx86.pas +++ b/compiler/x86/cgx86.pas @@ -2212,7 +2212,28 @@ unit cgx86; var stackmisalignment: longint; para: tparavarsym; +{$ifdef i8086} + dgroup: treference; +{$endif i8086} begin +{$ifdef i8086} + { interrupt support for i8086 } + if po_interrupt in current_procinfo.procdef.procoptions then + begin + list.concat(Taicpu.Op_reg(A_PUSH,S_W,NR_AX)); + list.concat(Taicpu.Op_reg(A_PUSH,S_W,NR_BX)); + list.concat(Taicpu.Op_reg(A_PUSH,S_W,NR_CX)); + list.concat(Taicpu.Op_reg(A_PUSH,S_W,NR_DX)); + list.concat(Taicpu.Op_reg(A_PUSH,S_W,NR_SI)); + list.concat(Taicpu.Op_reg(A_PUSH,S_W,NR_DI)); + list.concat(Taicpu.Op_reg(A_PUSH,S_L,NR_DS)); + list.concat(Taicpu.Op_reg(A_PUSH,S_L,NR_ES)); + reference_reset(dgroup,0); + dgroup.refaddr:=addr_dgroup; + list.concat(Taicpu.Op_ref_reg(A_MOV,S_W,dgroup,NR_AX)); + list.concat(Taicpu.Op_reg_reg(A_MOV,S_W,NR_AX,NR_DS)); + end; +{$endif i8086} {$ifdef i386} { interrupt support for i386 } if (po_interrupt in current_procinfo.procdef.procoptions) and |