How does compiler C51 realize the key word reentrant?

In the following example,the chip is Dallas390 and the off-chip xdata starts from x:0x20000.Large model and large reentrant function stack is selected.
The C language source:

unsigned char func1(unsigned char)reentrant;

void main()
{
	unsigned char i = 0;
	i = func1(i);
}

unsigned char func1(unsigned char i)reentrant
{
	return (i);
}
After compiled by C51,the assembly language source of function func1:
     9: unsigned char func1(unsigned char i)reentrant
    10: {
C:0x000064  9000FFFF MOV      DPTR,#0x00FFFF
C:0x000068  110003   ACALL    C?ADDXBP(C:000003)
C:0x00006B  EF       MOV      A,R7
C:0x00006C  F0       MOVX     @DPTR,A
    11:         return (i);
C:0x00006D  850883   MOV      DPH(0x83),0x08
C:0x000070  850982   MOV      DPL(0x82),0x09
C:0x000073  759302   MOV      DPX(0x93),#0x02
C:0x000076  E0       MOVX     A,@DPTR
C:0x000077  FF       MOV      R7,A
    12: }
C:0x000078  90000001 MOV      DPTR,#0x000001
C:0x00007C  010003   AJMP     C?ADDXBP(C:000003)
The library subroutine C?ADDXBP:
                 C?ADDXBP:
C:0x000003  759302   MOV      DPX(0x93),#0x02
C:0x000006  E509     MOV      A,0x09
C:0x000008  2582     ADD      A,DPL(0x82)
C:0x00000A  F582     MOV      DPL(0x82),A
C:0x00000C  E508     MOV      A,0x08
C:0x00000E  3583     ADDC     A,DPH(0x83)
C:0x000010  F583     MOV      DPH(0x83),A
C:0x000012  B50804   CJNE     A,0x08,C:000019
C:0x000015  858209   MOV      0x09,DPL(0x82)
C:0x000018  22       RET
C:0x000019  10AF06   JBC      EA(0xA8.7),C:000022
C:0x00001C  858209   MOV      0x09,DPL(0x82)
C:0x00001F  F508     MOV      0x08,A
C:0x000021  22       RET
C:0x000022  858209   MOV      0x09,DPL(0x82)
C:0x000025  F508     MOV      0x08,A
C:0x000027  D2AF     SETB     EA(0xA8.7)
C:0x000029  22       RET
I am confused with how the simulated stack is realized.What's the machanicsm of re-entered function in C51?
Thanks in advance.

More questions in this forum