TempleOSTS_131005.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:52 +02:00
1 parent 1343005a29
commit 2d2a65d572
547 files changed
+33608 -12549

No files matched your search

+274 -284
View File
@@ -1,28 +1,30 @@
U0 AsmUnresolvedAdd(CAsmCtrl *a,U8 *exp,I64 type,I64 ip,I64 rel_ip,
CLexUndef *undef_hash,I64 line_num,Bool U8_avail,Bool glbl)
U0 AsmUnresolvedAdd(CAsmCtrl *a,U8 *ex,I64 type,I64 ip,I64 rel_ip,
CLexUndef *undef_local,CLexUndef *undef_glbl,I64 line_num,
Bool U8_avail)
{
CAsmUnresolvedRef *tempu=MAlloc(sizeof(CAsmUnresolvedRef));
tempu->exp=exp;
tempu->ex=ex;
tempu->type=type;
tempu->ip=ip;
tempu->rel_ip=rel_ip;
tempu->undef_hash=undef_hash;
tempu->lit=FALSE;
tempu->imm_flag=FALSE;
tempu->line_num=line_num;
tempu->U8_avail=U8_avail;
tempu->str=NULL;
if (glbl) {
tempu->next=a->glbl_unresolved;
a->glbl_unresolved=tempu;
if (undef_hash->hash->type & HTF_IMPORT) {
tempu->str=StrNew(undef_hash->hash->str);
if (undef_hash->hash->type & HTF_LIT)
tempu->lit=TRUE;
}
} else {
if (undef_local) {
tempu->undef_hash=undef_local;
tempu->next=a->local_unresolved;
a->local_unresolved=tempu;
a->has_locals=TRUE;
} else {
tempu->undef_hash=undef_glbl;
tempu->next=a->glbl_unresolved;
a->glbl_unresolved=tempu;
if (undef_glbl->hash->type & HTF_IMPORT) {
tempu->str=StrNew(undef_glbl->hash->str);
if (undef_glbl->hash->type & HTF_IMM)
tempu->imm_flag=TRUE;
}
}
}
@@ -62,11 +64,11 @@ U0 AsmStoreCodeU8(CLex *lx,U8 b)
{
CAsmCtrl *a=lx->a;
I64 i=a->ip>>ASM_CODE_BLK_BITS;
CAsmCodeBlk *tempc=a->code;
CAsmCodeBlk *tempc=a->cb;
while (i--)
if (!(tempc=tempc->next)) {
i=a->ip>>ASM_CODE_BLK_BITS+1;
tempc=&a->code;
tempc=&a->cb;
while (i--) {
if (!tempc->next)
tempc->next=CAlloc(sizeof(CAsmCodeBlk));
@@ -83,8 +85,8 @@ U0 AsmStoreCodeU8(CLex *lx,U8 b)
"%02X ",b;
a->display_col+=3;
}
if (a->ip>a->num_code_U8s)
a->num_code_U8s=a->ip;
if (a->ip>a->num_ex_U8s)
a->num_ex_U8s=a->ip;
}
U0 AsmStoreCodeU32(CLex *lx,U32 d)
@@ -93,17 +95,17 @@ U0 AsmStoreCodeU32(CLex *lx,U32 d)
I64 i=a->ip>>ASM_CODE_BLK_BITS,
j=(a->ip+sizeof(U32))>>ASM_CODE_BLK_BITS;
U32 *_d;
CAsmCodeBlk *tempc=a->code;
CAsmCodeBlk *tempc=a->cb;
if (i!=j) {
for (i=0;i<sizeof(U32);i++)
AsmStoreCodeU8(lx,d.u8[i]);
return;
}
tempc=a->code;
tempc=a->cb;
while (i--)
if (!(tempc=tempc->next)) {
i=a->ip>>ASM_CODE_BLK_BITS+1;
tempc=&a->code;
tempc=&a->cb;
while (i--) {
if (!tempc->next)
tempc->next=CAlloc(sizeof(CAsmCodeBlk));
@@ -122,8 +124,8 @@ U0 AsmStoreCodeU32(CLex *lx,U32 d)
"%08X ",d;
a->display_col+=9;
}
if (a->ip>a->num_code_U8s)
a->num_code_U8s=a->ip;
if (a->ip>a->num_ex_U8s)
a->num_ex_U8s=a->ip;
}
U0 AsmStoreCodeU64(CLex *lx,U64 d)
@@ -132,17 +134,17 @@ U0 AsmStoreCodeU64(CLex *lx,U64 d)
I64 i=a->ip>>ASM_CODE_BLK_BITS,
j=(a->ip+sizeof(I64))>>ASM_CODE_BLK_BITS,
*qq;
CAsmCodeBlk *tempc=a->code;
CAsmCodeBlk *tempc=a->cb;
if (i!=j) {
for (i=0;i<sizeof(I64);i++)
AsmStoreCodeU8(lx,d.u8[i]);
return;
}
tempc=a->code;
tempc=a->cb;
while (i--)
if (!(tempc=tempc->next)) {
i=a->ip>>ASM_CODE_BLK_BITS+1;
tempc=&a->code;
tempc=&a->cb;
while (i--) {
if (!tempc->next)
tempc->next=CAlloc(sizeof(CAsmCodeBlk));
@@ -161,15 +163,15 @@ U0 AsmStoreCodeU64(CLex *lx,U64 d)
"%016X ",d;
a->display_col+=17;
}
if (a->ip>a->num_code_U8s)
a->num_code_U8s=a->ip;
if (a->ip>a->num_ex_U8s)
a->num_ex_U8s=a->ip;
}
U0 AsmStoreCodeU8At(CLex *lx,U8 b,I64 ip)
{
CAsmCtrl *a=lx->a;
I64 i=ip>>ASM_CODE_BLK_BITS+1;
CAsmCodeBlk *tempc=&a->code;
CAsmCodeBlk *tempc=&a->cb;
while (i--) {
if (!tempc->next) {
tempc->next=CAlloc(sizeof(CAsmCodeBlk));
@@ -178,18 +180,18 @@ U0 AsmStoreCodeU8At(CLex *lx,U8 b,I64 ip)
tempc=tempc->next;
}
tempc->body[ip & (ASM_CODE_BLK_SIZE-1)]=b;
if (ip+1>a->num_code_U8s)
a->num_code_U8s=ip+1;
if (ip+1>a->num_ex_U8s)
a->num_ex_U8s=ip+1;
}
I64 AsmExpressionEval(CLex *lx)
I64 AsmLexExpression(CLex *lx)
{
U8 *exp;
U8 *ex;
I64 result=0;
lx->undef_hash_entry=NULL;
lx->flags&=~(LF_UNRESOLVED+LF_LOCAL);
lx->abs_cnts=0;
if (!GetExpression(lx,&exp))
if (!IsLexExpression2Bin(lx,&ex))
LexSkipEol(lx);
else {
if (lx->abs_cnts.externs)
@@ -197,8 +199,8 @@ I64 AsmExpressionEval(CLex *lx)
if (lx->flags & LF_UNRESOLVED)
LexExcept(lx,"ST_UNDEFINED_SYM");
else {
result=Call(exp);
ExpressionDel(exp);
result=Call(ex);
ExpressionBinDel(ex);
}
}
return result;
@@ -221,7 +223,7 @@ U0 AsmLocalsResolve(CLex *lx)
templu=tempu->undef_hash;
while (templu) {
if (templu->hash->type & HTF_UNRESOLVED) {
PrintFErr("%S%04d %s %s\n","ST_UNDEFINED_SYM_LINE",
PrintErr("%S%04d %s %s\n","ST_UNDEFINED_SYM_LINE",
tempu->line_num,a->last_label,templu->hash->str);
LexExcept(lx);
}
@@ -229,17 +231,17 @@ U0 AsmLocalsResolve(CLex *lx)
templu=templu->next;
}
if (!undefined) {
r=Call(tempu->exp);
r=Call(tempu->ex);
if (!(tempu->type & 1)) {
r-=tempu->rel_ip;
if (tempu->type==EIE_REL_U8 && !(MIN_I8<=r<=MAX_I8) ||
tempu->type==EIE_REL_U16 && !(MIN_I16<=r<=MAX_I16) ) {
PrintFErr("%S%04d %s %s\n","ST_BRANCH_OUT_OF_RANGE_LINE",
PrintErr("%S%04d %s %s\n","ST_BRANCH_OUT_OF_RANGE_LINE",
tempu->line_num,a->last_label,label);
LexExcept(lx);
}
if (tempu->U8_avail && tempu->type>EIE_LIT_U8 && -124<=r<=123)
PrintFWarn("%S%04d %s %s\n","ST_COULD_USE_I8_DISP_LINE",
if (tempu->U8_avail && tempu->type>EIE_IMM_U8 && -124<=r<=123)
PrintWarn("%S%04d %s %s\n","ST_COULD_USE_I8_DISP_LINE",
tempu->line_num,a->last_label,label);
}
AsmStoreCodeU8At(lx,r.u8[0],tempu->ip);
@@ -257,7 +259,7 @@ U0 AsmLocalsResolve(CLex *lx)
}
}
}
ExpressionDel(tempu->exp);
ExpressionBinDel(tempu->ex);
LinkedLstDel(tempu->undef_hash);
Free(tempu);
tempu=tempu1;
@@ -270,7 +272,7 @@ U0 AsmLocalsResolve(CLex *lx)
a->has_locals=FALSE;
}
U0 AsmGlblsResolve(CLex *lx,CExe *ex)
U0 AsmGlblsResolve(CLex *lx,CExe *tempx)
{
CAsmCtrl *a=lx->a;
CHashFun *tempf;
@@ -278,7 +280,7 @@ U0 AsmGlblsResolve(CLex *lx,CExe *ex)
I64 j,r=0;
CExeImportExport *tempe,*tempe1;
CLexUndef *templu;
CHashExport *tempess;
CHashExport *tempex;
U8 *label;
Bool undefined;
CExternUsage *tempeu,*tempeu8;
@@ -290,19 +292,19 @@ U0 AsmGlblsResolve(CLex *lx,CExe *ex)
templu=tempu->undef_hash;
while (templu) {
if (templu->hash->type & HTF_UNRESOLVED) {
tempess=templu->hash;
if (tempess->type & HTT_EXPORT_SYS_SYM &&
tempess->type & HTF_UNRESOLVED &&
!(tempess->type & HTF_IMPORT) &&
(tempf=HashFind(tempess->str,lx->htc.hash_table_lst,HTT_FUN)) &&
tempex=templu->hash;
if (tempex->type & HTT_EXPORT_SYS_SYM &&
tempex->type & HTF_UNRESOLVED &&
!(tempex->type & HTF_IMPORT) &&
(tempf=HashFind(tempex->str,lx->htc.hash_table_lst,HTT_FUN)) &&
!Bt(tempf->flags,Cf_EXTERN)) {
tempess->val=tempf->executable_addr;
tempess->type&=~HTF_UNRESOLVED;
tempex->val=tempf->executable_addr;
tempex->type&=~HTF_UNRESOLVED;
label=templu->hash->str;
} else {
if (!(tempess->type & HTF_IMPORT)) {
PrintFErr("%S%04d %s\n",
"ST_UNDEFINED_SYM_LINE",tempu->line_num,tempess->str);
if (!(tempex->type & HTF_IMPORT)) {
PrintErr("%S%04d %s\n",
"ST_UNDEFINED_SYM_LINE",tempu->line_num,tempex->str);
LexExcept(lx);
}
undefined=TRUE;
@@ -311,7 +313,7 @@ U0 AsmGlblsResolve(CLex *lx,CExe *ex)
label=templu->hash->str;
templu=templu->next;
}
r=Call(tempu->exp);
r=Call(tempu->ex);
if (!(tempu->type & 1))
r-=tempu->rel_ip;
if (undefined) {
@@ -327,12 +329,12 @@ U0 AsmGlblsResolve(CLex *lx,CExe *ex)
if (!(tempu->type & 1)) { //Rel?
if (tempu->type==EIE_REL_U8 && !(MIN_I8<=r<=MAX_I8) ||
tempu->type==EIE_REL_U16 && !(MIN_I16<=r<=MAX_I16)) {
PrintFErr("%S%04d %s\n","ST_BRANCH_OUT_OF_RANGE_LINE",
PrintErr("%S%04d %s\n","ST_BRANCH_OUT_OF_RANGE_LINE",
tempu->line_num,label);
LexExcept(lx);
}
if (tempu->U8_avail && tempu->type>EIE_LIT_U8 && -124<=r<=123)
PrintFWarn("%S%04d %s %s\n","ST_COULD_USE_I8_DISP_LINE",
if (tempu->U8_avail && tempu->type>EIE_IMM_U8 && -124<=r<=123)
PrintWarn("%S%04d %s %s\n","ST_COULD_USE_I8_DISP_LINE",
tempu->line_num,a->last_label,label);
}
}
@@ -350,35 +352,35 @@ U0 AsmGlblsResolve(CLex *lx,CExe *ex)
}
}
}
ExpressionDel(tempu->exp);
ExpressionBinDel(tempu->ex);
LinkedLstDel(tempu->undef_hash);
Free(tempu);
tempu=tempu1;
}
tempess=lx->htc.glbl_hash_table->next_added;
while (tempess!=lx->htc.glbl_hash_table) {
if (tempess->type & HTF_IMPORT && tempess->use_cnt) {
if (tempe=tempess->ie_lst) {
if (tempess->import_name)
tempe->str=StrNew(tempess->import_name);
tempex=lx->htc.glbl_hash_table->next_added;
while (tempex!=lx->htc.glbl_hash_table) {
if (tempex->type & HTF_IMPORT) {
if (tempex->use_cnt && (tempe=tempex->ie_lst)) {
if (tempex->import_name)
tempe->str=StrNew(tempex->import_name);
else
tempe->str=StrNew(tempess->str);
tempe->str=StrNew(tempex->str);
do {
tempe1=tempe->next;
QueIns(tempe,ex->last_ie);
QueIns(tempe,tempx->last_ie);
} while (tempe=tempe1);
tempess->ie_lst=NULL;
tempex->ie_lst=NULL;
}
} else if (tempess->type & HTF_EXPORT) {
if (tempess->type & HTF_UNRESOLVED) {
PrintFErr("%S%s\n","ST_UNDEFINED_SYM",tempess->str);
} else if (tempex->type & HTF_EXPORT) {
if (tempex->type & HTF_UNRESOLVED) {
PrintErr("%S%s\n","ST_UNDEFINED_SYM",tempex->str);
LexExcept(lx);
}
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIE_REL_EXPORT;
if (tempess->type & HTT_FUN) {
tempf=tempess;
if (tempex->type & HTT_FUN) {
tempf=tempex;
tempe->ip=tempf->executable_addr;
tempeu=tempf->ext_lst;
while (tempeu) {
@@ -391,17 +393,17 @@ U0 AsmGlblsResolve(CLex *lx,CExe *ex)
Free(tempeu);
tempeu=tempeu8;
}
} else if (tempess->type & HTT_GLBL_VAR)
tempe->ip=tempess(CHashGlblVar *)->data_addr_ip;
} else if (tempex->type & HTT_GLBL_VAR)
tempe->ip=tempex(CHashGlblVar *)->data_addr_ip;
else
tempe->ip=tempess->val;
if (tempess->type & HTF_LIT)
tempe->ip=tempex->val;
if (tempex->type & HTF_IMM)
tempe->type++;
tempe->str=StrNew(tempess->str);
tempe->src_link=StrNew(tempess->src_link);
QueIns(tempe,ex->last_ie);
tempe->str=StrNew(tempex->str);
tempe->src_link=StrNew(tempex->src_link);
QueIns(tempe,tempx->last_ie);
}
tempess=tempess->next_added;
tempex=tempex->next_added;
}
}
@@ -415,7 +417,7 @@ Bool PrsAsmImm(CLex *lx,CAsmArg *arg)
lx->undef_hash_entry=NULL;
lx->abs_cnts=0;
lx->flags&=~(LF_UNRESOLVED+LF_LOCAL);
if (!GetExpression(lx,&arg->num.exp))
if (!IsLexExpression2Bin(lx,&arg->num.ex))
LexSkipEol(lx);
else {
if (lx->abs_cnts.externs)
@@ -430,11 +432,11 @@ Bool PrsAsmImm(CLex *lx,CAsmArg *arg)
lx->a->has_locals=TRUE;
}
} else {
arg->num.i=Call(arg->num.exp);
arg->num.i=Call(arg->num.ex);
arg->num.undef_glbl=lx->undef_hash_entry;
lx->undef_hash_entry=NULL;
ExpressionDel(arg->num.exp);
arg->num.exp=NULL;
ExpressionBinDel(arg->num.ex);
arg->num.ex=NULL;
}
}
return TRUE;
@@ -453,7 +455,7 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
while (TRUE) {
if (lx->token==TK_IDENT) {
if (temph=lx->hash_entry) {
if (temph->type&HTT_TYPE_MASK==HTT_REG) {
if (temph->type&HTG_TYPE_MASK==HTT_REG) {
tempr=temph;
switch (tempr->reg_type) {
case REGT_R8:
@@ -490,7 +492,7 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
Lex(lx);
return;
}
} else if (temph->type&HTT_TYPE_MASK==HTT_ASM_KEYWORD) {
} else if (temph->type&HTG_TYPE_MASK==HTT_ASM_KEYWORD) {
switch (temph->user_data0) {
case AKW_I8:
case AKW_U8:
@@ -530,7 +532,7 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
while (lx->token && lx->token!=']') {
if (lx->token==TK_IDENT) {
if (temph=lx->hash_entry) {
if (temph->type&HTT_TYPE_MASK==HTT_REG &&
if (temph->type&HTG_TYPE_MASK==HTT_REG &&
REGT_R16<=temph(CHashReg *)->reg_type<=REGT_R64) {
tempr=temph;
if (arg->reg1==CREG_NONE) {
@@ -581,88 +583,98 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
}
U0 AsmMakeArgMask(CLex *lx,CAsmArg *arg,I64 *mask)
U0 AsmMakeArgMask(CLex *lx,CAsmArg *arg,I64 *_mask)
{
CAsmCtrl *a=lx->a;
if (arg->just_seg) {
switch (arg->seg) {
case 0: *mask=1<<ARGT_ES|1<<ARGT_SREG; break;
case 1: *mask=1<<ARGT_CS|1<<ARGT_SREG; break;
case 2: *mask=1<<ARGT_SS|1<<ARGT_SREG; break;
case 3: *mask=1<<ARGT_DS|1<<ARGT_SREG; break;
case 4: *mask=1<<ARGT_FS|1<<ARGT_SREG; break;
case 5: *mask=1<<ARGT_GS|1<<ARGT_SREG; break;
case 0: *_mask=1<<ARGT_ES|1<<ARGT_SREG; break;
case 1: *_mask=1<<ARGT_CS|1<<ARGT_SREG; break;
case 2: *_mask=1<<ARGT_SS|1<<ARGT_SREG; break;
case 3: *_mask=1<<ARGT_DS|1<<ARGT_SREG; break;
case 4: *_mask=1<<ARGT_FS|1<<ARGT_SREG; break;
case 5: *_mask=1<<ARGT_GS|1<<ARGT_SREG; break;
}
return;
}
if (arg->fstk!=CREG_NONE) {
if (arg->fstk)
*mask=1<<ARGT_STI;
*_mask=1<<ARGT_STI;
else
*mask=1<<ARGT_ST0|1<<ARGT_STI;
*_mask=1<<ARGT_ST0|1<<ARGT_STI;
return;
}
switch (arg->size) {
case 0: *mask=0x3FF0FFFFFE; break;
case 1: *mask=0x1110111112; break;
case 2: *mask=0x2220222224; break;
case 4: *mask=0x0440444448; break;
case 8: *mask=0x0880888880; break;
case 0: *_mask=0x3FF0FFFFFE; break;
case 1: *_mask=0x1110111112; break;
case 2: *_mask=0x2220222224; break;
case 4: *_mask=0x0440444448; break;
case 8: *_mask=0x0880888880; break;
}
if (a->seg_size==64)
*mask&= 0xFF0FFFFFFF;
*_mask&=0xFF0FFFFFFF;
if (arg->reg1!=CREG_NONE && arg->imm_or_off_present && !arg->num.i) {
if (!arg->num.undef_glbl && !arg->num.undef_local)
if (arg->reg1!=CREG_NONE && arg->imm_or_off_present && !arg->num.i &&
!arg->num.undef_glbl && !arg->num.undef_local)
arg->imm_or_off_present=FALSE; //Zero displacement
}
if (arg->reg2!=CREG_NONE || arg->scale!=1) {
*mask&= 0x0000FF0000;
*_mask&=0x0000FF0000;
return;
}
if (arg->indirect) {
if (arg->imm_or_off_present)
*mask&=0x00FFFF0000;
*_mask&=0x00FFFF0000;
else
*mask&=0x000FFF0000;
*_mask&=0x000FFF0000;
} else {
if (arg->imm_or_off_present)
*mask&=0x000F00F0FE;
*_mask&=0x000F00F0FE;
else
*mask&=0x3F0FFF0F00;
*_mask&=0x3F0FFF0F00;
}
if (arg->seg!=CREG_NONE)
*mask&= 0x00FFFF0000;
*_mask&=0x00FFFF0000;
if (arg->reg1==CREG_NONE) {
if (arg->indirect)
*mask&=0x00FFFF0000;
else if (MIN_I8<=arg->num.i<=MAX_I8)
*mask&=0x000000F0FE;
else if (MIN_I8<=arg->num.i<=MAX_U8)
*mask&=0x000000E0FE;
else if (MIN_I16<=arg->num.i<=MAX_I16)
*mask&=0x000000E0EE;
else if (MIN_I16<=arg->num.i<=MAX_U16)
*mask&=0x000000C0EE;
else if (MIN_I32<=arg->num.i<=MAX_I32)
*mask&=0x000000C0CE;
else if (MIN_I32<=arg->num.i<=MAX_U32)
*mask&=0x00000080CE;
else
*mask&=0x000000808E;
*_mask&=0x00FFFF0000;
else if (arg->num.i<0) {
if (arg->num.i>=MIN_I8)
*_mask&=0xF08E;
else if (arg->num.i>=MIN_I16)
*_mask&=0xE08E;
else if (arg->num.i>=MIN_I32)
*_mask&=0xC08E;
else
*_mask&=0x808E;
} else {
if (arg->num.i<=MAX_I8)
*_mask&=0xF0FE;
else if (arg->num.i<=MAX_U8)
*_mask&=0xE0FE;
else if (arg->num.i<=MAX_I16)
*_mask&=0xE0EE;
else if (arg->num.i<=MAX_U16)
*_mask&=0xC0EE;
else if (arg->num.i<=MAX_I32)
*_mask&=0xC0CE;
else if (arg->num.i<=MAX_U32)
*_mask&=0x80CE;
else
*_mask&=0x808E;
}
} else {
*mask&= 0x3F00FF0F00;
*_mask&= 0x3F00FF0F00;
if (!arg->indirect) //M8-M64
*mask&= 0xFFFF0FFFFF;
*_mask&=0xFFFF0FFFFF;
}
switch (arg->reg1) {
case CREG_RAX: *_mask&=~0x3000000000; break;
case CREG_RCX: *_mask&=~0x2F00000000; break;
case CREG_RDX: *_mask&=~0x1F00000000; break;
default: *_mask&=~0x3F00000000;
}
if (arg->reg1)
*mask&= 0x30FFFFFFFF;
if (arg->reg1!=1)
*mask&= 0x2FFFFFFFFF;
if (arg->reg1!=2)
*mask&= 0x1FFFFFFFFF;
}
Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
@@ -671,21 +683,16 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
I64 i;
CExeAbsAddr *tempa;
if (!num2->lit)
if (!num2->imm_flag)
num2->num.i-=num2->rel;
for (i=0;i<cnt;i++) {
if (num2->U8_cnt==1) {
if (num2->num.undef_local)
AsmUnresolvedAdd(a,num2->num.exp,EIE_REL_U8+num2->lit,a->ip,num2->rel,
num2->num.undef_local,lx->cur_lfn->line_num,U8_avail,FALSE);
else if (num2->num.undef_glbl)
AsmUnresolvedAdd(a,num2->num.exp,EIE_REL_U8+num2->lit,a->ip,num2->rel,
num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail,TRUE);
else {
if (!num2->lit && !(MIN_I8<=num2->num.i<=MAX_I8))
LexExcept(lx,"ST_BRANCH_OUT_OF_RANGE");
}
if (num2->lit) {
if (num2->num.undef_local||num2->num.undef_glbl)
AsmUnresolvedAdd(a,num2->num.ex,EIE_REL_U8+num2->imm_flag,a->ip,num2->rel,
num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail);
else if (!num2->imm_flag && !(MIN_I8<=num2->num.i<=MAX_I8))
LexExcept(lx,"ST_BRANCH_OUT_OF_RANGE");
if (num2->imm_flag) {
if (num2->num.abs_cnts.abs_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
@@ -702,98 +709,82 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
tempa->type=EAA_SUB_U8;
}
}
AsmStoreCodeU8(lx,num2->num.i.u8[0]);
} else if (num2->U8_cnt==2) {
if (num2->num.undef_local)
AsmUnresolvedAdd(a,num2->num.exp,EIE_REL_U16+num2->lit,a->ip,num2->rel,
num2->num.undef_local,lx->cur_lfn->line_num,U8_avail,FALSE);
else if (num2->num.undef_glbl)
AsmUnresolvedAdd(a,num2->num.exp,EIE_REL_U16+num2->lit,a->ip,num2->rel,
num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail,TRUE);
else if (!num2->lit && !(MIN_I16<=num2->num.i<=MAX_I16))
LexExcept(lx,"ST_BRANCH_OUT_OF_RANGE");
if (num2->lit) {
if (num2->num.abs_cnts.abs_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_ADD_U16;
AsmStoreCodeU8(lx,num2->num.i);
} else {
if (num2->U8_cnt==2) {
if (num2->num.undef_local||num2->num.undef_glbl)
AsmUnresolvedAdd(a,num2->num.ex,EIE_REL_U16+num2->imm_flag,a->ip,num2->rel,
num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail);
else if (!num2->imm_flag && !(MIN_I16<=num2->num.i<=MAX_I16))
LexExcept(lx,"ST_BRANCH_OUT_OF_RANGE");
if (num2->imm_flag) {
if (num2->num.abs_cnts.abs_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_ADD_U16;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_SUB_U16;
}
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_SUB_U16;
AsmStoreCodeU8(lx,num2->num.i.u8[0]);
AsmStoreCodeU8(lx,num2->num.i.u8[1]);
} else if (num2->U8_cnt==4) {
if (num2->num.undef_local||num2->num.undef_glbl)
AsmUnresolvedAdd(a,num2->num.ex,EIE_REL_U32+num2->imm_flag,a->ip,num2->rel,
num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail);
else if (!num2->imm_flag && !(MIN_I32<=num2->num.i<=MAX_I32))
LexExcept(lx,"ST_BRANCH_OUT_OF_RANGE");
if (num2->imm_flag) {
if (num2->num.abs_cnts.abs_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_ADD_U32;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_SUB_U32;
}
}
AsmStoreCodeU32(lx,num2->num.i);
} else if (num2->U8_cnt==8) {
if (num2->num.undef_local||num2->num.undef_glbl)
AsmUnresolvedAdd(a,num2->num.ex,EIE_REL_U64+num2->imm_flag,a->ip,num2->rel,
num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail);
if (num2->imm_flag) {
if (num2->num.abs_cnts.abs_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_ADD_U64;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_SUB_U64;
}
}
AsmStoreCodeU64(lx,num2->num.i);
}
AsmStoreCodeU8(lx,num2->num.i.u8[0]);
AsmStoreCodeU8(lx,num2->num.i.u8[1]);
if (U8_avail && !num2->num.undef_local && !num2->num.undef_glbl &&
!num2->lit && -124<=num2->num.i<=123) {
LexPutWarn(lx,"ST_COULD_USE_I8_DISP");
return FALSE;
}
} else if (num2->U8_cnt==4) {
if (num2->num.undef_local)
AsmUnresolvedAdd(a,num2->num.exp,EIE_REL_U32+num2->lit,a->ip,num2->rel,
num2->num.undef_local,lx->cur_lfn->line_num,U8_avail,FALSE);
else if (num2->num.undef_glbl)
AsmUnresolvedAdd(a,num2->num.exp,EIE_REL_U32+num2->lit,a->ip,num2->rel,
num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail,TRUE);
if (num2->lit) {
if (num2->num.abs_cnts.abs_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_ADD_U32;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_SUB_U32;
}
}
AsmStoreCodeU32(lx,num2->num.i.u32[0]);
if (U8_avail && !num2->num.undef_local && !num2->num.undef_glbl &&
!num2->lit && -124<=num2->num.i<=123) {
LexPutWarn(lx,"ST_COULD_USE_I8_DISP");
return FALSE;
}
} else if (num2->U8_cnt==8) {
//TODO
if (num2->num.undef_local)
AsmUnresolvedAdd(a,num2->num.exp,EIE_REL_U32+num2->lit,a->ip,num2->rel,
num2->num.undef_local,lx->cur_lfn->line_num,U8_avail,FALSE);
else if (num2->num.undef_glbl)
AsmUnresolvedAdd(a,num2->num.exp,EIE_REL_U32+num2->lit,a->ip,num2->rel,
num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail,TRUE);
if (num2->lit) {
if (num2->num.abs_cnts.abs_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_ADD_U64;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
tempa->ip=a->ip;
tempa->type=EAA_SUB_U64;
}
}
AsmStoreCodeU64(lx,num2->num.i);
if (U8_avail && !num2->num.undef_local && !num2->num.undef_glbl &&
!num2->lit && -124<=num2->num.i<=123) {
!num2->imm_flag && -124<=num2->num.i<=123) {
LexPutWarn(lx,"ST_COULD_USE_I8_DISP");
return FALSE;
}
@@ -804,8 +795,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
U8 asm_seg_prefixes[6]={0x26,0x2E,0x36,0x3E,0x64,0x65};
Bool AsmCodeInstruction(CLex *lx,
CHashOpcode *tempo,I64 argcnt)
Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt)
{
CAsmCtrl *a=lx->a;
I64 i,j,a1,a2,om,seg,arg1mask,arg2mask;
@@ -839,8 +829,8 @@ Bool AsmCodeInstruction(CLex *lx,
else if (!(tempi->flags & IEF_NO_REX))
cur.REX=0x40;
}
cur.disp.lit=1;
cur.imm.lit=1;
cur.disp.imm_flag=TRUE;
cur.imm.imm_flag=TRUE;
om=tempi->opcode_modifier;
a1=tempi->arg1;
a2=tempi->arg2;
@@ -863,20 +853,20 @@ Bool AsmCodeInstruction(CLex *lx,
if (om==OM_CB) {
cur.imm.U8_cnt=1;
cur.imm.lit=0;
cur.imm.imm_flag=FALSE;
} else if (om==OM_CW) {
cur.imm.U8_cnt=2;
cur.imm.lit=0;
cur.imm.imm_flag=FALSE;
} else if (om==OM_CD) {
cur.imm.U8_cnt=4;
cur.imm.lit=0;
cur.imm.imm_flag=FALSE;
}
if (argcnt==1) {
if (best.U8_cnt!=255 && !found_second_possible && !best.is_dft) {
found_second_possible=TRUE;
if (!a->arg1.size)
PrintFWarn("%S%s,%04d\n","ST_NO_SIZE_SPECIFIED",
PrintWarn("%S%s,%04d\n","ST_NO_SIZE_SPECIFIED",
lx->cur_lfn->name,lx->cur_lfn->line_num-1);
}
if (tempi->flags & IEF_PLUS_OPCODE) {
@@ -903,7 +893,7 @@ Bool AsmCodeInstruction(CLex *lx,
MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum));
cur.disp.U8_cnt=4;
if (a->seg_size==64)
cur.disp.lit=0;
cur.disp.imm_flag=FALSE;
} else {
if (tempa1->reg2==CREG_NONE && tempa1->scale==1) {
cur.ModrM|=tempa1->reg1&7;
@@ -951,7 +941,7 @@ Bool AsmCodeInstruction(CLex *lx,
if (!ModrM_complete) {
if (tempa1->imm_or_off_present) {
MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum));
if (!cur.disp.num.exp && MIN_I8<=cur.disp.num.i<=MAX_I8) {
if (!cur.disp.num.ex && MIN_I8<=cur.disp.num.i<=MAX_I8) {
cur.ModrM|=0x40;
cur.disp.U8_cnt=1;
} else if (a->seg_size==16) {
@@ -983,7 +973,7 @@ Bool AsmCodeInstruction(CLex *lx,
if (best.U8_cnt!=255 && !found_second_possible && !best.is_dft) {
found_second_possible=TRUE;
if (!a->arg1.size && !a->arg2.size)
PrintFWarn("%S%s,%04d\n","ST_NO_SIZE_SPECIFIED",
PrintWarn("%S%s,%04d\n","ST_NO_SIZE_SPECIFIED",
lx->cur_lfn->name,lx->cur_lfn->line_num-1);
}
if (tempi->flags & IEF_PLUS_OPCODE) {
@@ -1091,11 +1081,11 @@ Bool AsmCodeInstruction(CLex *lx,
MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum));
cur.disp.U8_cnt=4;
if (a->seg_size==64)
cur.disp.lit=0;
cur.disp.imm_flag=FALSE;
} else {
if (tempa1->imm_or_off_present) {
MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum));
if (!cur.disp.num.exp && MIN_I8<=cur.disp.num.i<=MAX_I8) {
if (!cur.disp.num.ex && MIN_I8<=cur.disp.num.i<=MAX_I8) {
cur.ModrM|=0x40;
cur.disp.U8_cnt=1;
} else if (a->seg_size==16) {
@@ -1159,8 +1149,8 @@ Bool AsmCodeInstruction(CLex *lx,
if (a->seg_size==64 && cur.REX&0x40==0x40 &&
(cur.REX!=0x40 || tempi->flags&IEF_40_REX || cur.has_REX) &&
(cur.REX&7 || !(tempi->flags&IEF_REX_ONLY_R8_R15 ||
tempi->flags&IEF_REX_XOR_LIKE && tempa1->reg1==tempa2->reg1 && cur.ModrM&0xC0==0xC0)))
cur.U8_cnt++;
tempi->flags&IEF_REX_XOR_LIKE && tempa1->reg1==tempa2->reg1 && cur.ModrM&0xC0==0xC0)))
cur.U8_cnt++;
if (cur.U8_cnt<best.U8_cnt &&
!(tempi->flags & IEF_DONT_SWITCH_MODES &&
(cur.has_addr_prefix || cur.has_operand_prefix)))
@@ -1183,8 +1173,8 @@ Bool AsmCodeInstruction(CLex *lx,
if (a->seg_size==64 && best.REX&0x40==0x40 &&
(best.REX!=0x40 || tempi->flags&IEF_40_REX || best.has_REX) &&
(best.REX&7||!(tempi->flags&IEF_REX_ONLY_R8_R15 ||
tempi->flags&IEF_REX_XOR_LIKE && tempa1->reg1==tempa2->reg1 && best.ModrM&0xC0==0xC0)))
AsmStoreCodeU8(lx,best.REX);
tempi->flags&IEF_REX_XOR_LIKE && tempa1->reg1==tempa2->reg1 && best.ModrM&0xC0==0xC0)))
AsmStoreCodeU8(lx,best.REX);
for (j=0;j<tempi->opcode_cnt-1;j++)
AsmStoreCodeU8(lx,tempi->opcode[j]);
AsmStoreCodeU8(lx,best.last_opcode_U8);
@@ -1213,7 +1203,7 @@ Bool AsmCodeInstruction(CLex *lx,
}
U0 DefineU8s(CLex *lx,I64 U8_cnt)
U0 PrsAsmDefine(CLex *lx,I64 U8_cnt)
{
CAsmCtrl *a=lx->a;
Bool is_dup;
@@ -1236,7 +1226,7 @@ U0 DefineU8s(CLex *lx,I64 U8_cnt)
lx->abs_cnts=0;
lx->undef_hash_entry=NULL;
lx->flags&=~(LF_UNRESOLVED+LF_LOCAL);
if (!GetExpression(lx,&num2.num.exp))
if (!IsLexExpression2Bin(lx,&num2.num.ex))
LexSkipEol(lx);
else {
if (lx->abs_cnts.externs)
@@ -1251,8 +1241,8 @@ U0 DefineU8s(CLex *lx,I64 U8_cnt)
lx->undef_hash_entry=NULL;
}
} else {
i=Call(num2.num.exp);
ExpressionDel(num2.num.exp);
i=Call(num2.num.ex);
ExpressionBinDel(num2.num.ex);
}
}
if (lx->token==TK_IDENT && lx->hash_entry) {
@@ -1261,14 +1251,14 @@ U0 DefineU8s(CLex *lx,I64 U8_cnt)
if (Lex(lx)!='(')
LexExcept(lx,"ST_EXPECTING_LEFT_PAREN");
Lex(lx); //skip (
dup_val=AsmExpressionEval(lx);
dup_val=AsmLexExpression(lx);
if (lx->token!=')')
LexExcept(lx,"ST_EXPECTING_RIGHT_PAREN");
Lex(lx); //SKIP )
}
}
num2.rel=0;
num2.lit=1;
num2.imm_flag=TRUE;
num2.num.abs_cnts=lx->abs_cnts;
if (is_dup) {
if (num2.num.undef_local || num2.num.undef_glbl)
@@ -1296,12 +1286,12 @@ U0 PrsAsmBlk(CLex *lx)
old_hash_mask=lx->htc.hash_mask,
old_flags=lx->flags & LF_ASM_EXPRESSIONS;
CHashOpcode *tempo;
CHashExport *tempess;
CHashExport *tempex;
U8 *next_last_label;
a->seg_size=64;
lx->flags|=LF_ASM_EXPRESSIONS;
lx->htc.hash_mask=lx->htc.hash_mask&~(HTF_FLAGS_MASK|HTT_FILE|HTT_INTERNAL_TYPE|HTT_MODULE)|HTT_ASM_KEYWORD;
lx->htc.hash_mask=lx->htc.hash_mask&~(HTG_FLAGS_MASK|HTT_FILE|HTT_INTERNAL_TYPE|HTT_MODULE)|HTT_ASM_KEYWORD;
if (lx->token!='{')
LexExcept(lx,"ST_EXPECTING_LEFT_BRACE");
else
@@ -1318,13 +1308,13 @@ U0 PrsAsmBlk(CLex *lx)
if (lx->token!=TK_IDENT)
LexExcept(lx,"ST_EXPECTING_IDENTIFIER");
else {
tempess=NULL;
tempess=CAlloc(sizeof(CHashExport));
tempess->str=lx->ident;
tempex=NULL;
tempex=CAlloc(sizeof(CHashExport));
tempex->str=lx->ident;
lx->ident=0;
tempess->type=HTT_EXPORT_SYS_SYM|HTF_UNRESOLVED;
HashAdd(tempess,lx->htc.glbl_hash_table);
tempess->type|=HTF_IMPORT;
tempex->type=HTT_EXPORT_SYS_SYM|HTF_UNRESOLVED;
HashAdd(tempex,lx->htc.glbl_hash_table);
tempex->type|=HTF_IMPORT;
if (Lex(lx)==',')
Lex(lx); //skip ','
}
@@ -1341,12 +1331,12 @@ U0 PrsAsmBlk(CLex *lx)
LexExcept(lx,"ST_JUST_ONE_ORG_ALLOWED");
if (a->ip)
LexExcept(lx,"ST_ORG_MUST_BE_AT_BEGINNING");
a->module_org=AsmExpressionEval(lx);
a->module_org=AsmLexExpression(lx);
break;
case AKW_ALIGN:
if (lx->htc.local_var_lst)
LexExcept(lx,"ST_NO_FUN_ASM_ALIGN");
i=AsmExpressionEval(lx);
i=AsmLexExpression(lx);
if (Bsf(i)!=Bsr(i))
LexExcept(lx,"ST_ALIGN_MUST_BE_POWER_OF_TWO");
if (!(lx->flags&LF_AOT_COMPILE) && i>8)
@@ -1355,21 +1345,21 @@ U0 PrsAsmBlk(CLex *lx)
i=CeilU64(a->ip,i);
if (lx->token==',')
Lex(lx);
k=AsmExpressionEval(lx);
k=AsmLexExpression(lx);
for (j=a->ip;j<i;j++)
AsmStoreCodeU8(lx,k);
break;
case AKW_DU8:
DefineU8s(lx,1);
PrsAsmDefine(lx,1);
break;
case AKW_DU16:
DefineU8s(lx,2);
PrsAsmDefine(lx,2);
break;
case AKW_DU32:
DefineU8s(lx,4);
PrsAsmDefine(lx,4);
break;
case AKW_DU64:
DefineU8s(lx,8);
PrsAsmDefine(lx,8);
break;
case AKW_LIST:
a->lst=TRUE;
@@ -1406,7 +1396,7 @@ U0 PrsAsmBlk(CLex *lx)
}
}
}
AsmCodeInstruction(lx,tempo,argcnt);
PrsAsmInstruction(lx,tempo,argcnt);
} else if (lx->hash_entry->type & HTT_EXPORT_SYS_SYM) {
if (Btr(&lx->hash_entry->type,HTf_UNRESOLVED)) {
if (lx->hash_entry->type & HTF_LOCAL) {
@@ -1441,27 +1431,27 @@ U0 PrsAsmBlk(CLex *lx)
LexExcept(lx,"ST_SYNTAX_ERROR");
} else {
if (lx->token==TK_IDENT) {
tempess=CAlloc(sizeof(CHashExport));
tempess->str=lx->ident;
tempex=CAlloc(sizeof(CHashExport));
tempex->str=lx->ident;
lx->ident=0;
tempess->type=HTT_EXPORT_SYS_SYM;
tempess->val=a->ip;
tempex->type=HTT_EXPORT_SYS_SYM;
tempex->val=a->ip;
Lex(lx); //Skip ident
if (lx->token!=':' && lx->token!=TK_DBL_COLON)
LexExcept(lx,"ST_EXPECTING_COLON");
else {
if (*tempess->str=='@' && tempess->str[1]=='@') {
if (*tempex->str=='@' && tempex->str[1]=='@') {
if (lx->token==TK_DBL_COLON)
LexExcept(lx,"ST_NO_LOCAL_GLBL_EXPORT");
HashAdd(tempess,lx->htc.local_hash_table);
HashAdd(tempex,lx->htc.local_hash_table);
a->has_locals=TRUE;
} else
HashAdd(tempess,lx->htc.glbl_hash_table);
HashAdd(tempex,lx->htc.glbl_hash_table);
if (lx->token==TK_DBL_COLON) {
tempess->type|=HTF_EXPORT;
SetSrcFileInfo(lx,tempess);
tempex->type|=HTF_EXPORT;
SetSrcFileInfo(lx,tempex);
AsmLocalsResolve(lx);
a->last_label=tempess->str;
a->last_label=tempex->str;
}
Lex(lx);
}
+115 -129
View File
@@ -620,9 +620,9 @@ U0 ICZero(CIntermediateCode *tempi,I64 r)
ICU16(tempi,0xC033+r<<8+r<<11);
}
U0 ICOr(CIntermediateCode *tempi,I64 r)
U0 ICTest(CIntermediateCode *tempi,I64 r)
{
I64 i=0xC00B48; //OR R,R
I64 i=0xC08548; //TEST R,R
if (r>7) {
i+=5;
r&=7;
@@ -942,7 +942,7 @@ U0 ICAddEct(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,
ICMov(tempi,t1,r1,d1,TY_REG+IT_I64,result_reg,0,ip);
}
U0 ICAddConst(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,
U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,
I64 t2,I64 r2,I64 d2,I64 d,I64 op,I64 ip)
{
I64 i,r;
@@ -1089,7 +1089,7 @@ U0 ICAddConst(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,
}
break;
case TY_STK>>4:
ICAddConst(tempi,TY_REG+IT_I64,CREG_RAX,0,t2,r2,d2,d,op,ip);
ICAddSubEctImm(tempi,TY_REG+IT_I64,CREG_RAX,0,t2,r2,d2,d,op,ip);
ICPushRegs(tempi,1<<CREG_RAX);
return;
}
@@ -1272,7 +1272,7 @@ U0 ICFUnaryMinus(CLex *lx,CIntermediateCode *tempi,U8 *buf2,I64 ip)
if (!(builtin1=ICBuiltInFloatConst(p1->disp(F64)))) {
t1=TY_RIP_DISP32+IT_I64;
r1=CREG_RIP;
d1=CBFloatConstFind(lx,p1->disp(F64))+buf2;
d1=LCCFloatConstFind(lx,p1->disp(F64))+buf2;
}
} else {
ICPush(tempi,p1->type,p1->reg,p1->disp,ip);
@@ -1334,7 +1334,7 @@ U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip)
{ //for POW
I64 i;
CExeImportExport *tempe;
CHashExport *tempess=HashFind("SYS_POW",lx->htc.hash_table_lst,HTT_EXPORT_SYS_SYM);
CHashExport *tempex=HashFind("SYS_POW",lx->htc.hash_table_lst,HTT_EXPORT_SYS_SYM);
if (tempi->ic_flags & ICF_P1_FIRST) {
ICMov(tempi,TY_REG+IT_I64,CREG_RDX,0,
@@ -1348,22 +1348,22 @@ U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip)
tempi->p1.type,tempi->p1.reg,tempi->p1.disp,ip);
}
if (lx->flags&LF_AOT_COMPILE) {
if (!tempess) {
tempess=CAlloc(sizeof(CHashExport));
tempess->str=StrNew("SYS_POW");
tempess->type=HTT_EXPORT_SYS_SYM|HTF_UNRESOLVED|HTF_IMPORT;
HashAdd(tempess,lx->htc.glbl_hash_table);
if (!tempex) {
tempex=CAlloc(sizeof(CHashExport));
tempex->str=StrNew("SYS_POW");
tempex->type=HTT_EXPORT_SYS_SYM|HTF_UNRESOLVED|HTF_IMPORT;
HashAdd(tempex,lx->htc.glbl_hash_table);
}
if (tempess->type&HTF_IMPORT) {
if (GetOpt(OPTf_USE_LIT64)) {
if (tempex->type&HTF_IMPORT) {
if (GetOpt(OPTf_USE_IMM64)) {
ICU16(tempi,0xBB48);
ICU64(tempi,0);
if (buf) {
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIE_LIT_U64;
tempe->type=EIE_IMM_U64;
tempe->ip=ip+tempi->ic_cnt-8;
tempe->next=tempess->ie_lst;
tempess->ie_lst=tempe;
tempe->next=tempex->ie_lst;
tempex->ie_lst=tempe;
}
ICU16(tempi,0xD3FF);
} else {
@@ -1373,19 +1373,19 @@ U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip)
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIE_REL_U32;
tempe->ip=ip+tempi->ic_cnt-4;
tempe->next=tempess->ie_lst;
tempess->ie_lst=tempe;
tempe->next=tempex->ie_lst;
tempex->ie_lst=tempe;
}
}
} else { //Kernel
if (tempess->type&HTF_UNRESOLVED)
if (tempex->type&HTF_UNRESOLVED)
throw(EXCEPT_COMPILER,23);
else {
i=tempess->val-(ip+tempi->ic_cnt+5);
i=tempex->val-(ip+tempi->ic_cnt+5);
if (!(MIN_I32<=i<=MAX_I32)) {
throw(EXCEPT_COMPILER,23);
// ICU16(tempi,0xBB48);
// ICU64(tempi,tempess->val);
// ICU64(tempi,tempex->val);
// ICU16(tempi,0xD3FF);
} else {
ICU8(tempi,0xE8);
@@ -1394,10 +1394,10 @@ U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip)
}
}
} else {
i=tempess->val-(ip+tempi->ic_cnt+5);
i=tempex->val-(ip+tempi->ic_cnt+5);
if (!(MIN_I32<=i<=MAX_I32)) {
ICU16(tempi,0xBB48);
ICU64(tempi,tempess->val);
ICU64(tempi,tempex->val);
ICU16(tempi,0xD3FF);
} else {
ICU8(tempi,0xE8);
@@ -1443,7 +1443,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin2=ICBuiltInFloatConst(p2->disp(F64)))) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip);
@@ -1466,7 +1466,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin1=ICBuiltInFloatConst(p1->disp(F64)))) {
t1=TY_RIP_DISP32+IT_I64;
r1=CREG_RIP;
d1=CBFloatConstFind(lx,p1->disp(F64))+buf2;
d1=LCCFloatConstFind(lx,p1->disp(F64))+buf2;
}
} else {
ICPush(tempi,p1->type,p1->reg,p1->disp,ip);
@@ -1486,7 +1486,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin2=ICBuiltInFloatConst(p2->disp(F64)))) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip);
@@ -1520,7 +1520,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin2=ICBuiltInFloatConst(p2->disp(F64)))) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip);
@@ -1540,7 +1540,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin1=ICBuiltInFloatConst(p1->disp(F64)))) {
t1=TY_RIP_DISP32+IT_I64;
r1=CREG_RIP;
d1=CBFloatConstFind(lx,p1->disp(F64))+buf2;
d1=LCCFloatConstFind(lx,p1->disp(F64))+buf2;
}
} else {
ICPush(tempi,p1->type,p1->reg,p1->disp,ip);
@@ -1794,7 +1794,7 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin2=ICBuiltInFloatConst(p2->disp(F64)))) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip);
@@ -1830,7 +1830,7 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin2=ICBuiltInFloatConst(p2->disp(F64)))) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip);
@@ -1943,7 +1943,7 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin2=ICBuiltInFloatConst(p2->disp(F64)))) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip);
@@ -1980,7 +1980,7 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip)
if (!(builtin2=ICBuiltInFloatConst(p2->disp(F64)))) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip);
@@ -2046,7 +2046,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip,
Bool dont_push_float,dont_pop_float,alt,short_jmp;
I64 i,rsp_size=0,builtin1=0,builtin2=0,
t1,r1,d1,t2,r2,d2;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
U8 *buf2;
if (tempi->ic_flags&ICF_ALTERNATE_TEMPLATE) {
@@ -2083,7 +2083,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip,
tempi->ic_flags&ICF_PUSH_CMP) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip2);
@@ -2111,7 +2111,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip,
if (!(builtin1=ICBuiltInFloatConst(p1->disp(F64)))) {
t1=TY_RIP_DISP32+IT_I64;
r1=CREG_RIP;
d1=CBFloatConstFind(lx,p1->disp(F64))+buf2;
d1=LCCFloatConstFind(lx,p1->disp(F64))+buf2;
}
} else {
ICPush(tempi,p1->type,p1->reg,p1->disp,ip2);
@@ -2133,7 +2133,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip,
tempi->ic_flags&ICF_PUSH_CMP) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip2);
@@ -2171,7 +2171,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip,
tempi->ic_flags&ICF_PUSH_CMP) {
t2=TY_RIP_DISP32+IT_I64;
r2=CREG_RIP;
d2=CBFloatConstFind(lx,p2->disp(F64))+buf2;
d2=LCCFloatConstFind(lx,p2->disp(F64))+buf2;
}
} else {
ICPush(tempi,p2->type,p2->reg,p2->disp,ip2);
@@ -2197,7 +2197,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip,
if (!(builtin1=ICBuiltInFloatConst(p1->disp(F64)))) {
t1=TY_RIP_DISP32+IT_I64;
r1=CREG_RIP;
d1=CBFloatConstFind(lx,p1->disp(F64))+buf2;
d1=LCCFloatConstFind(lx,p1->disp(F64))+buf2;
}
} else {
ICPush(tempi,p1->type,p1->reg,p1->disp,ip2);
@@ -2283,33 +2283,36 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip,
lb=OptLabelFwd(tempi->ic_data);
short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP);
if (!buf && lb->addr!=INVALID_PTR) {
i=lb->addr-ip;
if (lb->flags&CBMF_POP_CMP)
i=lb->addr-(ip+2);
if (lb->flags&CMF_POP_CMP) {
if(tempi->ic_flags&ICF_PUSH_CMP)
i+=4;
else
i+=8;
if (MIN_I8+2<i<MAX_I8+2)
}
if (MIN_I8<=i<=MAX_I8)
short_jmp=TRUE;
}
if (short_jmp) {
tempi->ic_flags|=ICF_SHORT_JMP;
i=lb->addr-(ip+2);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP) {
if(tempi->ic_flags&ICF_PUSH_CMP)
i+=4;
else
i+=8;
}
ICU16(tempi,i<<8+us.u8[2]);
} else {
tempi->ic_flags&=~ICF_SHORT_JMP;
i=lb->addr-(ip+6);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP) {
if(tempi->ic_flags&ICF_PUSH_CMP)
i+=4;
else
i+=8;
}
ICU16(tempi,us.u16[0]);
ICU32(tempi,i);
}
@@ -2715,7 +2718,7 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 ptype,I64 t1,I64 r1,I64 d1,
I64 result_reg,temp,i;
if (tempi->ic_flags & ICF_NOT_ADDR) {
if (t3&TY_MASK==TY_IMM) {
ICAddConst(tempi,
ICAddSubEctImm(tempi,
t2&TY_MASK+ptype,r2,d2,t2&TY_MASK+ptype,r2,d2,d3,op,ip);
if (t1&TY_MASK)
ICMov(tempi,t1,r1,d1,t2&TY_MASK+ptype,r2,d2,ip);
@@ -2969,7 +2972,7 @@ U0 ICNot(CIntermediateCode *tempi,I64 ip)
ICU8(tempi,0xFF);
} else {
ICMov(tempi,TY_REG+IT_I64,CREG_RAX,0,tempi->p1.type,tempi->p1.reg,tempi->p1.disp,ip);
ICOr(tempi,CREG_RAX);
ICTest(tempi,CREG_RAX);
}
ICU24(tempi,0xC0940F); //SETZ AL
ICU32(tempi,0xC0B60F48); //MOVZX RAX,AL
@@ -2998,9 +3001,9 @@ U0 ICAndAnd(CIntermediateCode *tempi,I64 ip)
r2=tempi->p1.reg;
}
ICZero(tempi,CREG_RAX);
ICOr(tempi,r2);
ICTest(tempi,r2);
ICU16(tempi,0x0874);
ICOr(tempi,CREG_RCX);
ICTest(tempi,CREG_RCX);
ICU16(tempi,0x0374);
ICU24(tempi,0xC0FF48);
ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+IT_I64,CREG_RAX,0,ip);
@@ -3057,12 +3060,12 @@ U0 ICXorXor(CIntermediateCode *tempi,I64 ip)
r2=tempi->p1.reg;
}
ICZero(tempi,CREG_RBX);
ICOr(tempi,r2);
ICTest(tempi,r2);
ICU16(tempi,0x0374);
ICU24(tempi,0xC3FF48);
ICZero(tempi,CREG_RAX);
ICOr(tempi,CREG_RCX);
ICTest(tempi,CREG_RCX);
ICU16(tempi,0x0374);
ICU24(tempi,0xC0FF48);
@@ -3297,7 +3300,7 @@ U0 ICBitOps(CIntermediateCode *tempi,CICArg *p1,CICArg *p2,CIntermediateCode *te
U0 ICPreempt(CIntermediateCode *tempi,I64 ip)
{
CIntermediateCode *tempi2=tempi+1;
CIntermediateCode *tempi2=tempi->next;
if (tempi->p1.type&TY_MASK==TY_IMM) {
ICZero(tempi,CREG_RBX);
ICU32(tempi,0x1B8B4864);
@@ -3314,7 +3317,7 @@ U0 ICPreempt(CIntermediateCode *tempi,I64 ip)
ICZero(tempi,CREG_RAX);
ICZero(tempi,CREG_RBX);
ICU32(tempi,0x1B8B4864);
ICOr(tempi,CREG_RCX);
ICTest(tempi,CREG_RCX);
ICU16(tempi,0x0774);
ICU24(tempi,0x6BBA0F);
ICU16(tempi,CTask.task_flags+TASKf_PREEMPT<<8);
@@ -3357,7 +3360,7 @@ U0 ICToBool(CLex *,CIntermediateCode *tempi,I64 ip)
tempi->p1.type,tempi->p1.reg,tempi->p1.disp,ip);
r=CREG_RAX;
}
ICOr(tempi,r);
ICTest(tempi,r);
ICU24(tempi,0xC0950F); //SETNZ AL
ICU32(tempi,0xC0B60F48); //MOVZX RAX,AL
}
@@ -3384,7 +3387,7 @@ U0 ICPreIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
CHashClass *tempc=tempi->ic_class,*tempc1=tempc-1;
if (tempi->ic_flags & ICF_NOT_ADDR) {
if (tempc->ptr_cnt && tempc1->size!=1) {
ICAddConst(tempi,tempi->p1.type&TY_MASK+tempi->p1.ptype,tempi->p1.reg,tempi->p1.disp,
ICAddSubEctImm(tempi,tempi->p1.type&TY_MASK+tempi->p1.ptype,tempi->p1.reg,tempi->p1.disp,
tempi->p1.type&TY_MASK+tempi->p1.ptype,tempi->p1.reg,tempi->p1.disp,
tempc1->size,op.u16[3],ip);
} else
@@ -3402,7 +3405,7 @@ U0 ICPreIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
}
if (tempc->ptr_cnt &&
tempc1->size!=1) {
ICAddConst(tempi,TY_DISP+tempi->p1.ptype,r,0,
ICAddSubEctImm(tempi,TY_DISP+tempi->p1.ptype,r,0,
TY_DISP+tempi->p1.ptype,r,0,
tempc1->size,op.u16[3],ip);
} else
@@ -3426,7 +3429,7 @@ U0 ICPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
}
if (tempc->ptr_cnt &&
tempc1->size!=1) {
ICAddConst(tempi,tempi->p1.type&TY_MASK+tempi->p1.ptype,tempi->p1.reg,tempi->p1.disp,
ICAddSubEctImm(tempi,tempi->p1.type&TY_MASK+tempi->p1.ptype,tempi->p1.reg,tempi->p1.disp,
tempi->p1.type&TY_MASK+tempi->p1.ptype,tempi->p1.reg,tempi->p1.disp,
tempc1->size,op.u16[3],ip);
} else
@@ -3446,7 +3449,7 @@ U0 ICPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
}
if (tempc->ptr_cnt &&
tempc1->size!=1) {
ICAddConst(tempi,TY_DISP+tempi->p1.ptype,r,0,
ICAddSubEctImm(tempi,TY_DISP+tempi->p1.ptype,r,0,
TY_DISP+tempi->p1.ptype,r,0,
tempc1->size,op.u16[3],ip);
} else
@@ -3472,7 +3475,7 @@ U0 ICDerefPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
TY_DISP+t,r,0,ip);
if (tempc1->size!=1) {
ICAddConst(tempi,tempi->p1.type&TY_MASK+IT_I64,tempi->p1.reg,tempi->p1.disp,
ICAddSubEctImm(tempi,tempi->p1.type&TY_MASK+IT_I64,tempi->p1.reg,tempi->p1.disp,
tempi->p1.type&TY_MASK+IT_I64,tempi->p1.reg,tempi->p1.disp,
tempc1->size,op.u16[3],ip);
} else
@@ -3488,7 +3491,7 @@ U0 ICDerefPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
ICMov(tempi,TY_REG+IT_I64,CREG_RDX,0,
TY_DISP+IT_I64,r,0,ip);
if (tempc1->size!=1) {
ICAddConst(tempi,TY_DISP+IT_I64,r,0,
ICAddSubEctImm(tempi,TY_DISP+IT_I64,r,0,
TY_DISP+IT_I64,r,0,
tempc1->size,op.u16[3],ip);
} else
@@ -3515,7 +3518,7 @@ U0 ICAssignPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
tempi->p2.type,tempi->p2.reg,tempi->p2.disp,ip);
if (tempc1->size!=1 || tempi->p1.type&TY_MASK==TY_STK) {
ICAddConst(tempi,tempi->p1.type,tempi->p1.reg,tempi->p1.disp,
ICAddSubEctImm(tempi,tempi->p1.type,tempi->p1.reg,tempi->p1.disp,
TY_REG+IT_I64,r,0,
tempc1->size,op.u16[3],ip);
} else
@@ -3531,7 +3534,7 @@ U0 ICAssignPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
tempi->p2.type,tempi->p2.reg,tempi->p2.disp,ip);
if (tempc1->size!=1) {
ICAddConst(tempi,TY_DISP+IT_I64,CREG_RDX,0,
ICAddSubEctImm(tempi,TY_DISP+IT_I64,CREG_RDX,0,
TY_REG+IT_I64,CREG_RCX,0,
tempc1->size,op.u16[3],ip);
} else
@@ -3544,9 +3547,9 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip,
I64 us,I64 is,I64 not_us,I64 not_is,
U8 *buf,I64 ip2)
{
I64 r1,d1,r2,i=0x48,j,t1,t2,result_reg;
I64 r1,r2,i=0x48,j,t1,t2,result_reg;
Bool short_jmp,done;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
CICArg *p1=&tempi->p1,*p2=&tempi->p2,*swap;
j=p1->disp;
@@ -3560,33 +3563,11 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip,
j=p2->disp;
if (p2->type&TY_MASK==TY_IMM && MIN_I32<=j<=MAX_I32) {
if (!has_result &&
p1->type&TY_MASK==TY_DISP && //TODO, other modes
p1->type&IT_MASK>=IT_I64) {
r1=p1->reg;
d1=p1->disp;
if (r1>7) {
i++;
r1&=7;
}
if (MIN_I8<=j<=MAX_I8)
i+=0x388300;
else
i+=0x388100;
if (!d1) {
ICU24(tempi,0x000000+i+r1<<16);
} else if (MIN_I8<=d1<=MAX_I8) {
ICU24(tempi,0x400000+i+r1<<16);
ICU8(tempi,d1);
} else {
ICU24(tempi,0x800000+i+r1<<16);
ICU32(tempi,d1);
}
if (MIN_I8<=j<=MAX_I8)
ICU8(tempi,j);
else
ICU32(tempi,j);
} else {
if (!has_result && TY_REG<=p1->type&TY_MASK<=TY_RIP_DISP32)
ICAddSubEctImm(tempi,tempi->p1.type,tempi->p1.reg,tempi->p1.disp,
tempi->p1.type,tempi->p1.reg,tempi->p1.disp,
j,0x073B,ip2);
else {
if (p1->type&TY_MASK==TY_REG)
r1=p1->reg;
else {
@@ -3595,13 +3576,13 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip,
}
if (!j) {
if (is.u8[2]==0x7C) {
ICOr(tempi,r1);
ICTest(tempi,r1);
is=0x78880F;
} else if (is.u8[2]==0x7D) {
ICOr(tempi,r1);
ICTest(tempi,r1);
is=0x79890F;
} else if (is.u8[2]==0x74 || is.u8[2]==0x75)
ICOr(tempi,r1);
ICTest(tempi,r1);
else {
if (r1>7)
i++;
@@ -3705,33 +3686,36 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip,
lb=OptLabelFwd(tempi->ic_data);
short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP);
if (!buf && lb->addr!=INVALID_PTR) {
i=lb->addr-ip;
if (lb->flags&CBMF_POP_CMP)
i=lb->addr-(ip+2);
if (lb->flags&CMF_POP_CMP) {
if(tempi->ic_flags&ICF_PUSH_CMP)
i+=4;
else
i+=8;
if (MIN_I8+2<i<MAX_I8+2)
}
if (MIN_I8<=i<=MAX_I8)
short_jmp=TRUE;
}
if (short_jmp) {
tempi->ic_flags|=ICF_SHORT_JMP;
i=lb->addr-(ip+2);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP) {
if(tempi->ic_flags&ICF_PUSH_CMP)
i+=4;
else
i+=8;
}
ICU16(tempi,i<<8+is.u8[2]);
} else {
tempi->ic_flags&=~ICF_SHORT_JMP;
i=lb->addr-(ip+6);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP) {
if(tempi->ic_flags&ICF_PUSH_CMP)
i+=4;
else
i+=8;
}
ICU16(tempi,is.u16[0]);
ICU32(tempi,i);
}
@@ -3743,7 +3727,7 @@ U0 ICTestAndBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf,I64 ip2)
{
I64 i;
Bool short_jmp;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
if (tempi->p1.type&TY_MASK!=TY_REG) {
if (tempi->p1.type&IT_MASK<=IT_U8 &&
@@ -3755,32 +3739,32 @@ U0 ICTestAndBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf,I64 ip2)
ICU8(tempi,0xFF);
} else {
ICMov(tempi,TY_REG+IT_I64,CREG_RAX,0,tempi->p1.type,tempi->p1.reg,tempi->p1.disp,ip2);
ICOr(tempi,CREG_RAX);
ICTest(tempi,CREG_RAX);
}
} else
ICOr(tempi,tempi->p1.reg);
ICTest(tempi,tempi->p1.reg);
ip+=tempi->ic_cnt;
lb=OptLabelFwd(tempi->ic_data);
short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP);
if (!buf && lb->addr!=INVALID_PTR) {
i=lb->addr-ip;
if (lb->flags&CBMF_POP_CMP)
i=lb->addr-(ip+2);
if (lb->flags&CMF_POP_CMP)
i+=8;
if (MIN_I8+2<i<MAX_I8+2)
if (MIN_I8<=i<=MAX_I8)
short_jmp=TRUE;
}
if (short_jmp) {
tempi->ic_flags|=ICF_SHORT_JMP;
i=lb->addr-(ip+2);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP)
i+=8;
ICU16(tempi,i<<8+is.u8[2]);
} else {
tempi->ic_flags&=~ICF_SHORT_JMP;
i=lb->addr-(ip+6);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP)
i+=8;
ICU16(tempi,is.u16[0]);
ICU32(tempi,i);
@@ -3791,29 +3775,29 @@ U0 ICZFlagBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf)
{
I64 i;
Bool short_jmp;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
ip+=tempi->ic_cnt;
lb=OptLabelFwd(tempi->ic_data);
short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP);
if (!buf && lb->addr!=INVALID_PTR) {
i=lb->addr-ip;
if (lb->flags&CBMF_POP_CMP)
i=lb->addr-(ip+2);
if (lb->flags&CMF_POP_CMP)
i+=8;
if (MIN_I8+2<i<MAX_I8+2)
if (MIN_I8<=i<=MAX_I8)
short_jmp=TRUE;
}
if (short_jmp) {
tempi->ic_flags|=ICF_SHORT_JMP;
i=lb->addr-(ip+2);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP)
i+=8;
ICU16(tempi,i<<8+is.u8[2]);
} else {
tempi->ic_flags&=~ICF_SHORT_JMP;
i=lb->addr-(ip+6);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP)
i+=8;
ICU16(tempi,is.u16[0]);
ICU32(tempi,i);
@@ -3825,7 +3809,7 @@ U0 ICAndBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf,I64 ip2)
U64 i;
I64 it,t1,r1,d1,r2;
Bool short_jmp,swap,override;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
CICArg *p1,*p2;
if (tempi->p1.type&TY_MASK==TY_IMM) {
@@ -3955,23 +3939,23 @@ U0 ICAndBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf,I64 ip2)
lb=OptLabelFwd(tempi->ic_data);
short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP);
if (!buf && lb->addr!=INVALID_PTR) {
i=lb->addr-ip;
if (lb->flags&CBMF_POP_CMP)
i=lb->addr-(ip+2);
if (lb->flags&CMF_POP_CMP)
i+=8;
if (MIN_I8+2<i<MAX_I8+2)
if (MIN_I8<=i<=MAX_I8)
short_jmp=TRUE;
}
if (short_jmp) {
tempi->ic_flags|=ICF_SHORT_JMP;
i=lb->addr-(ip+2);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP)
i+=8;
ICU16(tempi,i<<8+is.u8[2]);
} else {
tempi->ic_flags&=~ICF_SHORT_JMP;
i=lb->addr-(ip+6);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP)
i+=8;
ICU16(tempi,is.u16[0]);
ICU32(tempi,i);
@@ -4001,7 +3985,7 @@ U0 ICAssign(CIntermediateCode *tempi,I64 ip)
(tempi->p2.type&TY_MASK==TY_REG||tempi->p2.type&TY_MASK==TY_DISP) &&
tempi->p2.reg==tempi->p1.reg ||
tempi->r.type&TY_MASK ||
tempi1->ic_flags&~ICF_NO_CVT_MASK) {
tempi1->ic_flags&~ICG_NO_CVT_MASK) {
ICMov(tempi,TY_DISP+tempi->p1.ptype,tempi->p1.reg,tempi->p1.disp,
tempi->p2.type,tempi->p2.reg,tempi->p2.disp,ip);
if (tempi->r.type&TY_MASK)
@@ -4032,7 +4016,7 @@ U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip,I64 op,I64 op_imm,I64 is,U8 *buf,I
I64 i,t,r1,r2,d1,d2,t1,t2;
CICArg *p1=&tempi->p1,*p2=&tempi->p2;
Bool short_jmp;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
if (tempi->ic_flags & ICF_NOT_ADDR) {
if (tempi->ic_flags & ICF_P1_FIRST) {
@@ -4167,23 +4151,23 @@ U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip,I64 op,I64 op_imm,I64 is,U8 *buf,I
lb=OptLabelFwd(tempi->ic_data);
short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP);
if (!buf && lb->addr!=INVALID_PTR) {
i=lb->addr-ip;
if (lb->flags&CBMF_POP_CMP)
i=lb->addr-(ip+2);
if (lb->flags&CMF_POP_CMP)
i+=8;
if (MIN_I8+2<i<MAX_I8+2)
if (MIN_I8<=i<=MAX_I8)
short_jmp=TRUE;
}
if (short_jmp) {
tempi->ic_flags|=ICF_SHORT_JMP;
i=lb->addr-(ip+2);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP)
i+=8;
ICU16(tempi,i<<8+is.u8[2]);
} else {
tempi->ic_flags&=~ICF_SHORT_JMP;
i=lb->addr-(ip+6);
if (lb->flags&CBMF_POP_CMP)
if (lb->flags&CMF_POP_CMP)
i+=8;
ICU16(tempi,is.u16[0]);
ICU32(tempi,i);
@@ -4553,7 +4537,7 @@ U0 ICXorEqual(CIntermediateCode *tempi,I64 ip2)
U0 ICSwitch(CIntermediateCode *tempi,I64 ip,Bool fast,CLex *lx,U8 *buf,I64 ip2)
{
I64 i,j,r;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
Bool short_jmp;
CExeAbsAddr *tempa;
if (tempi->p1.type&TY_MASK==TY_REG)
@@ -4603,11 +4587,13 @@ U0 ICSwitch(CIntermediateCode *tempi,I64 ip,Bool fast,CLex *lx,U8 *buf,I64 ip2)
}
ip+=tempi->ic_cnt;
lb=OptLabelFwd(tempi->ic_data(CCodeBlkMisc *)->dft);
lb=OptLabelFwd(tempi->ic_data(CLexCodeMisc *)->dft);
short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP);
if (!buf && lb->addr!=INVALID_PTR &&
MIN_I8+2<lb->addr-ip<MAX_I8+2)
short_jmp=TRUE;
if (!buf && lb->addr!=INVALID_PTR) {
i=lb->addr-(ip+2);
if (MIN_I8<=i<=MAX_I8)
short_jmp=TRUE;
}
if (short_jmp) {
tempi->ic_flags|=ICF_SHORT_JMP;
+2 -170
View File
@@ -1,164 +1,5 @@
asm {
USE64
CMP_OPT_NOP:
#assert CIntermediateCode.ic_opcode==0
DU16 IC_NOP1; //Must be at CIntermediateCode.ic_opcode offset
DU8 sizeof(CIntermediateCode)-2 DUP(0);
// ************************************
_OPTNEXT::
ENTER 0
PUSH RDI
MOV RCX,U64 SF_ARG1[RBP]
MOV RDX,U64 SF_ARG2[RBP]
MOV RAX,U64 16[RDX]
MOV U64 24[RDX],RAX
MOV RAX,U64 8[RDX]
MOV U64 16[RDX],RAX
MOV RAX,U64 [RDX]
MOV U64 8[RDX],RAX
MOV U64 [RDX],RCX
MOV RDI,RDX
MOV RAX,RCX
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JBE @@05
STOSQ
@@05: MOV RAX,U64 8[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JBE @@10
STOSQ
@@10: MOV RAX,U64 16[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JBE @@15
STOSQ
@@15: MOV RAX,U64 24[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JBE @@20
STOSQ
@@20: MOV RAX,CMP_OPT_NOP
ADD RDX,32
JMP @@30
@@25: STOSQ
@@30: CMP RDI,RDX
JB @@25
POP RDI
LEAVE
RET1 16
// ************************************
_OPTNEXT2::
ENTER 0
PUSH RDI
MOV RCX,U64 SF_ARG1[RBP]
MOV RDX,U64 SF_ARG2[RBP]
MOV RAX,U64 16[RDX]
MOV U64 24[RDX],RAX
MOV RAX,U64 8[RDX]
MOV U64 16[RDX],RAX
MOV RAX,U64 [RDX]
MOV U64 8[RDX],RAX
MOV U64 [RDX],RCX
MOV RDI,RDX
MOV RAX,RCX
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JB @@05
STOSQ
@@05: MOV RAX,U64 8[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JB @@10
STOSQ
@@10: MOV RAX,U64 16[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JB @@15
STOSQ
@@15: MOV RAX,U64 24[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JB @@20
STOSQ
@@20: MOV RAX,CMP_OPT_NOP
ADD RDX,32
JMP @@30
@@25: STOSQ
@@30: CMP RDI,RDX
JB @@25
POP RDI
LEAVE
RET1 16
// ************************************
_OPTNEXT3::
ENTER 0
PUSH RDI
MOV RCX,U64 SF_ARG1[RBP]
MOV RDX,U64 SF_ARG2[RBP]
MOV RAX,U64 16[RDX]
MOV U64 24[RDX],RAX
MOV RAX,U64 8[RDX]
MOV U64 16[RDX],RAX
MOV RAX,U64 [RDX]
MOV U64 8[RDX],RAX
MOV U64 [RDX],RCX
MOV RDI,RDX
MOV RAX,RCX
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JB @@05
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_NOP2
JE @@05
STOSQ
@@05: MOV RAX,U64 8[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JB @@10
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_NOP2
JE @@10
STOSQ
@@10: MOV RAX,U64 16[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JB @@15
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_NOP2
JE @@15
STOSQ
@@15: MOV RAX,U64 24[RDX]
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_END_EXP
JB @@20
CMP U16 CIntermediateCode.ic_opcode[RAX],IC_NOP2
JE @@20
STOSQ
@@20: MOV RAX,CMP_OPT_NOP
ADD RDX,32
JMP @@30
@@25: STOSQ
@@30: CMP RDI,RDX
JB @@25
POP RDI
LEAVE
RET1 16
// ************************************
CMP_TEMPLATES::
DU32 @@05,@@10,@@15,@@25,@@30,
@@ -249,7 +90,7 @@ CMP_TEMPLATES::
MOV RDX,RAX
@@50: MOV BL,U8 [RAX]
INC RAX
OR BL,BL
TEST BL,BL
JNZ @@50
SUB RAX,RDX
DEC RAX
@@ -260,7 +101,7 @@ CMP_TEMPLATES::
ADD RAX,RDX
@@60: //SignI64
OR RAX,RAX
TEST RAX,RAX
JZ @@70
JS @@65
MOV RAX,1
@@ -683,12 +524,3 @@ CMP_TEMPLATES_DONT_PUSH2::
@@110:
@@115:
}
_extern _OPTNEXT Bool OptNext(CIntermediateCode *tempi,
CIntermediateCode **temp_lag);
_extern _OPTNEXT2 Bool OptNext2(CIntermediateCode *tempi,
CIntermediateCode **temp_lag);
_extern _OPTNEXT3 Bool OptNext3(CIntermediateCode *tempi,
CIntermediateCode **temp_lag);
+216 -214
View File
@@ -1,235 +1,234 @@
//Intermediate compiler codes
#define IC_END 0x00
#define IC_START 0x01
#define IC_NOP1 0x02
#define IC_END_EXP 0x03
#define IC_NOP2 0x04
#define IC_LABEL 0x05
#define IC_CALL_START 0x06
#define IC_CALL_END 0x07
#define IC_CALL_END2 0x08
#define IC_RETURN_VAL 0x09
#define IC_RETURN_VAL2 0x0A
#define IC_IMM_U64 0x0B
#define IC_IMM_F64 0x0C
#define IC_STR_CONST 0x0D
#define IC_ABS_ADDR 0x0E
#define IC_ADDR_IMPORT 0x0F
#define IC_HEAP_GLBL 0x10
#define IC_SIZEOF 0x11
#define IC_TYPE 0x12
#define IC_GET_LABEL 0x13
#define IC_RBP 0x14
#define IC_REG 0x15
#define IC_FS 0x16
#define IC_MOV_FS 0x17
#define IC_GS 0x18
#define IC_MOV_GS 0x19
#define IC_NOP1 0x01
#define IC_END_EXP 0x02
#define IC_NOP2 0x03
#define IC_LABEL 0x04
#define IC_CALL_START 0x05
#define IC_CALL_END 0x06
#define IC_CALL_END2 0x07
#define IC_RETURN_VAL 0x08
#define IC_RETURN_VAL2 0x09
#define IC_IMM_U64 0x0A
#define IC_IMM_F64 0x0B
#define IC_STR_CONST 0x0C
#define IC_ABS_ADDR 0x0D
#define IC_ADDR_IMPORT 0x0E
#define IC_HEAP_GLBL 0x0F
#define IC_SIZEOF 0x10
#define IC_TYPE 0x11
#define IC_GET_LABEL 0x12
#define IC_RBP 0x13
#define IC_REG 0x14
#define IC_FS 0x15
#define IC_MOV_FS 0x16
#define IC_GS 0x17
#define IC_MOV_GS 0x18
#define IC_LEA 0x1A
#define IC_MOV 0x1B
#define IC_LEA 0x19
#define IC_MOV 0x1A
#define IC_TO_I64 0x1C
#define IC_TO_F64 0x1D
#define IC_TO_BOOL 0x1E
#define IC_TOUPPER 0x1F
#define IC_HOLYC_TYPECAST 0x20
#define IC_TO_I64 0x1B
#define IC_TO_F64 0x1C
#define IC_TO_BOOL 0x1D
#define IC_TOUPPER 0x1E
#define IC_HOLYC_TYPECAST 0x1F
#define IC_ADDR 0x21
#define IC_COM 0x22
#define IC_NOT 0x23
#define IC_UNARY_MINUS 0x24
#define IC_ADDR 0x20
#define IC_COM 0x21
#define IC_NOT 0x22
#define IC_UNARY_MINUS 0x23
#define IC_DEREF 0x25
#define IC_DEREF_PP 0x26
#define IC_DEREF_MM 0x27
#define IC__PP 0x28
#define IC__MM 0x29
#define IC_PP_ 0x2A
#define IC_MM_ 0x2B
#define IC_DEREF 0x24
#define IC_DEREF_PP 0x25
#define IC_DEREF_MM 0x26
#define IC__PP 0x27
#define IC__MM 0x28
#define IC_PP_ 0x29
#define IC_MM_ 0x2A
#define IC_SHL 0x2C
#define IC_SHR 0x2D
#define IC_SHL_CONST 0x2E
#define IC_SHR_CONST 0x2F
#define IC_POWER 0x30
#define IC_SHL 0x2B
#define IC_SHR 0x2C
#define IC_SHL_CONST 0x2D
#define IC_SHR_CONST 0x2E
#define IC_POWER 0x2F
#define IC_MUL 0x31
#define IC_DIV 0x32
#define IC_MOD 0x33
#define IC_MUL 0x30
#define IC_DIV 0x31
#define IC_MOD 0x32
#define IC_AND 0x34
#define IC_AND 0x33
#define IC_OR 0x35
#define IC_XOR 0x36
#define IC_OR 0x34
#define IC_XOR 0x35
#define IC_ADD 0x37
#define IC_SUB 0x38
#define IC_ADD_CONST 0x39
#define IC_SUB_CONST 0x3A
#define IC_ADD 0x36
#define IC_SUB 0x37
#define IC_ADD_CONST 0x38
#define IC_SUB_CONST 0x39
#define IC_EQUAL_EQUAL 0x3B
#define IC_NOT_EQUAL 0x3C
#define IC_LESS 0x3D
#define IC_GREATER 0x3E
#define IC_LESS_EQUAL 0x3F
#define IC_GREATER_EQUAL 0x40
#define IC_PUSH_CMP 0x41
#define IC_EQUAL_EQUAL 0x3A
#define IC_NOT_EQUAL 0x3B
#define IC_LESS 0x3C
#define IC_GREATER 0x3D
#define IC_LESS_EQUAL 0x3E
#define IC_GREATER_EQUAL 0x3F
#define IC_PUSH_CMP 0x40
#define IC_AND_AND 0x42
#define IC_AND_AND 0x41
#define IC_OR_OR 0x43
#define IC_XOR_XOR 0x44
#define IC_OR_OR 0x42
#define IC_XOR_XOR 0x43
#define IC_ASSIGN 0x45
#define IC_ASSIGN_PP 0x46
#define IC_ASSIGN_MM 0x47
#define IC_ASSIGN 0x44
#define IC_ASSIGN_PP 0x45
#define IC_ASSIGN_MM 0x46
#define IC_SHL_EQUAL 0x48
#define IC_SHR_EQUAL 0x49
#define IC_MUL_EQUAL 0x4A
#define IC_DIV_EQUAL 0x4B
#define IC_MOD_EQUAL 0x4C
#define IC_AND_EQUAL 0x4D
#define IC_OR_EQUAL 0x4E
#define IC_XOR_EQUAL 0x4F
#define IC_ADD_EQUAL 0x50
#define IC_SUB_EQUAL 0x51
#define IC_SHL_EQUAL 0x47
#define IC_SHR_EQUAL 0x48
#define IC_MUL_EQUAL 0x49
#define IC_DIV_EQUAL 0x4A
#define IC_MOD_EQUAL 0x4B
#define IC_AND_EQUAL 0x4C
#define IC_OR_EQUAL 0x4D
#define IC_XOR_EQUAL 0x4E
#define IC_ADD_EQUAL 0x4F
#define IC_SUB_EQUAL 0x50
#define IC_JMP 0x52
#define IC_SWITCH 0x53
#define IC_NOBOUND_SWITCH 0x54
#define IC_JMP 0x51
#define IC_SWITCH 0x52
#define IC_NOBOUND_SWITCH 0x53
#define IC_ADD_RSP 0x55
#define IC_ADD_RSP1 0x56
#define IC_ENTER 0x57
#define IC_PUSH_REGS 0x58
#define IC_POP_REGS 0x59
#define IC_LEAVE 0x5A
#define IC_RET 0x5B
#define IC_ADD_RSP 0x54
#define IC_ADD_RSP1 0x55
#define IC_ENTER 0x56
#define IC_PUSH_REGS 0x57
#define IC_POP_REGS 0x58
#define IC_LEAVE 0x59
#define IC_RET 0x5A
#define IC_CALL 0x5C
#define IC_CALL_INDIRECT 0x5D
#define IC_CALL_INDIRECT2 0x5E
#define IC_CALL_IMPORT 0x5F
#define IC_CALL_EXTERN 0x60
#define IC_IRQ 0x61
#define IC_CALL 0x5B
#define IC_CALL_INDIRECT 0x5C
#define IC_CALL_INDIRECT2 0x5D
#define IC_CALL_IMPORT 0x5E
#define IC_CALL_EXTERN 0x5F
#define IC_IRQ 0x60
#define IC_ASM 0x62
#define IC_CLI 0x63
#define IC_STI 0x64
#define IC_PREEMPT 0x65
#define IC_CLD 0x66
#define IC_STD 0x67
#define IC_HLT 0x68
#define IC_PUSH 0x69
#define IC_POP 0x6A
#define IC_PUSHFD 0x6B
#define IC_POPFD 0x6C
#define IC_PAUSE 0x6D
#define IC_ASM 0x61
#define IC_CLI 0x62
#define IC_STI 0x63
#define IC_PREEMPT 0x64
#define IC_CLD 0x65
#define IC_STD 0x66
#define IC_HLT 0x67
#define IC_PUSH 0x68
#define IC_POP 0x69
#define IC_PUSHFD 0x6A
#define IC_POPFD 0x6B
#define IC_PAUSE 0x6C
#define IC_CLFLUSH 0x6E
#define IC_INVLPG 0x6F
#define IC_CLFLUSH 0x6D
#define IC_INVLPG 0x6E
#define IC_IN_U8 0x70
#define IC_IN_U16 0x71
#define IC_IN_U32 0x72
#define IC_OUT_U8 0x73
#define IC_OUT_U16 0x74
#define IC_OUT_U32 0x75
#define IC_IN_U8 0x6F
#define IC_IN_U16 0x70
#define IC_IN_U32 0x71
#define IC_OUT_U8 0x72
#define IC_OUT_U16 0x73
#define IC_OUT_U32 0x74
#define IC_GET_FLAGS 0x76
#define IC_CARRY 0x77
#define IC_SET_FLAGS 0x78
#define IC_GET_RAX 0x79
#define IC_SET_RAX 0x7A
#define IC_GET_BASE_PTR 0x7B
#define IC_SET_BASE_PTR 0x7C
#define IC_GET_STK_PTR 0x7D
#define IC_SET_STK_PTR 0x7E
#define IC_RIP 0x7F
#define IC_GET_RFLAGS 0x75
#define IC_CARRY 0x76
#define IC_SET_RFLAGS 0x77
#define IC_GET_RAX 0x78
#define IC_SET_RAX 0x79
#define IC_GET_RBP 0x7A
#define IC_SET_RBP 0x7B
#define IC_GET_RSP 0x7C
#define IC_SET_RSP 0x7D
#define IC_RIP 0x7E
#define IC_RDTSC 0x80
#define IC_HPET 0x81
#define IC_RDTSC 0x7F
#define IC_HPET 0x80
#define IC_BT 0x82
#define IC_BTS 0x83
#define IC_BTR 0x84
#define IC_BTC 0x85
#define IC_LBTS 0x86
#define IC_LBTR 0x87
#define IC_LBTC 0x88
#define IC_BSF 0x89
#define IC_BSR 0x8A
#define IC_BT 0x81
#define IC_BTS 0x82
#define IC_BTR 0x83
#define IC_BTC 0x84
#define IC_LBTS 0x85
#define IC_LBTR 0x86
#define IC_LBTC 0x87
#define IC_BSF 0x88
#define IC_BSR 0x89
#define IC_QUE_INIT 0x8B
#define IC_QUE_INS 0x8C
#define IC_QUE_INS_REV 0x8D
#define IC_QUE_REM 0x8E
#define IC_QUE_INIT 0x8A
#define IC_QUE_INS 0x8B
#define IC_QUE_INS_REV 0x8C
#define IC_QUE_REM 0x8D
#define IC_STRLEN 0x8F
#define IC_STRLEN 0x8E
#define IC_BR_ZERO 0x90
#define IC_BR_NOT_ZERO 0x91
#define IC_BR_ZERO 0x8F
#define IC_BR_NOT_ZERO 0x90
#define IC_BR_NOT_EQUAL 0x92
#define IC_BR_EQUAL_EQUAL 0x93
#define IC_BR_GREATER_EQUAL 0x94
#define IC_BR_LESS_EQUAL 0x95
#define IC_BR_GREATER 0x96
#define IC_BR_LESS 0x97
#define IC_BR_NOT_EQUAL2 0x98
#define IC_BR_EQUAL_EQUAL2 0x99
#define IC_BR_GREATER_EQUAL2 0x9A
#define IC_BR_LESS_EQUAL2 0x9B
#define IC_BR_GREATER2 0x9C
#define IC_BR_LESS2 0x9D
#define IC_BR_AND_ZERO 0x9E
#define IC_BR_AND_NOT_ZERO 0x9F
#define IC_BR_MM_ZERO 0xA0
#define IC_BR_MM_NOT_ZERO 0xA1
#define IC_BR_AND_AND_ZERO 0xA2
#define IC_BR_AND_AND_NOT_ZERO 0xA3
#define IC_BR_OR_OR_ZERO 0xA4
#define IC_BR_OR_OR_NOT_ZERO 0xA5
#define IC_BR_NOT_EQUAL 0x91
#define IC_BR_EQUAL_EQUAL 0x92
#define IC_BR_GREATER_EQUAL 0x93
#define IC_BR_LESS_EQUAL 0x94
#define IC_BR_GREATER 0x95
#define IC_BR_LESS 0x96
#define IC_BR_NOT_EQUAL2 0x97
#define IC_BR_EQUAL_EQUAL2 0x98
#define IC_BR_GREATER_EQUAL2 0x99
#define IC_BR_LESS_EQUAL2 0x9A
#define IC_BR_GREATER2 0x9B
#define IC_BR_LESS2 0x9C
#define IC_BR_AND_ZERO 0x9D
#define IC_BR_AND_NOT_ZERO 0x9E
#define IC_BR_MM_ZERO 0x9F
#define IC_BR_MM_NOT_ZERO 0xA0
#define IC_BR_AND_AND_ZERO 0xA1
#define IC_BR_AND_AND_NOT_ZERO 0xA2
#define IC_BR_OR_OR_ZERO 0xA3
#define IC_BR_OR_OR_NOT_ZERO 0xA4
#define IC_BR_BT 0xA6
#define IC_BR_BTS 0xA7
#define IC_BR_BTR 0xA8
#define IC_BR_BTC 0xA9
#define IC_BR_LBTS 0xAA
#define IC_BR_LBTR 0xAB
#define IC_BR_LBTC 0xAC
#define IC_BR_NOT_BT 0xAD
#define IC_BR_NOT_BTS 0xAE
#define IC_BR_NOT_BTR 0xAF
#define IC_BR_NOT_BTC 0xB0
#define IC_BR_NOT_LBTS 0xB1
#define IC_BR_NOT_LBTR 0xB2
#define IC_BR_NOT_LBTC 0xB3
#define IC_BR_BT 0xA5
#define IC_BR_BTS 0xA6
#define IC_BR_BTR 0xA7
#define IC_BR_BTC 0xA8
#define IC_BR_LBTS 0xA9
#define IC_BR_LBTR 0xAA
#define IC_BR_LBTC 0xAB
#define IC_BR_NOT_BT 0xAC
#define IC_BR_NOT_BTS 0xAD
#define IC_BR_NOT_BTR 0xAE
#define IC_BR_NOT_BTC 0xAF
#define IC_BR_NOT_LBTS 0xB0
#define IC_BR_NOT_LBTR 0xB1
#define IC_BR_NOT_LBTC 0xB2
#define IC_SWAP_U8 0xB4
#define IC_SWAP_U16 0xB5
#define IC_SWAP_U32 0xB6
#define IC_SWAP_U64 0xB7
#define IC_SWAP_U8 0xB3
#define IC_SWAP_U16 0xB4
#define IC_SWAP_U32 0xB5
#define IC_SWAP_U64 0xB6
#define IC_ABS_I64 0xB8
#define IC_SIGN_I64 0xB9
#define IC_MIN_I64 0xBA
#define IC_MIN_U64 0xBB
#define IC_MAX_I64 0xBC
#define IC_MAX_U64 0xBD
#define IC_MOD_U64 0xBE
#define IC_SQR_I64 0xBF
#define IC_SQR_U64 0xC0
#define IC_SQR 0xC1
#define IC_ABS 0xC2
#define IC_SQRT 0xC3
#define IC_SIN 0xC4
#define IC_COS 0xC5
#define IC_TAN 0xC6
#define IC_ATAN 0xC7
#define IC_NUM_ENTRIES 0xC8
#define IC_ABS_I64 0xB7
#define IC_SIGN_I64 0xB8
#define IC_MIN_I64 0xB9
#define IC_MIN_U64 0xBA
#define IC_MAX_I64 0xBB
#define IC_MAX_U64 0xBC
#define IC_MOD_U64 0xBD
#define IC_SQR_I64 0xBE
#define IC_SQR_U64 0xBF
#define IC_SQR 0xC0
#define IC_ABS 0xC1
#define IC_SQRT 0xC2
#define IC_SIN 0xC3
#define IC_COS 0xC4
#define IC_TAN 0xC5
#define IC_ATAN 0xC6
#define IC_NUM_ENTRIES 0xC7
//Don't forget $LK,"IC_INIT_TABLE","FA:::/TempleOS/Compiler/CmpInit.CPP,IC_INIT_TABLE"$
#define KW_INCLUDE 0
@@ -268,15 +267,17 @@
#define KW_ASSERT 33
#define KW_REG 34
#define KW_NOREG 35
#define KW_NOUNUSEDWARN 36
#define KW_HELP_INDEX 37
#define KW_HELP_FILE 38
#define KW_STATIC 39
#define KW_INTERRUPT 40
#define KW_LOCK 41
#define KW_DEFINED 42
#define KW_ARGPOP 43
#define KW_NOARGPOP 44
#define KW_LASTCLASS 36
#define KW_NOUNUSEDWARN 37
#define KW_HELP_INDEX 38
#define KW_HELP_FILE 39
#define KW_STATIC 40
#define KW_INTERRUPT 41
#define KW_HASERRCODE 42
#define KW_LOCK 43
#define KW_DEFINED 44
#define KW_ARGPOP 45
#define KW_NOARGPOP 46
#define AKW_ALIGN 64
#define AKW_MODULE_ORG 65
@@ -350,12 +351,13 @@
#define CPS_IS_PUBLIC 1
#define CPS_IS_INTERRUPT 2
#define CPS_IS_ASM 4
#define CPS_IS_STATIC 8
#define CPS_IS_ARGPOP 16
#define CPS_IS_NOARGPOP 32
#define CPS_HASERRCODE 4
#define CPS_IS_ASM 8
#define CPS_IS_STATIC 16
#define CPS_IS_ARGPOP 32
#define CPS_IS_NOARGPOP 64
#define CPS_FUN_FLAGS (CPS_IS_INTERRUPT|CPS_IS_PUBLIC|CPS_IS_ARGPOP|CPS_IS_NOARGPOP)
#define CPS_FUN_FLAGS (CPS_IS_INTERRUPT|CPS_HASERRCODE|CPS_IS_PUBLIC|CPS_IS_ARGPOP|CPS_IS_NOARGPOP)
//Byte 0
#define PRS0_NULL 0x000000
+13 -18
View File
@@ -1,46 +1,41 @@
import Bool PutSrcLink(U8 *add,I64 cnt=1,U8 *buf=NULL);
import CDoc *DocRead(U8 *name,I64 flags=0);
import U0 DocLoad(CDoc *doc,U8 *src2,I64 size);
import U0 DocWrite(CDoc *doc,Bool prompt=FALSE);
import CDoc *DocNew(CTask *task=NULL);
import Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC_ALL);
import U0 DocDel(CDoc *doc);
import U0 DocRst(CDoc *doc,Bool is_old);
import CDocEntry *DocPutLine(CDoc *doc,CDocEntry *doc_e);
import I64 DocSize(CDoc *doc);
import U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e);
import U0 HashRep(CHashTable *h=NULL,
I64 mask=HTG_ALL,U8 *outname=NULL,U8 *flags=NULL,U8 mapfile_drv=0,U8 *index=NULL,
CDoc *_doc=NULL);
import U0 Who(U8 *flags=NULL,CHashTable *h=NULL,
U8 *outname=NULL,U8 mapfile_drv=0,U8 *index=NULL,CDoc *_doc=NULL);
extern I64 Expression(CLex *lx);
extern Bool GetExpression(CLex *lx,U8 **_ex);
extern U0 ExpressionBinDel(U8 *ex);
extern I64 LexExpression(CLex *lx);
extern Bool IsLexExpression2Bin(CLex *lx,U8 **_ex);
extern I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad,
I64 *max_prec,I64 *unary_pre_prec,I64 *paren_prec);
extern I64 PrsUnaryModifier(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad,I64 *unary_post_prec);
extern U0 LexExcept(CLex *lx,U8 *name=NULL,CHashFun *fun_class=NULL);
extern CExe *CmpJoin(CLex *lx,CHashFun *locals,Bool first_lex,Bool asm_blk=FALSE,U8 *map_name=NULL,U8 mapfile_drv=0);
extern U0 CmpFixUpJITAsm(CLex *lx,CExe *ex,I64 ip2);
extern U0 CmpFixUpAOTAsm(CLex *lx,CExe *ex,I64 ip2);
extern CHashClass *PrsClass(CLex *lx,Bool is_union,I64 cps_flags,Bool is_extern);
extern U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx,I64 ip2);
extern U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx,I64 ip2);
extern CHashClass *PrsClass(CLex *lx,I64 keyword,I64 cps_flags,Bool is_extern);
extern CHashClass *PrsType(CLex *lx,CHashClass **tempc1,
I64 *_mode,CMemberLst *tempm,U8 **_ident,CHashFun **_fun_ptr,
CHashExport **_tempess,CArrayDim *tempad,I64 cps_flags);
CHashExport **_tempex,CArrayDim *tempad,I64 cps_flags);
extern U0 PrsVarInit2(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass);
extern CHashFun *PrsFunJoin(CLex *lx,
CHashClass *temp_return,U8 *name,I64 cps_flags);
extern Bool PrsStatement(CLex *lx,CHashFun *locals,I64 try_cnt=0,
CCodeBlkMisc *lb_break=NULL,Bool saved_prs_semicolon=TRUE);
CLexCodeMisc *lb_break=NULL,Bool saved_prs_semicolon=TRUE);
extern CIntermediateCode *OptLag1(CIntermediateCode *tempi);
extern U0 OptSetNOP1(CIntermediateCode *tempi);
extern CHashClass *OptClassFwd(CHashClass *tempc);
extern CCodeBlkMisc *OptLabelFwd(CCodeBlkMisc *lb);
extern CIntermediateCode *OptPass012(CLex *lx,CHashFun *fun_class,Bool combined);
extern CLexCodeMisc *OptLabelFwd(CLexCodeMisc *lb);
extern CIntermediateCode *OptPass012(CLex *lx,CHashFun *fun_class);
extern U0 OptPass3(CLex *lx,CHashFun *fun_class,COptReg *register_offsets);
extern U0 OptPass4(CLex *lx,COptReg *register_offsets,I64 *_type);
extern U0 OptPass5(CLex *lx);
extern U0 OptPass6(CLex *lx,CHashFun *fun_class);
extern I64 OptPass789A(CLex *lx,CHashFun *fun_class,COptReg *register_offsets,U8 *buf,CDbgInfo **_dbg);
extern I64 OptPass789(CLex *lx,CHashFun *fun_class,COptReg *register_offsets,U8 *buf,CDbgInfo **_dbg);
extern I64 PrsKeyWord(CLex *lx);
extern I64 HashEntrySize2(CHashSrcSym *temph);
extern U0 LexPutWarn(CLex *lx,U8 *name=NULL,CHashFun *fun_class=NULL);
+2 -1
View File
@@ -1,11 +1,12 @@
CHashTable *asm_hash;
Bool is_first_compiler,cmp_do_not_write_to_dsk;
CHashClass *sys_internal_types[IT_NUM_IT];
CIntermediateCode opt_nop;
U32 *dual_U16_tokens1,*dual_U16_tokens2,*dual_U16_tokens3;
U32 *binary_ops_table,*unary_ops_table;
U8 *cmp_arg_cnt,*cmp_result_cnt;
U8 *deref_bitmap,*assign_bitmap,*not_constant_bitmap,*cmp_bitmap,*fpop_bitmap;
U8 *deref_bitmap,*assign_bitmap,*not_const_bitmap,*cmp_bitmap,*fpop_bitmap;
I64 num_stk_temps,num_reg_vars,num_non_ptr_vars;
I64 stk_temps_mask,reg_vars_mask,non_ptr_vars_mask;
U8 *to_stk_temps_map_odd;
+14 -14
View File
@@ -95,7 +95,7 @@ U0 AsmHashLoad(Bool first)
while (lx->token) {
if (lx->token!=TK_IDENT)
LexExcept(lx,"ST_EXPECTING_IDENTIFIER");
i=LstEntryMatch(lx->ident,"R8\0R16\0R32\0R64\0SEG\0FSTK\0MM\0XMM\0OPCODE\0KEYWORD\0ASM_KEYWORD\0");
i=LstMatch(lx->ident,"R8\0R16\0R32\0R64\0SEG\0FSTK\0MM\0XMM\0OPCODE\0KEYWORD\0ASM_KEYWORD\0");
if (i<0)
LexExcept(lx,"Unknown Statement");
Lex(lx); //skip keyword
@@ -296,6 +296,7 @@ U0 CmpLoadDefines()
DefineLoad("ST_UNUSED_VAR","Unused var ");
DefineLoad("ST_UNNEEDED_NOUNUSEDWARN","Unneeded nounusedwarn ");
DefineLoad("ST_UNUSED_EXTERN","Unused extern ");
DefineLoad("ST_UNUSED_IMPORT","Unused import ");
DefineLoad("ST_UNUSED_LABEL","Unused label ");
DefineLoad("ST_UNUSED_LABEL_AT","Unused label at ");
DefineLoad("ST_NOT_ALLOWED_IN_FUN","Not allowed in fun");
@@ -314,7 +315,7 @@ U0 CmpLoadDefines()
DefineLoad("ST_UNNECESSARY_PARENTHESIS","Unnecessary parenthesis");
DefineLoad("ST_STATIC_UNION","Static unions are not implemented");
DefineLoad("ST_IMPORT_HASH_TABLE_NOT_ALLOWED","import_hash_table only allowed in AOT compiled #exe{} mode.");
DefineLoad("ST_STREAM_EXE_PUTS_NOT_ALLOWED","StreamExePutS only allowed in AOT compiled #exe{} mode.");
DefineLoad("ST_STREAM_EXE_PRINT_NOT_ALLOWED","StreamExePrint only allowed in AOT compiled #exe{} mode.");
DefineLoad("ST_CANT_INIT_GLBL_ON_HEAP","Can't init glbl var on data heap in AOT module");
DefineLoad("ST_INVALID_ARRAY_SIZE","Invalid array size at ");
DefineLoad("ST_NO_FUN_ASM_ALIGN","ALIGN not allowed in fun asm blk ");
@@ -346,7 +347,7 @@ U0 CmpLoadDefines()
DefineLoad("ST_REG_IN_USE","Register in use ");
DefineLoad("ST_ONE_BASE_CLASS","Only one base class allowed at this time at ");
DefineLoad("ST_ADD_NOT_VAL","Must be address, not value ");
DefineLoad("ST_HEADER_FOR_PRINTF","Missing header for PrintF(), PutS() and PutChar() at ");
DefineLoad("ST_HEADER_FOR_PRINT","Missing header for Print() and PutChar() at ");
DefineLoad("ST_HEADER_FOR_SYSTRY","Missing header for SysTry() and SysUntry() at ");
$AN,"Anchor for inserting Compiler Defines","COMPILE_DEFINE"$
@@ -358,13 +359,12 @@ $AN,"Anchor for inserting Compiler Defines","COMPILE_DEFINE"$
// '9' arg cnt means var
// 'N' means not constant. Sets LF_NOT_CONSTANT
// 'N' means not const. Sets LF_NOT_CONST
// which means an expression contains mem
// accesses or things which might change.
// arg cnt,result cnt,deref/assign/cmp,nonconst,might not fill result
"00..END\0"
"00..START\0"
"00..NOP1\0"
"10..END_EXP\0"
"00..NOP2\0"
@@ -481,15 +481,15 @@ $AN,"Anchor for inserting Compiler Defines","COMPILE_DEFINE"$
"20.NOUT_U8\0"
"20.NOUT_U16\0"
"20.NOUT_U32\0"
"00.NGET_FLAGS\0"
"00.NGET_RFLAGS\0"
"00.NCARRY\0"
"10.NSET_FLAGS\0"
"10.NSET_RFLAGS\0"
"00.NGET_RAX\0"
"10.NSET_RAX\0"
"00.NGET_BASE_PTR\0"
"10.NSET_BASE_PTR\0"
"00.NGET_STK_PTR\0"
"10.NSET_STK_PTR\0"
"00.NGET_RBP\0"
"10.NSET_RBP\0"
"00.NGET_RSP\0"
"10.NSET_RSP\0"
"01.NRIP\0"
"00.NRDTSC\0"
"00.NHPET\0"
@@ -576,7 +576,7 @@ U0 CmpFillTables()
assign_bitmap=CAlloc((IC_NUM_ENTRIES+7)>>3);
deref_bitmap=CAlloc((IC_NUM_ENTRIES+7)>>3);
cmp_bitmap=CAlloc((IC_NUM_ENTRIES+7)>>3);
not_constant_bitmap=CAlloc((IC_NUM_ENTRIES+7)>>3);
not_const_bitmap=CAlloc((IC_NUM_ENTRIES+7)>>3);
fpop_bitmap=CAlloc((IC_NUM_ENTRIES+7)>>3);
cmp_arg_cnt=CAlloc(IC_NUM_ENTRIES);
cmp_result_cnt=CAlloc(IC_NUM_ENTRIES);
@@ -591,9 +591,9 @@ U0 CmpFillTables()
else if (st[2]=='^')
Bts(cmp_bitmap,i);
if (st[3]=='N')
Bts(not_constant_bitmap,i);
Bts(not_const_bitmap,i);
st+=StrLen(st)+1;
//See $LK,"ST_INTERMEDIATE_CODE","FF:::/TempleOS/Compiler/CodeGen.CPP,ST_INTERMEDIATE_CODE"$.
//See $LK,"ST_INTERMEDIATE_CODE","FF:::/TempleOS/Compiler/ICLCC.CPP,ST_INTERMEDIATE_CODE"$.
}
Bts(fpop_bitmap,IC_ADD);
+170 -182
View File
@@ -1,43 +1,31 @@
U0 StreamPutS(U8 *buf)
//Inss text into the stream of
U0 StreamPrint(U8 *fmt,...)
//Inserts text into the stream of
//characters being compiled. Called
//from withing #exe{} block.
{
U8 *buf=SPrintJoin(NULL,fmt,argc,argv);
CLex *lx=Fs->last_lex;
CStreamBlk *tempe=lx->last_stream_blk;
if (tempe!=&lx->next_stream_blk)
tempe->body=StrAdd(tempe->body,buf);
else
PrintFErr("No exe{} blk\n");
}
U0 StreamPrintF(U8 *src,...)
//Inss text into the stream of
//characters being compiled. Called
//from withing #exe{} block.
{
U8 *buf=SPrintFJoin(NULL,src,argc,argv);
StreamPutS(buf);
PrintErr("No exe{} blk\n");
Free(buf);
}
U8 *CmpStatement(CLex *lx,I64 *type)
U8 *LexStatement2Bin(CLex *lx,I64 *type)
{
I64 size,i,j,k,*result=INVALID_PTR;
CIntermediateCode *tempi;
if (type) *type=IT_I64;
Btr(&lx->flags,Lf_OPT_TRACE_PRESENT);
if (lx->a_depth==2)
CBPush(lx);
CBOutPtrsInit(lx);
CBICAdd(lx,IC_START,0,0); //So we can scan back an instruction
tempi=lx->cbh.cb_last_out_ptr;
LCCPush(lx);
LCCInit(lx);
if (!PrsStatement(lx,NULL)) {
if (tempi!=lx->cbh.cb_last_out_ptr) {
CBICAdd(lx,IC_RETURN_VAL2,0,NULL);
CBICAdd(lx,IC_RET,0,0);
CBICAdd(lx,IC_END,0,0);
if (result=CBCompile(lx,NULL,&size,NULL,type)) {
if (lx->lcc.lcc_root.next!=&lx->lcc.lcc_root) {
LCCAdd(lx,IC_RETURN_VAL2,0,NULL);
LCCAdd(lx,IC_RET,0,0);
if (result=LCCCompile(lx,NULL,&size,NULL,type)) {
if (lx->flags&LF_AOT_COMPILE) {
j=lx->a->ip;
k=(size+7)>>3;
@@ -47,12 +35,11 @@ U8 *CmpStatement(CLex *lx,I64 *type)
result=j;
}
}
} else
LinkedLstDel(lx->cbh.cb_out_first);
} else
LinkedLstDel(lx->cbh.cb_out_first);
} //TODO: else del misc?
} else //TODO: too dangerous to del Misc?
QueDel(&lx->lcc.lcc_root.next);
if (lx->a_depth==2)
CBPop(lx);
LCCPop(lx);
return result;
}
@@ -62,6 +49,7 @@ CExe *CmpJoin(CLex *lx,CHashFun *locals,Bool first_lex,Bool asm_blk=FALSE,
{
CAsmCtrl *a,*old_a=lx->a;
I64 i,j,l;
U8 *ex;
CAsmCodeBlk *tempc;
CExeImportExport *tempe;
Bool okay=TRUE;
@@ -75,7 +63,7 @@ CExe *CmpJoin(CLex *lx,CHashFun *locals,Bool first_lex,Bool asm_blk=FALSE,
lx->a=a=CAlloc(sizeof(CAsmCtrl));
lx->a_depth++;
a->code=CAlloc(sizeof(CAsmCodeBlk));
a->cb=CAlloc(sizeof(CAsmCodeBlk));
a->max_align=1;
a->module_org=INVALID_PTR;
@@ -92,17 +80,17 @@ CExe *CmpJoin(CLex *lx,CHashFun *locals,Bool first_lex,Bool asm_blk=FALSE,
lx->htc.glbl_hash_table->next=Fs->hash_table;
lx->htc.hash_table_lst =asm_hash_alias;
lx->htc.local_var_lst=locals; //Holy C local vars
lx->htc.local_var_lst=locals; //HolyC local vars
try {
if (first_lex)
Lex(lx);
if (lx->flags&LF_AOT_COMPILE) {
while (lx->token!=TK_EOF) {
i=CmpStatement(lx,NULL);
if (i!=INVALID_PTR) {
ex=LexStatement2Bin(lx,NULL);
if (ex!=INVALID_PTR) {
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIE_MAIN;
tempe->ip=i;
tempe->ip=ex;
QueIns(tempe,result->last_ie);
}
if (asm_blk)
@@ -112,8 +100,7 @@ CExe *CmpJoin(CLex *lx,CHashFun *locals,Bool first_lex,Bool asm_blk=FALSE,
PrsStatement(lx,NULL);
AsmGlblsResolve(lx,result);
} catch {
if (Fs->except_argc>0 && Fs->except_argv[0]==EXCEPT_COMPILER &&
!asm_blk) {
if (Fs->except_argc>0 && Fs->except_argv[0]==EXCEPT_COMPILER && !asm_blk) {
if (Fs->except_argc>1 && Fs->except_argv[1]) {
"Compiler exception #%d\n",Fs->except_argv[1];
LexPutPos(lx);
@@ -127,40 +114,40 @@ CExe *CmpJoin(CLex *lx,CHashFun *locals,Bool first_lex,Bool asm_blk=FALSE,
lx->error_cnt=1;
lx->exe_struct=result->parent_exe;
Free(result);
LinkedLstDel(a->code);
LinkedLstDel(a->cb);
result=NULL;
} else {
if (map_name && !cmp_do_not_write_to_dsk)
HashRep(lx->htc.glbl_hash_table,HTG_ALL,map_name,"-r-p",mapfile_drv);
Who("-r",lx->htc.glbl_hash_table,map_name,mapfile_drv);
HashTableDel(lx->htc.local_hash_table);
HashTableDel(lx->htc.glbl_hash_table);
if (!a->num_code_U8s)
result->code=NULL;
if (!a->num_ex_U8s)
result->ex=NULL;
else {
if (lx->flags&LF_AOT_COMPILE)
result->code=MAlloc(a->num_code_U8s);
result->ex=MAlloc(a->num_ex_U8s);
else {
if (a->module_org==INVALID_PTR)
result->code=MAlloc(a->num_code_U8s,Fs->code_heap);
result->ex=MAlloc(a->num_ex_U8s,Fs->code_heap);
else
result->code=a->module_org;
result->ex=a->module_org;
}
result->code_U8s=a->num_code_U8s;
tempc=a->code;
result->ex_U8s=a->num_ex_U8s;
tempc=a->cb;
j=0;
l=a->num_code_U8s;
l=a->num_ex_U8s;
while (tempc) {
i=l;
if (i>ASM_CODE_BLK_SIZE)
i=ASM_CODE_BLK_SIZE;
MemCpy(result->code+j,tempc->body,i);
MemCpy(result->ex+j,tempc->body,i);
j+=i;
l-=i;
tempc=tempc->next;
}
}
LinkedLstDel(a->code);
LinkedLstDel(a->cb);
result->abss=a->abss;
result->heap_glbls=a->heap_glbls;
result->max_align =a->max_align;
@@ -195,103 +182,96 @@ CExe *CmpBuf(U8 *buf,U8 *map_name=NULL,
return result;
}
U0 CmpFixUpJITAsm(CLex *lx,CExe *ex,I64 ip2)
U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx,I64 ip2)
{
I64 i,*str=NULL;
U8 *ptr;
CExeAbsAddr *tempa,*tempa1;
CExeImportExport *tempe,*tempe1;
CHashExport *tempess;
CHashFun *tempf;
CHashGlblVar *tempg;
CHashExport *tempex;
tempa=ex->abss;
tempa=tempx->abss;
while (tempa) {
tempa1=tempa->next;
ptr=tempx->ex+tempa->ip;
nobound_switch (tempa->type) {
case EAA_ADD_U8:
*(ex->code(U8 *)+tempa->ip)(U8 *)+=ip2;
*ptr(U8 *)+=ip2;
break;
case EAA_SUB_U8:
*(ex->code(U8 *)+tempa->ip)(U8 *)-=ip2;
*ptr(U8 *)-=ip2;
break;
case EAA_ADD_U16:
*(ex->code(U8 *)+tempa->ip)(U16 *)+=ip2;
*ptr(U16 *)+=ip2;
break;
case EAA_SUB_U16:
*(ex->code(U8 *)+tempa->ip)(U16 *)-=ip2;
*ptr(U16 *)-=ip2;
break;
case EAA_ADD_U32:
*(ex->code(U8 *)+tempa->ip)(U32 *)+=ip2;
*ptr(U32 *)+=ip2;
break;
case EAA_SUB_U32:
*(ex->code(U8 *)+tempa->ip)(U32 *)-=ip2;
*ptr(U32 *)-=ip2;
break;
case EAA_ADD_U64:
*(ex->code(U8 *)+tempa->ip)(I64 *)+=ip2;
*ptr(I64 *)+=ip2;
break;
case EAA_SUB_U64:
*(ex->code(U8 *)+tempa->ip)(I64 *)-=ip2;
*ptr(I64 *)-=ip2;
break;
}
Free(tempa);
tempa=tempa1;
}
tempe=ex->next_ie;
while (tempe!=&ex->next_ie) {
tempe=tempx->next_ie;
while (tempe!=&tempx->next_ie) {
tempe1=tempe->next;
if (tempe->str) {
Free(str);
str=tempe->str;
}
if (tempe->type<=EIE_LIT_EXPORT) {
tempess=CAlloc(sizeof(CHashExport));
tempess->str=str;
str=NULL;
tempess->type=HTT_EXPORT_SYS_SYM|HTF_LIT;
if (tempe->type==EIE_LIT_EXPORT)
tempess->val=tempe->ip;
else
tempess->val=tempe->ip+ip2;
tempess->src_link=tempe->src_link;
tempe->src_link=NULL;
if (IsReplaceSyms)
HashReplace(tempess,Fs->hash_table);
else
HashAdd(tempess,Fs->hash_table);
SysSymImportsResolve(tempess->str);
} else if (tempe->type<EIE_MAIN) {
if (tempe->str && !(tempess=HashFind(str,Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM)))
"%S%s\n","ST_UNRESOLVED_REFERENCE",str;
else {
ptr=tempe->ip+ip2;
if (tempess->type & HTT_FUN) {
tempf=tempess;
if (tempe->type & 1)
i=tempf->executable_addr;
switch (tempe->type) {
case EIE_REL_EXPORT:
case EIE_IMM_EXPORT:
tempex=CAlloc(sizeof(CHashExport));
tempex->str=str;
str=NULL;
tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM;
if (tempe->type==EIE_IMM_EXPORT)
tempex->val=tempe->ip;
else
tempex->val=tempe->ip+ip2;
tempex->src_link=tempe->src_link;
tempe->src_link=NULL;
if (IsReplaceSyms)
HashReplace(tempex,Fs->hash_table);
else
HashAdd(tempex,Fs->hash_table);
SysSymImportsResolve(tempex->str);
break;
case EIE_REL_U8...EIE_IMM_U64:
if (tempe->str && !(tempex=HashFind(str,Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM)))
"%S%s\n","ST_UNRESOLVED_REFERENCE",str;
else {
ptr=tempe->ip+ip2;
if (tempex->type & HTT_FUN)
i=tempex(CHashFun *)->executable_addr;
else if (tempex->type & HTT_GLBL_VAR)
i=tempex(CHashGlblVar *)->data_addr;
else
i=tempf->executable_addr-ex->code;
} else if (tempess->type & HTT_GLBL_VAR) {
tempg=tempess;
if (tempe->type & 1)
i=tempg->data_addr;
else
i=tempg->data_addr-ex->code;
} else {
if (tempe->type & 1)
i=tempess->val;
else
i=tempess->val(U8 *)-ex->code;
i=tempex->val;
nobound_switch (tempe->type) {
case EIE_REL_U8: *ptr(U8 *) =i-ptr-1; break;
case EIE_IMM_U8: *ptr(U8 *) =i; break;
case EIE_REL_U16: *ptr(U16 *)=i-ptr-2; break;
case EIE_IMM_U16: *ptr(U16 *)=i; break;
case EIE_REL_U32: *ptr(U32 *)=i-ptr-4; break;
case EIE_IMM_U32: *ptr(U32 *)=i; break;
case EIE_REL_U64: *ptr(I64 *)=i-ptr-8; break;
case EIE_IMM_U64: *ptr(I64 *)=i; break;
}
}
if (tempe->type<=EIE_LIT_U8)
*ptr(U8 *)+=i;
else if (tempe->type<=EIE_LIT_U16)
*ptr(U16 *)+=i;
else if (tempe->type<=EIE_LIT_U32)
*ptr(U32 *)+=i;
else if (tempe->type<=EIE_LIT_U64)
*ptr(I64 *)+=i;
}
break;
}
Free(tempe->src_link);
Free(tempe);
@@ -299,45 +279,46 @@ U0 CmpFixUpJITAsm(CLex *lx,CExe *ex,I64 ip2)
}
Free(str);
if (!lx->a_depth && Bt(&lx->opts,OPTf_COMPILE_TRACE))
Un(ex->code,ex->code_U8s,64);
Free(ex);
Un(tempx->ex,tempx->ex_U8s,64);
Free(tempx);
}
U0 CmpFixUpAOTAsm(CLex *lx,CExe *ex,I64 ip2)
U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx,I64 ip2)
{
CAsmCtrl *a=lx->a;
U8 *ptr;
CExeAbsAddr *tempa,*tempa1;
CExeImportExport *tempe,*tempe1;
tempa=ex->abss;
tempa=tempx->abss;
while (tempa) {
tempa1=tempa->next;
tempa->next=a->abss;
ptr=tempx->ex+tempa->ip;
nobound_switch (tempa->type) {
case EAA_ADD_U8:
*(ex->code(U8 *)+tempa->ip)(U8 *)+=ip2;
*ptr(U8 *)+=ip2;
break;
case EAA_SUB_U8:
*(ex->code(U8 *)+tempa->ip)(U8 *)-=ip2;
*ptr(U8 *)-=ip2;
break;
case EAA_ADD_U16:
*(ex->code(U8 *)+tempa->ip)(U16 *)+=ip2;
*ptr(U16 *)+=ip2;
break;
case EAA_SUB_U16:
*(ex->code(U8 *)+tempa->ip)(U16 *)-=ip2;
*ptr(U16 *)-=ip2;
break;
case EAA_ADD_U32:
*(ex->code(U8 *)+tempa->ip)(U32 *)+=ip2;
*ptr(U32 *)+=ip2;
break;
case EAA_SUB_U32:
*(ex->code(U8 *)+tempa->ip)(U32 *)-=ip2;
*ptr(U32 *)-=ip2;
break;
case EAA_ADD_U64:
*(ex->code(U8 *)+tempa->ip)(I64 *)+=ip2;
*ptr(I64 *)+=ip2;
break;
case EAA_SUB_U64:
*(ex->code(U8 *)+tempa->ip)(I64 *)-=ip2;
*ptr(I64 *)-=ip2;
break;
}
a->abss=tempa;
@@ -345,36 +326,49 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *ex,I64 ip2)
tempa=tempa1;
}
tempe=ex->next_ie;
while (tempe!=&ex->next_ie) {
tempe=tempx->next_ie;
while (tempe!=&tempx->next_ie) {
tempe1=tempe->next;
QueRem(tempe);
if (tempe->type<=EIE_LIT_EXPORT)
tempe->ip+=ip2;
else if (tempe->type<EIE_MAIN) {
ptr=ex->code(U8 *)+tempe->ip;
if (tempe->type<=EIE_LIT_U8)
*ptr(U8 *)-=ip2;
else if (tempe->type<=EIE_LIT_U16)
ptr=tempx->ex+tempe->ip;
switch (tempe->type) {
case EIE_REL_EXPORT:
case EIE_IMM_EXPORT:
tempe->ip+=ip2;
break;
case EIE_REL_U8:
case EIE_IMM_U8:
*ptr(U8 *) -=ip2;
tempe->ip+=ip2;
break;
case EIE_REL_U16:
case EIE_IMM_U16:
*ptr(U16 *)-=ip2;
else if (tempe->type<=EIE_LIT_U32)
tempe->ip+=ip2;
break;
case EIE_REL_U32:
case EIE_IMM_U32:
*ptr(U32 *)-=ip2;
else if (tempe->type<=EIE_LIT_U64)
tempe->ip+=ip2;
break;
case EIE_REL_U64:
case EIE_IMM_U64:
*ptr(I64 *)-=ip2;
tempe->ip+=ip2;
tempe->ip+=ip2;
break;
}
QueIns(tempe,ex->parent_exe->last_ie);
QueIns(tempe,tempx->parent_exe->last_ie);
tempe=tempe1;
}
Free(ex);
Free(tempx);
}
I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0)
{ //Compile file, returns err_cnt
U8 *ptr,*fbuf=NULL,*fbuf2=NULL,*fbuf3=NULL,
*patch_table=MAlloc(0x20000);
CExe *ex;
I64 i,cnt,size=0,error_cnt=0,warning_cnt=0,code_U8s=0;
CExe *tempx;
I64 i,cnt,size=0,error_cnt=0,warning_cnt=0,ex_U8s=0;
CBinFile *bfh;
CExeImportExport *tempe,*tempe1;
CExeAbsAddr *tempa,*tempa1;
@@ -382,26 +376,26 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0)
CExeHeapGlbl *temphg,*temphg1;
fbuf=DftExt(filename,"PRJ.Z");
fbuf2=MSPrintF("#include \"%s\"",fbuf);
fbuf2=MPrint("#include \"%s\"",fbuf);
if (map_name)
fbuf3=DftExt(map_name,"MAP.Z");
ex=CmpBuf(fbuf2,fbuf3,&error_cnt,&warning_cnt,mapfile_drv);
tempx=CmpBuf(fbuf2,fbuf3,&error_cnt,&warning_cnt,mapfile_drv);
if (ex) {
code_U8s=ex->code_U8s;
if (tempx) {
ex_U8s=tempx->ex_U8s;
ptr=patch_table;
//See $LK,"CBinFilePatchTableWithoutOrg","MN:CBinFilePatchTableWithoutOrg"$
*ptr++=EIE_MODULE_ALIGNMENT; //See $LK,"Load","MN:Load"$() and $LK,"BinRep","MN:BinRep"$()
*ptr(U32 *)++=ex->max_align;
*ptr(U32 *)++=tempx->max_align;
*ptr++=0;
if (ex->module_org!=INVALID_PTR) {
if (tempx->module_org!=INVALID_PTR) {
//See $LK,"CBinFilePatchTableWithOrg","MN:CBinFilePatchTableWithOrg"$
*ptr++=EIE_MODULE_ORG;
*ptr(U32 *)++=ex->module_org;
*ptr(U32 *)++=tempx->module_org;
*ptr++=0;
}
cnt=0;
tempa=ex->abss;
tempa=tempx->abss;
while (tempa) {
if (!(tempa->type&1))
cnt++;
@@ -411,7 +405,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0)
*ptr++=EIE_ABS_ADDR;
*ptr(U32 *)++=cnt;
*ptr++=0;
tempa=ex->abss;
tempa=tempx->abss;
while (tempa) {
tempa1=tempa->next;
if (!(tempa->type&1))
@@ -420,7 +414,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0)
tempa=tempa1;
}
}
temphg=ex->heap_glbls;
temphg=tempx->heap_glbls;
while (temphg) {
temphg1=temphg->next;
cnt=0;
@@ -453,10 +447,10 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0)
}
//Do exports first
tempe=ex->next_ie;
while (tempe!=&ex->next_ie) {
tempe=tempx->next_ie;
while (tempe!=&tempx->next_ie) {
tempe1=tempe->next;
if (tempe->type<=EIE_LIT_EXPORT) {
if (tempe->type<=EIE_IMM_EXPORT) {
QueRem(tempe);
*ptr++=tempe->type;
*ptr(U32 *)++=tempe->ip;
@@ -474,8 +468,8 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0)
}
//Do imports second
tempe=ex->next_ie;
while (tempe!=&ex->next_ie) {
tempe=tempx->next_ie;
while (tempe!=&tempx->next_ie) {
tempe1=tempe->next;
QueRem(tempe);
*ptr++=tempe->type;
@@ -496,17 +490,17 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0)
MemSet(ptr,0,16);
i=ptr-patch_table;
//$LK,"TEMPLEOS_XSUM","FF:::/TempleOS/Kernel/KStart.CPP,TEMPLEOS_XSUM"$ needs 16 ALIGN
size=(sizeof(CBinFile)+code_U8s+i+15)&-16;
size=(sizeof(CBinFile)+ex_U8s+i+15)&-16;
bfh=MAlloc(size);
bfh->jmp=0xEB+256*(sizeof(CBinFile)-2);
#assert sizeof(CBinFile)-2<=MAX_I8
bfh->type=0;
bfh->loader_patch_table_offset=sizeof(CBinFile)+code_U8s;
bfh->loader_patch_table_offset=sizeof(CBinFile)+ex_U8s;
bfh->file_size=size;
bfh->xsum=TEMPLEOS_XSUM;
MemCpy(bfh(U8 *)+sizeof(CBinFile),ex->code,code_U8s);
MemCpy(bfh(U8 *)+sizeof(CBinFile)+code_U8s,patch_table,
size-code_U8s-sizeof(CBinFile));
MemCpy(bfh(U8 *)+sizeof(CBinFile),tempx->ex,ex_U8s);
MemCpy(bfh(U8 *)+sizeof(CBinFile)+ex_U8s,patch_table,
size-ex_U8s-sizeof(CBinFile));
bfh->xsum=ArcXSum(bfh,size);
Free(fbuf2);
if (out_name)
@@ -516,14 +510,14 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0)
if (!cmp_do_not_write_to_dsk)
FileWrite(fbuf2,bfh,size);
Free(bfh);
Free(ex->code);
Free(ex);
ExpressionBinDel(tempx->ex);
Free(tempx);
}
Free(patch_table);
Free(fbuf);
Free(fbuf2);
Free(fbuf3);
PrintF(Define("ST_ERRORS_WARNINGS"),error_cnt,warning_cnt,code_U8s,size);
Print(Define("ST_ERRORS_WARNINGS"),error_cnt,warning_cnt,ex_U8s,size);
return error_cnt;
}
@@ -565,10 +559,10 @@ I64 ExePutS(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE,CLexHashTableContext
return result;
}
I64 ExePrintF(U8 *fmt,...)
I64 ExePrint(U8 *fmt,...)
{
I64 result;
U8 *buf=SPrintFJoin(NULL,fmt,argc,argv);
U8 *buf=SPrintJoin(NULL,fmt,argc,argv);
result=ExePutS(buf);
Free(buf);
return result;
@@ -578,7 +572,7 @@ I64 ExeFile(U8 *name,Bool just_load=FALSE)
{
I64 result;
U8 *name2=DftExt(name,"CPP.Z"),
*st=MSPrintF("#include \"%s\";",name2);
*st=MPrint("#include \"%s\";",name2);
result=ExePutS(st,name,just_load);
Free(st);
Free(name2);
@@ -617,10 +611,10 @@ I64 ExePutS2(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE)
return result;
}
I64 ExePrintF2(U8 *fmt,...)
I64 ExePrint2(U8 *fmt,...)
{ //with REPLACE_SYMS
I64 result;
U8 *buf=SPrintFJoin(NULL,fmt,argc,argv);
U8 *buf=SPrintJoin(NULL,fmt,argc,argv);
result=ExePutS2(buf);
Free(buf);
return result;
@@ -630,7 +624,7 @@ I64 ExeFile2(U8 *name,Bool just_load=FALSE)
{ //with REPLACE_SYMS
I64 result;
U8 *name2=DftExt(name,"CPP.Z"),
*st=MSPrintF("#include \"%s\";",name2);
*st=MPrint("#include \"%s\";",name2);
result=ExePutS2(st,name,just_load);
Free(st);
Free(name2);
@@ -656,49 +650,41 @@ I64 ExePutS3(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE)
return result;
}
I64 ExePrintF3(U8 *fmt,...)
I64 ExePrint3(U8 *fmt,...)
{ //throws exceptions
I64 result;
U8 *buf=SPrintFJoin(NULL,fmt,argc,argv);
U8 *buf=SPrintJoin(NULL,fmt,argc,argv);
result=ExePutS3(buf);
Free(buf);
return result;
}
I64 ExeFile3(U8 *name,Bool just_load=FALSE)
{ //throws exceptions
I64 result;
U8 *name2=DftExt(name,"CPP.Z"),
*st=MSPrintF("#include \"%s\";",name2);
*st=MPrint("#include \"%s\";",name2);
result=ExePutS3(st,name,just_load);
Free(st);
Free(name2);
return result;
}
I64 StreamExePutS(U8 *buf)
I64 StreamExePrint(U8 *fmt,...)
{//Suppose you want a value from the stream to be used in an #exe block...
CLexHashTableContext *htc;
U8 *buf=SPrintJoin(NULL,fmt,argc,argv);
I64 result=0;
CLexHashTableContext *htc;
CLex *lx=Fs->last_lex;
if (lx==&Fs->next_lex) {
PutErr;
"Not Compiling\n";
} else {
if (!(lx->flags&LF_EXE_BLK))
LexExcept(lx,"ST_STREAM_EXE_PUTS_NOT_ALLOWED");
LexExcept(lx,"ST_STREAM_EXE_PRINT_NOT_ALLOWED");
if (htc=lx->htc.next)
result=ExePutS(buf,,,htc);
}
return result;
}
I64 StreamExePrintF(U8 *fmt,...)
{
I64 result;
U8 *buf=SPrintFJoin(NULL,fmt,argc,argv);
result=StreamExePutS(buf);
Free(buf);
return result;
}
@@ -716,10 +702,12 @@ U0 CmpInit()
cmp_do_not_write_to_dsk=FALSE;
CmpLoadDefines;
CmpFillTables;
MemSet(&opt_nop,0,sizeof(CIntermediateCode));
opt_nop.ic_class=sys_internal_types[IT_I64];
MemSet(&opt_nop,0,sizeof(CIntermediateCode));
QueInit(&opt_nop);
opt_nop.ic_class=sys_internal_types[IT_I64];
opt_nop.ic_opcode=IC_NOP1;
AsmHashLoad(is_first_compiler);
UnasmHashLoad;
}
-482
View File
@@ -1,482 +0,0 @@
U0 CBPutClass(CHashClass *c)
{
I64 i;
if (!c) return;
if (c->ptr_cnt>4) {
PrintFErr("put_class ptrcnt=%d\n",c->ptr_cnt);
while (TRUE)
//TODO:
Yield;
}
for (i=0;i<c->ptr_cnt;i++)
'*';
c-=c->ptr_cnt;
if (c->str)
"" c->str;
else {
PrintFErr("put_class str=NULL\n");
while (TRUE)
//TODO:
Yield;
}
'' CH_SPACE;
}
U0 CBPutICArg(CICArg *p)
{
if (p->ptype)
"%Z %Z %Z ",
p->type&IT_MASK,"ST_IT_TYPES",
p->ptype&IT_MASK,"ST_IT_TYPES",
p->type>>4,"ST_TY_TYPES";
else
"%Z %Z ",
p->type&IT_MASK,"ST_IT_TYPES",
p->type>>4,"ST_TY_TYPES";
switch (p->type>>4) {
case TY_STK>>4:
"STK";
break;
case TY_IMM>>4:
"#%X",p->disp;
break;
case TY_REG>>4:
"%Z",p->reg,"ST_U64_REGS";
break;
case TY_DISP>>4:
"%X[%Z]",p->disp,p->reg,"ST_U64_REGS";
break;
case TY_RIP_DISP32>>4:
"[%X]",p->disp;
break;
case TY_SIB>>4:
if (p->disp)
"%X",p->disp;
if (p->reg==CREG_RIP)
'[';
else
"[%Z+",p->reg&7,"ST_U64_REGS";
"%Z",p->reg>>8&7,"ST_U64_REGS";
switch (p->reg>>14) {
case 0: "]"; break;
case 1: "*2]"; break;
case 2: "*4]"; break;
case 3: "*8]"; break;
}
break;
}
}
U0 CBPutIC(CIntermediateCode *tempi)
{
I64 opcode=tempi->ic_opcode,i;
if (opcode>=IC_END_EXP && opcode!=IC_NOP2) {
"%15ts %016X ",
DefineSub(opcode,"ST_INTERMEDIATE_CODE")+4,
tempi->ic_data;
if (tempi->r.type&TY_MASK) {
CBPutICArg(&tempi->r);
"<-";
}
if (tempi->p1.type&TY_MASK)
CBPutICArg(&tempi->p1);
',';
if (tempi->p2.type&TY_MASK)
CBPutICArg(&tempi->p2);
'' CH_SPACE;
CBPutClass(tempi->ic_class);
if (tempi->ic_flags & ICF_LOCK)
"$$FG,BROWN$$lock$$FG$$ ";
if (tempi->ic_flags & ICF_P2_TO_F64)
"$$FG,LTBLUE$$p2d$$FG$$ ";
if (tempi->ic_flags & ICF_P2_TO_INT)
"$$FG,GREEN$$p2i$$FG$$ ";
if (tempi->ic_flags & ICF_P1_TO_F64)
"$$FG,LTBLUE$$p1d$$FG$$ ";
if (tempi->ic_flags & ICF_P1_TO_INT)
"$$FG,GREEN$$p1i$$FG$$ ";
if (tempi->ic_flags & ICF_R_TO_F64)
"$$FG,LTBLUE$$rd$$FG$$ ";
if (tempi->ic_flags & ICF_R_TO_INT)
"$$FG,GREEN$$ri$$FG$$ ";
if (tempi->ic_flags & ICF_USE_F64)
"[F64] ";
if (tempi->ic_flags & ICF_USE_UNSIGNED)
"[unsigned] ";
if (tempi->ic_flags & ICF_USE_INT)
"[int] ";
if (tempi->ic_flags & ICF_NO_DEPEND_RESULT)
"-DEP ";
if (tempi->ic_flags & ICF_DEPEND_RESULT)
"+DEP ";
if (tempi->ic_flags & ICF_NOT_ADDR)
"NOT_ADDR ";
if (tempi->ic_flags & ICF_PUSH_RESULT)
"PUSH ";
if (tempi->ic_flags & ICF_PUSH_CMP)
"PUSH_CMP ";
if (tempi->ic_flags & ICF_POP_CMP)
"POP_CMP ";
if (tempi->ic_flags & ICF_DEL_PREVIOUS_INS)
"DELINS ";
for (i=0;i<4;i++) {
if (Bt(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+i))
"DONT_PUSH#%d ",i;
if (Bt(&tempi->ic_flags,ICf_DONT_POP_FLOAT0+i))
"DONT_POP#%d ",i;
}
if (tempi->ic_flags & ICF_ALTERNATE_TEMPLATE)
"ALT_TEMP ";
NewLine;
}
}
CIntermediateCode *CBICAdd(CLex *lx,
I64 opcode_and_precedence,I64 arg, CHashClass *c,I64 flags=0)
{
CIntermediateCode *tempi=lx->cbh.cb_out_ptr;
CCodeBlk *cb,*cb1;
lx->cbh.cb_last_out_ptr=tempi;
tempi->ic_opcode=opcode_and_precedence.u16[0];
tempi->ic_precedence=opcode_and_precedence.u16[1];
tempi->ic_data=arg;
tempi->ic_class=c;
if (Bt(&lx->opts,OPTf_OPT_TRACE)) {
Bts(&lx->flags,Lf_OPT_TRACE_PRESENT);
flags|=ICF_TRACE;
}
if (lx->lock_cnt)
flags|=ICF_LOCK;
tempi->ic_flags=flags;
tempi->ic_line=lx->last_line_num;
if (lx->opts & OPTF_PARSE_TRACE)
CBPutIC(tempi);
tempi++;
if (tempi>=lx->cbh.cb_out_end) {
cb=MAlloc(sizeof(CCodeBlk));
cb->next=NULL;
cb1=lx->cbh.cb_out_last;
cb1->next=lx->cbh.cb_out_last=cb;
tempi=&cb->data;
lx->cbh.cb_out_end=tempi+CB_IC_CNT;
}
lx->cbh.cb_out_ptr=tempi;
return lx->cbh.cb_last_out_ptr;
}
U0 CBOutPtrsInit(CLex *lx)
{
CLexCodeBlkCtrl *tempcbh=&lx->cbh;
CCodeBlk *cb=MAlloc(sizeof(CCodeBlk));
cb->next=NULL;
tempcbh->cb_out_first=tempcbh->cb_out_last=cb;
tempcbh->cb_misc_lst=NULL;
tempcbh->cb_misc_lst_end=&tempcbh->cb_misc_lst;
tempcbh->cb_out_ptr=&cb->data;
tempcbh->cb_out_end=tempcbh->cb_out_ptr+CB_IC_CNT;
tempcbh->cb_last_out_ptr=&cb->data;
}
U0 CBInPtrsInit(CLexCodeBlkCtrl *tempcbh)
{
CCodeBlk *cb=tempcbh->cb_out_first;
tempcbh->cb_in_first=cb;
tempcbh->cb_in_ptr=&cb->data;
tempcbh->cb_in_end=tempcbh->cb_in_ptr+CB_IC_CNT;
}
U0 CBPutAllIC(CLex *lx)
{
CIntermediateCode *tempi;
CBInPtrsInit(&lx->cbh);
tempi=lx->cbh.cb_in_ptr;
while (tempi->ic_opcode) {
if (tempi->ic_flags&ICF_TRACE)
CBPutIC(tempi);
tempi++;
}
}
CIntermediateCode *CBGetIC1(CLexCodeBlkCtrl *lx)
{
CIntermediateCode *tempi=lx->cb_in_ptr,
*tempi1=tempi+1;
CCodeBlk *cb;
if (tempi1>=lx->cb_in_end) {
cb=tempi1(U8 *)-sizeof(CIntermediateCode)*CB_IC_CNT-offset(CCodeBlk.data);
cb=cb->next;
tempi1=&cb->data;
lx->cb_in_end=tempi1+CB_IC_CNT;
}
lx->cb_in_ptr=tempi1;
return tempi;
}
U0 CBPush(CLex *lx)
{
CLexCodeBlkCtrl *tempcbh=MAlloc(sizeof(CLexCodeBlkCtrl));
MemCpy(tempcbh,&lx->cbh,sizeof(CLexCodeBlkCtrl));
if (lx->cbh.cb_misc_lst_end==&lx->cbh.cb_misc_lst)
tempcbh->cb_misc_lst_end=&tempcbh->cb_misc_lst;
lx->cbh.cb_next=tempcbh;
}
U0 CBPop(CLex *lx)
{
CLexCodeBlkCtrl *tempcbh=lx->cbh.cb_next;
MemCpy(&lx->cbh,tempcbh,sizeof(CLexCodeBlkCtrl));
if (tempcbh->cb_misc_lst_end==&tempcbh->cb_misc_lst)
lx->cbh.cb_misc_lst_end=&lx->cbh.cb_misc_lst;
Free(tempcbh);
}
CCodeBlkMisc *CBGoToLabelFind(CLex *lx,U8 *name)
{
CCodeBlkMisc *mc=lx->cbh.cb_misc_lst;
while (mc) {
if (mc->type==CBMT_GOTO_LABEL) {
if (!StrCmp(mc->str,name))
return mc;
}
mc=mc->next;
}
return NULL;
}
CCodeBlkMisc *CBMiscNew(CLex *lx,I64 ty)
{
CCodeBlkMisc *result=CAlloc(sizeof(CCodeBlkMisc));
lx->cbh.cb_misc_lst_end->next=result;
lx->cbh.cb_misc_lst_end=result;
result->addr=INVALID_PTR;
result->type=ty;
return result;
}
I64 CBFloatConstFind(CLex *lx,F64 d)
{
I64 i;
CCodeBlkMisc *mc=lx->cbh.cb_misc_lst;
while (mc) {
if (mc->type==CBMT_FLOAT_CONSTS) {
for (i=0;i<mc->num_consts;i++)
if (mc->float_consts[i]==d)
return mc->addr+i*sizeof(F64);
if (mc->num_consts<CBM_MAX_CONSTS) {
mc->float_consts[mc->num_consts++]=d;
return mc->addr+i*sizeof(F64);
}
}
mc=mc->next;
}
mc=CBMiscNew(lx,CBMT_FLOAT_CONSTS);
mc->float_consts=MAlloc(CBM_MAX_CONSTS*sizeof(F64));
mc->float_consts[mc->num_consts++]=d;
return mc->addr;
}
U0 CBMiscLstDel(CLex *lx)
{
CCodeBlkMisc *mc=lx->cbh.cb_misc_lst,*mc1;
U8 *undef=NULL;
while (mc) {
mc1=mc->next;
switch (mc->type) {
case CBMT_GOTO_LABEL:
if (!(mc->flags&CBMF_DEFINED)) {
undef=mc->str;
mc->str=NULL;
} else if (!(mc->flags&CBMF_USED)) {
PrintFWarn("%S%s\n","ST_UNUSED_LABEL",mc->str);
LexPutWarn(lx,"ST_UNUSED_LABEL_AT");
}
break;
case CBMT_JMP_TABLE:
Free(mc->jmp_table);
break;
case CBMT_FLOAT_CONSTS:
Free(mc->float_consts);
break;
case CBMT_ARRAY_DIM:
LinkedLstDel(mc->dim);
break;
case CBMT_HASH_ENTRY:
HashDel(mc->h);
break;
}
Free(mc->str);
Free(mc);
mc=mc1;
}
if (undef) {
PrintFErr("%S%s\n","ST_UNDEFINED_GOTO_LABEL",undef);
Free(undef);
LexExcept(lx,"ST_UNDEFINED_GOTO_LABEL_AT");
}
}
CLex *CBPopNoFree(CLex *lx)
{
CLexCodeBlkCtrl *tempcbh=lx->cbh.cb_next;
MemCpy(&lx->cbh,tempcbh,sizeof(CLexCodeBlkCtrl));
if (tempcbh->cb_misc_lst_end==&tempcbh->cb_misc_lst)
lx->cbh.cb_misc_lst_end=&lx->cbh.cb_misc_lst;
return tempcbh;
}
U0 CBAppend(CLex *lx, CLexCodeBlkCtrl *tempcbh)
{
CIntermediateCode *tempi,*tempi1;
CBInPtrsInit(tempcbh);
do {
tempi=CBGetIC1(tempcbh);
if (tempi->ic_opcode) {
tempi1=CBICAdd(lx,tempi->ic_opcode+tempi->ic_precedence<<16,tempi->ic_data,
tempi->ic_class,tempi->ic_flags);
tempi1->ic_line=tempi->ic_line;
}
} while (tempi->ic_opcode);
LinkedLstDel(tempcbh->cb_out_first);
if (tempcbh->cb_misc_lst_end!=&tempcbh->cb_misc_lst) {
lx->cbh.cb_misc_lst_end->next=tempcbh->cb_misc_lst;
lx->cbh.cb_misc_lst_end=tempcbh->cb_misc_lst_end;
}
Free(tempcbh);
}
U0 CBCombine(CLex *lx)
{
CCodeBlk *cb=lx->cbh.cb_out_first,*cb1,*cb2;
I64 i=0,j=sizeof(CIntermediateCode)*CB_IC_CNT;
U8 *ptr;
while (cb) {
i++;
cb=cb->next;
}
if (i>1) {
cb1=MAlloc(i*j+offset(CCodeBlk.data));
cb1->next=NULL;
cb=lx->cbh.cb_out_first;
ptr=&cb1->data;
i--;
while (i--) {
cb2=cb->next;
MemCpy(ptr,&cb->data,j);
ptr+=j;
Free(cb);
cb=cb2;
}
MemCpy(ptr,&cb->data,lx->cbh.cb_out_ptr(I64)-(&cb->data)(I64));
Free(cb);
lx->cbh.cb_out_first=cb1;
}
}
U8 *CBCompile(CLex *lx,CHashFun *fun_class,
I64 *code_size,CDbgInfo **_dbg,I64 *type=NULL)
{
U8 *result;
COptReg register_offsets[NUM_REGS];
if (_dbg) *_dbg=NULL;
CBCombine(lx);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) {
if (Bt(&lx->pass_trace_mask,0)) {
"$$IV,1$$Before Pass 1:$$IV,0$$\n";
CBPutAllIC(lx);
}
}
lx->pass=1;
OptPass012(lx,fun_class,TRUE);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) {
if (Bt(&lx->pass_trace_mask,1)) {
"$$IV,1$$After Pass 1:$$IV,0$$\n";
CBPutAllIC(lx);
}
}
lx->pass=2;
OptPass012(lx,fun_class,TRUE);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) {
if (Bt(&lx->pass_trace_mask,2)) {
"$$IV,1$$After Pass 2:$$IV,0$$\n";
CBPutAllIC(lx);
}
}
lx->pass=3;
OptPass3(lx,fun_class,register_offsets);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) {
if (Bt(&lx->pass_trace_mask,3)) {
"$$IV,1$$After Pass 3:$$IV,0$$\n";
CBPutAllIC(lx);
}
}
lx->pass=4;
OptPass4(lx,register_offsets,type);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) {
if (Bt(&lx->pass_trace_mask,4)) {
"$$IV,1$$After Pass 4:$$IV,0$$\n";
CBPutAllIC(lx);
}
}
lx->pass=5;
OptPass5(lx);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) {
if (Bt(&lx->pass_trace_mask,5)) {
"$$IV,1$$After Pass 5:$$IV,0$$\n";
CBPutAllIC(lx);
}
}
lx->pass=6;
OptPass6(lx,fun_class);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) {
if (Bt(&lx->pass_trace_mask,6)) {
"$$IV,1$$After Pass 6:$$IV,0$$\n";
CBPutAllIC(lx);
}
}
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT))
if (Bt(&lx->pass_trace_mask,7))
"$$IV,1$$Pass 7:$$IV,0$$\n";
lx->pass=7;
OptPass789A(lx,fun_class,register_offsets,NULL,NULL);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT))
if (Bt(&lx->pass_trace_mask,8))
"$$IV,1$$Pass 8:$$IV,0$$\n";
lx->pass=8;
OptPass789A(lx,fun_class,register_offsets,NULL,NULL);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT))
if (Bt(&lx->pass_trace_mask,9))
"$$IV,1$$Pass 9:$$IV,0$$\n";
lx->pass=9;
*code_size=OptPass789A(lx,fun_class,register_offsets,NULL,NULL);
if (lx->flags&LF_AOT_COMPILE)
result=MAlloc(*code_size);
else
result=MAlloc(*code_size,Fs->code_heap);
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT))
if (Bt(&lx->pass_trace_mask,0xA))
"$$IV,1$$Pass A:$$IV,0$$\n";
lx->pass=0xA;
*code_size=OptPass789A(lx,fun_class,register_offsets,result,_dbg);
compiled_bytes+=*code_size;
LinkedLstDel(lx->cbh.cb_out_first);
CBMiscLstDel(lx);
if (Bt(&lx->opts,OPTf_COMPILE_TRACE)) {
if (lx->flags&LF_AOT_COMPILE) {
if (lx->a->seg_size==16)
Un(result,*code_size,16);
else if (lx->a->seg_size==64)
Un(result,*code_size,64);
else
Un(result,*code_size,32);
} else
Un(result,*code_size,64);
}
return result;
}
Binary file not shown.
+11 -16
View File
@@ -9,7 +9,6 @@ public extern I64 LexGetChar(CLex *lx);
public extern U0 LexSkipEol(CLex *lx);
public extern U0 LexPush(CLex *lx);
public extern U0 LexPop(CLex *lx);
//public extern U0 LexSubStkPtr(CLex *lx);
public extern I64 Lex(CLex *lx);
public extern U8 *LexExtStr(CLex *lx,I64 *_size=NULL);
public extern U0 LexPutLine(CLex *lx,U8 *start);
@@ -17,26 +16,24 @@ public extern U0 LexPutPos(CLex *lx);
public extern U0 LexPutWarn(CLex *lx,U8 *name=NULL,CHashFun *fun_class=NULL);
public extern I64 PrsKeyWord(CLex *lx);
public extern U0 LexExcept(CLex *lx,U8 *name=NULL,CHashFun *fun_class=NULL);
public extern U8 *CmpExpression(CLex *lx,I64 *type=NULL);
public extern U8 *CmpStatement(CLex *lx,I64 *type);
public extern I64 GetExpression(CLex *lx,U8 **ex); //FALSE=no err
public extern I64 Expression(CLex *lx);
public extern U0 ExpressionDel(U8 *code);
public extern U8 *LexExpression2Bin(CLex *lx,I64 *type=NULL);
public extern U8 *LexStatement2Bin(CLex *lx,I64 *type);
public extern I64 IsLexExpression2Bin(CLex *lx,U8 **ex); //FALSE=no err
public extern I64 LexExpression(CLex *lx);
public extern U0 ExpressionBinDel(U8 *ex);
public extern I64 MemberMetaData(U8 *st,CMemberLst *ml);
extern U0 MemberLstDel(CHashClass *c);
public extern CMemberLstMeta *MemberMetaFind(U8 *st,CMemberLst *ml);
public extern CMemberLst *MemberFind(U8 *st,CHashClass *c);
public extern CMemberLst *MemberFind2(CHashClass *pattern,CHashClass *tempc);
public extern U0 LexAttachDoc(CLex *lx,CLexFile *tempf=NULL,
CDoc *doc=NULL,U8 *abs_filename=NULL,CDocEntry *doc_e=NULL,I64 col=0);
CDoc *doc=NULL,U8 *abs_filename=NULL,CDocEntry *doc_e=NULL,I64 col=0);
public extern CHashClass *OptClassFwd(CHashClass *tempc);
#help_index "Compiler/Directive"
#help_file "::/TempleOS/Doc/Directives"
public extern U0 StreamPutS(U8 *buf);
public extern U0 StreamPrintF(U8 *src,...);
public extern I64 StreamExePutS(U8 *buf);
public extern I64 StreamExePrintF(U8 *fmt,...);
public extern U0 StreamPrint(U8 *fmt,...);
public extern I64 StreamExePrint(U8 *fmt,...);
public extern Bool PTrace(Bool val);
public extern Bool OTrace(Bool val);
public extern I64 OPassTraceMask(I64 i=0b1001111101);
@@ -65,20 +62,18 @@ public extern I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfil
#help_index "Compiler"
public extern I64 ExePutS(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE,
CLexHashTableContext *htc=NULL);
public extern I64 ExePrintF(U8 *fmt,...);
public extern I64 ExePrint(U8 *fmt,...);
public extern I64 ExeFile(U8 *name,Bool just_load=FALSE);
public extern I64 ExePutS2(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE);
public extern I64 ExePrintF2(U8 *fmt,...);
public extern I64 ExePrint2(U8 *fmt,...);
public extern I64 ExeFile2(U8 *name,Bool just_load=FALSE);
public extern I64 ExePutS3(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE);
public extern I64 ExePrintF3(U8 *fmt,...);
public extern I64 ExePrint3(U8 *fmt,...);
public extern I64 ExeFile3(U8 *name,Bool just_load=FALSE);
extern CHashTable *asm_hash;
extern U0 CmpInit(Bool first);
extern I64 compiled_lines,compiled_funs,compiled_bytes;
//The following is for benchmarking
extern Bool cmp_do_not_write_to_dsk;
+461 -482
View File
@@ -1,202 +1,197 @@
$LK+BI,"AsmCodeInstruction ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,807",1$000000C1AE 0001 0000001367 Funct
$LK+BI,"AsmExpressionEval ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,185",2$000000A7B8 0004 00000000B8 Funct
$LK+BI,"AsmGlblsResolve ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,273",3$000000ABA0 0001 00000005D7 Funct
$LK+BI,"AsmHashLoad ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,77",4$0000030D18 0001 000000064F Funct
$LK+BI,"AsmLineLst ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,29",5$000000A230 0001 0000000143 Funct
$LK+BI,"AsmLocalsResolve ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,207",6$000000A870 0003 0000000329 Funct
$LK+BI,"AsmMakeArgMask ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,584",7$000000B738 0002 000000045D Funct
$LK+BI,"AsmPrsInsFlags ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,27",8$00000304B8 0001 000000085D Funct
$LK+BI,"AsmStoreCodeU32 ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,90",9$000000A478 0001 0000000149 Funct
$LK+BI,"AsmStoreCodeU64 ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,129",10$000000A5C8 0005 000000014A Funct
$LK+BI,"AsmStoreCodeU8 ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,61",11$000000A378 001C 00000000FF Funct
$LK+BI,"AsmStoreCodeU8At ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,168",12$000000A718 0016 00000000A0 Funct
$LK+BI,"AsmStoreNum ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,668",13$000000BB98 0004 000000060E Funct
$LK+BI,"AsmUnresolvedAdd ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,1",14$000000A150 0008 00000000DF Funct
$LK+BI,"CBAppend ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,328",15$0000009560 0002 000000009D Funct
$LK+BI,"CBCombine ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,349",16$0000009600 0001 00000000CA Funct
$LK+BI,"CBCompile ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,377",17$00000096D0 0006 00000004AA Funct
$LK+BI,"CBFloatConstFind ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,257",18$00000092C8 000F 00000000BE Funct
$LK+BI,"CBGetIC1 ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,201",19$0000009140 0004 000000004C Funct
$LK+BI,"CBGoToLabelFind ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,234",20$0000009228 0002 0000000049 Funct
$LK+BI,"CBICAdd ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,135",21$0000008F58 00B9 00000000FA Funct
$LK+BI,"CBInPtrsInit ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,181",22$00000090C8 0003 0000000030 Funct
$LK+BI,"CBMiscLstDel ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,279",23$0000009388 0001 000000018D Funct
$LK+BI,"CBMiscNew ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,247",24$0000009278 001A 000000004A Funct
$LK+BI,"CBOutPtrsInit ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,168",25$0000009058 000A 000000006C Funct
$LK+BI,"CBPop ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,225",26$00000091E0 0009 0000000045 Funct
$LK+BI,"CBPopNoFree ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,319",27$0000009518 0001 0000000042 Funct
$LK+BI,"CBPush ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,216",28$0000009190 000E 000000004B Funct
$LK+BI,"CBPutAllIC ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,189",29$00000090F8 0007 0000000043 Funct
$LK+BI,"CBPutClass ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,1",30$0000008838 0001 00000000C5 Funct
$LK+BI,"CBPutIC ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,71",31$0000008BF8 0006 000000035E Funct
$LK+BI,"CBPutICArg ","FL:D:/TempleOS/Compiler/CodeGen.CPP.Z,26",32$0000008900 0003 00000002F3 Funct
$LK,"CInternalType ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,4"$007FD83B48 0002 000000000A Class
CMP_OPT_NOP 0000000000 0003 ExportSysSym
$LK,"CMP_TEMPLATES ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,164"$00000001F6 0001 ExportSysSym
$LK,"CMP_TEMPLATES_DONT_POP ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,338"$000000038B 0001 ExportSysSym
$LK,"CMP_TEMPLATES_DONT_PUSH ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,427"$0000000457 0001 ExportSysSym
$LK,"CMP_TEMPLATES_DONT_PUSH2 ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,618"$000000062D 0001 ExportSysSym
$LK,"CMP_TEMPLATES_DONT_PUSH_POP","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,554"$000000059D 0001 ExportSysSym
$LK+BI,"AsmGlblsResolve ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,275",1$000000A360 0001 00000005D7 Funct Export
$LK+BI,"AsmHashLoad ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,77",2$000002F088 0001 000000064A Funct Export
$LK+BI,"AsmLexExpression ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,187",3$0000009F78 0004 00000000B8 Funct Export
$LK+BI,"AsmLineLst ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,31",4$00000099F0 0001 0000000143 Funct Export
$LK+BI,"AsmLocalsResolve ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,209",5$000000A030 0003 0000000329 Funct Export
$LK+BI,"AsmMakeArgMask ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,586",6$000000AEF8 0002 00000004A3 Funct Export
$LK+BI,"AsmPrsInsFlags ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,27",7$000002E828 0001 000000085C Funct Export
$LK+BI,"AsmStoreCodeU32 ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,92",8$0000009C38 0001 0000000149 Funct Export
$LK+BI,"AsmStoreCodeU64 ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,131",9$0000009D88 0005 000000014A Funct Export
$LK+BI,"AsmStoreCodeU8 ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,63",10$0000009B38 001C 00000000FF Funct Export
$LK+BI,"AsmStoreCodeU8At ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,170",11$0000009ED8 0016 00000000A0 Funct Export
$LK+BI,"AsmStoreNum ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,680",12$000000B3A0 0004 00000004A6 Funct Export
$LK+BI,"AsmUnresolvedAdd ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,1",13$0000009908 0004 00000000E2 Funct Export
$LK,"CInternalType ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,4"$007FCDDD58 0002 000000000A Class
$LK,"CMP_TEMPLATES ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,5"$0000000000 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_POP ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,179"$000000018B 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,268"$0000000257 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH2 ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,459"$0000000421 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH_POP","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,395"$0000000391 0001 ExportSysSym Export
$LK,"CN_MAIN ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,220"$0 0028 0000000008 DefineStr
$LK,"CN_P1 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,221"$1 0006 0000000008 DefineStr
$LK,"CN_P2 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,222"$2 0005 0000000008 DefineStr
$LK,"CN_R ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,223"$3 0003 0000000008 DefineStr
$LK,"CSwitchCase ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1396"$007FCBA0A8 0004 0000000018 Class
$LK+BI,"CTrace ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,38",33$0000003220 0000 0000000017 Funct
$LK,"CVI2 ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,213"$007FCBD098 0003 0000000010 Class
$LK+BI,"Cmp ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,372",34$0000034FB8 0000 000000059B Funct
$LK+BI,"CmpBuf ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,179",35$0000034880 0001 00000000F7 Funct
$LK+BI,"CmpExpression ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1233",36$00000123A6 0004 00000000B4 Funct
$LK+BI,"CmpF1PushPop ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,21",37$0000029030 0002 0000000034 Funct
$LK+BI,"CmpF2PushPop ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,27",38$0000029068 0005 0000000080 Funct
$LK+BI,"CmpFillTables ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,570",39$0000033A28 0001 0000000640 Funct
$LK+BI,"CmpFixUpAOTAsm ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,306",40$0000034D58 0000 000000025C Funct
$LK+BI,"CmpFixUpJITAsm ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,198",41$0000034978 0000 00000003DC Funct
$LK+BI,"CmpInit ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,706",42$0000035C58 0001 00000000B8 Funct
$LK+BI,"CmpJoin ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,60",43$0000034248 0001 0000000636 Funct
$LK+BI,"CmpLoadDefines ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,222",44$0000031368 0001 00000026BC Funct
$LK+BI,"CmpNoteFloatOp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,225",45$0000017C6E 000E 000000021F Funct
$LK+BI,"CmpOffset2Reg ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,96",46$0000024540 0005 0000000042 Funct
$LK+BI,"CmpPType ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,10",47$0000028FF8 0005 0000000033 Funct
$LK+BI,"CmpPmt ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1",48$0000003380 0001 000000022A Funct
$LK+BI,"CmpSetFloatOpPushPop ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,276",49$0000017E8E 000E 000000007B Funct
$LK+BI,"CmpStatement ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,24",50$0000034100 0001 0000000148 Funct
$LK+BI,"CmpType ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,1",51$0000028FD0 0006 0000000025 Funct
$LK+BI,"DefineU8s ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,1216",52$000000D516 0004 00000002D2 Funct
$LK+BI,"Echo ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,48",53$0000003250 0000 0000000017 Funct
$LK+BI,"ExeFile ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,577",54$0000035748 0000 0000000077 Funct
$LK+BI,"ExeFile2 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,629",55$0000035968 0000 0000000075 Funct
$LK+BI,"ExeFile3 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,669",56$0000035AF0 0000 0000000075 Funct
$LK+BI,"ExePrintF ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,568",57$0000035700 0000 0000000045 Funct
$LK+BI,"ExePrintF2 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,620",58$0000035920 0000 0000000043 Funct
$LK+BI,"ExePrintF3 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,659",59$0000035AA8 0000 0000000043 Funct
$LK+BI,"ExePutS ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,530",60$0000035558 0003 00000001A1 Funct
$LK+BI,"ExePutS2 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,588",61$00000357C0 0002 0000000159 Funct
$LK+BI,"ExePutS3 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,640",62$00000359E0 0002 00000000C4 Funct
$LK+BI,"Expression ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1258",63$000001248E 0007 000000003B Funct
$LK+BI,"ExpressionDel ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,372",64$0000005084 000B 0000000014 Funct
$LK,"FBO1_F64 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,107"$2 0002 0000000008 DefineStr
$LK,"FBO1_INT ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,106"$1 0013 0000000008 DefineStr
$LK,"FBO1_NOT_CONST ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,105"$0 0004 0000000008 DefineStr
$LK+BI,"GetExpression ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1253",65$000001245E 0000 0000000029 Funct
$LK+BI,"GetOpt ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,16",66$0000003188 0005 000000002C Funct
$LK+BI,"HashEntryImportCopy ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,1",67$0000009B80 0002 000000015F Funct
$LK+BI,"HashEntrySize ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,71",68$0000009DC8 0000 0000000164 Funct
$LK+BI,"HashEntrySize2 ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,102",69$0000009F30 0002 00000001A9 Funct
$LK+BI,"HashTableImport ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,40",70$0000009CE0 0000 00000000E8 Funct
$LK+BI,"HashTableSize2 ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,139",71$000000A0E0 0000 000000006B Funct
$LK+BI,"ICAddConst ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,945",72$00000199F6 000C 000000074A Funct
$LK+BI,"ICAddEct ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,889",73$0000019706 0005 00000002EF Funct
$LK+BI,"ICAddRSP ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,163",74$00000179E6 0016 0000000286 Funct
$LK+BI,"ICAddSubEctEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2711",75$000001EB26 0005 0000000673 Funct
$LK+BI,"ICAndAnd ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2980",76$000001F7B6 0001 0000000147 Funct
$LK+BI,"ICAndBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3823",77$0000021BC6 0002 000000070C Funct
$LK+BI,"ICAndEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4484",78$0000023A9E 0001 0000000109 Funct
$LK+BI,"ICAssign ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3981",79$00000222D6 0001 0000000308 Funct
$LK+BI,"ICAssignPostIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3501",80$0000020E9E 0002 000000020C Funct
$LK+BI,"ICBitOps ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3194",81$000002009E 0007 00000004FB Funct
$LK+BI,"ICBrBitOps ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4030",82$00000225DE 0008 0000000980 Funct
$LK+BI,"ICBuiltInFloatConst ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,633",83$0000018B1E 000F 00000000BD Funct
$LK+BI,"ICCmp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3074",84$000001FBB6 0006 00000004E6 Funct
$LK+BI,"ICCmpAndBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3543",85$00000210AE 000C 000000081C Funct
$LK+BI,"ICCopyTemplate ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,288",86$0000017F0E 0019 000000026C Funct
$LK+BI,"ICDeref ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,871",87$000001964E 0001 00000000B5 Funct
$LK+BI,"ICDerefPostIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3458",88$0000020CAE 0002 00000001ED Funct
$LK+BI,"ICDiv ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2619",89$000001E656 0001 00000000F2 Funct
$LK+BI,"ICDivEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2638",90$000001E74E 0002 00000002E0 Funct
$LK+BI,"ICFAdd ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2490",91$000001DF2E 0001 00000001FB Funct
$LK+BI,"ICFCmp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1611",92$000001B6C6 0004 0000000187 Funct
$LK+BI,"ICFCmpAndBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2042",93$000001CC46 0004 0000000A47 Funct
$LK+BI,"ICFCvt ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1177",94$000001A53E 000C 000000017B Funct
$LK+BI,"ICFCvt2 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1225",95$000001A6BE 0010 0000000112 Funct
$LK+BI,"ICFDiv ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2466",96$000001DDEE 0001 000000013D Funct
$LK+BI,"ICFMod ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1303",97$000001A9B6 0001 0000000141 Funct
$LK+BI,"ICFModEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1651",98$000001B84E 0001 00000003FA Funct
$LK+BI,"ICFMul ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2426",99$000001DBB6 0001 0000000235 Funct
$LK+BI,"ICFOp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1412",100$000001ADEE 0004 00000008D3 Funct
$LK+BI,"ICFOpEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1718",101$000001BC4E 0004 0000000FF3 Funct
$LK+BI,"ICFPostIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2340",102$000001D79E 0002 0000000151 Funct
$LK+BI,"ICFPow ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1333",103$000001AAFE 0001 00000002ED Funct
$LK+BI,"ICFPreIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2318",104$000001D68E 0002 000000010A Funct
$LK+BI,"ICFSub ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2528",105$000001E12E 0001 0000000120 Funct
$LK+BI,"ICFTemplateFun ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3365",106$000002082E 0007 00000000A8 Funct
$LK+BI,"ICFUnaryMinus ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1252",107$000001A7D6 0001 00000001DC Funct
$LK+BI,"ICLastIns ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,135",108$0000017946 0002 00000000A0 Funct
$LK+BI,"ICLea ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,837",109$000001947E 0004 00000001CD Funct
$LK+BI,"ICLocalVarInit ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4645",110$000002416E 0001 0000000078 Funct
$LK+BI,"ICMinMax ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4305",111$0000023356 0004 00000002B7 Funct
$LK+BI,"ICMod ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2692",112$000001EA2E 0001 00000000F2 Funct
$LK+BI,"ICModU64 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4384",113$000002365E 0001 00000001BB Funct
$LK+BI,"ICModr1 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,352",114$000001817E 0017 0000000326 Funct
$LK+BI,"ICModr2 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,443",115$00000184A6 0015 00000000D5 Funct
$LK+BI,"ICMov ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,656",116$0000018BDE 01A4 000000089C Funct
$LK+BI,"ICMul ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2368",117$000001D8F6 0001 00000002BA Funct
$LK+BI,"ICMulEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2551",118$000001E24E 0001 0000000408 Funct
$LK+BI,"ICNot ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2960",119$000001F6B6 0001 00000000FB Funct
$LK+BI,"ICOpSizeRex ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,46",120$000001759E 0006 0000000113 Funct
$LK+BI,"ICOr ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,623",121$0000018ACE 000C 000000004A Funct
$LK+BI,"ICOrEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4507",122$0000023BAE 0001 0000000109 Funct
$LK+BI,"ICOrOr ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3009",123$000001F8FE 0001 000000015E Funct
$LK+BI,"ICPop ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,574",124$0000018906 000A 000000010B Funct
$LK+BI,"ICPopRegs ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,601",125$0000018A16 000C 0000000055 Funct
$LK+BI,"ICPostIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3418",126$0000020AAE 0002 00000001FB Funct
$LK+BI,"ICPreIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3381",127$00000208D6 0004 00000001D7 Funct
$LK+BI,"ICPreempt ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3298",128$000002059E 0001 0000000122 Funct
$LK+BI,"ICPush ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,523",129$00000186E6 0020 00000001C1 Funct
$LK+BI,"ICPushRegs ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,561",130$00000188AE 0006 0000000053 Funct
$LK+BI,"ICQueInit ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4193",131$0000022F5E 0001 0000000070 Funct
$LK+BI,"ICQueIns ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4207",132$0000022FCE 0001 0000000179 Funct
$LK+BI,"ICQueInsRev ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4248",133$000002314E 0001 0000000179 Funct
$LK+BI,"ICQueRem ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4289",134$00000232CE 0001 0000000088 Funct
$LK+BI,"ICRex ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,32",135$0000017516 0016 0000000081 Funct
$LK+BI,"ICShift ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2849",136$000001F19E 0004 0000000197 Funct
$LK+BI,"ICShiftEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2883",137$000001F336 0002 000000030C Funct
$LK+BI,"ICSlashOp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,495",138$000001857E 0027 0000000164 Funct
$LK+BI,"ICSqr ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4377",139$000002360E 0002 000000004A Funct
$LK+BI,"ICSub ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1099",140$000001A146 0001 00000003F2 Funct
$LK+BI,"ICSwap ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4426",141$000002381E 0001 000000027C Funct
$LK+BI,"ICSwitch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4553",142$0000023DC6 0002 00000003A1 Funct
$LK+BI,"ICTestAndBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3742",143$00000218CE 0002 00000001EA Funct
$LK+BI,"ICToBool ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3350",144$00000207B6 0001 0000000071 Funct
$LK+BI,"ICToF64 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3345",145$0000020776 0001 000000003D Funct
$LK+BI,"ICToI64 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3340",146$0000020736 0001 000000003D Funct
$LK+BI,"ICToUpper ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3329",147$00000206C6 0001 000000006B Funct
$LK+BI,"ICU16 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,72",148$00000176B6 0090 00000000A8 Funct
$LK+BI,"ICU24 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,87",149$000001775E 0063 00000000D3 Funct
$LK+BI,"ICU32 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,104",150$0000017836 0051 0000000082 Funct
$LK+BI,"ICU64 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,120",151$00000178BE 0009 0000000082 Funct
$LK+BI,"ICU8 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,20",152$0000017496 0062 000000007C Funct
$LK+BI,"ICUnaries ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2951",153$000001F646 0002 0000000069 Funct
$LK+BI,"ICXorEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4530",154$0000023CBE 0001 0000000103 Funct
$LK+BI,"ICXorXor ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3041",155$000001FA5E 0001 0000000151 Funct
$LK+BI,"ICZFlagBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3790",156$0000021ABE 0002 0000000104 Funct
$LK+BI,"ICZero ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,614",157$0000018A6E 0017 000000005E Funct
$LK+BI,"ImportHashTable ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,56",158$0000003278 0000 00000000D5 Funct
$LK+BI,"IncludeDepth ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,76",159$0000003350 0000 000000002C Funct
$LK+BI,"InstEntriesCompare ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,1",160$0000000858 0001 000000022B Funct
$LK+BI,"InstEntryFind ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,71",161$0000000A88 0002 0000000375 Funct
$LK+BI,"IsReplaceSyms ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,52",162$0000003268 000A 000000000D Funct
$LK+BI,"LTrace ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,43",163$0000003238 0000 0000000017 Funct
$LK+BI,"Lex ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,789",164$0000005F08 00FC 000000254A Funct
$LK+BI,"LexAttachDoc ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,425",165$00000051D0 0001 0000000169 Funct
$LK+BI,"LexBackupLastChar ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,140",166$00000039AC 0003 000000003D Funct
$LK+BI,"LexDel ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,65",167$00000036E8 0005 000000008D Funct
$LK+BI,"LexDocRead ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,407",168$0000005140 0001 0000000090 Funct
$LK+BI,"LexDollar ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,151",169$00000039EC 0003 000000006C Funct
$LK+BI,"LexExcept ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1670",170$0000008770 00A1 00000000C6 Funct
$LK+BI,"LexExtStr ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1588",171$0000008458 0004 00000000C1 Funct
$LK+BI,"LexGetChar ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,165",172$0000003A5C 0030 00000015FA Funct
$LK+BI,"LexInStr ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,691",173$00000059E0 0001 0000000524 Funct
$LK+BI,"LexIncludeStr ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,377",174$000000509C 0003 0000000095 Funct
$LK+BI,"LexNew ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,37",175$00000035B0 0005 0000000133 Funct
$LK+BI,"LexPop ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,482",176$00000053C8 0004 0000000070 Funct
$LK+BI,"LexPush ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,470",177$0000005340 000F 0000000082 Funct
$LK+BI,"LexPutLine ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1613",178$0000008520 0003 00000000A7 Funct
$LK+BI,"LexPutPos ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1640",179$00000085C8 0003 00000000CA Funct
$LK+BI,"LexPutToken ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,117",180$0000003890 0002 0000000111 Funct
$LK+BI,"LexPutWarn ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1654",181$0000008698 0011 00000000D3 Funct
$LK+BI,"LexSize ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,85",182$0000003778 0000 0000000098 Funct
$LK+BI,"LexSkipEol ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,365",183$000000505C 0004 0000000027 Funct
$LK,"CSwitchCase ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1389"$007FCFB750 0004 0000000018 Class
$LK+BI,"CTrace ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,38",14$0000002FA8 0000 0000000017 Funct Export
$LK,"CVI2 ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,224"$007FCFE000 0003 0000000010 Class
$LK+BI,"Cmp ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,366",15$0000033308 0000 0000000597 Funct Export
$LK+BI,"CmpBuf ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,166",16$0000032BB8 0001 00000000FD Funct Export
$LK+BI,"CmpF1PushPop ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,21",17$00000272B6 0002 0000000035 Funct Export
$LK+BI,"CmpF2PushPop ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,27",18$00000272EE 0005 000000007C Funct Export
$LK+BI,"CmpFillTables ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,570",19$0000031DA8 0001 0000000630 Funct Export
$LK+BI,"CmpFixUpAOTAsm ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,286",20$00000330A8 0000 000000025B Funct Export
$LK+BI,"CmpFixUpJITAsm ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,185",21$0000032CB8 0000 00000003F0 Funct Export
$LK+BI,"CmpInit ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,692",22$0000033F88 0001 00000000C9 Funct Export
$LK+BI,"CmpJoin ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,47",23$0000032580 0001 0000000632 Funct Export
$LK+BI,"CmpLoadDefines ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,222",24$000002F6D8 0001 00000026CB Funct Export
$LK+BI,"CmpNoteFloatOp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,225",25$00000169AE 000E 000000021C Funct Export
$LK+BI,"CmpOffset2Reg ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,100",26$0000022D56 0005 0000000042 Funct Export
$LK+BI,"CmpPType ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,10",27$000002727E 0005 0000000033 Funct Export
$LK+BI,"CmpPmt ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1",28$0000003110 0001 000000023A Funct Export
$LK+BI,"CmpSetFloatOpPushPop ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,276",29$0000016BCE 000E 000000007B Funct Export
$LK+BI,"CmpType ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,1",30$0000027256 0006 0000000025 Funct Export
$LK+BI,"Echo ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,48",31$0000002FD8 0000 0000000017 Funct Export
$LK+BI,"ExeFile ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,571",32$0000033A90 0000 0000000077 Funct Export
$LK+BI,"ExeFile2 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,623",33$0000033CB0 0000 0000000075 Funct Export
$LK+BI,"ExeFile3 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,662",34$0000033E38 0000 0000000075 Funct Export
$LK+BI,"ExePrint ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,562",35$0000033A48 0000 0000000045 Funct Export
$LK+BI,"ExePrint2 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,614",36$0000033C68 0000 0000000043 Funct Export
$LK+BI,"ExePrint3 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,653",37$0000033DF0 0000 0000000043 Funct Export
$LK+BI,"ExePutS ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,524",38$00000338A0 0003 00000001A1 Funct Export
$LK+BI,"ExePutS2 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,582",39$0000033B08 0002 0000000159 Funct Export
$LK+BI,"ExePutS3 ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,634",40$0000033D28 0002 00000000C4 Funct Export
$LK+BI,"ExpressionBinDel ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1184",41$00000112DE 0008 0000000014 Funct Export
$LK,"FBO1_F64 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,111"$2 0002 0000000008 DefineStr
$LK,"FBO1_INT ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,110"$1 0013 0000000008 DefineStr
$LK,"FBO1_NOT_CONST ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,109"$0 0004 0000000008 DefineStr
$LK+BI,"GetOpt ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,16",42$0000002F10 0005 000000002C Funct Export
$LK+BI,"HashEntryImportCopy ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,1",43$0000009338 0002 000000015F Funct Export
$LK+BI,"HashEntrySize ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,71",44$0000009580 0000 0000000164 Funct Export
$LK+BI,"HashEntrySize2 ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,102",45$00000096E8 0002 00000001A9 Funct Export
$LK+BI,"HashTableImport ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,40",46$0000009498 0000 00000000E8 Funct Export
$LK+BI,"HashTableSize2 ","FL:D:/TempleOS/Compiler/Hash1b.CPP.Z,139",47$0000009898 0000 000000006B Funct Export
$LK+BI,"ICAddEct ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,889",48$0000018426 0005 00000002EF Funct Export
$LK+BI,"ICAddRSP ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,163",49$0000016726 0017 0000000284 Funct Export
$LK+BI,"ICAddSubEctEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2714",50$000001D6C6 0005 000000066F Funct Export
$LK+BI,"ICAddSubEctImm ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,945",51$0000018716 000D 0000000705 Funct Export
$LK+BI,"ICAndAnd ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2983",52$000001E34E 0001 0000000147 Funct Export
$LK+BI,"ICAndBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3807",53$000002065E 0002 0000000704 Funct Export
$LK+BI,"ICAndEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4468",54$000002246E 0001 0000000109 Funct Export
$LK+BI,"ICArgPut ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,28",55$0000008408 0003 000000030D Funct Export
$LK+BI,"ICAssign ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3965",56$0000020D66 0001 00000002FD Funct Export
$LK+BI,"ICAssignPostIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3504",57$000001FA1E 0002 000000020C Funct Export
$LK+BI,"ICBitOps ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3197",58$000001EC36 0007 00000004ED Funct Export
$LK+BI,"ICBrBitOps ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4014",59$0000021066 0008 000000091E Funct Export
$LK+BI,"ICBuiltInFloatConst ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,633",60$0000017846 000F 00000000BD Funct Export
$LK+BI,"ICClassPut ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,3",61$0000008338 0001 00000000CF Funct Export
$LK+BI,"ICCmp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3077",62$000001E74E 0006 00000004E6 Funct Export
$LK+BI,"ICCmpAndBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3546",63$000001FC2E 000C 0000000738 Funct Export
$LK+BI,"ICCopyTemplate ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,288",64$0000016C4E 0019 000000026C Funct Export
$LK+BI,"ICDeref ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,871",65$000001836E 0001 00000000B5 Funct Export
$LK+BI,"ICDerefPostIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3461",66$000001F82E 0002 00000001ED Funct Export
$LK+BI,"ICDiv ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2622",67$000001D1F6 0001 00000000F2 Funct Export
$LK+BI,"ICDivEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2641",68$000001D2EE 0002 00000002E0 Funct Export
$LK+BI,"ICFAdd ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2493",69$000001CACE 0001 00000001FB Funct Export
$LK+BI,"ICFCmp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1611",70$000001A38E 0004 0000000187 Funct Export
$LK+BI,"ICFCmpAndBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2042",71$000001B82E 0004 0000000A03 Funct Export
$LK+BI,"ICFCvt ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1177",72$0000019216 000C 000000017B Funct Export
$LK+BI,"ICFCvt2 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1225",73$0000019396 0010 0000000112 Funct Export
$LK+BI,"ICFDiv ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2469",74$000001C98E 0001 000000013D Funct Export
$LK+BI,"ICFMod ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1303",75$000001968E 0001 0000000141 Funct Export
$LK+BI,"ICFModEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1651",76$000001A516 0001 00000003D3 Funct Export
$LK+BI,"ICFMul ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2429",77$000001C756 0001 0000000235 Funct Export
$LK+BI,"ICFOp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1412",78$0000019AC6 0004 00000008C1 Funct Export
$LK+BI,"ICFOpEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1718",79$000001A8EE 0004 0000000F40 Funct Export
$LK+BI,"ICFPostIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2343",80$000001C346 0002 0000000151 Funct Export
$LK+BI,"ICFPow ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1333",81$00000197D6 0001 00000002ED Funct Export
$LK+BI,"ICFPreIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2321",82$000001C236 0002 000000010A Funct Export
$LK+BI,"ICFSub ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2531",83$000001CCCE 0001 0000000120 Funct Export
$LK+BI,"ICFTemplateFun ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3368",84$000001F3AE 0007 00000000A8 Funct Export
$LK+BI,"ICFUnaryMinus ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1252",85$00000194AE 0001 00000001DC Funct Export
$LK+BI,"ICLastIns ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,135",86$0000016686 0002 000000009A Funct Export
$LK+BI,"ICLea ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,837",87$000001819E 0004 00000001CD Funct Export
$LK+BI,"ICLocalVarInit ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4631",88$0000022B46 0001 0000000078 Funct Export
$LK+BI,"ICMinMax ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4289",89$0000021D3E 0004 00000002A7 Funct Export
$LK+BI,"ICMod ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2695",90$000001D5CE 0001 00000000F2 Funct Export
$LK+BI,"ICModU64 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4368",91$0000022036 0001 00000001B3 Funct Export
$LK+BI,"ICModr1 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,352",92$0000016EBE 0017 0000000312 Funct Export
$LK+BI,"ICModr2 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,443",93$00000171D6 0015 00000000D5 Funct Export
$LK+BI,"ICMov ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,656",94$0000017906 01A4 0000000891 Funct Export
$LK+BI,"ICMul ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2371",95$000001C49E 0001 00000002B6 Funct Export
$LK+BI,"ICMulEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2554",96$000001CDEE 0001 0000000404 Funct Export
$LK+BI,"ICNot ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2963",97$000001E24E 0001 00000000FB Funct Export
$LK+BI,"ICOpSizeRex ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,46",98$00000162FE 0006 000000010B Funct Export
$LK+BI,"ICOrEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4491",99$000002257E 0001 0000000109 Funct Export
$LK+BI,"ICOrOr ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3012",100$000001E496 0001 000000015E Funct Export
$LK+BI,"ICPop ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,574",101$000001762E 000A 000000010B Funct Export
$LK+BI,"ICPopRegs ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,601",102$000001773E 000C 0000000056 Funct Export
$LK+BI,"ICPostIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3421",103$000001F62E 0002 00000001FB Funct Export
$LK+BI,"ICPreIncDec ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3384",104$000001F456 0004 00000001D7 Funct Export
$LK+BI,"ICPreempt ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3301",105$000001F126 0001 000000011E Funct Export
$LK+BI,"ICPush ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,523",106$000001740E 0020 00000001C1 Funct Export
$LK+BI,"ICPushRegs ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,561",107$00000175D6 0006 0000000053 Funct Export
$LK+BI,"ICPut ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,73",108$0000008718 0009 00000003D1 Funct Export
$LK+BI,"ICQueInit ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4177",109$0000021986 0001 000000006C Funct Export
$LK+BI,"ICQueIns ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4191",110$00000219F6 0001 000000015E Funct Export
$LK+BI,"ICQueInsRev ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4232",111$0000021B56 0001 000000015E Funct Export
$LK+BI,"ICQueRem ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4273",112$0000021CB6 0001 0000000084 Funct Export
$LK+BI,"ICRex ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,32",113$000001627E 0016 000000007D Funct Export
$LK+BI,"ICShift ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2852",114$000001DD36 0004 0000000197 Funct Export
$LK+BI,"ICShiftEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2886",115$000001DECE 0002 000000030C Funct Export
$LK+BI,"ICSlashOp ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,495",116$00000172AE 0027 0000000160 Funct Export
$LK+BI,"ICSqr ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4361",117$0000021FE6 0002 000000004A Funct Export
$LK+BI,"ICSub ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,1099",118$0000018E1E 0001 00000003F1 Funct Export
$LK+BI,"ICSwap ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4410",119$00000221EE 0001 000000027D Funct Export
$LK+BI,"ICSwitch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4537",120$0000022796 0002 00000003AB Funct Export
$LK+BI,"ICTest ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,623",121$00000177F6 000C 000000004A Funct Export
$LK+BI,"ICTestAndBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3726",122$0000020366 0002 00000001EB Funct Export
$LK+BI,"ICToBool ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3353",123$000001F336 0001 0000000071 Funct Export
$LK+BI,"ICToF64 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3348",124$000001F2F6 0001 000000003D Funct Export
$LK+BI,"ICToI64 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3343",125$000001F2B6 0001 000000003D Funct Export
$LK+BI,"ICToUpper ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3332",126$000001F246 0001 000000006B Funct Export
$LK+BI,"ICU16 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,72",127$000001640E 0090 00000000A4 Funct Export
$LK+BI,"ICU24 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,87",128$00000164B6 0060 00000000CF Funct Export
$LK+BI,"ICU32 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,104",129$0000016586 004F 000000007E Funct Export
$LK+BI,"ICU64 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,120",130$0000016606 0009 000000007E Funct Export
$LK+BI,"ICU8 ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,20",131$0000016206 0060 0000000078 Funct Export
$LK+BI,"ICUnaries ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,2954",132$000001E1DE 0002 0000000069 Funct Export
$LK+BI,"ICXorEqual ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,4514",133$000002268E 0001 0000000103 Funct Export
$LK+BI,"ICXorXor ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3044",134$000001E5F6 0001 0000000151 Funct Export
$LK+BI,"ICZFlagBranch ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,3774",135$0000020556 0002 0000000105 Funct Export
$LK+BI,"ICZero ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,614",136$0000017796 0017 000000005E Funct Export
$LK+BI,"ImportHashTable ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,56",137$0000003000 0000 00000000DB Funct Export
$LK+BI,"IncludeDepth ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,76",138$00000030E0 0000 000000002C Funct Export
$LK+BI,"InstEntriesCompare ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,1",139$00000006D8 0001 0000000229 Funct Export
$LK+BI,"InstEntryFind ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,71",140$0000000908 0002 0000000370 Funct Export
$LK+BI,"IsLexExpression2Bin ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1207",141$000001138E 0000 0000000029 Funct Export
$LK+BI,"IsReplaceSyms ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,52",142$0000002FF0 000A 000000000D Funct Export
$LK+BI,"LCCAdd ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,155",143$0000008B60 009C 00000000B2 Funct Export
$LK+BI,"LCCAppend ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,196",144$0000008CA0 0002 00000000A6 Funct Export
$LK+BI,"LCCCompile ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,315",145$0000009110 0006 0000000226 Funct Export
$LK+BI,"LCCDel ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,257",146$0000008EB8 0001 00000001A3 Funct Export
$LK+BI,"LCCFloatConstFind ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,235",147$0000008DF0 000F 00000000C2 Funct Export
$LK+BI,"LCCGoToLabelFind ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,222",148$0000008DA0 0002 000000004D Funct Export
$LK+BI,"LCCHeaderPut ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,299",149$0000009060 000A 00000000AB Funct Export
$LK+BI,"LCCInit ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,147",150$0000008B28 000A 0000000036 Funct Export
$LK+BI,"LCCMiscNew ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,213",151$0000008D48 001A 0000000051 Funct Export
$LK+BI,"LCCPop ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,191",152$0000008C80 0009 000000001A Funct Export
$LK+BI,"LCCPopNoFree ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,184",153$0000008C50 0002 000000002A Funct Export
$LK+BI,"LCCPush ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,177",154$0000008C18 000E 0000000033 Funct Export
$LK+BI,"LCCQuePut ","FL:D:/TempleOS/Compiler/ICLCC.CPP.Z,137",155$0000008AF0 0001 0000000033 Funct Export
$LK+BI,"LTrace ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,43",156$0000002FC0 0000 0000000017 Funct Export
$LK+BI,"Lex ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,785",157$0000005CA0 00FA 00000022BD Funct Export
$LK+BI,"LexAttachDoc ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,421",158$0000004F70 0001 0000000166 Funct Export
$LK+BI,"LexBackupLastChar ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,141",159$000000376C 0003 000000003D Funct Export
$LK+BI,"LexDel ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,65",160$0000003488 0005 0000000096 Funct Export
$LK+BI,"LexDocRead ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,403",161$0000004EE0 0001 0000000090 Funct Export
$LK+BI,"LexDollar ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,152",162$00000037AC 0003 000000006C Funct Export
$LK+BI,"LexExcept ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1666",163$0000008270 00A9 00000000C6 Funct Export
$LK+BI,"LexExpression ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1212",164$00000113BE 0007 000000003B Funct Export
$LK+BI,"LexExpression2Bin ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1189",165$00000112F6 0004 0000000098 Funct Export
$LK+BI,"LexExtStr ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1584",166$0000007F60 0004 00000000C1 Funct Export
$LK+BI,"LexGetChar ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,166",167$000000381C 0030 00000015F6 Funct Export
$LK+BI,"LexInStr ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,687",168$0000005778 0001 0000000524 Funct Export
$LK+BI,"LexIncludeStr ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,373",169$0000004E3C 0003 0000000095 Funct Export
$LK+BI,"LexNew ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,37",170$0000003350 0005 0000000133 Funct Export
$LK+BI,"LexPop ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,478",171$0000005160 0004 0000000070 Funct Export
$LK+BI,"LexPush ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,466",172$00000050D8 000F 0000000082 Funct Export
$LK+BI,"LexPutLine ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1609",173$0000008028 0003 000000009F Funct Export
$LK+BI,"LexPutPos ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1636",174$00000080C8 0003 00000000CA Funct Export
$LK+BI,"LexPutToken ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,118",175$0000003638 0002 000000012B Funct Export
$LK+BI,"LexPutWarn ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,1650",176$0000008198 000F 00000000D3 Funct Export
$LK+BI,"LexSize ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,86",177$0000003520 0000 0000000098 Funct Export
$LK+BI,"LexSkipEol ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,366",178$0000004E14 0004 0000000027 Funct Export
$LK+BI,"LexStatement2Bin ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,16",179$0000032460 0001 000000011D Funct Export
$LK,"MDR_D32_INDIRECT_REG ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,346"$3 0002 0000000008 DefineStr
$LK,"MDR_D8_INDIRECT_REG ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,345"$2 0002 0000000008 DefineStr
$LK,"MDR_INDIRECT_REG ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,344"$1 0002 0000000008 DefineStr
@@ -205,51 +200,46 @@ $LK,"MDR_RIP_REL ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,350"$7
$LK,"MDR_SIB_D32_INDIRECT_REG ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,349"$6 0003 0000000008 DefineStr
$LK,"MDR_SIB_D8_INDIRECT_REG ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,348"$5 0002 0000000008 DefineStr
$LK,"MDR_SIB_INDIRECT_REG ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,347"$4 0002 0000000008 DefineStr
$LK+BI,"MemberAdd ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,551",184$0000005558 0004 00000001AE Funct
$LK+BI,"MemberFind ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,516",185$00000054B8 0005 0000000060 Funct
$LK+BI,"MemberFind2 ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,536",186$0000005518 0001 0000000040 Funct
$LK+BI,"MemberLstCopy ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,636",187$00000057F8 0001 0000000118 Funct
$LK+BI,"MemberLstDel ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,599",188$0000005708 0001 00000000F0 Funct
$LK+BI,"MemberLstNew ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,81",189$000001263E 0003 0000000026 Funct
$LK+BI,"MemberLstSize ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,664",190$0000005910 0002 00000000CB Funct
$LK+BI,"MemberMetaData ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,494",191$0000005438 0000 000000003D Funct
$LK+BI,"MemberMetaFind ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,505",192$0000005478 0000 000000003C Funct
$LK+BI,"MemberAdd ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,547",180$00000052F0 0004 00000001AC Funct Export
$LK+BI,"MemberFind ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,512",181$0000005250 0005 0000000060 Funct Export
$LK+BI,"MemberFind2 ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,532",182$00000052B0 0001 0000000040 Funct Export
$LK+BI,"MemberLstCopy ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,632",183$0000005590 0001 0000000118 Funct Export
$LK+BI,"MemberLstDel ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,595",184$00000054A0 0001 00000000F0 Funct Export
$LK+BI,"MemberLstNew ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,81",185$000001156E 0003 0000000026 Funct Export
$LK+BI,"MemberLstSize ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,660",186$00000056A8 0002 00000000CB Funct Export
$LK+BI,"MemberMetaData ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,490",187$00000051D0 0000 000000003D Funct Export
$LK+BI,"MemberMetaFind ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,501",188$0000005210 0000 000000003C Funct Export
$LK,"NUM_INTERNAL_TYPES ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,1"$16 0002 0000000008 DefineStr
$LK+BI,"OPassTraceMask ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,31",193$00000031E8 0000 0000000035 Funct
$LK+BI,"OTrace ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,26",194$00000031D0 0000 0000000017 Funct
$LK+BI,"OptBrNotZero ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,387",195$0000024F08 0004 0000000659 Funct
$LK+BI,"OptBrZero ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,226",196$00000248A8 0006 0000000659 Funct
$LK+BI,"OptClassFwd ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,40",197$00000243E8 0008 0000000027 Funct
$LK+BI,"OptEnd ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,23",198$0000024350 0005 000000006F Funct
$LK+BI,"OptEqu ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,1",199$0000003128 0007 000000002E Funct
$LK+BI,"OptFixSizeOf ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,547",200$0000025568 0003 0000000099 Funct
$LK+BI,"OptFixupBinaryOp1 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,109",201$0000024588 0013 00000001EA Funct
$LK+BI,"OptFixupBinaryOp2 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,175",202$0000024778 0001 0000000058 Funct
$LK+BI,"OptFixupUnaryOp ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,191",203$00000247D0 0003 00000000D4 Funct
$LK+BI,"OptIC4 ","FL:D:/TempleOS/Compiler/OptPass4.CPP.Z,1",204$000002A930 0001 000000060C Funct
$LK+BI,"OptIC6 ","FL:D:/TempleOS/Compiler/OptPass6.CPP.Z,1",205$000002C660 0001 000000013C Funct
$LK+BI,"OptLabelFwd ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,32",206$00000243C0 0006 0000000024 Funct
$LK+BI,"OptLag ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,64",207$0000024490 0004 0000000030 Funct
$LK+BI,"OptLag1 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,75",208$00000244C0 0004 000000003A Funct
$LK+BI,"OptLead1 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,86",209$0000024500 0002 0000000039 Funct
$LK+BI,"OptMVCompare ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,44",210$00000290E8 0001 000000001A Funct
$LK,"OptMemberVar ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,39"$007FCA2AA8 0005 0000000020 Class
$LK+BI,"OptMissing ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,1",211$00000241E6 0004 0000000070 Funct
$LK,"OptNext ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,687"$0000000088 0002 Funct
$LK,"OptNext2 ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,690"$00000000FA 0001 Funct
$LK,"OptNext3 ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,693"$000000016C 0001 Funct
$LK+BI,"OptOff ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,11",212$0000003170 0000 0000000016 Funct
$LK+BI,"OptOn ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,6",213$0000003158 0000 0000000016 Funct
$LK+BI,"OptPass012 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,571",214$0000025608 0000 00000039C7 Funct
$LK+BI,"OptPass3 ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,49",215$0000029108 0000 0000001827 Funct
$LK+BI,"OptPass4 ","FL:D:/TempleOS/Compiler/OptPass4.CPP.Z,171",216$000002AF40 0000 000000131D Funct
$LK+BI,"OptPass5 ","FL:D:/TempleOS/Compiler/OptPass5.CPP.Z,1",217$000002C260 0000 00000003FE Funct
$LK+BI,"OptPass6 ","FL:D:/TempleOS/Compiler/OptPass6.CPP.Z,131",218$000002CAF8 0000 0000000443 Funct
$LK+BI,"OptPass6Lag ","FL:D:/TempleOS/Compiler/OptPass6.CPP.Z,34",219$000002C7A0 0001 0000000354 Funct
$LK+BI,"OptPass789A ","FL:D:/TempleOS/Compiler/OptPass789A.CPP.Z,1",220$000002CF40 0000 00000034D5 Funct
$LK+BI,"OptSetNOP1 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,48",221$0000024410 0096 0000000039 Funct
$LK+BI,"OptSetNOP2 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,56",222$0000024450 000D 000000003B Funct
$LK+BI,"OptStart ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,10",223$00000242E0 0005 000000006D Funct
$LK+BI,"OPassTraceMask ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,31",189$0000002F70 0000 0000000035 Funct Export
$LK+BI,"OTrace ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,26",190$0000002F58 0000 0000000017 Funct Export
$LK+BI,"OptBrNotZero ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,391",191$00000236DE 0004 000000064F Funct Export
$LK+BI,"OptBrZero ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,230",192$000002308E 0006 000000064F Funct Export
$LK+BI,"OptClassFwd ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,33",193$0000022BE6 0008 0000000027 Funct Export
$LK+BI,"OptEqu ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,1",194$0000002EB0 0007 000000002E Funct Export
$LK+BI,"OptFixSizeOf ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,551",195$0000023D2E 0003 00000000B1 Funct Export
$LK+BI,"OptFixupBinaryOp1 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,113",196$0000022D9E 0013 00000001CB Funct Export
$LK+BI,"OptFixupBinaryOp2 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,179",197$0000022F6E 0001 0000000052 Funct Export
$LK+BI,"OptFixupUnaryOp ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,195",198$0000022FC6 0003 00000000C4 Funct Export
$LK+BI,"OptIC4 ","FL:D:/TempleOS/Compiler/OptPass4.CPP.Z,1",199$0000028D16 0001 00000005CE Funct Export
$LK+BI,"OptIC6 ","FL:D:/TempleOS/Compiler/OptPass6.CPP.Z,1",200$000002AA56 0001 000000013B Funct Export
$LK+BI,"OptLabelFwd ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,25",201$0000022BBE 0006 0000000024 Funct Export
$LK+BI,"OptLag ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,57",202$0000022C8E 000E 000000002A Funct Export
$LK+BI,"OptLag1 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,68",203$0000022CBE 0004 0000000031 Funct Export
$LK+BI,"OptLag2 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,79",204$0000022CF6 0003 000000002A Funct Export
$LK+BI,"OptLead1 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,90",205$0000022D26 0004 0000000030 Funct Export
$LK+BI,"OptMVCompare ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,44",206$000002736E 0001 000000001A Funct Export
$LK,"OptMemberVar ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,39"$007FCE4800 0005 0000000020 Class
$LK+BI,"OptOff ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,11",207$0000002EF8 0000 0000000016 Funct Export
$LK+BI,"OptOn ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,6",208$0000002EE0 0000 0000000016 Funct Export
$LK+BI,"OptPass012 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,575",209$0000023DE6 0000 0000003470 Funct Export
$LK+BI,"OptPass3 ","FL:D:/TempleOS/Compiler/OptPass3.CPP.Z,49",210$000002738E 0000 0000001988 Funct Export
$LK+BI,"OptPass4 ","FL:D:/TempleOS/Compiler/OptPass4.CPP.Z,171",211$00000292E6 0000 0000001320 Funct Export
$LK+BI,"OptPass5 ","FL:D:/TempleOS/Compiler/OptPass5.CPP.Z,1",212$000002A606 0000 000000044A Funct Export
$LK+BI,"OptPass6 ","FL:D:/TempleOS/Compiler/OptPass6.CPP.Z,131",213$000002AEEE 0000 00000004C9 Funct Export
$LK+BI,"OptPass6Lag ","FL:D:/TempleOS/Compiler/OptPass6.CPP.Z,34",214$000002AB96 0001 0000000355 Funct Export
$LK+BI,"OptPass789 ","FL:D:/TempleOS/Compiler/OptPass789.CPP.Z,1",215$000002B3BE 0000 00000033C8 Funct Export
$LK+BI,"OptSetNOP1 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,41",216$0000022C0E 009E 000000003A Funct Export
$LK+BI,"OptSetNOP2 ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,49",217$0000022C4E 000D 000000003C Funct Export
$LK,"PE_CHECK_BINARY_OPS1 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,43"$5 0001 0000000008 DefineStr
$LK,"PE_CHECK_BINARY_OPS2 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,44"$6 0001 0000000008 DefineStr
$LK,"PE_DEREFERENCE ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,42"$4 0004 0000000008 DefineStr
@@ -263,47 +253,50 @@ $LK,"PE_PUSH_LOWER ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,48"$10
$LK,"PE_UNARY_MODIFIERS ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,41"$3 0009 0000000008 DefineStr
$LK,"PE_UNARY_TERM1 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,38"$0 0001 0000000008 DefineStr
$LK,"PE_UNARY_TERM2 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,39"$1 0005 0000000008 DefineStr
$LK+BI,"PTrace ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,21",224$00000031B8 0000 0000000017 Funct
$LK+BI,"ParenWarning ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1",225$000000E0BE 0004 0000000054 Funct
$LK+BI,"PrsArrayDims ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,347",226$000001309E 0001 0000000134 Funct
$LK+BI,"PrsAsmArg ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,443",227$000000B2C0 0002 0000000477 Funct
$LK+BI,"PrsAsmBlk ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,1292",228$000000D7EE 0001 00000008C9 Funct
$LK+BI,"PrsAsmImm ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,408",229$000000B178 0006 0000000145 Funct
$LK+BI,"PrsClass ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,829",230$0000014466 0004 0000000264 Funct
$LK+BI,"PrsClassNew ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1",231$00000124CE 0003 00000000B3 Funct
$LK+BI,"PrsDoWhile ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1334",232$000001581E 0001 0000000153 Funct
$LK+BI,"PrsDotDotDot ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,385",233$00000131D6 0001 0000000100 Funct
$LK+BI,"PrsExpression ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,340",234$000000F006 0010 0000000172 Funct
$LK+BI,"PrsExpression2 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,52",235$000000E20E 0001 0000000DF2 Funct
$LK+BI,"PrsFor ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1358",236$0000015976 0001 0000000190 Funct
$LK+BI,"PrsFun ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,966",237$00000148F6 0001 000000035F Funct
$LK+BI,"PrsFunCall ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,456",238$000000F4D6 0003 00000008B2 Funct
$LK+BI,"PrsFunJoin ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,895",239$00000146CE 0005 0000000221 Funct
$LK+BI,"PrsFunNew ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,45",240$0000012586 0001 00000000B3 Funct
$LK+BI,"PrsGlblInit ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,301",241$0000012EA6 0002 0000000084 Funct
$LK+BI,"PrsGlblVarLst ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1035",242$0000014C56 0008 0000000975 Funct
$LK+BI,"PrsIf ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1283",243$00000155CE 0001 0000000142 Funct
$LK+BI,"PrsKeyWord ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,88",244$0000012666 000B 000000003C Funct
$LK+BI,"PrsNoUnusedWarn ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1512",245$0000015FF6 0001 000000008F Funct
$LK+BI,"PrsOffsetOf ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,425",246$000000F386 0002 0000000149 Funct
$LK+BI,"PrsPop ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,13",247$000000E13E 0017 0000000022 Funct
$LK+BI,"PrsPop2 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,23",248$000000E19E 0001 000000002D Funct
$LK+BI,"PrsPopDeref ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,28",249$000000E1CE 0004 000000003F Funct
$LK+BI,"PrsPush ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,8",250$000000E116 0017 0000000028 Funct
$LK+BI,"PrsPush2 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,18",251$000000E166 0004 0000000033 Funct
$LK+BI,"PrsSizeOf ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,377",252$000000F17E 0001 0000000207 Funct
$LK+BI,"PrsStatement ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1629",253$00000164FE 0004 0000000F94 Funct
$LK+BI,"PrsStaticInit ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,310",254$0000012F2E 0002 000000016D Funct
$LK+BI,"PrsStreamBlk ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1528",255$0000016086 0001 00000001C2 Funct
$LK+BI,"PrsSwitch ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1402",256$0000015B06 0002 00000004EE Funct
$LK+BI,"PrsTryBlk ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1568",257$000001624E 0001 00000002AF Funct
$LK+BI,"PrsType ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,418",258$00000132D6 0002 000000039C Funct
$LK+BI,"PrsUnaryModifier ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1078",259$00000115C6 0000 0000000DDB Funct
$LK+BI,"PrsUnaryTerm ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,674",260$000000FD8E 0000 0000001831 Funct
$LK+BI,"PrsVarInit ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,99",261$00000126A6 0001 00000004F7 Funct
$LK+BI,"PrsVarInit2 ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,219",262$0000012B9E 0004 0000000302 Funct
$LK+BI,"PrsVarLst ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,514",263$0000013676 0006 0000000D49 Funct
$LK+BI,"PrsWhile ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1312",264$0000015716 0001 0000000103 Funct
$LK+BI,"PTrace ","FL:D:/TempleOS/Compiler/Directives.CPP.Z,21",218$0000002F40 0000 0000000017 Funct Export
$LK+BI,"ParenWarning ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1",219$000000D4FE 0004 0000000054 Funct Export
$LK+BI,"PrsAddOp ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,52",220$000000D64E 0002 000000029F Funct Export
$LK+BI,"PrsArrayDims ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,353",221$0000012016 0001 0000000135 Funct Export
$LK+BI,"PrsAsmArg ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,445",222$000000AA80 0002 0000000475 Funct Export
$LK+BI,"PrsAsmBlk ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,1282",223$000000CC2E 0001 00000008C9 Funct Export
$LK+BI,"PrsAsmDefine ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,1206",224$000000C95E 0004 00000002CA Funct Export
$LK+BI,"PrsAsmImm ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,410",225$000000A938 0006 0000000145 Funct Export
$LK+BI,"PrsAsmInstruction ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,798",226$000000B84E 0001 000000110A Funct Export
$LK+BI,"PrsClass ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,824",227$0000013296 0002 000000025E Funct Export
$LK+BI,"PrsClassNew ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1",228$00000113FE 0003 00000000B3 Funct Export
$LK+BI,"PrsDoWhile ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1328",229$0000014616 0001 0000000153 Funct Export
$LK+BI,"PrsDotDotDot ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,391",230$000001214E 0001 0000000100 Funct Export
$LK+BI,"PrsExpression ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,298",231$000000DFEE 0010 0000000172 Funct Export
$LK+BI,"PrsExpression2 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,102",232$000000D8EE 0001 0000000700 Funct Export
$LK+BI,"PrsFor ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1352",233$000001476E 0001 0000000182 Funct Export
$LK+BI,"PrsFun ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,963",234$000001371E 0001 0000000340 Funct Export
$LK+BI,"PrsFunCall ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,414",235$000000E4BE 0003 000000081E Funct Export
$LK+BI,"PrsFunJoin ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,890",236$00000134F6 0005 0000000226 Funct Export
$LK+BI,"PrsFunNew ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,45",237$00000114B6 0001 00000000B3 Funct Export
$LK+BI,"PrsGlblInit ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,312",238$0000011E4E 0002 0000000084 Funct Export
$LK+BI,"PrsGlblVarLst ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1029",239$0000013A5E 0007 0000000963 Funct Export
$LK+BI,"PrsIf ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1277",240$00000143C6 0001 0000000142 Funct Export
$LK+BI,"PrsKeyWord ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,88",241$0000011596 000A 000000003C Funct Export
$LK+BI,"PrsNoUnusedWarn ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1505",242$0000014DE6 0001 000000008F Funct Export
$LK+BI,"PrsOffsetOf ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,383",243$000000E36E 0002 0000000149 Funct Export
$LK+BI,"PrsPop ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,13",244$000000D57E 0017 0000000022 Funct Export
$LK+BI,"PrsPop2 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,23",245$000000D5DE 0001 000000002D Funct Export
$LK+BI,"PrsPopDeref ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,28",246$000000D60E 0004 000000003B Funct Export
$LK+BI,"PrsPush ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,8",247$000000D556 0017 0000000028 Funct Export
$LK+BI,"PrsPush2 ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,18",248$000000D5A6 0004 0000000033 Funct Export
$LK+BI,"PrsSizeOf ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,335",249$000000E166 0001 0000000207 Funct Export
$LK+BI,"PrsStatement ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1621",250$00000152DE 0004 0000000F23 Funct Export
$LK+BI,"PrsStaticInit ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,321",251$0000011ED6 0002 000000013F Funct Export
$LK+BI,"PrsStreamBlk ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1521",252$0000014E76 0001 00000001B7 Funct Export
$LK+BI,"PrsSwitch ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1395",253$00000148F6 0002 00000004EE Funct Export
$LK+BI,"PrsTryBlk ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1560",254$000001502E 0001 00000002AF Funct Export
$LK+BI,"PrsType ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,424",255$000001224E 0002 000000034B Funct Export
$LK+BI,"PrsUnaryModifier ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,1029",256$00000104FE 0000 0000000DDB Funct Export
$LK+BI,"PrsUnaryTerm ","FL:D:/TempleOS/Compiler/ExpParser.CPP.Z,625",257$000000ECDE 0000 000000181F Funct Export
$LK+BI,"PrsVarInit ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,112",258$0000011676 0001 00000004D4 Funct Export
$LK+BI,"PrsVarInit2 ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,230",259$0000011B4E 0004 00000002FA Funct Export
$LK+BI,"PrsVarLst ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,513",260$000001259E 0006 0000000CF6 Funct Export
$LK+BI,"PrsWhile ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,1306",261$000001450E 0001 0000000103 Funct Export
$LK,"SLASH_OP_DEC ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,475"$0x052B0000 0006 0000000018 DefineStr
$LK,"SLASH_OP_DIV ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,480"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_FADD ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,484"$0x0000C1DE 0002 0000000018 DefineStr
@@ -324,207 +317,193 @@ $LK,"SLASH_OP_NEG ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,477"$0x0
$LK,"SLASH_OP_NOT ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,476"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_POP ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,483"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_PUSH ","FL:D:/TempleOS/Compiler/BackEnd.CPP.Z,482"$0x00000000 0001 0000000018 DefineStr
$LK+BI,"SetSrcFileInfo ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,105",265$0000003810 0008 0000000079 Funct
$LK+BI,"StrStrBits ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,220",266$0000000F08 0002 0000000073 Funct
$LK+BI,"StreamExePrintF ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,697",267$0000035C18 0000 000000003F Funct
$LK+BI,"StreamExePutS ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,680",268$0000035B68 0001 00000000AD Funct
$LK+BI,"StreamPrintF ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,14",269$00000340C8 0000 0000000034 Funct
$LK+BI,"StreamPutS ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,1",270$0000034068 0001 0000000060 Funct
$LK+BI,"U ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,819",271$0000002FE0 0000 000000009B Funct
$LK+BI,"Ui ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,233",272$0000000F80 0002 000000205F Funct
$LK+BI,"Un ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,835",273$0000003080 0009 00000000A6 Funct
$LK+BI,"UnasmHashLoad ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,181",274$0000000E00 0001 0000000107 Funct
$LK+BI,"UndefinedExtern ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,816",275$00000143C6 0001 0000000050 Funct
$LK+BI,"UnusedExternWarning ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,823",276$0000014416 0004 000000004E Funct
$LK,"_OPTNEXT ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,10"$0000000088 0001 ExportSysSym
$LK,"_OPTNEXT2 ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,58"$00000000FA 0001 ExportSysSym
$LK,"_OPTNEXT3 ","FL:D:/TempleOS/Compiler/CmpAsm.CPP.Z,107"$000000016C 0001 ExportSysSym
$LK,"asm_hash ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,2"$00000006F8 0009 0000000008 GlbVar
$LK,"asm_seg_prefixes ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,805"$000000C1A8 0001 0000000006 GlbVar
$LK,"assign_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,8"$00000007A8 0003 0000000008 GlbVar
$LK,"binary_ops_table ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,6"$0000000780 0002 0000000008 GlbVar
$LK,"cmp_arg_cnt ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,7"$0000000790 0009 0000000008 GlbVar
$LK,"cmp_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,8"$00000007B8 0004 0000000008 GlbVar
$LK,"cmp_do_not_write_to_dsk ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,3"$0000000701 0003 0000000001 GlbVar
$LK,"cmp_result_cnt ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,8"$0000000798 0005 0000000008 GlbVar
$LK,"cmp_templates ","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,51"$00000001F6 0002 0000000004 GlbVar
$LK,"cmp_templates_dont_pop ","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,52"$000000038B 0002 0000000004 GlbVar
$LK,"cmp_templates_dont_push ","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,53"$0000000457 0002 0000000004 GlbVar
$LK,"cmp_templates_dont_push2 ","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,55"$000000062D 0002 0000000004 GlbVar
$LK,"cmp_templates_dont_push_pop","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,54"$000000059D 0002 0000000004 GlbVar
$LK,"compiled_bytes ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,15"$0000000828 0002 0000000008 GlbVar
$LK,"compiled_funs ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,14"$0000000820 0002 0000000008 GlbVar
$LK,"compiled_lines ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,14"$0000000818 0003 0000000008 GlbVar
$LK,"deref_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,8"$00000007A0 0004 0000000008 GlbVar
$LK,"doc_stop_btypes ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,398"$0000005138 0001 0000000008 GlbVar
$LK,"dual_U16_tokens1 ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,5"$0000000768 0002 0000000008 GlbVar
$LK,"dual_U16_tokens2 ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,5"$0000000770 0002 0000000008 GlbVar
$LK,"dual_U16_tokens3 ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,6"$0000000778 0002 0000000008 GlbVar
$LK,"fpop_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,9"$00000007C0 0013 0000000008 GlbVar
$LK,"internal_types_table ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,8"$0000030418 0001 00000000A0 GlbVar
$LK,"is_first_compiler ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,2"$0000000700 0004 0000000001 GlbVar
$LK,"lex_zeros ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,138"$00000039A8 000B 0000000004 GlbVar
$LK,"non_ptr_vars_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,11"$00000007F0 0006 0000000008 GlbVar
$LK,"not_constant_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,8"$00000007B0 0003 0000000008 GlbVar
$LK,"num_non_ptr_vars ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,10"$00000007D8 0005 0000000008 GlbVar
$LK,"num_reg_vars ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,9"$00000007D0 0006 0000000008 GlbVar
$LK,"num_stk_temps ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,9"$00000007C8 0004 0000000008 GlbVar
$LK,"opt_nop ","FL:D:/TempleOS/Compiler/OptPass012.CPP.Z,9"$0000024258 0007 0000000088 GlbVar
$LK,"reg_vars_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,10"$00000007E8 0002 0000000008 GlbVar
$LK,"stk_temps_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,10"$00000007E0 0003 0000000008 GlbVar
$LK,"sys_internal_types ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,4"$0000000708 00B0 0000000060 GlbVar
$LK,"to_non_ptr_vars_map ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,14"$0000000810 0004 0000000008 GlbVar
$LK,"to_reg_vars_map ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,13"$0000000808 0004 0000000008 GlbVar
$LK,"to_stk_temps_map_even ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,13"$0000000800 0007 0000000008 GlbVar
$LK,"to_stk_temps_map_odd ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,12"$00000007F8 0007 0000000008 GlbVar
$LK,"uasm_ins64_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,19"$0000000840 000D 0000000008 GlbVar
$LK,"uasm_mem_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,20"$0000000850 0003 0000000008 GlbVar
$LK,"uasm_signed_arg_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,19"$0000000848 0003 0000000008 GlbVar
$LK,"unary_ops_table ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,7"$0000000788 0002 0000000008 GlbVar
$LK,"unasm_table ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,18"$0000000830 0006 0000000008 GlbVar
$LK,"unasm_table_entries ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,19"$0000000838 0003 0000000008 GlbVar
à 'À®Á®ÁÄÁËÁÓÁŞÁŞÁöÁÂÂÂ"Â=ÂSÂiÂm“§®±ÂÊÂÔÂÔÂæÂèÂúÂúÂÃÃÃÃ#Ã*Ã1ÃKÃVÃcÃgÃgÃqÉÃ�Ã�ßóÃÇÃÇÃÎÃÙÃäÃíÃøÃÄ ÄÄ"Ä"Ä-ÄKÄOÄOÄXććÄ�ęĨİľÄÅÄÉÄËÄËÄİÄİÄİÄïÄ÷ÄÅÅ+Å+Å/ÅHÅMÅ]ÅhÅhÅ�ņŔŠŨŶÅÁÅÅÅÊÅÏÅÓÅÓÅâÅçÅöÅøÅÆ ÆÆ#Æ)Æ=ÆEÆSÆZÆ^ÆnÆyÆ~ƜƤƲƹƽÆÅÆÓÆÚÆŞÆÇ ÇÇÇÇÇ%Ç0Ç@ÇjÇoÇzÇ�Ç’Ç�ǢǧDzǾÇÂÇÊÇÏÇáÇæÇñÇñÇñÇñÇÿÇÈ7ÈGÈOÈ_ÈoÈ™È�ÈÔȺÈéÈéÈôÈÉÉ)É1ÉCÉNÉRÉWÉfÉnɀɋÉ�É�ɔɔɪɪÉÀÉÀÉÀÉÊÉŞÉüÉÊ(Ê`Ê`ÊnÊrʠʧʮʽʽÊÔÊÙÊäÊôÊüÊËËË"Ë2Ë:ËLËWË[Ë[Ë[Ë[ËqË|ˈË�ˢ˭˱˱˶˻˿˿ËÒË×ËêËïËÌÌÌ%Ì+Ì?ÌGÌYÌdÌhÌx̦̮̃̈ÌÀÌËÌÏÌ×ÌéÌôÌøÌ Í%Í0Í6Í6Í6Í?Í`ÍqÍ�͌͌ͥͪ͵ÍÅÍóÍøÍÎÎÎ&Î+Î0Î;ÎKÎOÎWÎ\ÎnÎsÎ~Î~Î~Î~ΚΪΪÎÃÎÓÎ×ÎóÎÏÏÏ-Ï1ÏCÏdÏtϓϷÏÛÏàÏëÏóÏóÏĞ!Ğ2ĞQĞuĞ™Ğ�ЩбббĞËĞİĞïĞÑ6ÑEÑ~ххљѺÑÔÑÔÑØÑîÑõÑıÑ$Ò/ÒUÒ]Ò]ÒƒÒƒÒšÒÁÒÊÒãÒÓ#Ó_ÓmÓ‡Ó Ó°Ó°ÓÌÓÌÓèÓèÓøÓÔ(Ô8Ô8Ô8ÔHÔYÔqÔ�Ô�ԌԕÔ�Ô¬ÔÕȹϸ§¸§Â§Ä§Ï§×§â§í§ø§ú§ú§¨¨(¨*¨6¨?¨?¨B¨p¨P˜ « «´«¿«Ê«Ò«Û«ã«æ«í«ñ«ú« ¬¬¬¬$¬A¬O¬^¬c¬o¬q¬…¬x¬•¬ ¬¦¬¦¬´¬·¬É¬É¬Ø¬İ¬á¬ò¬ş¬ ­­­$­)­4­N­v­n­‹­–­Ê­·­ß­ß­ß­ñ­ü­®®4®K®R®i®€®—®®®®®®®·®À®Æ®Ê®Ï®Ú®ç®ş®¯¯&¯7¯7¯>¯Z¯f¯n¯~¯…¯�¯©¯µ¯º¯Å¯É¯Ø¯ã¯ì¯ó¯°"°8°O°f°m°q°v°ˆ°’°’°�°¬°»°×°Û°à°w± MŞ  * * = E S S o z € � � ¤ ¹ ¹ Ë Ñ Ñ è ú ú $*BU`Line truncated
P�¨È¥È¥Ú¥á¥è¥ö¥ı¥¦¦!¦#¦*¦0¦@¦K¦U¦`¦`¦w¦z¦|¦�¦•¦¥¦¯¦¹¦À¦Ë¦ß¦ç¦ç¦ı¦ı¦§ =Zx£x£�£”£›£¢£¨£¸£Ã£Í£Ø£Ø£ï£ò£ô£¤¤#¤*¤5¤G¤O¤O¤e¤e¤w¤  ¨¹§§3§:§E§O§Z§b§q§{§~§’§–§ª§ª§¸§␍`œ%˜»˜»¹»À»À»Ù»å»ğ»ğ»ù»&¼(¼1¼^¼`¼{¼‰¼‰¼’¼™¼¥¼¯¼¶¼½¼Â¼Ä¼Ë¼×¼á¼è¼ï¼ô¼ô¼½½½½G½I½R½½¢½°½¹½À½Ì½Ö½İ½ä½é½ë½ò½ş½¾¾¾¾¾(¾6¾Y¾€¾�¾•¾ ¾ ¾©¾Ö¾Ø¾á¾¿¿¿*¿4¿;¿B¿G¿I¿P¿\¿f¿m¿t¿y¿y¿„¿§¿Î¿Ü¿ã¿î¿î¿÷¿$À&À/À\ÀeÀpÀ|À†À�À”À™À›À¢À®À¸À¿ÀÆÀËÀËÀÕÀğÀ ÁÁÁÁ Á)Á¦ÁøP¡P¡€¡Œ¡”¡œ¡ ¡¤¡¨¡¬¡°¡´¡¼¡Á¡Ë¡Ò¡ß¡ò¡ù¡¢¢¢¢¢¢¢/¢ÀH]`•`•r•x•x•�•ЕЕ±•¸•Á•ʕԕâ•í•ó•ı•ø]y––––$–)–,–/–;–P–W–^–e–h–s–v–„–‡–�–�–­–³–º–º–Ê–hyãĞ–Ğ–ò–ş–———%—+—+—6—@—J—W—a—g—g—r—|—†—“—�—£—£—®—¾—È—Õ—ß—å—å—ğ—˜
˜˜!˜'˜'˜2˜8˜B˜O˜Y˜_˜_˜j˜r˜|˜‰˜“˜™˜™˜™˜£˜°˜º˜Å˜Ù˜ã˜ğ˜ú˜™™#™0™:™E™\™\™q™…™…™�™œ™¦™±™È™Ò™Ş™ä™ñ™ù™šš)š;šIšIšWšWšz›ÈÈ’È’Ô’Û’à’é’ñ’ÿ’““5“B“B“E“S“c“z“~“†“�ÉØ@‘@‘N‘R‘Y‘_‘f‘i‘p‘{‘‘‚‘Œ‘€ê÷(’(’8’?’D’M’X’b’b’e’i’q’ ‡¨X�X�x��†���—�›�Ÿ�¬�´�¹�¹�Ê�Î�Õ�Õ�å�ì�õ�� �� �&�4�;�B�R�Xµ½È�È�Ò�Ö�Ú�â�ò�ø�X?ˆ“ˆ“–“�“Ÿ“¨“«“¼“¼“ÓǓϓؓñ“ÿ“””
” ” ”””” ”"”"”+”+”4”:”=”G”]”c”q”q”•h÷x’x’ˆ’”’�’¥’³’·’º’Â’€¨µX�X�d�n�}�„�Œ�”�œ�¤�´�¼�Ä�`áêà‘à‘ê‘ñ‘’’’ ’%’`?H••"•)•9•=•Q•T•Z•`Øá�‘�‘𑦑¶‘½‘ΑՑۑx½Éø�ø�‘‘‘ ‘ ‘,‘3‘5‘;‘à8ˆ8ˆBˆLˆWˆnˆnˆsˆuˆ�ˆ‹ˆœˆœˆ®ˆ°ˆÀˆÀˆÅˆÇˆÎˆıˆ G‡ø‹ø‹ŒŒ1Œ ŒŒAŒNŒXŒbŒbŒyŒ€Œ€Œ—Œ�Œ§Œ§Œ¸Œ¸ŒÉŒÉŒÚŒÚŒëŒëŒüŒüŒ␍�␍���/�/�@�@�Q�Q�b�b�s�s�„�„�•�•�¦�¦�·�·�É�Ñ�ß�ğ�ş����%�,�,�V� €G‰‰ ‰ ‰0‰‰‰Q‰a‰S‰‚‰œ‰œ‰¦‰«‰«‰¿‰Ä‰Ä‰à‰å‰å‰Š
Š
ŠŠ#Š#Š#Š@Š@ŠRŠvŠœŠ³Š¿ŠËŠ×ŠáŠáŠáŠó‹!@&+ 2*22272"t¸O¸OÊOâOòO␍P␍P P7P7PRPsP|P€P„PŠP”PšPªP°PºPÀPÈPÌPÑPÑPİPàPëPñPûPQQ
QQQ&Q-Q4Q6Q:QCQMQUQ`QlQpQ�Q�Q–Q Q©QÂQÓQÜQåQíQøQRR R1R=RKRMRTR[R`RdRqRxR‡R•RŸR©R²RËRÜRåRîRöRÿRS SSS S&S4S>SHSQSjS{S„S�S•S�S¤S¨S­S³S½SÇSÇSâSğSöSıSTTT1T%T@TOTXTXTsT‡T‡T¦T­TµT¼TÅTÎT×TàTUUSU#°³Æ€H€H¥H§H§H»HÉHÏHíHIII,I,I7I:IwI$¸Ñå¦#¦#¸#Ì#Ò#Ø#æ#÷#$$!$5$9$?$M$P$Z$%H0�0�>�V�^�^�d�&p&h�h�|���—�¯�·�Ñ�Ø�à�à�è�' :Û(:(:4:4:D:T:d:t:„:—:ª:·:Æ:Û:ñ:ñ:; ; ;!;7;7;M;k;p;|;ˆ;”; ;¬;¸;Ä;Ğ;ß;î;ı; <<*<9<9<I<T<_<g<q<‰<�<�<©<´<¼<Æ<Ş<ã<ó<===!=+=C=O=W=a=q=v=…=Œ=—=¢=­=¸=Ã=Î=Ù=ä=ï=ú=>>>>*>1><>G>R>]>h>s>~>‰>‰>˜>Ÿ>ª>µ>µ>Ä>Ë>Õ>ß>é>ó>ı>ı> ???'?1?;?E?O?Y?c?m?w?�?‹?•?Ÿ?©?³?½?Ç?Ñ?Û?å?ï?ù?@␍@@!@+@5@?@h@((2tXMXMpM{M{MMˆM�M™M¦M¦M¼MÁMÁM×MÜMÜMóMõMõM NNN"N$N$N8N:N:NPNRNRNhNhNoNsNwN|N€N�N�N�N�N­NÁNÈNÈNâNäNÿNOOO5O9OUOXOdO´O)xÆ2xIxI’I•I•I™I¢I©I¶I¶IÌIÑIÑIçIìIìIJJJJJJ2J4J4JHJJJJJ`JbJbJxJxJJƒJŒJ™J J©J°J´JÃJÏJÓJÖJŞJŞJñJşJKKK+K>KIK]KƒKšKŸK¦K®K²K²KÄK×KáKåKåK÷K
L L LL#L#L#L=L?LZL\LtLvL�L�L�L™LŸL£L¯LĞLŞLäLTM*ÀÂ×X\X\\\r\y\‘\š\¥\°\»\Â\Ç\Ì\ã\ñ\ú\ ]]]+Ğ<³HBHBLB[B_BlB~B‹B£BµB×B÷BC!C3CKCbC{C—C©CÃCËCíCDD,D;D;DKD^DoD~D�D›D¦DµDÕDÕDŞDŞDŞDïDüDE#E0ESEqEzE‡E‹E“E�E¶EÎE×EçEïEôEF-F=FMFXFhFmFuF•F—F¢FÏFãFãFûF
GG!G*G2G2GDGbGjGrG}GG�G§G¿G×GïGHH'H0H9HKHYH]H~H,ø
Ş:hhl}�Ÿ°ÁÒãô'8IZk|��¯ÀÑâó&7HYj{Œ�®¿Ğáò,%=6NG_Xpiz‹œ´­¾Ïàñ$5FWhyŠ›¬½Îßğ#4EVgx‰š«¼ÍŞï"3DUfwˆ™ª»Ìİîÿ!2CTev‡˜©ºËÜôíş$:-°án|n|’|•|Ê|Ò|Ò|í|ó|ø|ø|}}}}'}5}5}A}H}N}S}–} }§}­}¯}¯}Å}Ë}Ë}Ë}Ğ}ì}û}~~~~~#~*~?~F~F~_~_~�~.€`m@E@EPEXEeEoEzE‚E/p
ø�ø������$�&�+�08%€3€3�3´3È34t4w4�4”4›4¢4¶4½4Ç4Ğ4è4÷455 5"5'5>5J5V5Z5h5o5r5ª51x �~�~¨~²~¶~º~¿~Á~à~ÿ~ÿ~ 28<AAA"A.A6A6AFALAZAaAxA…A“A¡A¯AÈAĞAÚAéAñAşAB B B BBB%B%B5B8BHB3`
Ğ�Ğ�Ù�Ş�ç�î�ğ�õ�4xÀ ÕÕ.Õ5Õ9ÕQÕYÕaÕkÕoÕvÕ|Õ�Õ˜Õ�Õ Õ«Õ¶Õ¾ÕÉÕÔÕÖÕÖÕğÕ÷ÕşÕ ÖÖÖÖ(Ö3Ö5ÖAÖJÖJÖdÖ…Ö‹Ö‘Ö¤ÖªÖ³Ö³ÖÇÖÍÖÍÖÕÖİÖèÖíÖÿÖ ×× ×!×%×4×4×4×E×E×J×^×f×f×è×5804P2Z2b2g26pALHWHW]WlW€W�W•W›W�W¿W7pu€hYhY}YŒY Y­Y³Y¹Y¼YİY8p�¨ğZğZ[[([5[;[A[D[e[9`8AWWW%W4W:W=WEW:`lu Y Y2YEYRYXY[YcY;h“�¨Z¨ZºZÍZÚZàZãZëZ<H8XUXU\U`U`UuUˆUˆU›U¸UÙUâUóUV1V1VSVbVkVxVV�VœVµVÂVÆVÎVÎVÎVáVáVñVõVùV=LlÀWÀWÄWÈWÈWİWğWğWXXQXsX‚X‹X˜XŸX¯X¼XÕXâXæXîXîXîXYYYYY>°€“àYàYùYùY ZZZ Z7ZTZrZxZ�Z�Z•Z˜Z¤Z?pêõ�$�$š$¦$«$´$º$¾$É$@@ty„P„P�P“P˜PA@åê^$^$l$�$‡$B@ˆ1‘1¯1´1CP(€›€›Š›•›¤›«›³›»›Ã›Ë›Ö›à›è›ó›ı›œœœ"œ'œ0œ0œ@œOœTœ[œ`œhœjœyœ~œ~œ¾œ¾œÀœÖœÙœßœDGfÈ�È�Ô�ì�ì�ú�ú�ú�ú���
�1�9�9�D�D�R�b�b�p�v�v�����”�,ŸE@f‹0Ÿ0Ÿ<ŸEŸEŸXŸeŸqŸ}Ÿ‰Ÿ•Ÿ•Ÿ¬Ÿ¬Ÿ¼ŸÈŸÑŸØŸáŸ    . : : P P y y { � � ª ¶ ¹ Ù F(Gàœàœöœ�␍��$�1�1�?�?�V�_�p�r�u�w�Š���Ÿ�ª�ª�ª�­�µ�º�È�G ‹œà à î ñ ñ ú ¡¡¡ ¡"¡'¡5¡>¡K¡Hè±Kö™ö™(š3š;šDšUšbšwšzš}š�šŠšŠš˜š¢š§š¶šßšäšõš!›&›7›W›\›k›—›Ÿ›¤›¹›å›í›ò›ò› œœ,œ0œOœ`œeœeœ~œ~œ~œ~œ~œ�œ£œ¦œ©œ­œ­œ²œÁœêœïœøœ ��0�B�O�Z�o�o�o�|�“�•�•�•�¢�¹�»�»�È�ß�ß�ğ�õ�ş��'�'�9�N�N�N�[�r�t�t�t���˜�š�š�§�¾�¾�Ï�×�Ü�è�ŸŸŸ&Ÿ;Ÿ;Ÿ;ŸHŸ_ŸaŸaŸnŸ…Ÿ…Ÿ…Ÿ�Ÿ£ŸªŸÌŸêŸïŸöŸ     2 : < < ^ @¡IØy±——,—/—2—8—=—T—k—‚—”—º—á—ä—ı—˜˜&˜3˜F˜Y˜^˜f˜p˜x˜x˜˜ˆ˜ˆ˜ˆ˜“˜»˜Õ˜Û˜ô˜␍™™)™/™H™a™i™i™t™t™~™~™�™Ιã™õ™J£áæyæyÿy!z*zgzsz�zŸz´z»zùz{ {-{A{E{E{I{N{T{]{`{j{w{”{—{—{—{œ{¢{¢{½{Ë{Ö{Ş{ò{ù{|||(|3|;|L|L|[|`|`|l|Kh—
! &ë&ëTë_ë’ëlë˜ë˜ëÆëËëËëÏëÙëåëìììì ì9ìTìTìfìsì‹ìŸì¤ì«ìĞì×ìàìâìèìûìíí+í8íPífí‚í†í†í‘í˜íªí­í¯íµíÑíéíëíîîîî î<î<î<îNîNî\îfî‡î£î£î¨î¬îÈîÔîÔîïî ïïï.ïAïXï[ï[ïmï�ï‹ï¢ï¦ï¼ïÏïæïéïéïûïğğ#ğ,ğCğMğOğcğmğ„ğˆğˆğˆğ“ğšğ­ğÅğÇğßğòğ ñññ!ñ)ñJñañañañ‡ñ‡ñ™ñL¤ Á ¶÷¶÷Æ÷Í÷Ù÷é÷øøø4ø6øUøaøqø�ø–ø�ø�ø¥ø­ø¸øÀøËøÖøõøıøMï�ÆÆàòøÿ 59??Wk||„¨ÈÈéî +0=@wˆ�“•›�¯´·¿Èã-26Xkp‡šŸ£Åà   ) . 1 3 9 ? P U [ c c m v �   ¥ © Ë æ    9 Y p ƒ ˆ Œ ® Á Á × × × å ı ÿ ÿ ÿ ␍!%!'!'!5!M!M!_!_!h!u!‹!¯!¿!Æ!Ñ!ç!ë!ë!ë!ö!ü!""("@"E"K"e"l"w"…"�"�"Ò"NĞ„›�:�:°:¼:Ò:ß:é:ø:;;;:;.;K;M;M;~;l;M;�;§;O �¾Ö"Ö"æ"#ñ"+#8#D#J#„#‰#µ#µ#º#Ğ#â#â#ÿ#$L$L$[$“$$®$®$»$ç$ì$%%5%!%P%i%U%‰%u%�%�%ª%Ö%Ö%Ö%Ö%Ş%Ph­␍×␍��°»ÆÒİß55Bm˜’†°Òê×ıö 00=h�{o�   ªQXz â ��Ààèó %:?Yx~ƒ–Ïåëóöû;QW_bm‚‡¤ÃÉÑÑÖÜßêõ
)HNS^s|� ¨­¸ÍÖØ÷ÿ
 $>]chhhhu||‘‘©´ÇÔğ !5FOZZ‡‡‡™R0¾aŞ%Ş%ø%&&&c&Š&¨&Ò&Ø&Ş&æ&è&ğ& '''%'j'‘'¯'Ù'ß'å'è'í'õ'(((&(+(p(—(µ(ß(å(ë(î(ğ(ø())!)))v)�)»)å)ë)ñ)ù)ş)*!*$*/*;*;*@*F*L*T*W*b*t*ƒ*µ*ß*å*ê*ü* +E+o+u+}+‚+”+£+İ+,␍,,$,3,m,—,�,¢,¢,¢,­,­,Â,Â,Í,û, --&-=-B-p-€-†-™-¦-Ô-è-ÿ-␍..&.=.=.F.R.h.‰.•.•.¢.¼.À.À.À.Ë.Ğ.ã.ã.ğ./ //$/$/5/B/L/L/^/SĞy�‹‹"‹"‹5‹5‹O‹V‹b‹b‹y‹y‹�‹�‹§‹§‹¾‹¾‹Õ‹׋׋Û‹TØ z ¶û¶ûÔûŞûü ü6üZü_ücükükütüƒüŠü“ü˜ü­ü¾üİüåüçüııı$ı0ı5ı<ıDıJıLıXıhımıoı�ı•ı•ı�ı�ı¦ıµıÔıÛıİıüışşşş-ş1ş?şRşJşjşoşzş�ş‰ş�ş‘ş�ş­ş²ş´şÔşÚşÚşæşöşûşÿ ÿ&ÿ+ÿ7ÿGÿLÿNÿnÿtÿ{ÿƒÿ‰ÿ‹ÿ—ÿ§ÿ¬ÿ®ÿÎÿÔÿÔÿÔÿÜÿÜÿåÿåÿïÿïÿ7MQ_rjŠŠœUP×␍�®®ÈĞŞŞâ#9AAEw‚—¬±¹¿ÃÇÖŞèñ4>@\fu}Š�𥧯ÌÕàèğ+388Bbjooyˆ¨°²ÒÚÚÚåî
$).6So‹ª­ÂÏãöú-I\{�ƒ¢¥¥ºÇÛîîùı)+JMXch‡�’�¨ªÉÌ×âä   OOZZZZco…¦²²ºÆÍãçççò÷

%<AFYYamt�‹‹¸¸ÊVÀ U69>>KPbdhlo‚›½ÆÑØñ€€1€S€X€_€x€š€œ€µ€×€×€×€å€î€ş€�(�?�?�Y�h�z�W¨gyN–N–^–k–k–z–z–†–Œ–¶–Ì–¸–ã–Ø–û–û–—Xp‚␍­␍® ®  Æ Ô Ô ã î ú ␍␍0␍6␍6␍X␍‡␍k␍_␍©␍®␍Õ␍Ú␍æ␍ñ␍ó␍""5NH<Zmm��›Y°;
N
VæVædækæŠæ©æ«æÊæéæøæç ç␍çç#çBçHçZÈN
„
NçNçcçnçuç¢çÁçÃçâçèè&è1è3è>èIèIèNè{è€è­è²è¹èØè÷èéé#éBéBé]élétéé�éŒé—é—é·éÔéÔéáéáéê&ê&ê&ê.ê[Hº à .ß.ßHßYßeß|߃ߜߔߴßÔßÀßàßñßößàà/à@àWà^àwàoà�à¯à›à»àÌàâàÎàúàáá á á)á\XKsƶƶà¶ò¶ù¶····3·3·8·W·\·c·c·r·t·“·“·²·Ç·´·Ó·Ó·â·ä·¸¸¸¸¸+¸$¸C¸M¸]¸ú FÌFÌ`ÌsÌzÌ�̈̌Ì�̨̜̠̠̕ÌÁÌËÌËÌßÌêÌøÌ Í␍ÍÍÍ.Í?ÍVÍZÍcÍgÍlÍ}Í�͚ͨ͠ͼÍÁÍÚÍëÍïÍïÍïÍôÍ"Î7Î>ÎTÎXÎ]ÎhÎyΊΡΩήζλÎÌÎŞÎæÎìÎÏÏÏ2Ï6Ï6Ï6ÏAÏRÏcÏzÏ~χϋÏ�ϡϳϾÏÄÏÌÏàÏåÏşÏĞĞĞ%Ğ%Ğ%Ğ*Ğ*Ğ9Ğ;ĞZĞZĞyЄЊРбжĞËĞÖĞçĞøĞÑÑÑ Ñ%Ñ6ÑHÑOÑUÑ]ÑqÑsÑŒÑ�ѡѡѨѾÑÂÑÂÑÔÑÙÑäÑùÑ
Ò!Ò)Ò.Ò6Ò;ÒLÒbÒjÒpÒ…ÒŠÒ£Ò¹Ò½Ò½ÒÏÒÏÒÏÒÏÒçÒÔÒóÒóÒÓÓ#Ó.Ó4ÓJÓ[Ó[Ó[ÓbÓbÓuÓ�Ó�Ó�Ó�Ó�Ó°ÓÇÓÒÓãÓèÓîÓøÓúÓÔÔÔÔ#Ô8Ô=ÔHÔ]ÔiÔkÔvÔ‚Ô’Ô�Ô¬Ô¾ÔÆÔÊÔÎÔĞÔÕÔİÔáÔóÔøÔıÔÕ Õ Õ ÕÕ!Õ7Õ_ÕoÕvՀՌՓթխխխոսÕ×ÕŞÕèÕôÕşÕÖÖ Ö9Ö@ÖJÖZÖdÖqÖ{Ö{Ö�Ö^˜™É>¥>¥d¥g¥n¥t¥z¥|¥‚¥ˆ¥ˆ¥š¥¥¥¬¥¹¥Æ¥Ù¥è¥ü¥¦¦ ¦¦¦¦,¦.¦5¦;¦E¦E¦E¦\¦n¦u¦u¦„¦†¦˜¦§¦§¦¹¦_ğÉ侦¾¦ä¦ç¦î¦ô¦ú¦ü¦§§§§)§<§I§X§^§`§f§p§§‘§ §¾§Ч`Ø¢ º îİîİŞŞ*ŞHŞYŞ`ŞyŞqޑޱŞ�޽ŞÎŞĞŞñŞİŞ ß ß!ß!ß+ßa5¶©¶©Ê©Ü©ã©ã©ê© ªª-ª2ªLª9ªkªXªwªŒªyª«ª˜ª·ª·ªɪɪЪïªïª÷ªb0sN¸N¸b¸t¸¸§¸†¸³¸³¸Õ¸¹á¸¹¹,¹,¹K¹`¹M¹�¹l¹™¹™¹·¹·¹ɹɹç¹ç¹ºº!ºZº_ºfº”º…º º ººÒº»ñº »»+»+»M»e»R»q»Ÿ»�»«»«»É»É»Û»Û»ù»¼¼!¼@¼@¼@¼H¼cXz ¢ ¶Û¶ÛĞÛáÛíÛÜ!Ü(ÜAÜ9ÜYÜyÜe܅ܖܛܼܨÜÔÜåÜûÜİ İ9İ1İQİqİ]İ}İ�İ�ݱİ�İÉİÉİáİáİëİdP„Kî­î­®#®+®2®9®?®A®H®O®R®R®R®d®d®w®‚®�®�®¯®Æ®ή׮߮ä®õ® ¯¯¯-¯2¯L¯d¯h¯h¯m¯™¯®¯¹¯ʯÛ¯ò¯ú¯° °°!°3°;°C°U°W°q°‰°�°�°˜°©°º°ѰÙ°â°ê°ï°±±±&±8±=±W±o±s±s±†±†±†±�±‹±¾±«±˱×±ݱõ±␍²²'²2²C²T²k²s²|²„²‰²š²¬²´²¼²βвê²³³³³"³3³J³R³[³c³h³y³�³—³Ÿ³±³¶³гè³ì³ì³ÿ³ÿ³ÿ³´´7´$´D´P´V´n´†´†´†´’´˜´£´®´È´Ø´ï´µµ4µ4µHµdµdµdµ|µ|µеŒµŒµšµšµ£µ®µ¼µ×µæµíµíµ#¶.¶K¶\¶w¶w¶Á¶e8
úN¼N¼h¼o¼v¼�¼‰¼¢¼¢¼¶¼¶¼̼̼׼ۼ漽ñ¼½4½B½X½\½a½a½w½ˆ½Ÿ½¶½»½ýǽ̽ó½ ¾␍¾␍¾¾^¾=¾j¾j¾‹¾‹¾ª¾µ¾»¾Ѿâ¾ç¾ç¾ı¾¿%¿<¿A¿I¿M¿O¿v¿Œ¿�¿›¿¬¿½¿Ô¿Ü¿á¿å¿ê¿û¿ÀÀ À3À8ÀQÀbÀfÀfÀxÀxÀxÀxÀ}À°À�ÀİÀ¼ÀéÀéÀ
ÁÁÁ1ÁBÁGÁRÁcÁtÁ‹Á“Á˜ÁœÁ¡Á²ÁÄÁÌÁÒÁæÁèÁÂÂÂÂÂ0ÂAÂXÂoÂtÂ|€‚©¿ÂÃÂÃÂĞÂĞÂĞÂĞÂçÂíÂ÷ººÂÃ(Ã(Ã;Ã;ÃIÃKÃKÃYÃYÃoÃÑèèûÃÀÃÀÃÜÃçÃÄÄ"Ä0ÄNÄFÄsĜĜĜĩÄâÄçÄçÄöÄüÄÅ&ÅEÅ5ÅQÅgÅuÅ�ţŧŷÅÖÅÆöÅÆÆ3Æ3ÆRÆ]ÆcÆyÆŠÆ�ƥƻƿÆÊÆ߯ôÆ ÇÇÇÇ!Ç6ÇLÇTÇZÇnÇsÇŒÇ�ǡǡdzdzdzdzǸÇëÇØÇ÷Ç&ÈÈ2È2ÈSÈ^ÈdÈzÈ‹È�țȰÈÅÈäÈìÈñÈõÈúÈÉ%É-É3ÉGÉLÉeÉvÉzÉzəɯÉÅÉÉÉÉÉÖÉÖÉÖÉñÉ÷ÉÊ Ê Ê#Ê=Ê=Ê=ÊTÊTÊbÊgÊgÊuÊuʋʛʵÊĞÊĞÊãÊèÊèÊËË3ËCËQËQËv˒˒˟˿˿˿ËAÌfø$ @ �×�׸×à×Ã×ì×ì×ù× Ø%ØØ=ØUØBØhØaØtØtØ�Ø”Ø­Ø¦Ø¹Ø¹ØÆØåØåØïØg�5„şªşª«6«Q«=«q«]«}«“««³«Ÿ«¿«Ë«Ğ«Ü«ì«ó«¬ ¬¬"¬*¬/¬;¬@¬T¬[¬_¬j¬o¬z¬“¬œ¬¨¬­¬Á¬Ȭ̬̬ѬѬç¬ì¬­­)­.­9­A­A­A­C­\­q­|­†­‘­“­�­¦­¦­³­«­Ë­ë­hÈ $ �Ö�Ö¨ÖÌÖ¯ÖØÖñÖêÖ ×× ×1×*×=×V×O×b×b×o×�×�ט×iĞà ÷ .á.áHáTáká|áƒáœá”á´áÔáÀáàáñáâóá â,â,âDâDâNâj˜% 5 ..HZZa€€’¦´­ÌÌÖk°äÖ§Ö§ô§û§¨¨¨¨.¨9¨D¨U¨f¨}¨�¨†¨ЍŒ¨�¨¯¨µ¨»¨ͨϨè¨÷¨û¨û¨û¨©#©#©/©5©?©J©X©_©_©n©p©†© © ©²©lø‡£FyFy\yfyfyvyy‚yˆyˆy’yªyªyºyÃyÆyÌyÌyÓyÚyÜyÜyÜyæym(Eg~”~”¬”ƔƔٔݔü”•••"•*•2•G•S•d•i•z•�•“•••®•ƕȕȕá•ù•ù•K–np%0nAnAwA‚A�A˜A£A­AËAÖAæAoXÑV3V3n3t33”3™3Ÿ3¢3¦3¦3Æ3Ë34í3 4&4424K474W4b4g4q4t4x4}4–4‚4¢4¢4¢4§4¼4Á4Ç4Ê4Î4Î4î4ó4)5555N5:5Z5p5Line truncated
—
.ê.ê<êCêbê�êƒê¢êÁêĞêØêãêåêğêûêë ëqh J^6^6r6}6¤6¼6Á6Æ6Ê6Ì6Ò6Ø6î6Û6ú6ú67177=7d7|7�7†7Š7Œ7’7˜7®7›7º7º7Í7Õ7ç78ú7␍88rğ`»~�~�’�š�§�Ç�Ö�İ�ç�í�ó�÷�û�‚‚‚‚#‚2‚6‚6‚L‚g‚k‚p‚p‚w‚z‚‚‹‚™‚�‚®‚½‚Á‚ÂÒ‚Ö‚Ö‚ì‚ü‚ƒƒƒƒƒ(ƒ2ƒ=ƒcƒnƒrƒwƒ­ƒăσÓƒäƒïƒóƒõƒ„„„„„"„&„(„(„3„7„7„I„U„Y„Y„Y„]„¤„s¸»ï¦„¦„º„DŽDŽDŽɄɄЄ҄҄لۄۄè„ê„ê„÷„ş„……␍………….…3…3…{…tÀ�EދދŒŒ-ŒFŒFŒWŒWŒdŒ‚ŒŠŒŠŒ·Œ¼ŒåŒ��#�'�J�p�u�u���¸�Ş�õ�û�ÿ�� �%�6�>�\�b�f��‡�¦�«�¼�Ä�ã�è�ğ�ö�ú�ş���$�8�=�O�T�e�j�ƒ���¤�¯�¸�Õ��$�)�)�)�9�@�N�[�t�t�‹�����§�©�©�½�¿�¿�Ö�Ø�Ø�ï�ñ�ñ�‘‘‘‘‘.‘S‘e‘j‘j‘j‘j‘q‘¥‘¶‘ˑˑˑؑï‘ñ‘ñ‘ñ‘ş‘’’’$’;’;’;’T’V’o’„’„’„’ˆ’Š’Š’Š’�’‘’‘’–’–’ ’¥’¥’º’º’º’Â’Ç’Ç’Ç’Ï’Ô’Ô’Ü’Ü’á’è’“““-“-“-“-“-“@“X“`“`“z”uè@ z öØöØÙÙ%Ù,Ù3Ù8Ù:ÙAÙHÙLÙ_Ù‘ÙœÙÇÙÌÙíÙíÙùÙÚÚJÚOÚ|Ú„Ú‰Ú’Ú�Ú¦Ú­ÚÌÚÒÚñÚóÚÛÛ4ÛSÛYÛ`Û`ÛfÛiÛmÛ~Û�Û°Ûv8÷ ;
NâNâbâiâ|â¯âºâºâÊâùâùâã␍ããVãXã…ã�ã�ãºã¿ãŞãùãÿãä#ä%ä0ä8äSäXäaämäuä€ä‡ä´äÓäÕäôä!å0å)åVå[åbå�å å¢åÁåàåûåææææJæJæVæw¸� ¤ ¶ö¶öÄöĞöîö
÷÷.÷A÷L÷N÷m÷u÷€÷“÷Œ÷«÷±÷xè.H�u�u­u²uÆuÏußuôuvv!v5v>vNvcvsvƒv…v˜v«v«v«v±vyhoyΊΊŞŠãŠéŠíŠñŠ‹‹zĞ›²®;®;À;Ì;â;ï;ó;<!<%<+<J<><[<]<]<�<|<]<­<·<{Á á şøşøùùù)ù9ùYù^ùeù…ù‡ù§ù³ùÃùãùèùïùïùïùõùøùüùúú'ú2úRú\ú|ğ>Y‰‰&‰?‰?‰I‰N‰N‰N‰m‰z‰|‰|‰|‰|‰‰‰‘‰¤‰¸‰º‰º‰‰Õ‰Õ‰Š}€YfŠŠ Š*Š4Š4ŠSŠ`Š`ŠcŠeŠkŠ~XZ␍‚␍®
®
Â
Í
Ø
 å
 % X 8 , ~ ƒ ® ³ ¿ æ ë í   .  F M n ` T ‚ „ � � � © @5␍Z␍ÖÖêõ :   ` b � � š Ó Ø ä ï ñ 


>
0
$
R
T
m
m
z
¡
¡
¡
­
€â ␍��®µÇÏÚÚééı
::IQ\doz…�›¦¦¸¸À�H 1æ†æ†‡ ‡ ‡ ‡>‡N‡S‡S‡b‡t‡�‡–‡�‡Ÿ‡²‡º‡º‡º‡¼‡¼‡¼‡¼‡ччччã‡å‡å‡å‡ø‡ˆ§ˆ‚€1>®ˆ®ˆ¸ˆÀˆʈʈéˆöˆöˆùˆûˆ‰ƒˆao^/^/n/n/~/”/€/ /¢/´/Æ/Î/„`o˜Î/Î/à/ë/0000&0,0,0<0T0A0`0c0h0~0ƒ0˜0…0¤0§0§0·0Ì0¹0Ø0Ş0Ş0ñ011*1=1G1…`˜ÁN1N1`1k1€1…1š1‡1¦1¬1¬1¼1Ô1Á1à1ã1è1ş1222$2'2'272L292X2^2^2q2„2—2ª2½2Ç2†˜ÁÑÎ2Î2Ş2Ş2î23ğ233%383C3N3V3‡ˆ .uu%u*u>uGuWulu|u‘u‘u‘u—uˆ(! C �ñ�ñÈñÍñãñëñüñ
òòòòòò2ò2ò\òaò…ò�ò’ò™ò¯òÅòÇòİòóòöò ó#ó5ó‰8C ‡ 6ó6ódózó‚ó�ó”ó›ó¤ó¦ó©óÈóÏóêóìóóóôôô ô#ôBôBôBôPôZôgôgô‡ô‰ô£ô«ô«ôÇôæôëôòôõõ*õ,õ3õNõdõ{õ~õ†õ“õ“õ³õµõÏõ×õ×õóõ
ö
ö0ö0öBöŠøï ~…~…�…²…½…Ò…ğ…û…††††5†7†7†7†D†\†^†^†p†}†•†•†¦†â†‹P 6656"6A6P6X6ŒˆK™F¡F¡j¡w¡z¡�¡‡¡�¡µ¡Ì¡¢+¢E¢J¢O¢Z¢q¢q¢ƒ¢�¢£¢¹¢Í¢Ò¢İ¢ı¢££ £9£A£I£N£h£‚£Š£’£—£±£¹£¾£Ş£ã£æ£¤¤"¤*¤,¤F¤`¤h¤p¤r¤Œ¤”¤”¤™¤�¤©¤©¤´¤´¤À¤À¤Ò¤¥(¥(¥8¥�èJ„8808<8G8L8X8c8h8o8t8t88„8„8£8Â8Ä8É8É8Ô8Ù8Ù8ø894949G9Z9m9€9…9…9˜9«9¾9Ñ9Ö9Ö9é9ü9:":$:$:7:J:]:p:p:š:�øÉ%Æ=Æ=ä=ğ=û=>>
>)>.>D>[>H>g>v>ˆ>‘>™>¡>»>Í>Ö>Ş>æ>ş>ë>
??&?.?3?M?:?l?Y?x?�?z?¬?™?¸?Ê?Ô?Ü?Ü?å?õ? @@;@?@?@F@K@]@o@q@v@ˆ@“@›@›@›@Ÿ@¸@Â@Ê@Ê@ã@í@í@AAA%A6A;ALAPAUAgA�˜�ÎÎÎì,HUlŠŒ¬´´ÃÃË×í␍␍/555:?NNZqsx‡‡“ ªª¸��␍%␍ÆÒİóßÿ '‘@␍␍vvŠ«³’@ ␍␍66Jks“p␍ ␍ÆÆçÔóş  +1”�HW¶v¶v¿vÓvÜvìvww)w+wBwYwYw^w• Wh^w^wgw{w„w”w©w½wÑwåwçwşwx,x,x1x–˜hx6x6xFxZxcxsxˆx—x™x¨x«x°x¸x—�x‡¾x¾xÎxâxëxûxy y0y3y8y@y˜x –t–t¥t¹tÂtÒtçt÷t u uu™`‡ � FöFömöZöyö�öˆö§ö¯öšĞ²É¾<¾<Ğ<Ü<ò<ÿ<==+=/=5=T=H=e=g=g=˜=†=g=·=Á=› á  ^ú^únúuú‡ú¦ú¬ú³úÒúÔúóúû$û*û1û1û9ûAûLûWû_ûgûrû}ûˆû§û¯ûœ Îï¾¾ØØàì!!-?EEEJO]]i�†”” ­´´Â�`fonŠnŠ|ЂІХЯЯŠÌŠ�¸8Lx2x2‚2Œ2�2¥2¯2±2±2Å2Ê2æ2÷2ù23333M3Ÿ@LQP3P3U3_3|3 HGXXr‚‚ŒŒ–– ²¿ÂÄÍÚÚÚôûû  2 2 @ O ^ t t t t „ „ „ – – ¤ ² È È Ş 

$LK+BI,"SetSrcFileInfo ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,106",262$00000035B8 0008 0000000079 Funct Export
$LK+BI,"StrMatchBits ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,220",263$0000000D80 0002 0000000073 Funct Export
$LK+BI,"StreamExePrint ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,673",264$0000033EB0 0000 00000000D8 Funct Export
$LK+BI,"StreamPrint ","FL:D:/TempleOS/Compiler/CmpMain.CPP.Z,1",265$00000323D8 0000 0000000084 Funct Export
$LK+BI,"U ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,819",266$0000002D38 0000 00000000B5 Funct Export
$LK+BI,"Ui ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,233",267$0000000DF8 0002 0000001F3C Funct Export
$LK+BI,"Un ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,835",268$0000002DF0 0009 00000000C0 Funct Export
$LK+BI,"UnasmHashLoad ","FL:D:/TempleOS/Compiler/Unassembler.CPP.Z,181",269$0000000C78 0001 0000000101 Funct Export
$LK+BI,"UndefinedExtern ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,99",270$00000115D6 0001 0000000050 Funct Export
$LK+BI,"UnusedExternWarning ","FL:D:/TempleOS/Compiler/StmtParser.CPP.Z,106",271$0000011626 0004 000000004E Funct Export
$LK,"asm_hash ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,2"$00000004E0 0009 0000000008 GlbVar Export
$LK,"asm_seg_prefixes ","FL:D:/TempleOS/Compiler/Assembler.CPP.Z,796"$000000B848 0001 0000000006 GlbVar Export
$LK,"assign_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,9"$0000000628 0003 0000000008 GlbVar Export
$LK,"binary_ops_table ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,7"$0000000600 0002 0000000008 GlbVar Export
$LK,"cmp_arg_cnt ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,8"$0000000610 0009 0000000008 GlbVar Export
$LK,"cmp_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,9"$0000000638 0004 0000000008 GlbVar Export
$LK,"cmp_do_not_write_to_dsk ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,3"$00000004E9 0003 0000000001 GlbVar Export
$LK,"cmp_result_cnt ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,9"$0000000618 0005 0000000008 GlbVar Export
$LK,"cmp_templates ","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,46"$0000000000 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_pop ","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,47"$000000018B 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push ","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,48"$0000000257 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push2 ","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,50"$0000000421 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push_pop","FL:D:/TempleOS/Compiler/CmpExts.CPP.Z,49"$0000000391 0002 0000000004 GlbVar Export
$LK,"compiled_bytes ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,16"$00000006A8 0002 0000000008 GlbVar Export
$LK,"compiled_funs ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,15"$00000006A0 0002 0000000008 GlbVar Export
$LK,"compiled_lines ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,15"$0000000698 0003 0000000008 GlbVar Export
$LK,"deref_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,9"$0000000620 0004 0000000008 GlbVar Export
$LK,"doc_stop_btypes ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,394"$0000004ED8 0001 0000000008 GlbVar Export
$LK,"dual_U16_tokens1 ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,6"$00000005E8 0002 0000000008 GlbVar Export
$LK,"dual_U16_tokens2 ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,6"$00000005F0 0002 0000000008 GlbVar Export
$LK,"dual_U16_tokens3 ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,7"$00000005F8 0002 0000000008 GlbVar Export
$LK,"fpop_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,10"$0000000640 0013 0000000008 GlbVar Export
$LK,"internal_types_table ","FL:D:/TempleOS/Compiler/CmpInit.CPP.Z,8"$000002E788 0001 00000000A0 GlbVar Export
$LK,"is_first_compiler ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,2"$00000004E8 0004 0000000001 GlbVar Export
$LK,"lex_zeros ","FL:D:/TempleOS/Compiler/Lex.CPP.Z,139"$0000003768 000B 0000000004 GlbVar Export
$LK,"non_ptr_vars_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,12"$0000000670 0006 0000000008 GlbVar Export
$LK,"not_const_bitmap ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,9"$0000000630 0003 0000000008 GlbVar Export
$LK,"num_non_ptr_vars ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,11"$0000000658 0005 0000000008 GlbVar Export
$LK,"num_reg_vars ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,10"$0000000650 0006 0000000008 GlbVar Export
$LK,"num_stk_temps ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,10"$0000000648 0004 0000000008 GlbVar Export
$LK,"opt_nop ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,5"$0000000550 000B 0000000098 GlbVar Export
$LK,"reg_vars_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,11"$0000000668 0002 0000000008 GlbVar Export
$LK,"stk_temps_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,11"$0000000660 0003 0000000008 GlbVar Export
$LK,"sys_internal_types ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,4"$00000004F0 00A4 0000000060 GlbVar Export
$LK,"to_non_ptr_vars_map ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,15"$0000000690 0004 0000000008 GlbVar Export
$LK,"to_reg_vars_map ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,14"$0000000688 0004 0000000008 GlbVar Export
$LK,"to_stk_temps_map_even ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,14"$0000000680 0007 0000000008 GlbVar Export
$LK,"to_stk_temps_map_odd ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,13"$0000000678 0007 0000000008 GlbVar Export
$LK,"uasm_ins64_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,20"$00000006C0 000D 0000000008 GlbVar Export
$LK,"uasm_mem_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,21"$00000006D0 0003 0000000008 GlbVar Export
$LK,"uasm_signed_arg_mask ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,20"$00000006C8 0003 0000000008 GlbVar Export
$LK,"unary_ops_table ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,8"$0000000608 0002 0000000008 GlbVar Export
$LK,"unasm_table ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,19"$00000006B0 0006 0000000008 GlbVar Export
$LK,"unasm_table_entries ","FL:D:/TempleOS/Compiler/CmpGlbls.CPP.Z,20"$00000006B8 0003 0000000008 GlbVar Export
Pš`£`£t££Š£’£›£££¦£­£±£º£Ë£Ï£Ï£Ö£ä£¤¤¤#¤/¤1¤E¤8¤U¤`¤f¤f¤t¤w¤‰¤‰¤˜¤�¤¡¤²¤¾¤É¤Ô¤Ü¤ä¤é¤ô¤¥6¥.¥K¥V¥Š¥w¥Ÿ¥Ÿ¥Ÿ¥±¥¼¥Ò¥İ¥ô¥ ¦¦)¦@¦W¦n¦n¦n¦w¦€¦†¦Š¦�¦š¦§¦²¦Î¦Î¦æ¦÷¦÷¦ş¦§&§.§>§E§^§i§u§z§…§‰§˜§£§¬§³§Ğ§â§ø§¨&¨-¨1¨6¨H¨R¨R¨]¨l¨{¨—¨›¨ ¨7© Mވğˆğšğšğ­ğµğÃğÃğßğêğğğığığñ'ñ'ñ:ñ@ñ@ñWñiñiñvñ~ñƒñ‹ñ“ñ™ñ±ñÄñÏñÓñİñòñøñúñò òòò$ò(ò,ò:òMòQòZòoòsòsò†ò™òŸò£ò¬òÉòÍòÍòÍòÍòÒòäòóòóó+ó=óMóRóRóRó^ófónótótó‹ó“ó™ó¡ó¯ó¶óÂóÛóİóåóóóùóûóûóûóûóûóûóûóûóûóôôôôô4ô<ô@ôHôVô\ô\ô\ôpôvô‚ôˆô•ô°ô¸ôÀôÌôÔôáôóôõõ$õ0õIõLõQõÒöÈ»ÑxŸxŸ‚Ÿ„Ÿ�Ÿ—Ÿ¢Ÿ­Ÿ¸ŸºŸºŸÔŸÔŸèŸêŸöŸÿŸÿŸ 0  ?ğ™ğ™šššš6šIšQšbšsš~š•š š¢š­š¾šÉšàšëšíšôšıšÿš
›››3›(Ñ0 0 D K R Z ] ] l u x {  „ ¤ ‘ ¹ Ã Ë Î Ù æ ñ ù ¡@¡3¡U¡_¡�¡€¡¢¡¢¡³¡¾¡Ó¡Ş¡ô¡
¢¢'¢=¢S¢i¢i¢i¢i¢r¢{¢�¢„¢•¢•¢¯¢À¢Ë¢Ó¢Y£J¨ø®ø®¯¯ ¯6¯H¯Z¯l¯~¯�¯�¯�¯¢¯©¯©¯¿¯Ñ¯Ö¯è¯÷¯°°$°1°1°1°Q°Q°g°y°}°‹°š°Ÿ°Ÿ°¦°¦°¼°Í°Ï°Ï°å°ı°ı°ı°±±±4±?±?±T±Y±q±v±�±¢±§±§±¼±Á±Ù±Ş±ö±û±²²0²2²K²\²\²^²t²{²‘²‘²£²»²Ó²ë²³³›³¨M(è(è8è8èUèUèrèvè{è{è{è{è‡èŒèœè¡è¡è¡è¦è¦è¼èÃèÖèäèíèıèéééééééé$é+é2é9é@éGéGéIéIéOéTé„ğP\ƒ8œ8œJœQœXœfœmœrœœ‘œ“œšœ œ°œ»œÅœĞœĞœçœêœìœşœ���(�/�:�O�W�W�m�m��� Pƒªˆ�ˆ�š�¡�¨��½�Â�Ï�á�ã�ê�ğ�� �� � �7�:�<�N�U�e�o�y�€�‹�Ÿ�§�§�½�½�Ò�
?\8›8›M›T›[›b›h›x›ƒ›�›˜›˜›¯›²›´›Ï›Ù›ã›ê›õ›œœœ%œ%œ7œ  ª»Ø�Ø�ó�ú�ŸŸŸ"Ÿ1Ÿ;Ÿ>ŸRŸVŸjŸjŸxŸ ¸¨ ³ ³Á³È³È³ß³ë³ö³´´9´T´b´i´p´|´†´�´”´˜´š´¡´­´·´¾´Å´É´É´Ó´Ø´ã´õ´õ´&µGµUµ\µcµoµyµ€µ‡µ‹µ�µ”µ µªµ±µ¸µ¼µ¼µÉµ×µçµùµùµ*¶K¶Y¶`¶g¶s¶}¶„¶‹¶�‘¶˜¶¤¶®¶µ¶¼¶À¶À¶Ê¶Ú¶ì¶ì¶·$·+·7·A·H·O·S·U·\·h·r·y·€·„·„·�·¥·¾·Ì·Ğ·Ğ·Ó·Ü·F¸␍ ™™7™C™K™S™W™[™_™c™g™o™t™x™‚™‰™�™’™–™ ™§™´™Ç™Î™Ø™Ø™Ø™Ø™ê™@&+¨/²/º/¿/n 33323B3]3]3o3‡3‡3¢3Ã3Ì3Ğ3Ô3Ú3ä3ê3ú34
4444!4!4-404;4A4K4Q4U4Z4d4d4v4}4„4†4Š4“4�4¥4°4¼4À4Ñ4à4æ4ğ4ù45#5,555=5H5S5_5p5�5�5›5�5¤5«5°5´5Á5È5Ó5á5ë5õ5ş56(616:6B6K6Q6U6Z6^6k6r6€6Š6”6�6¶6Ç6Ğ6Ù6á6ê6ğ6ô6ù6ÿ6 777.7<7B7I7R7Z7b7}7q7Œ7›7¤7¤7¿7Ó7Ó7ò7ù78888#8,8P8T8Ÿ8°¦¹¸+¸+İ+ß+ß+ù+,␍,+,>,M,\,j,j,u,x,µ,H¶r¶rÄrİrårårërp&îrîrsss0s8sSsZsbsbsjs :Û¨¨´´ÄÔäô*7F[qqƒ…—™««½Ûàìø   ( 4 @ O ^ m | ‹ š © © ¹ Ä Ï × á ù ş   $ , 6 N S c s ~ ‰ ‘ › ³ ¿ Ç Ñ á æ õ ü !!!(!3!>!I!T!_!j!u!€!‹!‹!š!¡!¬!·!Â!Í!Ø!ã!î!ù!ù!"""%"%"4";"E"O"Y"c"m"m"|"ƒ"�"—"¡"«"µ"¿"É"Ó"İ"ç"ñ"û"#####-#7#A#K#U#_#i#s#}#‡#‘#›#¥#¯#Ø#˜n¨0¨0À0Ë0Ë0Ï0Ø0Û0å0ì0ù0ù01
1
1111+1-1-1=1?1?1L1N1N1[1]1]1l1n1n1}1}1„1ˆ1‹1�1”1¡1¨1¶1½1Ğ1Ğ1Ğ1Ô1Ö1Ö1Ö1å1é1ë1ë1ë1û1ÿ122222222#2'2'2C2G2S23@¹¸,¸,Ò,Õ,Õ,Ù,â,é,ğ,ı,ı, ---- - -/-1-1-A-C-C-P-R-R-_-a-a-p-r-r-�-�-ˆ-Œ-•-¢-©-²-¹-½-Ô-Ô-Ô-à-ä-ç-ï-ï-ş- ... .8.K.V.[.[.�.˜.�.¤.¤.³.µ.Ä.Ê.×.ä.é.ø.ş. // /#/#/#/#/,/2/6/B/c/q/x/¨0дˈ?ˆ?Œ?¢?©?Á?Ê?Õ?à?ë?ò?÷?ü?@$@2@;@J@O@Q@Ğ/¦€%€%„%“%—%¤%¶%Ã%Û%í%&/&=&Y&k&ƒ&š&³&Ï&á&û&'%'@'R'd's's'ƒ'–'§'¶'Æ'Ó'Ş'í'␍(␍(((('(4(>(h(‹(©(²(¿(Ã(Ë(Ö(î()) )'),)?)c)s)ƒ)�)�)£)«)Ë)Í)Ø)***1*@*H*W*`*h*h*z*˜* *¨*³*µ*Å*İ*õ*␍+%+=+T+]+f+o+�+�+“+²+ø
Ş:ØöØöÜöíöşö÷ ÷1÷B÷S÷d÷u÷†÷—÷¨÷¹÷Ê÷Û÷ì÷ı÷ø ø0øAøRøcøtø…ø–ø§ø¸øÉøÚøëøüø␍ùù/ù@ùQùbùsù„ùœù•ù­ù¦ù¾ù·ùÏùÈùàùÙùêùûù ú$úú.ú?úPúaúrúƒú”ú¥ú¶úÇúØúéúúú ûû-û>ûOû`ûqû‚û“û¤ûµûÆû×ûèûùû
üü,ü=üNü_üpü�ü’ü£ü´üÅüÖüçüøü ıı+ı<ıMı^ıoı€ı‘ı¢ı³ıÄıÕıæı÷ışş*ş;şLş]şuşnşş£°á®i®iÒiÕi
jjj-j3j8j8jSjYj^j^jgjujuj�jˆj�j“jÖjàjçjíjïjïjkkkk␍k)k8kMkRkRkRkYk`kgk|kƒkƒkœkœkÊk€dqV-V-f-n-{-…-�-˜-p
~r~r‡rŒrŒršr£rªr¬r±r8%11 1E1Y1¤12220272>2R2Y2c2l2„2“2 2£2¼2¿2Ä2Û2ç2ó2÷23 33J3x ÎkÎkèkòkökúkÿkl l?l?lIl`
VrVr_rdrmrtrvr{r 804Ø/â/ê/ï/ p;F�:�:¥:´:È:×:İ:ã:æ:;!poz°<°<Å<Ô<è<õ<û<==%="p–¡8>8>M>\>p>}>ƒ>‰>Œ>­>#`2;H:H:Z:m:|:‚:…:�:$`foh<h<z<�<š< <£<«<%`�–ğ=ğ=>>">(>+>3>&H 2 8 8¤8¨8¨8½8Ğ8Ğ8ã89!9*9;9b9y9y9›9ª9³9À9Ç9×9ä9ı9
:::::):):9:=:A:'Ff;; ;;;%;8;8;K;b;™;»;Ê;Ó;à;ç;÷;<<*<.<6<6<6<I<I<Y<]<a<(°z�(=(=A=A=Q=^=^=h==œ=º=À=É=×=İ=à=ì=)@ ¥ŞŞçíò*@//7/</+P(8“8“B“M“\“c“k“s“{“ƒ“�“˜“ “«“µ“½“Ɠ˓ړߓè“è“ø“” ””” ”"”1”6”6”v”v”x”�”‘”—”,Gf€•€•Œ•¤•¤•²•²•²•²•»•»••é•ñ•ñ•ü•ü•
–––(–.–.–F–F–L–ä–-@f‹è–è–ô–ı–ı–——)—5—A—M—M—d—d—t—€—‰—�—™—¾—×֗æ—ò—ò—˜˜1˜1˜3˜F˜H˜b˜n˜q˜‘˜.(G˜”˜”®”¸”ŔӔܔé”é”÷”÷”••(•*•-•/•B•G•W•b•b•b•e•m•r•€•/ ‹œ˜˜˜˜¦˜©˜©˜²˜»˜É˜Î˜×˜Ú˜ß˜í˜ö˜™0Øy±&„&„L„O„R„X„]„t„‹„¢„´„Ú„………4…4…F…S…f…y…~…†…�…˜…˜…Ÿ…¨…¨…¨…³…Û…õ…û…†-†/†I†O†h†�†‰†‰†”†”†�†�†°†î†‡‡1£á&g&g?gagjg§g³gÎgßgôgûg9hEh_hmh�h…h…h‰h�h”h�h hªh·hÔh×h×h×hÜhâhâhıh iii/i7i@i@i[ifiqiyiŠiŠi™i�i�iªi2hš
$ ÆÖÆÖôÖÿÖ2× ×8×8×f×k×k×o×yׅנק׵׷׿×Ù×ô×ôרØ+Ø?ØDØKØpØw؀؂؈؛ععØËØØØğØÙ"Ù&Ù&Ù1Ù8ÙJÙMÙOÙUÙqىً٣ٵٸٺÙÀÙÜÙÜÙÜÙîÙîÙüÙÚ'ÚCÚCÚHÚLÚhÚtÚtÚ�Ú¬Ú¶ÚºÚÊÚİÚôÚ÷Ú÷Ú ÛÛ'Û>ÛBÛXÛkÛ‚Û…Û…Û—Û¡ÛµÛ¿ÛÈÛßÛéÛëÛÿÛ Ü Ü$Ü$Ü$Ü/Ü6ÜIÜaÜcÜ{Ü�ܥܫܫܽÜÅÜæÜıÜıÜıÜ#İ#İ5İ3è±K‡‡H‡O‡W‡`‡q‡~‡“‡–‡™‡�‡¦‡¦‡´‡¾‡Ç·ë‡ğ‡ı‡)ˆ.ˆ;ˆ[ˆ`ˆoˆ›ˆ£ˆ¨ˆ½ˆéˆñˆöˆöˆ ‰‰,‰0‰O‰`‰e‰e‰~‰~‰~‰~‰~‰�‰£‰¦‰©‰­‰­‰²‰½‰Ú‰߉è‰õ‰ı‰Š*Š7ŠBŠWŠWŠWŠdŠ{Š}Š}Š}ŠŠŠ¡Š£Š£Š°ŠÇŠÇŠØŠİŠæŠıŠ‹‹!‹6‹6‹6‹C‹Z‹\‹\‹\‹i‹€‹‚‹‚‹�‹¦‹¦‹·‹¿‹Ä‹Ğ‹ê‹ü‹ü‹Œ#Œ#Œ#Œ0ŒGŒIŒIŒVŒmŒmŒmŒ‚Œ„Œ‹Œ­ŒËŒĞŒ׌åŒïŒñŒñŒñŒ␍����9��4§ Ä NãNã^ãeãqã�ã ã¦ã­ãÌãÎãíãùã ä(ä.ä5ä5ä=äEäPäXäcänä�ä•ä5ß}^^xŠ�—� £ª±±ÍÑ××ï@``�†§¬¸ÃÈÕØ %+-36GLOW`{›²ÅÊÎğ   2 7 ; ] x ˜ « ° Á Æ É Ë Ñ × è í ó û û 

%
8
=
A
c
~
�
±

Ñ
ñ
   $ F Y Y k k k y ‘ “ “ “ ¡ ¹ » » É á á ó ó ü   ? Y ` k ~ ‚ ‚ ‚ ‰ � © ° » Ó Õ Û õ ü ␍␍ ␍ ␍b␍6Ğt‹n$n$€$Œ$¢$¯$¹$È$á$å$ë$
%ş$%%%N%<%%m%w%7€I„„„„8„&„„Y„i„[„Š„¤„¤„´„¹„¹„̈́҄҄î„ó„ó„………,…1…1…1…N…N…\…€…¦…½…Ï…á…󅆆†‡8 }®f␍f␍v␍•␍�␍»␍È␍Ô␍Ú␍EEJ`rrˆ�ÑÑà33@lq˜ º¦ÕîÚú""/[[[[c9h°␍Ú␍úú0ú;úFúRú]ú_úˆú�ú�úµúµúÂúíúûûû0ûRûjûWû}ûvûœû‰û°û°û½ûèûüûûïû␍ü ü ü ü*ü:X} å 6ì6ìXìxì€ì‹ìšì£ì§ì²ì½ìÒì×ìñìííí.ídízí€íˆí‹í�í£íÍíãíéíñíôíÿíîî6îUî[îcîcîhînîqî|î‡îœî¡î»îÚîàîåîğîïïï2ï:ï?ïJï_ïhïjï‰ï‘ïœï±ï¶ïĞïïïõïúïúïúïúïğğğ#ğ#ğ;ğFğYğfğ~ğ’ğ£ğ­ğ¯ğÃğÔğÙğäğäğñññ#ñ;0®Qff€�›¦ë0Z`fnpx“–¡­ò7agmpu}˜›¦®³ø =gmsvx€›�©±ö;ekqy~†¡¤¯»»ÀÆÌÔ×âô2\bgyˆºäêò÷ Gqw|��Ìöü$JZ`uŒ�´ÄÊİê$;IK_vv‹¡ºÍÍÚíñññøı46;NN[hrr„<Ğy�FxFxJxJx]x]xwx~xŠxŠx¡x¡x¸x¸xÏxÏxæxæxıxÿxÿxy=à8ƒ8ƒBƒLƒSƒjƒjƒoƒqƒ}ƒ‡ƒ˜ƒ˜ƒµƒ·ƒÇƒÇƒÌƒÎƒÕƒ„>Ø } NçNçlçvç©ç¸çÎçòç÷çûçèè èè"è+è0èEèVèuè}èè�è¦èµè¼èÈèÍèÔèÜèâèäèğèééé'é-é-é5é5é>éMéléséué”é›é›é›é¯éÅéÉé×éêéâéêêêê!ê'ê)ê5êEêJêLêlêrêrê~ê�ê“ê˜ê¸ê¾êÃêÏêßêäêæêë ëëë!ë#ë/ë?ëDëFëfëlëlëlëtëtë}ë}ë‡ë‡ëŸëÏëåëéë÷ë
ìì"ì"ì4ì?¸Ú␍�.ü.üHüPü^ü^übüˆü“ü›ü£ü¹üÁüÁüÅü÷ü0ıııHıMıXıcıeı„ıŠı“ıšı¢ıªı¶ı¾ıÆıÙıáıæıæığışşşş$ş3şSş[ş]ş}ş…ş…ş…ş�ş™ş­şµş¾ş¾şÃşÇşÏşÔşÙşáşşşÿ6ÿUÿXÿmÿzÿ�ÿ¡ÿ¥ÿ²ÿØÿôÿ&,.MPPer†™™¤¨³¾ÉÔÖõø28=HSUtw‚��®´´´¾¾Éúú0I\ddpwwŠ���•š­µµÁÈÈßáæù␍!++TTf@À UNlNlvlyl~l~l‹l�l¢l¤l¨l¬l¯lÂlÛlılmmm1mSmXmqm“m˜mŸm¸mÚmÜmõmnnn%n.n>nSnhnnn™n¨nºnA¨gynƒnƒ~ƒ‹ƒ‹ƒšƒšƒ¦ƒ¬ƒÖƒìƒ؃„øƒ„„#„Bp…␍°␍.ø.øBøFøTøTøcønøzø…ø‡ø°ø¶ø¶øØøùëøßø)ù.ùUùZùfùqùsùœù¢ù¢ùµùÎùÈù¼ùÚùíùíùúúúC°>
Q
öÑöÑÒ Ò*ÒIÒKÒjÒ‰Ò˜Ò Ò«Ò­Ò¸ÒÃÒâÒèÒDÈQ
‡
îÒîÒÓÓÓBÓaÓcÓ‚Ó¯Ó¾ÓÆÓÑÓÓÓŞÓéÓéÓîÓÔ ÔMÔRÔYÔxÔ—Ô¢Ô¤ÔÃÔâÔâÔıÔ ÕÕ Õ!Õ,Õ7Õ7ÕWÕtÕtÕ�Õ�Õ¥ÕÆÕÆÕÆÕÎÕEH½ ã ÎÊÎÊèÊùÊËË#Ë<Ë4ËTËtË`ˀˑ˖˷ˣËÏËàË÷ËşËÌÌ/ÌOÌ;Ì[ÌlÌ‚Ìņ̧̿̿̚ÌÉÌFXKs�£�£¨£º£Á£È£È£×£Ü£û£û£¤ ¤$¤+¤+¤:¤<¤[¤[¤z¤�¤|¤›¤›¤ª¤¬¤ˤˤˤˤÚ¤ó¤ì¤ ¥¥GĞú .¸.¸H¸[¸b¸i¸p¸t¸v¸}¸„¸ˆ¸ˆ¸�¸©¸³¸³¸ǸÒ¸à¸ñ¸õ¸ú¸¹¹'¹>¹B¹K¹O¹T¹e¹w¹‚¹ˆ¹�¹¤¹©¹¹Ó¹×¹×¹×¹ܹ
º º&º<º@ºEºPºaºrº‰º‘º–º�º£º´ºƺκÔºéºëº»»»»»)»:»K»b»f»o»s»x»‰»›»¦»¬»´»È»Í»æ»÷»û»û»␍¼␍¼␍¼¼¼!¼#¼B¼B¼a¼l¼r¼ˆ¼™¼�¼³¼¾¼ϼà¼÷¼û¼½½␍½½0½7½=½E½Y½[½t½…½‰½‰½�½¦½ª½ª½¼½Á½̽ݽî½¾␍¾¾¾ ¾0¾F¾N¾T¾i¾n¾‡¾�¾¡¾¡¾³¾³¾³¾³¾˾¸¾×¾×¾æ¾è¾¿¿¿.¿?¿?¿?¿F¿F¿Y¿r¿r¿r¿�¿�¿”¿«¿²¿ÿÈ¿οØ¿Ú¿æ¿æ¿í¿ô¿ÿ¿ÀÀ!À6ÀBÀDÀOÀ[ÀkÀrÀyÀƒÀ‹À�À“À•ÀšÀ¢À¦À¸ÀºÀ¿ÀÇÀËÀÍÀÍÀÖÀãÀùÀÁ3Á@Á@ÁLÁSÁSÁfÁjÁjÁjÁqÁvÁ�Á�Á�Á©Á°Á°ÁÇÁÉÁÎÁèÁõÁõÁ  Â1ÂH˜™É’’<’?’F’L’R’T’Z’`’`’r’}’„’‘’�’±’À’Ô’Ú’Ü’ã’é’ó’ó’““␍“““““4“F“M“M“\“^“p“““‘“IğÉä–“–“¼“¿“Ɠ̓ғԓړà“ç“ô“””!”0”6”8”>”H”W”i”x”–”¨”JØ¥ ½ �É�ɨɴÉÊÉèÉùÉÊÊÊ1ÊQÊ=Ê]ÊnÊpÊ‘Ê}ʩʩÊÁÊÁÊËÊK5�–�–¢–´–»–»––á–æ–—
—$——C—0—O—d—Q—ƒ—p—�—�—¡—¡—¨—Ç—Ç—Ï—L0s¥¥*¥<¥G¥o¥N¥{¥{¥™¥Æ¥¥¥Ò¥Ò¥ì¥ì¥ ¦ ¦␍¦M¦,¦Y¦Y¦s¦s¦…¦…¦Ÿ¦Ÿ¦̦̦Ù¦§§§L§=§X§X§v§‚§´§¡§ϧÀ§Û§Û§ù§¨û§¨H¨9¨T¨T¨n¨n¨€¨€¨š¨µ¨µ¨¨á¨á¨á¨é¨MX} ¥ VÇVÇpÇ�Ç�Ç£ÇÁÇÈÇáÇÙÇùÇÈÈ%È6È;È\ÈHÈtȅțȹÈÀÈÙÈÑÈñÈÉıÈÉ.É0ÉQÉ=ÉiÉiÉ�É�É‹ÉNP„Kƚƚèšûš›
›››› ›'›*›*›*›<›<›O›Z›e›v›‡›�›¦›¯›·›¼›Í›ã›ë›ó›œ
œ$œ<œ@œ@œEœqœ†œ‘œ¢œ³œÊœÒœÛœãœèœùœ ���-�/�I�a�e�e�p���’�©�±�º�Â�Ç�Ø�î�ö�ş���/�G�K�K�^�^�^�v�c�–�ƒ�£�¯�µ�Í�å�ê�ÿ�
ŸŸ,ŸCŸKŸTŸ\ŸaŸrŸ„ŸŒŸ”Ÿ¦Ÿ¨ŸŸÚŸŞŸŞŸéŸúŸ  " * 3 ; @ Q g o w ‰ � ¨ À Ä Ä × × × ï Ü ¡ü ¡(¡.¡F¡^¡^¡^¡j¡p¡{¡†¡˜¡¨¡¿¡Ö¡í¡¢¢¢4¢4¢4¢L¢L¢Z¢\¢\¢j¢j¢s¢~¢Œ¢§¢¶¢½¢½¢Í¢Ï¢Ï¢ì¢ô¢£"£=£=£‡£O8
úî¨î¨©©©!©)©B©B©V©V©l©l©w©{©†©®©�©º©Ğ©Ş©ô©ø©ı©ı©ª ª7ªNªSª[ª_ªdª‹ª¡ª¥ª¥ªµªòªѪşªşª««:«E«K«a«r«w«w«‰«š«±«È«Í«Õ«Ù«Û«¬¬¬'¬8¬I¬`¬h¬m¬q¬v¬‡¬�¬¥¬«¬¿¬Ĭݬî¬ò¬ò¬­­­­ ­8­%­e­D­q­q­�­™­Ÿ­µ­Æ­Ë­Ö­ç­ø­®®® ®%®6®H®P®V®j®l®…®–®š®š®š®¬®½®Ô®ë®ğ®ø®ü®ş®%¯;¯?¯?¯L¯L¯L¯L¯_¯e¯o¯v¯v¯‰¯ ¯ ¯³¯³¯Á¯ïïѯѯç¯÷¯°°°/°4°4°P°X°t°„°‹°™°·°¯°ܰ±±±±K±P±P±[±a±l±‹±¢±’±®±ıұ걲²²3²_²O²k²k²ˆ²ˆ²§²²²¸²βß²ä²ú²³³ ³0³A³X³`³e³i³n³³•³�³£³·³¼³Õ³æ³ê³ê³ü³ü³ü³ü³´0´´<´k´[´w´w´”´Ÿ´¥´»´Ì´Ñ´Ü´í´ş´µµ"µ&µ+µ<µNµVµ\µpµrµ‹µœµ µ µ¿µÕµëµïµïµüµüµüµ&¶&¶9¶P¶P¶P¶c¶c¶q¶s¶s¶��—¶§¶µ¶жжã¶è¶è¶· ·(·8·F·F·c···Œ·¬·¬·¬·.¸Pø' C FÃFÃ`ÈÃkÔÔáôÃÍÃÆÃåÃıÃêÃÄ ÄÄÄ)Ä<ÄUÄNÄaÄaÄnÄ�Ä�Ä—ÄQ�5„Ö—Ö—ö—˜)˜˜I˜5˜U˜k˜W˜‹˜w˜—˜£˜¨˜´˜Ę˘ؘã˜ï˜ú˜™™™™,™3™7™B™G™R™k™t™€™…™™™ ™¤™¤™©™©™¿™Ä™İ™ò™ššššššš4šIšTš^šiškšvš~š~š‹šƒš£šÚRÈ ' 6Â6ÂPÂtÂWÂ€Â™Â’Â±ÂÆÂ³ÂÙÂÒÂåÂşÂ÷Â
Ã
ÃÃ6Ã6Ã@ÃSĞã ú ÎÌÎÌèÌôÌ ÍÍ#Í<Í4ÍTÍtÍ`͓̀͑ͧͿÍÌÍÌÍäÍäÍîÍT˜(␍8␍®ó®óÈóÚóÚóáóôôô&ô4ô-ôLôLôVôU°ä®”®”̔Ӕޔޔô”ô”•••-•>•U•Y•^•b•d•u•‡•�•“•¥•§•À•ϕӕӕӕæ•û•û•–␍––"–0–7–7–F–H–^–x–x–Š–Vø‡£†f†fœf£f£f³f¼f¿fÅfÅfÏfäfäfôfıfggg␍ggggg gW(Eg����Ì�æ�æ�ù�ı�‚0‚5‚5‚B‚J‚R‚g‚s‚„‚‰‚š‚®‚³‚µ‚΂æ‚è‚肃ƒƒkƒXp"F+F+O+Z+e+p+{+…+£+®+¾+YXÁ >>V\gx}ƒ†ŠŠª¯åÑñ
ö/;BGQTX]vb‚‚‚‡˜�£¦ªªÊÏ ñ *  6 L 8 X _ d j m q s Œ x ˜ ˜ ˜ ˜ ° Ù å Z°‡
š
ÎÕÎÕÜÕãÕÖ!Ö#ÖBÖaÖpÖxÖƒÖ…Ö�Ö›ÖºÖÀÖ[h:6 6 J U x � • š �   ¦ ¬  ¯ Î Î í !ò !4!L!Q!V!Z!\!b!h!~!k!Š!Š!�!¥!·!Ñ!Ê!İ!é!\ğ`»¾n¾nÒnÚnçnooo'o-o3o7o;oToTo[o^ocorovovoˆo£o§o¬o¬o³o¶o»oÇoÕoÙoêoùoıoÿoppp$p4p8p=p=pQpTp`pjpqp—p¢p¦p«pápøpqqq#q'q)q4q8q8q8qFqRqVqXqXqcqgqgquq�q…q…q…q‰qĞq]¸»ïÖqÖqêq÷q÷q÷qùqùqrrr r r rrrr'r.r0r0r=rDrFrFr^rcrcr«r^À�Eyy8yAyUynynyyyŒyªy²y²yßyäy␍z*zFzLzPzsz™z�z�zÇzáz{{${({A{I{N{_{g{†{Œ{�{©{±{Ğ{Õ{æ{î{␍||| |$|(|:|B|N|b|g|y|~|�|”|­|º|Î|Ù|â|ÿ|,}N}S}S}S}c}j}x}…}�}�}µ}º}º}Ñ}Ó}Ó}ç}é}é}~~~~~~2~2~C~H~H~X~}~�~”~”~”~”~›~Ï~à~õ~õ~õ~(?AANeeez|•ªªª®°°°µ··¼¼ÆËËàààèêêêòôôüüş€!€#€6€J€J€J€J€J€]€u€}€}€—�_èC } �Ä�ĸĻÄÍÄÔÄÛÄàÄâÄéÄğÄôÄÅ9Å@ÅkÅpőőÅ�ťŴÅîÅóÅ Æ(Æ-Æ6ÆBÆJÆQÆpÆvƕƗƶÆÁÆØÆ÷ÆıÆÇÇ
Ç␍ÇÇ"ÇBÇTÇ`8ú >
îÍîÍÎ ÎÎOÎZÎZÎfΕΕΡΩθÎòÎôÎ!Ï)Ï)ÏVÏ[ÏzϕϛϪϿÏÁÏÌÏÔÏïÏôÏıÏ ĞĞĞ#ĞPĞoĞqĞ�нĞÌĞÅĞòĞ÷ĞşĞÑ<Ñ>Ñ]Ñ|Ñ—ÑŸÑºÑºÑºÑæÑæÑòÑa¸“ § NâNâ\âhâ†â¢â¯âÆâÙâäâæâã ãã+ã$ãCãIãbè.Hşbşb cc"c+c;cPc`cxc}c�c–c¦c»cËcÛcİcğcddd dcĞ‹¢~%~%�%œ%²%¿%Ã%Ò%ñ%õ%û%&&+&-&-&^&L&-&}&‡&dÄ ä –ä–ä¨ä®äµäÁäÑäñäöäıäå å?åKå[å{å€å‡å‡å‡å�å�å”åœå´å¿åÊåêåôåeğ>Y.v.vNvgvgvqvvvvvvv•v¢v¤v¤v¤v¤v±v¹vÌvàvâvâvêvıvıv9wf€Yf>w>wHwSw]w]w|w‰w‰wŒw�w”wgX] … .ö.öBöMöXö†öeö�ö¥öØö¸ö¬öşö÷.÷3÷?÷f÷k÷m÷Œ÷’÷®÷Ÿ÷Æ÷Í÷î÷à÷Ô÷øøøøø)øh@8 ] VôVôjôuô€ôºôšô�ôàôâô õ õõSõXõdõoõqõ�õ–õ�õ¾õ°õ¤õÒõÔõíõíõúõ!ö!ö!ö-öiå  &ñ&ñ6ñ9ñKñSñ^ñ^ñmñmñ�ñ�ñ™ñ�ñ¾ñ¾ñÍñÕñàñèñóñşñ òò ò*ò*ò<ò<òDòjH 1tt.tGtGtGtftvt{t{tŠtœt¶t¾tÅtÇtÚtâtâtâtätätätätùtùtùtùt u u u u u+uÏuk€1>ÖuÖuàuèuòuòuvvv!v#v)vlI‰‡‡$‡)‡R‡A‡=‡b‡o‡y‡‰‡‰‡ ‡§‡§‡¾‡Å‡Î‡Î‡å‡å‡ü‡ü‡ˆˆ*ˆ*ˆAˆAˆXˆXˆoˆoˆ†ˆ†ˆ�ˆ�ˆ´ˆ´ˆËˆËˆâˆâˆùˆùˆ‰‰'‰'‰>‰>‰V‰^‰l‰}‰‹‰œ‰Ÿ‰¡‰¸‰¿‰¿‰éŠmˆQ_††––¢¸¤ÄÆØêòn`_ˆöö %:'FLLXp]|��”©–µ¸¸ÄÙÆåëëş$7JTo`ˆ±VVho€…š‡¦¬¬¸Ğ½Üßáïô ö$9&EKK^q„—ª´p˜±ÁÆÆÒèÔôLine truncated
)<)))H)])J)|)i)ˆ)š)¤)¬)¬)µ)Å)Û)ô)***** *%*7*I*K*P*b*m*u*u*u*y*’*œ*¤*¤*½*Ç*Ç*Ú*â*ó*ÿ*++&+*+/+A+yhoyöwöwx xxxx8x@xz˜�¾ff„š¦Äàí"$DLL[[co…š©©µÈÎÎÎÓØççó
   ,9CCQ{�␍(␍6ó6óFóRó]ósó_óó�óˆó“óŸó§ó|@␍␍öòöò
ó+ó3ó}@␍␍¶ò¶òÊòëòóò~p␍␍FòFògòTòsò~ò‰ò”òŸò«ò±ò�HWddd'd0d@dUdid}dd–d­d­d²d€ Wh¶d¶d¿dÏdØdèdıde%e9e;eReie€e€e…e�˜hx†e†e–e¦e¯e¿eÔeãeåeôe÷eüef‚�x‡fff&f/f?fTfcftfwf|f„fƒx bbb%b.b>bSbcbxbxb~b„`Š “ ŞáŞáâòáâ'â â?âGâ…Ğ¢¹�&�& &¬&Â&Ï&Ó&â&û&ÿ&'$''5'7'7'h'V'7'‡'‘'† ä öåöåæ␍æ æ>æDæKæjælæ‹æ�æ¼æÂæÉæÉæÑæÙæäæïæ÷æÿæ
çç ç?çGç‡ ¾ßVVppx„š¯½½ÉØŞŞŞãèöö --9FMM[ˆ`fo–w–w¤wªw®wÍwîwîwôw‰¸8L00
00&0-0=0?0?0S0X0t0…0‡0 0£0¥0¥0Û0Š@LQà0à0å0ï0 1‹HGØØò   2?BDMZZZt{{•œ²²ÀÏŞôôôô$2HH^�—ºÍÍÛéïïï ŒˆGµ   ! 0 0 = N N Q T T Y ^ g g r x � • š ¯ º Ä Ä Ä í ø 
&
:
M
M
[
i
q
q
q
ƒ
¡ˆGµˆ
ˆ
�
¡
°
°
½
Î
Î
Ñ
Ô
Ô
Ù
Ş
ç
ç
ò
ø
   / : D D D m x ƒ ¦ º Ï Õ Ú á ö ı   J O V ] d i i p v { { • ¼ Â Ç æ í í í ò õ ü ␍
␍␍␍␍␍!␍!␍4␍S␍S␍a␍v␍|␍~␍™␍ ␍ ␍ ␍¢␍¢␍¢␍¨␍­␍±␍³␍¶␍À␍Ì␍Ï␍Ñ␍Õ␍Õ␍Ú␍Ú␍ë␍ı␍¢848h2l2s2u2£@+082B2J2O2¤4___-_-_-_>_>_M_M_S_U_U_[_]_]_c_e_e_l_p_u_u_u_u_u_u_}_’_’_œ_¡_ª_´_Á_Ö_Ø_ó_õ_``0`5`;`=`=`R`U`U`|`‰`¡`¡`Á`Á`Ê`Ï`ï`İ`õ`a aaa,a4a<aAaAaAaJacaiaia‚a�a�aªaÀaÂaÊaĞaØaİaİaãaãaìaìaıaÿabbb$b,b1b1b7b7b@bObcbebmbsb{b€b€b€b€b�b¢b¤b¸b¸bÀbÆbÎbÓbÜbäbíbóbùbûbûbûbccc%c)c+c7c9cTcZcbcgcpc{c~c„cŠc“c–c–c¤c²c·c·cÚc÷cıcd
ddddd d'd'dBdTdYdedkdnd…d‡dŠdšd�d¥d®d½dËdÑdÙdŞdædëdëdôdeeee%e/eNeNeTeYeYe_ededejeoeoeuezeze€e…e…e‹e�e�e–e›e›e›e£e£e¼eÎeÎeèeşeşeff fffffff%f4fGfIfIfRfXf]f]f]fefgfgfpfpfpfyfŒf f¢f¢f«f±f¶f¶f¼fÂfÂfÑfÚfàfàfìfìfóf gggg g(g-g-g4g8g=gLgQg[gigigzg˜g˜g�g°gÁgÍgÔgægõg hhhhh/h;hChKhSh[hdhrhrhyh{h„h„h�h h´hÇhÚhùhÿhiiii9i>iPiZicimivi„i‰i‰iœi¢i§i¶iÈiÛiàiôijjj'j-j0jGjLjOj_jijljlj{j�j j©jµj»j¾jÕjÚjİjíjñjùjşjk*k*k/k4k4k?kGkLkLkRkRkdknktk‚kŒkÃkÆkËkÙkÙkŞkækëkôkùkùkl llll%l*l/l>lCl`lblglllqlvl{l€l…l…lŠl�l«lñl÷lmmmm$m2m<msmvm{m‰m£m¨m¨m¨m°mµm¾m¾mÃmÃmÎmÖmÛmÛmàmïmômùmşmşmnn&n,n,n>nHnNn\nfn�n n¥n³nÍnÒnÒnÒnÚnßnènínínønooo
ooo#o(o(o;o;oPoVoVohoroxo†o�oÇoÊoÏoİo÷oüoüoüop pppp"p*p/p/p/p@pFpFpXpbphpvp€p·pºp¿pÍpçpìpìpìpôpùpqqqqq q q q0q6q6qHqRqXqfqpq§qªq¯q½q×qÜqÜqÜqäqéqòq÷q÷qr
rrrrr#r)r?rDrDrJrXrmrrrrrxrŠr“r›r£r¨r¨r®rÀrÌrİrêrñrùrss s2s2s2s7s7s7sGsGsGsGsKsPsPs[s_sdspsvs{s„s›s£s¨s²s²sºsÀsÒsİsâsèsğsõsõsõsõsõsõsõsõsõsõstt%t/t7t<tEtNt]tftntstststyt�t†t†tŠt�t�t˜t¦t²t¿tÅtÅtÎtætætğtùtuuu u)u2uJuJuSuXuXuaufufunususu�u�uªu·u½uÈuĞuÕuÕuÕuñuúuvvv'v'v2v2v:v?v?v\vjvsvxvxvxv~v‚v‡v‡v‡v‡vŒv’v˜v©v¯v³vR„¥€©ÖĞQĞQöQöQ
RRR%R%R-R@RNRRRWRlRnRqRuR|R�R”R RªR®RµR½R¿RÇRÔRâRêRìRïR÷RSSS'S+S9S¦pŒ—¬9¬9¶9½9È9Ğ9×9İ9ã9ã9é9§¸AUè6è6ô6û6777"7+7/7=7F7F7U7^7g7m7u7¨¨—©@Q@QRQ\QdQhQwQŠQ˜Q�QªQ²Q½QÃQÆQĞQ©ˆ—¥ì9ì9: :::3:;:A:G:I:I:X:ª †—p‡p‡~‡Œ‡—‡�‡´‡¹‡Ö‡Ü‡ã‡ê‡ø‡ˆ6ˆ«à4MX„X„r„v„z„‚„Œ„�„’„¡„¥„©„±„º„ƄƄۄì„ó„ú„ú„………¬X¥m\:\:p:x:~:ƒ:ƒ:ƒ:™: :¢:µ:µ:µ:¼:Ç:Ë:Ï:Ò:Û:Ş:â:ï:ï:ï:%;1;B;R;h;m;s;v;{;{;“;š;§;®;Á;É;É;Ú;â;ç;ç;ÿ; < <<$<)<)<A<N<N<_<g<l<l<„<�<™<¡<©<µ<Ë<Ö<ù<ı< ====0=0=J=T=`=h=m=m=…=…=Ÿ=©=µ=½=Â=Â=á=í=ş=>>'>.>6>;>B>J>O>O>W>\>\>\>\>b>e>g>g>g>†>’>£>¥>«>®>®>¹>¹>Â>Õ>Ü>ë>ô>ü>ş>ş>ş>???"?*?1?5?@?K?^?d?i?o?t?{?ƒ?ƒ?œ?¡?¡?´?¼?¾?¾?¾?¾?¾?¾?Ã?Ã?Ê?Ê?Ó?Ó?×?Ş?â?õ?ı?ı?ı?ı?ÿ?ÿ?@@@@9@B@F@VP­(³àYàYZZZZZ(Z4Z<ZFZeZeZqZsZsZZ�Z�Z�Z’Z’Z�Z£Z£Z¯Z´Z´ZÀZÅZÅZÑZÖZÖZÖZØZØZñZÿZÿZ[#[#[%[%[1[7[<[<[<[>[>[G[V[c[e[e[q[w[|[|[|[~[€[€[‡[‡[‡[�[Ÿ[­[¯[¯[»[Á[Æ[Æ[Ì[Ø[Ø[ã[ï[ï[ü[\\ \ \0\0\9\<\_®¸y�œPœP¹PÀPÏPÒPÖPŞPâPæPëPøPQQQQ%Q1Q¯ø%A°5°5È5×5á5î5õ5ù5666@6@6V6g6n6|6|6�6¤6¤6·6Ì6Ô6×6ã6°xâîÈSÈSÔSÛSúSTTT&T0T8T±xÖâ@S@SLSSSrSrS‰S�S�SœS¦SÂS²ğMh … …2…>…I…c…c…f…u…{…{…ˆ…Š…�…�…�…Ÿ…¥…¯…¶…»…½…Ç…³ˆhvÈ…È…Ñ…×…ò…÷…"Line truncated
__!_)_._5_G_P_a_q_q_v_v_�_š_š_°_Á_Æ_Ë_Ú_ß_î_ö_ş_`
``%`6`F`F`K`K`e`o`o`…`™`�`£`£`µ`º`¿`Û`ô`ô`ù`ù`a␍aaaa!a!aEaMaUaeajapapaƒaœaœa¡a¡a­aµa¸a¿aÅaÊaÊaîaöab bb3bEbMbebmbpbwb}b”bœb´b¼b¿bÆbÌbÌbÌbíbc␍ccc c%c8cJcVcqcyc|cƒc‰c c¬cÇcÏcÒcÙcßcßcßcßcñcúc dd&d6d6d;d;ddd~dˆdˆd¤dºd¿dÄdÄdÖdÛdàdşdeee e&e,eUe]emereyeyeye‹e”e©e®eÄeÔeÔeÙeÙeff&f&fBfXf]fbfbf�f’f¥fğf ggg(g1gFgKgagqgqgvgvg�gœgœg§g±g±gÃgÌgágægüg h hhh+h7h7hFhPhPhbhkh€h…h›h«h«h°h°hÊhÖhÖhåhïhïhi
i i$i:iJiJiOiOiiisii„i‰i‰i›i i¥iÁiÍiÙiŞiäiëişi jj%j-j0j6j<jAj]jojwj�j—jšj j¦j½jÅjÅjëjkkkk k k2k?kKkSkVk]kckhk„k–k�k¶k¾kÁkÈkÎkåkíkíkl0l8l;lBlHlHl[lhltl|ll…l‹l�l¬l¾lÆlàlèlëlñl÷lmmm>m]memhmnmtmtm‡m”m m¨m«m²m¸m½mÙmëmómnnn n&n=nEnEnnn�n–n™n n¦n¦n¦n¦n¦n¸nÁnÖnÛnñnoooo o*o6o;o@o@oRoWo\ojoxo…o‘o™oœo£o©o®oÊoÜoäoüopppp+p3p3pYpvp~p�pˆp�p�p�p¡p®pºpÂpÅpÌpÒp×pópqq,q4q7q>qDq[qgqgq�q°q¸q»qÂqÈqÈqÈqÈqÈqÚqãqøqıqr#r#r(r(r?rUrZrhrsrxrŠr“r¨r­rÃrÓrÓrÓrçr÷rürürs)s.s<sKsPsbsks€s…s›s«s«s«s¿sÏsÔsÔsîsøsøst4t9t9tcthtmtmt}t†t•t•tšt¬tµtÊtÏtåtõtõtõt uuuu8uBuBucu~uƒuƒu­u²u·u·uÇuĞußußuäuöuÿuvv/v?v?v?vSvcvhvhv‚vŒvŒv­vÈvÍvÍv÷vüvwwww)w)w.w@wIw^wcwyw‰w‰w‰w�w­w²w²wÌwÖwÖw÷wxxxAxFxKxKx[xdxsxsxxxŠx“x¨x­xÃxÓxÓxÓxçx÷xüxüxy.y3yEyNycyhy~y�y�y™y�y�yµyËyĞyâyëyzzz+z+z6z;z;zRzuzzzŒz•zªz¯zÅzÕzÕzàzåzåz%{%{%{<{Y{i{�{�{¢{¢{¢{«{Á{Ô{İ{ì{ì{ñ{ñ{1|1|1|H|[|™|©|®|·|Í|à|é|ø|ø|ı|ı|=}=}=}T}g}¥}­}²}»}Ñ}ä}í}ü}ü}~~~A~A~J~`~s~|~‹~‹~�~�~Ğ~Ğ~ã~ì~û~ 9GLT\buz‚Š��••••••ÕÕŞíòòò€€€€$€0€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9€9Line truncated
”
””"”3”=”N”X”h”t”y”y”y”�”›”¥”ª”·”ÔÔȔӔâ”ç”ì”ñ”ñ”ö”•••••••••••• • •$•*•*•*•*•*•*•/•/•>•P•\•i•u•ˆ•�•••�•�•¹•͕ޕë•ğ•––0–=–E–X–`–e–n–w–w–|–|–|–|–|–ˆ–ˆ–ˆ–�–­––Ê–å–ö–—————————————-—;—@—@—K—Y—^—v—‚—‚—”— —¥—´—¸—Á—É—æ—ò—÷—ı—˜˜ ˜4˜E˜R˜T˜b˜b˜g˜g˜r˜€˜…˜—˜£˜¯˜´˜¸˜Á˜ƘƘƘƘƘƘߘߘߘߘߘߘߘä˜ä˜ä˜ä˜ä˜ä˜ù˜ù˜ù˜ù˜ù˜ù˜ù˜ù˜ù˜ù˜™™7™?™Z™k™x™z™�™š™Ÿ™Ÿ™Ÿ™¨™Æ™Ò™ı™ š šššššššššš'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š'š,š,š,š=šHšMšMšMšmš¦š¯š³š¸š½šÆšÌšÑšÑšÑšÑšãš÷š› ›%›*›/›/›A›U›{›†›�›“›“›˜›˜›ª›¾›à›ë›ğ›õ›ú›ú› œ œFœQœYœ^œ^œcœcœcœkœˆœ¥œ±œÌœİœêœìœûœıœıœıœıœıœıœ���������������������������!�0�;�;�;�;�;�;�;�;�;�;�;�;�;�;�@�@�T�V�V�^�^�e�w�¤��Â�Ø�ò�õ�ÿ� �9�Y�}�‚�•�Ÿ�ä�ä�ç�÷�Ÿ Ÿ%Ÿ3Ÿ?ŸWŸWŸƒŸ†Ÿ•Ÿ©ŸÊŸÛŸ ıŸéŸ! 3 3 6 ; > X f ˜ º º æ é ø  ¡-¡>¡`¡L¡|¡|¡|¡¡„¡„¡‹¡/©ØX«Ó@¯@¯V¯k¯r¯r¯~¯~¯‰¯‰¯š¯ª¯µ¯ů˯Яددæ¯ó¯°°°°°&°&°>°@°@°P°\°\°k°s°s°‚°ааа’°’°’°–°�°£°¨°¨°¬°´°¸°½°½°½°½°½°½°½°½°½°½°½°½°½°½°°°ΰç°÷°±±± ± ±%±%±/±;±T±d±m±u±z±�±’±š± ± ±¥±¯±½±é±ô±ô±²²²²)²/²5²:²:²:²:²:²Line truncated
¹ ¹¹¹$¹1¹1¹6¹6¹Q¹b¹e¹h¹p¹u¹u¹~¹ƒ¹‹¹’¹Ÿ¹²¹¸¹¿¹Ĺ޹蹺 º(º5ºHºNºUºUºZºZºZºZºZºZºZºZºZºZºZºZºZºZºZºeºpº~º�º•º•º ºªº»ºÀºÀºǺ̺̺àºàºåºåºåºûº»»0»6»>»S»Z»b»b»d»d»n»n»y»»�»Ÿ»Ÿ»¦»]ÂÙàz`Â`Âr€€‹‹œ±¼ÂÃÂÔÂçÂíÂíÂíÂüÂÃÃ&Ã0Ã3Ã?ÃHÃRÃUÃZÃZÃpÃzÃzÒÙåúÃÁÃÊÃÖÃëÃòÃòÃòÃÄÄÄÄ)Ä3Ä6ÄHÄHÄMÄRÄbÄeÄjÄzÄ}Ä�ĊĒĤĬĬĬÄÂÄÌÄÌÄäÄëÄ÷Ä ÅÅÅ.Å5ÅDÅUÅUÅ\Å\Å\ÅjÅxłŅœÅ�ŠŲŲŷżÅÌÅÏÅÔÅäÅçÅëÅôÅüÅÆÆÆ"Æ0Æ0Æ7Æ^ÆÚpƒîøÊøÊËË%Ë5Ë8Ë8ËKËKËYËaËiËvËvË}Ë}Ë�Ë�˩˭˷ËÃËËËÖËâËÌÌÌÌÌÌ Ì5ÌAÌVÌYÌYÌgÌrÌ€Ì�̴̨̨̜ÌÉÌ×ÌèÌøÌÍÍ Í(Í(ÍPÍSÍYÍ^Í^ÍgÍz͈̀͛ͩͩ͡ÍÀÍÌÍÙÍìÍòÍúÍ ÎÎÎÎÎDÎDÎIÎeÎhÎoÎΈΓΨγνÎÊÎãÎ÷Î÷Î;ÏÛ "ƒ Ç ÇÂÇÔÇØÇØÇãÇãÇêÇûÇ ÈÈÈÈÈ%È*È2È2È@ÈYÈ[ÈbÈ{È�ȜȤȦȴÈÂÈÂÈÊÈÓÈŞÈæÈñÈûÈÉÉÉÉ/ÉAÉDÉIÉ\É\ÉuɉɑɑɣɦɫɾɾÉ×ÉëÉóÉóÉÿÉÊÊ Ê3Ê:ÊOÊhÊjÊÊ˜Ê Ê Ê«Ê¹ÊÆÊËÊËÊÒÊİÊôÊÜ'Ş@Ï@ÏZÏmÏ{τϦϰϾϾÏÛÏèÏèÏòÏòÏüÏĞĞĞ%Ğ%Ğ,Ğ6Ğ<ĞBĞIĞ^ĞiЄЊĞ�Ğ�ТЧвнĞ×ĞáĞéĞÑÑ5ÑEÑJÑPÑVÑaÑnÑuіњѠѨѭѶÑ×ÑÛÑáÑéÑîÑîÑûÑÒÒ Ò)Ò-Ò3Ò;Ò@ÒaÒeÒkÒsÒƒÒ�ÒŠÒªÒ®Ò´Ò¼ÒÁÒâÒæÒìÒôÒôÒùÒÓ Ó.Ó2Ó8Ó@ÓIÓjÓnÓtÓ|Ó|Ó‰Ó�Ó±ÓµÓ»ÓÃÓÌÓíÓñÓ÷ÓÿÓÿÓÿÓ Ô ÔÔ Ô)ÔEÔQÔbÔgÔxԌԌԬԱԶԶÔÁÔÉÔÑÔÚÔöÔÕÕ!Õ;Õ;Õ[Õ`ÕeÕeÕpÕxÕ�Õ˜Õ¥Õ°ÕLine truncated
Û
Û
ÛÛ)Û.Û.Û.Û=ÛMÛRÛRÛRÛaÛoÛtۜۊÛtÛ´Û¹ÛáÛÏÛ¹ÛùÛşÛ&ÜÜşÛ>ÜCÜCÜCÜ`ÜJ܊ܚܟܟܟܾܪÜèÜøÜıÜıÜ İİİİ İ İ İ2İBİGİGİGİZİjİoİoİo݂ݒݗݗݗݪݺݿݿİÇİÌİÌİÔİÙİÙİáİæİæİîİóİóİŞ Ş ŞŞ#ŞqŞ_ŞMŞ#Ş~ރŞÑŞ¿Ş­ŞƒŞŞŞãŞãŞãŞòŞ ßßßß#ß>ßCßCßCßTßbßgßgßoßtßtß|ß�ß�߉ß�ß�ß�ßÊ߸ߙßéßà à à àEà3ààdàà„à¶à¤à„àÎàÓàáóàÓàá"á<á"áTáYáváYá�á“á“á“á³á¸áÎáÆáÚáêá÷á â,â1âHâNâgâtâ­âïâÌâûâããããããã%ãJãUã_ãjãlãwãã„ã‰ã‰ã”ãœã¥ã°ãÀãØãğãä äää)ä4ä>äCäNäXä]ä]ähä{ä…ä�ä±ä½äÎäÓäääèäíäòäòäå ååå)å6åAå[åmååŠå�åšå«å´å¿åÌå×åñåææææ æ æ*æ/æ/æ:æ?æ?æJæOæOæZæ_æ_æyæ~æ~æ†æ‹æ‹æ–æ›æ›æ¦æ«æ«æ¶æ»æÏæ»æÛæææëæÿæëæ çççç&ç+ç+ç6çDçIçIçTç_çdçdçuçzçzç‹ç�ç�çªçµçºçÂçºçÎçÓçççÓçóçøçèøç èè%èè1è1è6è6èJè6èVèVè[ègè[èè„è„è�è„è¨è­è­è¹è­èÑèÖèÖèâèÖèúèÿèéÿè é+é6éAéFéZéFéféré}éˆé�é¡é�é­é¾éÃéÃéËéĞéĞéØéİéİéæéëéëéôéùéùéêêêêêê"ê'ê'ê2ê7ê7êBêGêGêRêWêWêbêgêgêrêwê‹êwê—ê¢ê­ê¸ê½ê½êÇêÌêÌêÖêÛêÛêåêêêêêôêùêùêëëëëëë%ë*ë*ë*ë*ë*ë2ë7ë7ë?ëDëDëLëQëQëYë^ë^ëfëkëëkë‹ëœë¡ë¡ë·ëÂëÂëæëëëì ì%ìì1ì<ìGìLìLìbìmìmì‘ì–ì¬ì·ìĞì¼ìÜìçìòì÷ì÷ì ííí<íAíWíbí{ígí‡í’í�í¢í¢íÌí¸íØíØíüíîî"î'îFî2îfîRîrî‹îwî«î—î·îÂîÇîÇîñîİîıîıî!ï&ï<ïGïLïkïWï‹ïwï—ï°ïœïĞï¼ïÜïçïìïìïğğ"ğ"ğFğKğağlğqğ�ğ|ğ°ğœğ¼ğÕğÁğõğáğñ ñññ ñ%ñ%ñ4ñ9ñ9ñJñOñTñTñeñjñoñoñ‚ñ‘ñ–ñ›ñ›ñLine truncated
÷÷ ÷ ÷*÷/÷/÷;÷T÷]÷„÷‹÷™÷�÷¯÷Ä÷É÷Ú÷å÷í÷ò÷÷÷÷÷û÷ÿ÷ øø ø$ø)ø)ø4ø>ø>ø>ø>øCøCøCøMøMøRøRø\ø\øiø‰ø�ø�ø˜ø˜ø˜ø�ø�ø¤ø¤ø±ø¼øÊøÕøàøëøöøûø$ùù<ùLùuùmù�ù�ù�ù™ù¢ù¨ù¶ù¶ùÌùÙùëùôùüùúúúú8úBúWúuúuúuú¥ú¯ú¯úÈúÍúéúşúûû0û7û<ûBûHûOûTû[ûdûzûzû~û~û™û û¥û¥û©û²û¿ûÑûæûşû
üü ü1üPülüƒü†ü‹ü–ü›ü›üŸüŸüÂüÍüÍüĞüâüâüı7ı7ı7ıİX08DDDD&D5DDDIDŞX8@PDPD^DcDgDvD…D‹D߀
àBàBòBCCC C C-C>CCCMCà@¸1Â1Ê1Ï1áP¾à¾àÇàÔàåàòàòàáâH[��0�0´0º0Á0É0Ñ0Ô0ß0ó0ú0ı0ÿ01111%1;1>1L1O1R1Y1]1e1s1s1‡1�1•1Ò1〻HÀ²À²Ò²Ü²ä²ì²ô²ü²³³³%³>³A³T³T³\³e³k³p³p³x³�³‡³Œ³Œ³”³�³£³¨³¨³°³¹³¿³Ä³Ä³Í³Ù³İ³â³è³í³í³õ³ş³´ ´ ´#´9´9´9´A´C´C´C´K´M´M´M´U´W´W´W´_´a´a´n´n´t´y´€´‹´‹´›´›´›´¢´­´­´½´½´È´Ì´Ò´ê´ø´ µµ4µ7µ>µPµXµaµlµlµwµ}µ‚µ‰µ”µ™µ µ«µ·µ½µ½µÔµÜµâµâµ"¶-¶-¶2¶F¶K¶Q¶S¶S¶Z¶e¶e¶r¶r¶r¶r¶7·äğ Çî×îר ØØ Ø*Ø/ØOØOØcØkØƒØ‰Ø§Ø»ØÆØÌØåØåØõØõØ ÙÙÙÙ%Ù-Ù5ÙCÙIÙOÙ[Ù[Ù]ÙqÙ|Ù�Ù�Ù�ٚٚٺٺÙÏÙÜÙáÙáÙáÙúÙÚÚ0Ú>ÚKÚ[ÚhÚhÚuÚÚ‹Ú˜ÚšÚšÚ¢Ú§Ú§Ú¯Ú´Ú´Ú¼ÚÁÚÁÚÉÚÎÚÎÚÕÚÚÚÚÚáÚæÚæÚñÚöÚöÚÛÛÛÛÛÛ#Û#Û8Û?ÛEÛHÛOÛRÛ]ÛdÛgÛgÛ{Û}ÛƒÛ�Û�Û�Û˜Û±ÛÆÛÖÛçÛíÛÜÜ ÜÜ(Ü9ÜHÜNÜ_ÜlÜv܅ܒܘܣܩܾÜÄÜÕÜâÜèÜúÜúÜ İİ İ+İ3İ;İCİJİPİaİnİsİ�İ�ݧݵݼİÌİÖİÜİäİêİõİûİŞ␍Ş Ş Ş Ş*Ş>Ş·àå0˜»x±x±†±†±š±�±¦±®±¹±Ä±Ì±×±â±ç±ç±²²²²%²'²2²=²N²P²\²g²r²{²ƒ²ƒ²‡²½²æ(=fDfD†D†D�D¢DªD²DºD¿DÓDâDëDòDøDıDE!E+E-E/E?E?EAE]EgEiEkE{E{E{E€EˆE�E˜E�E±EÀEÂEËEÔEİEİEéEğE÷EF!F)F6F<FOFSF[F[FnF~F~F�FÊFçx-Î$Î$Ô$è$ë$ó$ú$ş$%% %%%% % %'%.%2%:%>%>%E%L%P%X%\%\%c%j%n%v%z%}%�%èØ6NXX6X6XAXLXYXgXmX€X†X™XŸX«X¿X¿XÓXãXñX÷X
YYqYé �¢Ö1Ö1î1ö1ı12␍22(20252@2@2J2P2[2k2s2ƒ2Š2’2š2¢2§2²2²2À2À2Ö2ê@Tyğğ
ğğğğ+ğ-ğ=ğHğZğeğpğ—ğ—ğ§ğºğÌğŞğâğïğïğïğùğñññ,ñ=ñYñ^ñxñë 4Tââ(â0â6â>â@â@âLâLâLâTâ\ânânâ“â•â•â°â²â²â½âÂâİâââââââââ÷âùâùâãããã$ã,ã4ã;ãJãJãXãZãnã{ã{ã{ã„ã–ã©ã¯ã·ã¹ãÆãÆãÛãÛãÛãæãğãä␍ä␍ä␍ä␍ä#ä)ä.ä6äAäSä^äcäcäjänä€ä‡ä”ä›ä¬ä²ä¹äÂäÂäŞäãäãäãäãäëäöäöäåå å å å&å4åCåVåiåkåkåkå~å~å…åŒå‘å—å—å©å³åÎå÷åıåıåææ(æ/æ;æLæ]æjæpætætætætææ‰æ‰æ—æ¹æ¹æÅæâæìæìæïæ
ç
ççç.çAçTçgçgçlçlçwç~çŒç›ç®çÁçÌçÌçÑçÑçÑçäçæçæçæçíçèèèè&è-è9èLèbèŠè–è©è¶èºèÕèèèñèøèéé+é2é2é7é7é7é?éJé\égélélélélé‚é¯éµéµéµéÀéÊéÍéÔéëéëéğéğé␍ê ê3êFêKêKêiêwêŠê�ê¨ê¨ê­ê­ê­êÀêÅêÅêÅêÌêßêòêòêòêëëë(ë>ëGëNëYënë�ëˆëˆë�ë�ë’ë’ë¦ë¦ëğìHNtvYvY�Y�Y¤YªY¸Y¸YÃYÑYİYñYüY Z Z Z&Z,Z2Z2ZGZUZ[ZdZjZjZ~Z„Z‘Z™Z§Z´Z[í@Æ öHöH II-I2IGINITI\IbIpI~I…I”I™I¦I½IÊIİIäI÷IJ
JJ#J(J>JGJVJ^JkJtJvJ�J§J¬J·JÉJÔJİJãJîJòJûJKFK(K[K�KrK¥K¨K¸KULîèÈ¢ÖôÖôğôöôÿô õ!õ3õ<õBõEõIõKõcõuõ‚õˆõŒõ’õ”õ—õ›õ›õÁõÅõËõËõÒõÒõôõ öö/ö5ö<öGöQöUöXö_öeöiöoö€ö†ö‹ö�ö�ö�öŸö³öµö¼ö¼öÉöËößößößößößö÷÷÷(÷E÷i÷ƒ÷ˆ÷Ÿ÷¤÷²÷Æ÷Ë÷Ñ÷ß÷ê÷ô÷ÿ÷ øø ø,øDøSøXøcøxø}ø}ø}ø‹ø‘ø”ø—ø¨øÀøÒøÕøêøğøùùù ù+ù+ù0ù0ù=ùLùLùRù`ùtù‚ùˆù‹ù�ù•ù¥ù°ù°ùµùµùÂùÑùÑù×ùåùùùú úúúúú!ú(ú(ú5úDúDúKúUú\úbúiútútúˆúˆú¢ú§ú®ú¶úÀúÏúÓúßú÷úüúüú%û8û?ûKûKûdû{û{û™û›û³ûÙûäûüü@üEüEüOüqüqüqüŠü–ü¤ü¼üÀüˆıïPÆÎFÎFîFõFşFG G G)G+G;G;G=GWGaGcGeGuGuGuGuGyG‚GŠG”G�G¢G¢G´GÇGĞGĞGßGßGîGîGıGHHH*H*H,H6H?HHHOHUHiHpHwH~HŒH•H¸HÁHÅHÊHÏHÒHÜHßHïHğ8-Q†%†%Œ% %£%«%²%¶%º%º%Á%È%Ì%Ô%Ø%Ø%ß%æ%ê%ò%ö%ö%ı%&&&&&&"&&&.&2&5&9&ñ`-6¦.¦.º./ÿ.Ç.Å."/*/òØ VLVLlLwLwLwL¤L¤L²L²L²LÂLËLÒLÙLâLâLêLîL MM%M+M+M6MOMOMbMmMuM~MƒMƒM–M¡MªMµMºMºMÊMÏMÏMÏMÏMäMéMüMN NN2N2N7N7NGNLNLNQNXN`NgNiNqNxNxN‡N�NšN¡N¤N½N½NÅNÔNßNæNèNüNOOOOOOO-O2OAOHOOOdOxOxO}O}O…O”O›O O´O»OÀOÀOÌOŞOŞOòOPPP'P5PCPKPRPpP}P‚P‘P‘P¨P¯P¶PÆPÈPÖPæPèPöPQQQ1Q8QDQVQmQoQ{Q†QˆQˆQ–QªQºQÂQÄQØQíQôQRR2R9RERgRgRgRoRoR{RR‡R‹R–R�R¤R¾RÃRÊRÕRŞRæRëRëRúRÿRS"S1S<SGSUS[SaSgSpSwS‰S‰S–S¢S®SÁSØSÚSçSòSôST"T(T.T4T=T=TLine truncated
``&`+`1`=`?`?`S`S`S`U`…`ö©È†ó†ó”ó”ó«óµó¾óÀóÇó×óäóæóñóñó÷ó
ô
ô␍ô␍ô.ô;ô=ôVô]ôaômô€ôÏô÷@␍>á>áGá[á`áø@�á�á§áÆáËáùØ4ÎáÎáØáâáëáöáıáââ␍âú@␍áá$á8á>áû@fáfátá“á™áü˜y©~ñ~ñ�ñ�ñ¥ñ´ñ¸ñÆñÌñÛñÛñâñòñÿñò␍ò òJòPòUòYòiòiòiò�òƒò�ò¯ò¼ò¾ò×òÛòéòîòîòõòó óó…óı8 ]Áşdşdeee"e%e)e.e5e5eBeKeQeXeXeqeze�e‡e“eŸe¨e¯eµeºeÈeÛeæeîeúeúeffffff*f-f2f2f8fDfGfLfLfRf^faffffflfzf}f‚f‚fˆf–f™f�f�f¤f«f»fÂfÅfÊfÊfÊfÜfâfğfõfıfgg*g2g8gDg]ghgug{gŠg�g“g˜g˜g˜gªg°g°g°gÇgÏg×gõgh␍hh"h+h.h4h9h9h9hKhQh[hthhŒh’h¡h¤hªh¯h¯h¯hÁhÇhÇhŞhåhñh÷hiii&i+i;iHiViXi^ikinitiyiyiyi‹i‘iªiµiÂiÂiÈiÕiØiŞiãiãièiüijjj0j6j<jNjTjVjjj€j†jŠj�j’j’j˜j¤j§j¬j¬j²j²jÈjØjİjİjİjïjüjüjk+k=kDkDkLkakck€k€k�k¢k§k·kÂkÔkàkôkl ll+l>lClClIlIl`lrl}l…l�l’l l¦l«l«l±l·l¼l¼lÂlÑlålòlølûlmmmm)m6m<m?mDmDmJm[mamdmimimom€m†m‰m�m�m”m¥m«m®m³m³m¹mÊmĞmÓmØmØmŞmâmèmëmğmğmğmômômn␍nn#n(n9n9nCnNnPnVncninlnunznznŠn�n¥n°n¸nÀnÅnÚnßnånónúnooo$o'o'o-o8oTo`oqo‰o‰o‰o—o«o«o¼oÎoÎoÎoÑoåo’tş@6[././L/T/X/f/l/r/€/‡/·/Í/Ú/è/ö/00!0&040S0\0l0n0u0u0ƒ0‰0‰0›0ÿXø †`†`’`�`ª`º`Ò`Ø`ã`ñ`a
aaa'aMagagataƒa“a™a›a¬a¬aÎaÕaÛaéañabbbbHbˆzè[[[ [#[7[7[K[Q[][h[s[x[ƒ[�[£[º[Í[ä[ä[ù[ \ \\#\6\<\T\^\i\o\{\‹\–\ \ª\´\»\Á\Í\Õ\İ\à\ã\ö\ü\] ]]]']']H]^]j]r]z]}]„]†]“]“]¥]±]·]Å]Å]Ò]á]å]ş]ş]^^^(^(^<^B^Q^T^^^u^‚^¡^®^¹^Ä^Ç^Ì^Ó^å^÷^___ _'_+_ô_ ]NbNbfbmb…b�b§b´b´b¹bÅbĞbÛbébùb cccc1cFcFcZcxc…c”c¡c¯cÄcÒcàcêcñcñcddd/d<dJdXd^dqdqdwd‡dœd©d·dıd¢Ö2Ö2ø233333!3.3.353<3C3I3O3V3X3d3j3�3•3˜3 3¨3­3¹3¿3ã3ê3í3õ3ı344 44"4(4.47494@4@4I4S4Z4a4i4o4q4q44–4™4¨4´4Ã4Ã4Ã4Ã4È4È4Ü4â4õ45(5>5E5S5_5j5j5s5z5‰5š5§5§5§5»5Ï5ß5â5r6ğ6ÑÆÆèï,,,688CCq‚‚‚‚‘ µÂÂÑØëñ7=HXjsz‡�³¸ÆÏÏÖÖåüü '18=HNV|…Œ”Ÿ«ºÊÏ×ãññ"22FLUUUdj~‡™¨½ÆØëö *=AMa}}‘—¢®¾ÎÓÜÜîòş..BHS_o‘———¦¬±···ÆÌÑ××Û¡#¸ ¢6�ı�ı¨ı³ı¾ıÛıÛıÛıÛıèıèışş!ş*ş*ş*ş7ş?şWş]şfşfşfşsş�ş�şªş¹şÄşÉşÒşÒşÒşßşãşëşóşÿşÿ+ÿ6ÿ;ÿAÿJÿJÿJÿJÿWÿlÿrÿ{ÿ{ÿ¨ÿµÿºÿºÿÇÿÒÿÜÿâÿòÿ,2Zccxƒƒ•¡§Ä×ãçù 5CCCPlW}t‡‰¥‘­­»»½ÙÙàæï÷ú1$9?HHH[``kx�ˆˆ• ¦Line truncated
 )44AHOOr’””±ÆÆÌÕââõõ .7<clw|„Œœ±ÁÎÕÕí ;BGUessy€‰‰‰œœ°³³ÄÌÔÜù.3;;PZo‹‹‹˜˜®ººÎÛæôÿÿ0CH`uzz‰��¤­­¹¹ÆÌßëëøû$/4@LY^^x}}œ´´´¹ÅÌàî    ! & G P \ b k k k „ š š š § ­ ° » Á Ä Ì Û Û ó ù 





%
+
.
O
U
Z
a
v
}
‚
–
Ê
Ï
Ö
İ
ä
é
é
ğ
ö
û
û
 < B G f m m m r u | ƒ Š � � – œ ¡ ¡ ´ Ï Ï İ ò ø ú        " ' + - 0 ; G J L P P U U f x �@·¼��œ±·�848ğ/ô/û/ı/�È›±`‹`‹|‹‹‹”‹�‹¡‹¥‹²‹º‹¿‹¿‹Ğ‹Ô‹Û‹Û‹ë‹ŒŒŒ� ÄÕ Œ Œ®Œ»ŒÉŒÛŒæŒôŒ��!�,�:�@�F�‘È;q‘‘6‘B‘L‘T‘^‘f‘p‘€‘Б𑤑ª‘´‘¼‘ƑБç‘ç‘ê‘ô‘ ’’ ’-’2’2’F’Y’c’y’y’€’†’“’›’©’¹’É’Ù’å’å’ñ’ñ’ù’6“’h+¸�¸�Æ�È�×�Ş�î�ñ��� �␍���7�E�G�G�P�R�R�[�]�]�f�h�h�q�q�z�€�ƒ���£�©�·�·�[�“Èëğ�ğ�ü�����+�>�J�a�n�n�q����¦�ª�²�”€Şë � �°�·�Ã�É�Ô�Ş�Ş�á�å�í�•˜+;`�`�u��„�•�ª�°�²�¿�Ğ�Ğ�Ğ�×� ‘–X“›(‹(‹2‹<‹G‹R‹X‹^‹—`ÕŞH�H�X�d�r�v���‘�™�˜@¿Ä€Œ€Œ‰Œ•ŒšŒ™P¸¿PŒPŒZŒaŒqŒtŒzŒšP±¸ŒŒ"Œ.Œ>ŒEŒKŒ›h‰“ğŠğŠúŠ‹ ‹ ‹‹‹‹#‹œ@+0À/Ê/Ò/×/�0 \ \¶\Å\Å\Å\Ö\Ö\å\å\ë\í\í\ó\õ\õ\û\ı\ı\]]␍]␍]␍]␍]␍]␍]]*]*]4]9]B]L]Y]n]p]‹]�]¨]­]È]Í]Ó]Ó]è]ë]ë]^ ^7^7^W^W^`^e^…^s^‹^š^Ÿ^¦^¯^Â^Ê^Ò^×^×^×^à^ù^ÿ^ÿ^_&_&_@_V_X_`_f_n_s_s_y_y_‚_‚_“_•_ª_¬_´_º_Â_Ç_Ç_Í_Í_Ö_å_ù_û_` ``````$`8`:`N`N`V`\`d`i`r`z`ƒ`‰`�`‘`‘`‘`™`™`§`»`¿`Á`Í`Ï`ê`ğ`ø`ı`aaaa a)a,a,a:aHaJaJamaŠa�a˜a�a¦a¨a¨a­a¯a·a·aÒaäaéaõaûaşabbb*b.b5b>bMb[babibnbvb{b{b„b‘b–b�b�bµb¿bŞbŞbäbébébïbôbôbúbÿbÿbc
c
ccccc c c&c+c+c+c3c3cLcZcZctcŠcŠcŒcŒc•c›c c c c¨c¨c±cÀcÓcÕcÕcŞcäcécécécñcócócücücücdd(d*d*d3d9d;d;dAdGdGdOdXd^d^djdjdqd…d‡dŠd�d—dŸd¤d¤d«d¯d´dÃdÈdÒdÜdÜdédee ee,e8e?eMe\epeve{e{e€e“eŸe§e¯e·e¿eÈeÖeÖeİeßeèeèeîeüeff.fBfHfJf]fbfbfff‘f—f f¦f¯f½fÂfÂfÕfÛfİfèfúf g g!g-g?gDgPgVgYgpgrgug…g�g’g’g¡g´gÆgËg×gİgàg÷gùgüg hhhh2hBhBhGhLhLhSh[h`h`hfhfhthzh€hŠh”h·hºh¼hÆhÆhÈhĞhÕhÚhßhßhæhîhóhóhøhii iii:i<iAiFiKiPiUiZi_i_idiii…i·i½iÅiÅiÓiÙißiéióijjj%j4j9j9j9jAjFjOjOjTjTj[jcjhjhjmjxj}j‚j‡j‡j–j–j§j­j­j»jÁjÇjÑjÛjşjkk kk!k!k!k)k.k7k<k<kCkKkPkPkUk`kekjkokok~k~k�k•k•k£k©k¯k¹kÃkækékëkõkl l l lll l$l$l+l3l8l8l8lElKlKlYl_lelolylœlŸl¡l«lºl¿l¿l¿lÇlÌlÕlÚlÚlálélîlîlîlûlmmmmm%m/mRmUmWmampmumumum}m‚m‹m�m�m›m£m¨m¨m¨m®m¸m¾mÔmÙmÙmßmémşmnn nn n(n0n5n5n;nInUnfnsnzn‚nŠn�n¤n·n·n·n¼n¼n¼nÈnÈnÈnÈnÌnÑnÑnØnÜnánénïnñnún ooooo$o*o8oCoHoNoVo[o[o[o[o[o[o[o[o[o[otozoƒo‰o‘o–o›o¤o¯o¸oÀoÅoÅoÅoËoÓoØoØoÜoáoáoêoøopppp p4p4p:pCpWpWp`pbphpqp…p…p�p�p�p“p˜p˜p p¥p¥pÂpĞpÜpåpëpöpşpqqqq q&q&q8qBqBqJqJqRqTqTqmqwq€q‚q‚q‚qˆqŒq�q�q�q�q“q™qŸq¬q²q¶q]�€¥ÒpOpO–O–OªO¯O¶OÅOÅOÍOàOîOòO÷O PPPPP0P4P@PGPKPRPZP\PdPqPP‡P‰PŒP”P P®P¶PÄPÈPÖPŸLine truncated
;; ;(;-;-;E;E;_;i;u;};‚;‚;¡;­;¾;Ã;Û;ç;î;ö;û;<
<<<<<<<<"<%<'<'<'<F<R<c<e<k<n<n<w<w<€<“<š<©<²<º<º<º<Á<Í<Ö<Ş<æ<í<ñ<ü<== =%=+=0=7=?=?=X=]=]=p=x=z=z=z=z=z=z===†=†=�=�=“=š=�=±=¹=¹=¹=¹=»=»=À=À=Ï=Ï=õ=ş=>N¨(¯xWxW˜W›WŸW¬WµWÀWÌWÔWŞWıWıW X X XXXX%X*X*X6X;X;XGXLXLXXX]X]XiXnXnXnXpXpX‰X—X—X«X»X»X½X½XÉXÏXÔXÔXÔXÖXÖXßXîXûXıXıX YYYYYYYY Y Y Y(Y7YEYGYGYSYYY^Y^YdYpYpY{Y‡Y‡Y”Y©Y±Y·Y·YÈYÈYÑYÔYœ\©¸u‰<N<NYN`NoNrNvN~N‚N†N‹N˜N N¢N¶N¾NÅNÑNªø%AP3P3h3w3�3�3•3™3¤3¯3º3à3à3ö34444.4D4D4W4l4t4w4ƒ4«xŞê`Q`QlQsQ’Q�Q«Q¶Q¾QÈQĞQ¬xÒŞØPØPäPëP
Q
Q!Q'Q'Q4Q>QZQ­ğId(€(€:€F€Q€k€k€n€}€ƒ€ƒ€Œ€�€”€”€�€Ÿ€¥€¯€¶€»€½€Ç€®ˆdrȀȀр׀ò€÷€"�$�A�g�n��’�¯Àv‹8686A6H6\6p6u6“6˜6¶6¸6Ö6Ø6ï67 77"727c7°˜r‚˜�˜�¬�Ã�È�á�æ�ÿ�‚‚)‚)‚1‚8‚k‚±¸Vj 5 5.55575C5J5Y5d5p5t5‚5‚5•5¡5«5®5¸5²PnuNNN'N5N;N³/`$`$v$€$Œ$”$”$¤$ª$Á$Õ$ã$ñ$
%%%+%3%@%H%K%K%K%M%\%\%l%o%}%´˜#SğRğR SSQSaSgS�S S°S°SµS¹S¹SÀSËSÖSãSìSìSñSöSıSTTTT$T&T(T(T(T0T0T0T8T@THTPTTT^TœTµ¸PRPRbRbRfRkR~R�R†R†R�R–R–R¤R¦R°R�#°R°RÀRÄRÉRÉRÔRÔRŞRäRäRèRğR·øx”�U�U U¯U³U¼UÊUÙUèUèUşUşUHVHVLVSVXVfVuVuV‹V�V“VœV¨V¸@Sx T T°T´T½TÀTÉTÒTÒTâTâT UUUU!U!U2U9U<UDUGUTU\UdUlUsUsU„U„U�U¹PQXnnx‡‹�”ºğ”¯¨V¨V¶V¸V¼VÅVÑVİVİVğVğVW!W&W2W2WFWPWSW^WaWiWsW»pêõĞQĞQàQäQéQóQşQRR R¼põRR R$R)R3R=R@RDRLR½P &p/z/‹/œ/Ÿ/¥/¾@ X/b/j/o/¿‡'Ş6Ş6ô6ı6777"7*727:7@7M7M7S7X7X7^7c7c7i7n7n7t7y7y77„7„7Š7�7�7•7š7š7 7¥7¥7«7°7°7É7Ü7â7ç7ç7ğ78888#8)8181888@8F8L8T8T8[8c8i8o8w8w8~8†8Œ8’8š8š8¡8§8¯8µ8»8Ã8Ã8Ê8Ğ8Ø8Ş8ä8ì8ì8ó8ù899 9999!9)91999A9I9W9]9]9u9…9Š9�9’9’9œ9¢9¨9¨9¬9´9»9Ã9Ë9Ï9Õ9İ9ç9ò9ú9ş9:::":.:4:<:@:G:O:W:[:a:i:s:~:†:Š:�:›: :¶:Â:Ç:Ì:Ï:-=À æ‡�0�0¤0­0Ä0Ä0Ê0Ò0Ú0â0ê0ğ0ı0ı0111111111$1)1)1/14141:1?1?1E1J1J1P1U1U1[1`1`1y1Œ1’1—1—1 1¾1¾1Å1Í1Ó1Ù1á1á1è1ğ1ö1ü122 222 2'2'2.262<2B2J2J2Q2W2_2e2k2s2s2z2€2ˆ2�2”2œ2œ2£2©2±2·2½2Å2Å2Å2Ñ2Ù2á2é2ñ2ù23 3 3%353:3?3B3B3L3R3X3X3\3d3k3o3w33…3�3—3¢3ª3®3´3¿3Å3Ò3Ş3ä3ì3ğ3÷3ÿ34 444#4.464:4@4K4P4f4r4w4|44Line truncated
«««0«6«B«K«S«[«a«a«g«m«y«�«‡«‰«‘«ÉX!¾+¾+È+Ï+×+Ü+â+Êp9D�,�,—,—,—,¥,©,°,³,¸,ËpDO¾,¾,Ç,Ç,Ç,Õ,Ù,ç,ê,ï,ÌpOZö,ö,ÿ,ÿ,ÿ,␍---- -ÍhZd&-&-/-/-2-2-@-N-Q-V-Î@,1nsns|s‚sˆsÏ@ ø./ //Ğ@ à.é.ñ.ö.Ñ/?æ=æ=ü=>> >1>8>I>Q>Y>\>j>€>€>•>—>—>£>«>²>¿>¿>Ë>Ó>×>ä>ä>ä>ñ>÷>ÿ>ÿ>??,?1?7?B?G?G?L?e?t?y??Š?�?�?�?¦?²?º?Â?Ê?Í?Ó?Ø?á?ó?ü?␍@@@"@*@2@5@;@;@@@@@@@@@F@I@P@[@•@¬@¬@¹@Á@É@Õ@á@ç@î@÷@÷@û@ş@
AAAAAAAAAAAA*A*A:A:AGAGAOAWA`AoAtAtA{A†AŒA”AšA¥AªAªA¹AÄAÖAÜAäAêAïAöABBBB.B7BHBXBXB]B]BqBwB‚BˆBŠBšB B B¼BãBõBşBC C C$C$C2C:COCbCiCoCwC}C�C“C›C¡C¡C¡C¦C¦C¦C¦C¦CÅCÕCÚCÚCîCôCôC
DD!D#D<DBDKDSD[DaDsD|D�D�D�D¢D¢D¶D¼D¼DÒDãDéDëDE
EEE#E)E;EDEUEeEeEjEjE€E‰E”E�E¨E³E¸E¸EÎEÔEÔEêEûEFFFF"F*F2F8F?FQFZFkF{F{F€F€F–FœFœF²FÃFÉFËFÚFàFêFòFúFGGG"G3GCGCGHGHG^GdGdGzG‹G‘G–G–G¨G®G³GÌGáGáGæGæGòGúGıGH HHH2H:HBHRHXH^H^HoH„H„H‰H‰H•H�H H§H­H²H²HÒHÚHêHğH÷HI$I,IDILIOIVI\IwIIšI¢I¥I¬I²I²I²IÑIáIíIõIøIÿIJJ$J0JKJSJVJ]JcJwJƒJ¡J©J¬J³J¹J¹J¹J¹JËJÔJåJêJüJ K KKK*K@KFKFK^KqKwK|K|K�K”K™K±K·KÃKËKÎKÕKÛKıKLLL"L"L"L4L=LNLSLeLuLuLzLzL›L±L·L·LÏLâLèLíLíLMM*MgM|M„MŠMœM¥M¶M»MÍMİMİMâMâMøMNNNNN*N3NDNIN[NkNkNpNpN†N’N’N�N¦N¦N¸NÁNÒN×NéNùNùNşNşNO O O,O4O4OFOOO`OeOwO‡O‡OŒOŒO¢O¨O´OºO¿O¿OÑO×OÜOëO÷OP PPP)P4P=PIPQPTPZP`PePyPˆP�P¨P°P³P¹P¿PÚPâPâPQ"Q*Q-Q3Q9Q9QJQSQ_QgQjQqQwQ|Q�Q�Q¥Q½QÅQÈQÏQÕQğQøQøQR7R?RBRIROROR_RhRtR|RR…R‹R�R¤R³R»RÕRİRàRæRìRSSS4SSS[S^SdSjSjS{S„S�S˜S›S¢S¨S­S¿SÎSÖSñSùSüST T T(T(TMTmTuTxTT…T…T…T…T…T—T T±T¶TÈTØTØTİTİTóTùTU UUU"U(U-U;UGUPU\UdUgUnUtUyU‹UšU¢UºUÂUÅUÌUÒUíUõUõUV4V<V?VFVLVLVLV]VfVrVzV}V„VŠV�V¡V°V¼V×VßVâVéVïVWWW7WWW_WbWiWoWoWoWoWoW�WŠW›W W²WÂWÂWÇWÇWÚWğWöWX XX X(X9X;XMXZXZXZXjXzXXX’X¨X®X¹XÄXÉX×XàXñXóXYYYY"Y2Y7Y7YMYSYSYpYˆYŠYŠY²Y¸YºYºYÆYÏYÚYÚYßYíYöYZ ZZ(Z(Z(Z8ZHZMZMZcZiZiZ†Z�Z Z ZÈZÎZĞZĞZÜZåZğZğZõZ[ [[ [1[>[>[>[N[^[Line truncated
__)_)_4_9_9_m_m_m_~_“_Ÿ_¿_Ï_Õ_Õ_Õ_Ş_ğ_` ``` ` `T`T`T`e`t`¦`¶`¼`Å`×`ê`ó`aaaa;a;a;aLa[a�a•a›a¤a¶aÉaÒaáaáaæaæaæabb#b5bHbQb`b`bebeb™b™b¨b±b¼b¾bÇbÒbÒbóbúbcccc)c/c7cBcHcHcMcMcMcMcMcMc�c�cŠc™c�c�c�c­c²c²cÄcÏc×cßcåcåcåcêcêcõcd ddd*d1d7d<d<dGdXd[dgdpd|dƒd‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d‰d�d�d�d�d“d˜d˜dŸd£d£d¯d¸d¸d»d»dÆdÈdÚdádçdöde eee e e+e4e4e7e7eBeDeVe]ecekeve�e‡e’e•e™e™e¡e¨e«e­e¸e¼eÅeÅeÈeÈeÓeÕeíeôeÿe
f ffff f#f#f/f8f8f;f;fFfHfZfafgfvf�fŒf’f›fŸfŸf«f´f´f·f·fÂfÄfÖfİfãfëföfgggggg!g(g+g-g8g<gEgEgHgHgSgUgmgtggŠg�g“g˜g˜gªg®g®gºgÃgÃgÆgÆgÑgÓgågìgòghhh h h h h h h h h h%h%h0h5h5h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@h@hEhEhEhEhEhEhEhJhOhOhZh]hahhhmhrhwhwh‹h�h�h�h¡h²hºh¾hÒhÙhİhİhêhöhşhiiii)i;iFiJiJiWi_igimimimimimimimimimimimimimimimimioioi}i„i‘i�i�i«i«i«i­i­iÄiÊiØiØiìiúijj#j0j0jHjUj`jijrj}j„j„j�j�j‘j£jÁjÏjØjVrÒÀ1†�s�s¤s¬s¯sÂsĞsåsîstt+t3tAtEtWtZtbtktwtŠt»t™tĞtätõtuuu-u?uPuRuRuYu�u�u“u˜u›u›u¢u¹uÄuÓuàuóuóuv v"v"v:v?v?vOvWvhvrvƒv�v�v©v®v®v¾vÆv×vávòvüv wwwww1w?wIwNw[wgwgwlwww†w‹w‘w–w–w›w¦wµwºwÀwÀwÀwÀwÀwÀwÀwÀwÀwÅwÅwËwÑwÑwÑwÑwÑwÑwÖwÖwåwøwxxx0x8x>xGxGx^xrxƒx�x•x­xÀx×xäxìxÿxy yy y y$y$y$y$y$y0y0y0y9yRygyoyŠy›y¨yªy¾y¾y¾y¾y¾y¾y¾y¾yÃyÃyÃyÎyÜyáyáyèyöyûyz z z1z=zCzRzVz_zhz…z‘z—z�z°z¸zÀzÔzåzòzôz{{{{{{!{4{@{L{R{V{_{d{d{d{d{d{d{}{}{}{}{}{}{}{‚{‚{‚{‚{‚{‚{“{“{“{“{“{“{“{“{“{“{œ{µ{Ê{Ò{í{ş{ | |!|-|2|2|2|;|U|a|ˆ|”|”|™|™|™|™|™|™|™|™|™|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|®|Line truncated
™™™1™=™E™Z™Z™f™k™w™‚™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™‡™Œ™Œ™Œ™—™—™—™—™—™—™—™—™—™—™—™—™¢™™ß™ï™õ™ı™ššš%š'š/šBšHšPšXšZšzš‚š‹š“š›š š¥š¬š·šßšêšòšòš› ››$›)›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›1›6›6›6›?›H›K›U›c›c›v›x›‹›�›�›�›¨›­›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ê›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ï›Ú›æ›ò›
œœœ!œ)œEœMœPœRœRœbœlœlœnœnœ�œ’œ•œ˜œ œ¥œ¥œ®œ³œ»œœÏœâœèœïœôœ ��1�J�R�_�r�x���„�„�„�„�„�„�„�„�„�„�„�„�„�„�„�Œ�—�¢�±���¾�Å�Ó�Ø�Ø�Ü�á�á�ñ�ñ�ö�ö�ö� ��*�=�C�K�`�g�o�o�q�q�Œ�’�¢�¢�­�´�Â�Ï�Ï�Ò�İ�û� Ÿ¦Ôğ|¦¦¦'¦.¦9¦9¦D¦[¦f¦m¦~¦‘¦—¦—¦¦¦À¦ǦЦÚ¦ݦé¦ò¦ü¦ÿ¦§§$§$§6§=§I§^§e§n§z§�§–§–§–§¤§²§¼§¿§ͧ×§Ú§ì§ì§ñ§ö§¨ ¨¨¨!¨%¨.¨6¨H¨P¨P¨P¨f¨p¨p¨‚¨‰¨•¨ª¨±¨º¨̨Ó¨â¨ó¨ó¨ú¨ú¨ú¨©© ©#©1©;©>©P©P©U©Z©j©m©r©‚©…©‰©’©š©¬©´©´©À©ΩΩѩܩú©
ªPªÕ¨ƒõî®î®¯¯*¯1¯<¯<¯O¯]¯e¯m¯z¯�¯‰¯�¯®¯¼¯Ú¯è¯ë¯ï¯ó¯ú¯°°°°+°0°?°?°?°E°J°`°l°�°‰°‰°”°Ÿ°ª°µ°À°̰̰ذë°ø°
± ±6±>±G±O±O±w±±…±�±�±œ±¯±µ±½±бÖ±ޱޱò±ş± ²²$²,²?²E²M²M²M²v²v²|²–²š²�²¨²²вײܲç²ü²³³³7³K³K³·³Ö "ƒ–«–«¸«Ê«Ï«Ï«Ú«Ú«á«ò«¬
¬
¬¬¬¬!¬)¬)¬7¬P¬R¬Y¬r¬…¬“¬›¬�¬«¬¹¬¹¬Á¬ʬÕ¬ݬè¬ò¬ú¬ı¬­­&­8­;­@­S­S­l­€­ˆ­ˆ­š­�­¢­µ­µ­έâ­ê­ê­ö­ ®®®*®1®F®_®a®v®�®—®—®¢®°®½®®®É®Ô®ë®×P'è¾³¾³سë³ù³´$´.´<´<´Y´f´f´p´p´z´�´�´�´©´©´³´¹´¿´´Ù´ä´ÿ´µµµµ"µ-µ8µRµ\µdµ{µ�µ°µÀµŵ˵ѵܵéµğµ#¶(¶1¶R¶V¶\¶d¶i¶i¶v¶}¶˜¶„¶¤¶¨¶®¶¶¶»¶ܶà¶æ¶î¶ş¶··%·)·/·7·<·]·a·g·o·o·t·�·ˆ·©·­·³·»·Ä·å·é·ï·÷·÷·¸ ¸,¸0¸6¸>¸G¸h¸l¸r¸z¸z¸z¸†¸†¸‘¸›¸ ¸¼¸ȸÙ¸޸︹¹#¹(¹-¹-¹8¹@¹H¹M¹i¹v¹…¹”¹®¹®¹ιÓ¹ععã¹ë¹ø¹ººº5ºGºYºlºdº„º‰º�º�º�º’º’º«º´º´º׺ܺáºáºéºıº»»'»2»2»F»T»]»b»g»l»l»t»»„»„»Œ»—»œ»œ»¤»»¬»Ú»ß»ß»ç»¼ï»¼"¼"¼-¼C¼X¼d¼u¼z¼‹¼Ÿ¼Ÿ¼¿¼ļɼݼɼõ¼ú¼ú¼½ ½ ½½½½%½6½H½M½M½a½M½y½~½~½†½‹½‹½�½£½£½¶½»½»½»½Õ½å½ê½ê½ê½¾¾¾¾¾3¾C¾H¾H¾H¾b¾r¾w¾�¾w¾¦¾«¾«¾¶¾»¾÷¾å¾»¾¿¿P¿>¿¿h¿m¿m¿m¿|¿Œ¿‘¿‘¿‘¿ ¿°¿µ¿µ¿µ¿Ä¿Ò¿׿ÿ¿í¿׿ÀÀDÀ2ÀÀ\ÀaÀ‰ÀwÀaÀ¡À¦À¦À¦ÀÃÀ­ÀíÀıÀÁÁÁÁ ÁGÁWÁ\Á\ÁhÁmÁmÁyÁ~Á~Á~Á‘Á¡Á¦Á¦Á¦Á¹ÁÉÁÎÁÎÁÎÁáÁñÁöÁöÁöÁ ÂÂÂÂ&Â+Â+Â3Â8Â8Â@ÂEÂEÂMÂRÂRÂeÂjÂjÂ}‚ÂÂİÂâÂ0Ãà ÃâÂ=ÃBÃBÃBÃQÃlÃqÃqÃqÂÃ�âââóÃÁÃÆÃÆÃÎÃÓÃÓÃÛÃàÃàÃèÃíÃíÃíÃ%ÄÄôÃDÄ_ÄdÄdÄdĜĊÄkÄ»ÄÖÄÛÄ␍ÅûÄÛÄ%Å*Å\ÅJÅ*ÅtÅyÅ“ÅyūŰÅÍŰÅåÅêÅêÅêÅ
Æ Æ"ÆÆ.Æ>ÆKÆYÆ|Æ~ƕƛƴÆÁÆòÆ4ÇÇ@ÇHÇHÇHÇTÇTÇYÇYÇjNjǖǠǫǭǸÇÀÇÅÇÊÇÊÇÕÇİÇâÇíÇıÇÈ-ÈAÈFÈKÈKÈ^ÈiÈsÈxȃÈ�È’È’È�ȰȺÈÅÈÚÈæÈ÷ÈüÈ␍ÉÉÉÉÉ+É6É>ÉCÉNÉ[ÉfɀɒɤɯɴɿÉÇÉÌÉ×ÉäÉïÉ ÊÊ-Ê-Ê2Ê7Ê7ÊBÊGÊGÊRÊWÊWÊbÊgÊgÊrÊwÊwʑʖʖÊ�ʣʣʮʳʳʾÊÃÊÃÊÎÊÓÊçÊÓÊóÊşÊËËË#Ë.Ë3Ë3Ë>ËCËCËNË\ËaËaËlËwË|Ë|Ë�˒˒ˣ˨˨ËÂËÍËÒËÚËÒËæËëËÿËëË ÌÌÌÌ$Ì)Ì=Ì)ÌIÌIÌNÌNÌbÌNÌnÌnÌsÌÌs̶̗̗̣̗̻̻̒ÌÇÌ»ÌÚÌßÌßÌëÌßÌşÌÍÍÍ#Í/Í:ÍEÍJÍ^ÍJÍjÍvÍ�͌͑ͥ͑ͱÍÂÍÇÍÇÍÏÍÔÍÔÍÜÍáÍáÍêÍïÍïÍøÍıÍıÍÎ Î ÎÎÎÎ&Î+Î+Î6Î;Î;ÎFÎKÎKÎVÎ[Î[ÎfÎkÎkÎvÎ{Î�Î{ΛΦαμÎÁÎÁÎËÎĞÎĞÎÚÎßÎßÎéÎîÎîÎøÎıÎıÎÏ
Ï
ÏÏÏÏ)Ï.Ï.Ï.Ï.Ï.Ï6Ï;Ï;ÏCÏHÏHÏPÏUÏUÏ]ÏbÏbÏjÏoσÏoÏ�ϠϥϥϷÏÂÏÂÏâÏçÏıÏĞ!Ğ␍Ğ-Ğ8ĞCĞHĞHĞZĞeĞeĞ…ĞŠĞ Ğ«ĞÄаĞĞĞÛĞæĞëĞëĞıĞÑÑ(Ñ-ÑCÑNÑgÑSÑsÑ~щÑ�Ñ�Ñ´Ñ ÑÀÑÀÑàÑåÑûÑÒ Ò&ÒÒFÒ2ÒRÒhÒTÒˆÒtÒ”ÒŸÒ¤Ò¤ÒÊÒ¶ÒÖÒÖÒöÒûÒÓÓ!Ó<Ó(Ó\ÓHÓhÓ~ÓjÓ�ÓŠÓªÓµÓºÓºÓàÓÌÓìÓìÓ ÔÔ'Ô2Ô7ÔRÔ>ÔrÔ^Ô~Ô”Ô€Ô´Ô ÔÀÔËÔĞÔĞÔßÔäÔäÔóÔøÔøÔ ÕÕÕÕ$Õ)Õ.Õ.ÕAÕPÕUÕZÕZÕmÕ|Õ�Õ†Õ†Õ¨Õ­Õ²Õ²ÕÔÕÙÕŞÕŞÕÖÖ
Ö
Ö,Ö1Ö6Ö6Ö6ÖTÖxÖ}Ö‚Ö‚Ö¤Ö©Ö®Ö®Ö®ÖÌÖğÖõÖúÖúÖ×!×&×&×&×D×h×m×r×r×”×™×�×�×�×¼×à×å×ê×ê× ØØØØ1Ø6Ø;Ø;Ø;ØVØ[Ø`Ø`Ø`Ø{؀؅؅؅ؠإتتØÅØÊØÏØÏØÏØêØïØôØôØôØÙÙÙÙÙ4Ù9Ù>Ù>ÙOÙTÙYÙYÙjÙoÙtÙtÙ}ًٮÙÉÙÉÙÉÙŞÙàÙìÙúÙÚ Ú)Ú4ÚQÚmÚ{Ú†Ú›Ú«Ú°Ú°Ú»ÚÀÚÀÚÌÚåÚêÚ ÛÛÛ#Û4Û>ÛSÛ[Û]ÛnÛyÛ�Û†Û‹Û‹Û�Û“Û›Û¥Û¯Û´Û¹Û¹ÛÄÛÎÛÎÛÎÛÎÛÓÛÓÛÓÛİÛİÛßÛßÛéÛéÛöÛÜÜÜ"Ü"Ü"Ü$Ü$Ü;ÜAÜNÜNÜ[ÜbÜiÜtÜ܊ܕܚÜÃÜ»ÜÛÜäÜ İİ%İ%İ%İ-İ6İ<İGİGİUİ^İpİyİ�ݖݖݖݖݮݸİÍİçİçİçİŞ Ş Ş4Ş6ŞNŞ`ŞpŞpޘޟޡާޭް޵޼ŞÌŞâŞâŞæŞæŞıŞß ß ß ßß#ß5ßJßZßfßwß|ß�߬ßÈßÜßßßäßïßñßñßõßõßà à à"à0à0à^à~à~à~à†çØX)1,,,,%,4,C,H,ÙX19N,N,\,b,f,u,„,Š,Ú@@/J/R/W/ÛPşÔşÔÕÕ%Õ2Õ2ÕRÕܨ4fNÖNÖ`ÖgÖjÖ…Ö…Ö¢ÖµÖÈÖÛÖàÖàÖşÖ × ×2×:×:×<×<×<×O×Q×Q×Q×X×k×~×~×~×�×—×�װׯ×Ë×Ò×Ù×î×ØØØ ØíØİHa‡  , 2 9 A I L W k r u w € “ “ – � ´ · Å È Ë Ò Ö Ş ì ì !!!K!Ş€½J€ª€ª’ªœª¤ª¬ª´ª¼ªÄªÄªÒªåªşª««««%«+«0«0«8«A«G«L«L«T«]«c«h«h«p«y««„«„«�«™«�«¢«¨«­«­«µ«¾«Ä«É«É«ã«ù«ù«ù«¬¬¬¬ ¬ ¬ ¬ ¬¬¬¬¬ ¬!¬!¬.¬.¬4¬9¬@¬K¬K¬[¬[¬[¬b¬m¬m¬}¬}¬ˆ¬Œ¬’¬ª¬¸¬Ë¬×¬ô¬÷¬ş¬­­!­,­,­7­=­B­I­T­Y­`­k­w­}­}­”­œ­¢­¢­Ä­Ğ­Ö­Û­â­í­í­ò­® ®®®®®%®%®0®0®0®0®õ®ßğ½.Ì.ÌDÌKÌRÌ_ÌjÌoÌ�Ì�̣̫ÌÃÌÉÌçÌûÌÍ Í%Í%Í5Í5ÍLÍNÍQÍ]ÍeÍmÍuÍLine truncated
»
»»»'»/»=»D»H»J»J»\»\»\»n»v»œ»œ»ª»ª»®»Ã»Ë»Û»æ»æ»û»¼¼¼%¼3¼>¼B¼G¼O¼S¼S¼b¼d¼s¼u¼„¼†¼•¼œ¼¢¼¶¼¾¼Ì¼Ó¼×¼ç¼ò¼÷¼½½+½2½6½>½L½S½W½s½{½†½Œ½Œ½Œ½•½ ½°½Ò½Ú½å½ô½ü½¾ ¾¾ ¾+¾/¾:¾?¾Q¾Y¾d¾d¾d¾d¾r¾�¾�¾ª¾²¾Â¾Ò¾ğ¾ô¾#¿ ¿8¿8¿C¿J¿Y¿h¿p¿~¿…¿‰¿‹¿š¿¢¿°¿·¿»¿»¿½¿½¿Ï¿Ï¿á¿á¿á¿ç¿ó¿À␍À%ÀQÀQÀ_ÀcÀ�ÀˆÀ�ÀšÀšÀ°À²À¹ÀÌÀÔÀâÀéÀíÀïÀÁ
ÁÁ Á#Á#Á#Á#Á1Á<ÁKÁSÁaÁlÁpÁpÁuÁ}Á�Á�Á�Á’Á¡Á£Á²Á´ÁÃÁÊÁĞÁäÁìÁúÁ Â%ÂCÂKÂYÂ`ÂdÂlÂzÂ�…¡©´ºººÂÃÂØÂòÂÃ␍Ã␍Ã"Ã'Ã2ÃBÃdÃlÃwÆÃ�ÙÃ�æñýÃÁÃÌÃÑÃãÃëÃöÃöÃöÃöÃ
ÄÄÄ/Ä<Ä@ÄTÄeÄeÄzćċęĮľÄÕÄîÄÅ ÅÅÅÅ%Å:ÅKÅbÅ{ŔŖšũũũÅÃÅÑÅßÅôÅÆ!ÆMÆTÆTÆdÆyƓƓƗƭƴƼÆ×ÆâÆùÆÇÇ#Ç#Ç6ÇQÇZÇoÇ�ÇŸÇËÇÙÇïÇÈÈÈ0È0ÈHÈHÈTÈlÈ„È�È�È�șȪÈÂÈËÈËÈÒÈÛÈáÈïÈXÉã(8z–2–2µ2µ2Ì2Ñ2Ù2á2é2î2333!3'3,343P3Z3\3^3k3k3m3‰3“3•3—3¤3¤3¤3©3±3¹3Á3Æ3Ú3é3ë3ô3ı34444 4,4J4R4_4e4x4|4„4„4˜4¨4¨4«4ô4äx-şş#*.229@DLPPW^bjnnu|€ˆŒŒ“š�¦ª­±åØ0HFF.F.F9FDFQF_FeFxF~F‘F—F£F·F·FËFÛFéFïFGGiGæ ‡¨N!N!f!n!u!!…!�! !¨!­!¸!¸!Â!È!Ó!ã!ë!û!"
""" "*"*"8"8"N"ç@*Oîßîßòßößàààà%à0àBàMàXààà�à¢à´àÆàÊà×à×à×àáàèàıàáá%áAáFá`áè8f*îØîØ ÙÙÙ"Ù$Ù$Ù,Ù,Ù,Ù4Ù<ÙNÙNÙrÙtÙtÙ�Ù�Ù�ٛ٠ٺٿٿٿٿÙÔÙÖÙÖÙãÙåÙòÙôÙÚ ÚÚÚ'Ú'Ú4Ú6ÚJÚWÚWÚWÚ`ÚrÚ…Ú‹Ú“Ú•Ú¢Ú¢Ú·Ú·Ú·ÚÂÚÌÚäÚéÚéÚéÚéÚ÷ÚıÚÛ
ÛÛ'Û2Û7Û7Û>ÛBÛPÛWÛ`ÛgÛyÛ€Û‡Û�Û�Û¬Û±Û±Û±Û±Û¹ÛÄÛÄÛÒÛÒÛéÛéÛéÛğÛşÛ Ü Ü3Ü5Ü5Ü5ÜHÜHÜOÜVÜ[ÜaÜaÜsÜ}ܘÜÁÜÇÜÇÜÛÜàÜòÜùÜİİ(İ5İ<İ@İ@İ@İ@İKİUİUİcİ…İ…İ‘İ®İ¸İ¸İÆİêİğİŞŞŞ+Ş>ŞCŞCŞCŞKŞVŞhŞsŞxŞxŞxŞxފ޷޽޽޽ŞÈŞÒŞÒŞŞŞéŞëŞëŞğŞğŞüŞüŞîßé@HmnGnGˆGˆGœG¢G°G°G»GÉGÕGéGôGHHHH$H*H*H?HEHNHTHTHhHnH{HƒH‘H�HğHê(Ã7747B7U7Z7o7v7|7„7Š7˜7Ÿ7®7³7À7×7ä7÷7ş7888/848J8S8b8j8w8€8‚8™8³8¸8Ã8Õ8à8é8ï8ú8ş899O919d9™9{9®9±9Á9^:ë°�q¾ä¾äØäŞäáäêäôä åå'å-å1å5å7åOåaånåtåxå|å~å‚å†å†å¬å°å¶å¶å½å½åßåôåææ æ'æ2æ<æ@æCæJæPæVæ[ælæræwæ~æ~æ‹æ�æ¡æ£æ¨æ¨æµæ·æËæËæËæËæËæîæöæççç2ç>ç[çç™ç�çµçºçÈçÜçáçççòçúçèèè'è4èLèSè_èjèwèƒèƒèƒè‰èŒè�è©è¯èÃèÉèĞèÛèÛèàèàèíèüèüèéé$é*é-é0é7é>éEéEéJéJéWéféfélézé�é”é—éšé¡é¡é²é·é·éÄéÓéÓéÚéäéëéñéøéêêêê1ê6ê=êEêOê^êbênê†ê‹ê‹ê´êÃêÊêÒêÒêëêÿêÿêëë4ëRëYë{ë�ë²ë´ë´ë¾ëàëàëàëùëìì-ì1ìÜìì`zÃö4ö455"5*5D5D5M5O5\5\5^5x5‚5„5†5“5“5“5“5—5 5¨5²5¼5À5À5Ò5å5î5î5ı5ı5 6 666*6/646H6W6W6Y6c6l6u6|6‚6–6�6¤6«6¹6Â6å6î6ò6÷6ü6ÿ6 7 77í8-Q¼ĞÓÛâæêêñøü"&&-48@DDKRV^beiî`8ANNb§omÊÒïØı^:^:t::::¬:¬:º:º:º:Ê:Ó:Ú:á:ê:ê:ò:ö:;!;-;3;3;>Line truncated
<<&<:<:<?<?<O<T<T<Y<`<h<o<q<y<€<€<�<•<¢<©<¬<Å<Å<Í<Ü<ç<î<ğ<==== = = = =5=:=I=P=W=l=€=€=…=…=�=œ=£=¨=¼=Ã=È=È=Ô=æ=æ=ú= >> >/>=>K>S>Z>x>…>Š>™>™>°>·>¾>Î>Ğ>Ş>î>ğ>ş> ??#?9?@?L?^?u?w?ƒ?�?�?�?�?²?Â?Ê?Ì?à?õ?ü? @@:@A@M@o@o@o@w@w@ƒ@‡@�@“@�@¥@¬@Æ@Ë@Ò@İ@æ@î@ó@ó@AAA*A9ADAOA]AcAiAoAxAA‘A‘A�A¦A²AÁAØAÚAãAîAğAüAB$B*B0B9B9BJBnBwB�B�B¢B·B·BÄBÉBÉBİBãBãBãBãBÁCğıÆCÆCæCæCúCD D D D4D:DEDUDcDlDrDxDƒD‘D�D¬DºDÉDÉDEñpXc––  ¹ÀÆÌÌÒò˜áñæMæMğMúMNNN!N-N/N/NCNCNCNENuNó�nãnã|ã|ã“ã�ã¦ã¨ã¯ã¿ãÌãÎãÙãÙãßãòãòãõãõãä#ä%ä>äEäIäUähä·äô@ ~Õ~Õ‡Õ›Õ Õõ@ŞÕŞÕçÕÖ ÖöØ4ÖÖÖ"Ö+Ö2Ö9ÖCÖCÖIÖ÷@ VÕVÕdÕxÕ~Õø@¦Õ¦Õ´ÕÓÕÙÕù˜Ofáfávává�áœá á®á´áÃáÃáÊáÚáçáîáõáâ2â8â=âAâQâQâQâiâkâvâ—â¤â¦â¿âÃâÑâÖâÖâİâéâñâãmãú UµŞRŞRøRşRşRSS SSSS"S+S1S8S8SQSZSaSgSuS�SŠS‘S—SœSªS½SÈSÌSÔSÔSÚSêSíSòSòSøSTT T TTT!T&T&T,T8T;T@T@TFTTTWT\T\TbTpTsTxTxT~T…T•TœTŸT¤T¤T¤T¶T¼TÊTÏT×TğT÷TUUUU2U=UJUPU]U`UfUkUkUkU}UƒUƒUƒUšU¢UªUÈUÓUàUæUõUşUVV V V VV$V-VFVQV^VdVqVtVzVVVV‘V—V—V®VµV¾VÊVĞVÜVáVñVşV WWW!W$W*W/W/W/WAWGW`WkWxWxW~W‹W�W”W™W™W�W²WÇWÍWÏWãWéWïWXX XX3X9X=X@XEXEXKXWXZX_X_XeXeX{X‹X�X�XLine truncated



&
*
6
E
E
]
c
n
n
n

…
ˆ
“
™
œ
�
Ì
ß
÷
ı
  $ * 5 5 B ¿ cÔ¦&¦&Ä&Ï&Ö&Ö&ß&ï&ï&'
''''@'@'M'P'Y'Y'm's'x'Ÿ'²'¶'¼'Ó'Ú'è'î'ú'( (()(3(<(L(N(U(Z(b(�(�(�(›(¸(×(Ş(è(÷(ı() )))3)T)h)t)ˆ)“)›)ª)·)Ä)Ò)à)ı)
****M*_*v**…*‘*–*�*�*±*¼*É*Ğ*Ğ*Ğ*â*ñ*ó*++&+&+.+Q+\+�+¨Û-�+�+Å+Ï+â+í+,,,+,2,:,P,X,X,k,€,�,š,œ,¬,¼,Å,Ë,Ğ,×,Ş,ä,ê,õ,--
-$-,-F-[-[-h-k-s-w-‰-˜-£-«-«-Â-Û-ß-è-ï-. .... .1.H.V.\.`.b.o.o.o.q.ˆ.�.�. .ˆ 0v6v6”6œ6¢6¢6³6Ğ6Ş6ä6ä6ä6ñ6ó6ş6777(7.78787C7M7M7a7g7w7}7‚7‰7’7˜7�7­7Â7Ç7Ê7Ğ7Ğ7Ø7Ş7ä7ä7ù78888%8.8.8D8J8P8f8k8r8‡8‹8‹8“8™8«8±8¹8Ã8Î8Ô8Ø8ò8û899 99!969;9?9F9L9R9R9Z9^9e9k9q9q9q9œ9œ9­9­9Ä9Ñ9Õ9Õ9İ9ò9 : ::::::/:@:@:U:i:u:ƒ:‡:™:�:£:À:Â:È:Õ:×:ã:; ;;7;B;H;N;T;];d;y;Š;–;š;¬;°;¶;Ó;Õ;Û;ì;î;ú;< <%<+<4<;<;<K<i<r<x<x<�<’<’<™< <²<·<·<·<Ñ<Ö<ğ<õ<==!=,=O=U=[=g={=‚=ˆ=”=™=™=¤=¨=¯=Á=Æ=Î=Ó=Ş=ä=ì=ñ=>>>%>2>E>E>_>d>d>~>~>‰>˜>�>¦>«>¸>¿>Ä>Ä>Ï>Ó>Ú>ì>ñ>ù>ı> ???"?*?2?:?M?Y?^?j?j?s?s?�?�?£?©?®?²?·?·?·?·?½?Â?Â?å?ë?ñ?@ @ @ @,@,@,@1@1@T@¿CÈ 6WW.W.WBWHWSWaWmW�W�W•W›W›W¦W¶WÃWÑWŞWX xiu88 8'8C8Q8V8V8n8x8x8‰8
€Üé'2=HS^ik{ `¹Â\\*\=\F\L\O\W\  ¨¹h[h[v[x[‚[”[›[¥[§[§[»[Å[Ú[Ú[İ[\ hÈ@È@Ø@ê@ğ@ö@ü@€h@h@t@~@…@Œ@ @²@²@È@˜3Cà/à/ğ/ğ/ 00030C0O0S0{0hé3€€’¢²û#+4:BDJRY`‘ššÏù!9Mj” ¿×Ùàçç>x²ì&```lw|||‹˜��£¨¨®¹¾¾ÄÏÔÔÚåğõõû  ',,2=HMMS^ityy…ŠŠ�›¡¦¦¬·½ÂÂÈÓŞäééïú !'))/:EKMMS^itz||ƒƒ‘””Ÿ¬»»Ğ 77E]]foŒšÔéé0Nccor£¥ÀÇÇÔİßíïıÿ  16==JSUcesuƒƒ££££°ÇÚû)19AIWejrz‚Š˜¦¦ºÅÛñ,7ELfz�”®ÂÂØİßææû.99FRWin€…“““Ûâíğ $(CGZ^^xŒ—œª¿Êà&+>CVccu�Ÿ¦ÀÔø  ?SX„˜��¯´ÆÒò   ) 5 : L Q c h z z � � � � � ³ ³ ³ º Ô é û  % 3 3 8 8 8 @ Z o t t t { • ª ¯ ¯ ¯ Ğ å ê ê ñ ô !"!7!<!<!D!G!a!u!Š!�!�!–!™!³!Ç!Ü!á!á!ö!ö!" " ","F"["`"`"r"w"w"‰"�"�" "¥"¥"·"¼"¼"Î"Ó"Ó"å"ê"ê"ü"#####*#/#/#A#F#F#X#]#]#o#t#t#†#‹#‹#�#Ç#Ç#İ#İ#İ#ä#ş#$$$$ $:$O$T$T$T$[$u$Š$�$�$�$–$°$Å$Ê$Ê$ß$ß$ñ$ö$ %%/%DLine truncated
J
f
f
z
€
‹
—
§
·
É
Ï
Ï
Ï
Ş
ä
é
ï
ï
ï
ş
     Ù¸ qŞìŞìøìíí+í+í+í+í?í?í[íríxí�í�í�í•í�íµí»íÄíÄíÄíØíæíòíîî)î.î7î7î7îKîOîWî_îkîˆî—î¢î§î­î¶î¶î¶î¶îÊîßîåîîîîîï(ï-ï-ïAïLïVï\ïlï€ï€ï’ï’ï¦ï¬ïÔïİïİïòïıïıïğğ!ğ:ğMğYğ]ğoğ�ğ‰ğ�ğ«ğ¹ğ¹ğ¹ğÆğâğÍğóğêğığÿğññ#ñ#ñ1ñ1ñ3ñOñOñVñ\ñeñmñpñ‡ñ“ñ§ñšñ¯ñµñ¾ñ¾ñ¾ñÑñÖñÖñáñîñ÷ñşñşñòò#ò,ò,ò:òDòDòXòcòiònòwò�ò�ò•ò ò¦ò«ò´ò¿ò¿òÓòÚòáòáòó!ó#ó#ó@óUóUó[ódóqóqó„ó„ó˜óªóµóÄóÍóÒóùóô␍ôôô"ô2ôGôLôSô`ôgôgô{ô�ô—ô�ô¦ô¦ôÉôĞôÕôãôóôõõõõõõõ*õ*õ>õAõAõRõZõbõjõõ‡õŒõ¡õ±õ³õ»õ»õĞõ×õìõüõüõüõüõööööö2ö>ö>öRö_öjöxöƒöƒö“öšö´öÇöÉöÙöîöğöğöÿö÷÷÷#÷#÷+÷+÷?÷E÷X÷d÷d÷x÷{÷†÷˜÷ ÷«÷°÷¸÷À÷Í÷Ò÷Ò÷è÷í÷í÷øøøø ø'ø.øBøPøeøeøkøsø|ø�ø¢ø«ø³ø¹øÂøÂøÂø×øíøíøíøùù
ùùùù"ù-ù-ùAùGùRùRùRùfùlùoùvù|ùù‡ù’ù’ù¦ù¬ù·ù·ù·ùËùÑùÔùÛùáùäùæùúú0ú6úAúAúUú[úcúcúpúı�pßvv”Ÿ¦¦¯¿¿ÓÚàæë ))=CHk~‚ˆŸ¦´ºÆĞÕÜõÿ!&.M[[g„£ª´ÃÉÏÕÛñ&2FQZmz‡•²¿Êß+4:FKRRfq~………“¢¤²ÁÓÓÛş J¨æ8NNu’�¯½ÄÓÚâø(8BDTdmsx†Œ’�¨«²ÌÔî 1@KSSjƒ‡�—©±¸¼ÅÇÙğş
066HĞ 8�%�%¼%Ä%Ê%Ê%×%ì%ú%&&&␍&&&$&+&7&D&J&T&T&_&i&i&}&ƒ&“&™&�&¥&¥&½&½&Ã&Ò&å&ë&î&ô&ô&ö&ö&ü&'''' '$'$'9'C'C'Y'b'h'n'„'‰'�'¥'©'©'±'·'½'Ç'Î'Õ'Ú'Ş'ğ'ğ'(( (((((;(A(E(L(R(X(X(Z(Z(^(e(k(q(v(v(v(¡(¡(²(²(É(Ö(Ú(Ú(â(÷()))))!)!)5)F)F)[)o)w)…)‰)›)Ÿ)¥)¾)À)Æ)Ó)Õ)á)***5*@*F*L*R*[*b*w*ˆ*�*”*¦*ª*°*É*Ë*Ñ*Ş*à*ì* ++++&+-+-+=+[+d+j+j++„+„+‹+’+¤+©+©+©+Ã+Å+ß+á+û+, ,,3,9,?,K,_,f,l,x,},},„,ˆ,�,�,Ÿ,§,¬,·,½,É,Î,Ô,Ù,á,æ,õ,õ,␍--'-6-6-L-N-N-d-d-k-z--ˆ-•-š-¡-¦-¦-­-±-¸-Æ-È-Ğ-Ô-Ş-ê-ñ-õ-ı-.␍..(.-.9.9.B.B.\.\.j.p.u.y.~.~.~.~.„.†.†.©.¯.µ.Ò.Ô.Ô.Ô.á.á.á.æ.æ. /”2È0EE&E&E:E@EKEYEeEyEyE�E“E“E�E®E»EÉEÖEFxjv¸5¸5È5Ï5ë5ù5ş5ş56 6 616€Üé€␍€␍‰␍”␍Ÿ␍ª␍µ␍À␍Ë␍Ö␍á␍ã␍ó␍°¡´°>°>Æ>Ù>Û>å>÷>ş>???$?.?C?C?J?M?ˆ? �Ø#Ø#ì#ÿ# $$$+$=$D$\$
˜3C8-8-H-H-c-s-z-‘-¬-¾-Â-í- hé3ø␍ø␍
*sz�•›£¬²º¼ÂÊÑØ÷ Gqz™±Åâ 7OQX__|ğ*d�ØØØäïôôô  &166<GLLR]hmms~ƒƒ‰”Ÿ¤¤ªµÀÅÅËÖáìññ÷ı$/5::@KV\aagrx}}ƒ�™Ÿ¡¡§²½ÃÅÅËÖáìòôôûû   $33HƒŠŠŠ’¯¯½ÕÕŞç.Laa~Œ¨ÆÛÛçê4;;HQSacqs��¥§®®»ÄÆÔÖäæôô!4Ghu�–�¦®¼ÊÌÔÜäìú'=Ss�™£ªÄØäë+0299Ncv}}Š“•£¥³µÃÃÃââ&)9=MQaee“�£±ÆÑç)+:<KUUcl†�§»ßó"6;g{€€���§ÇÛİßææóüş ,,KKKKKaaah‚—¢ºÌÚÚßßßç"<QVVV]wŒ‘‘˜›µÅÚßßçê  ) . . 5 8 R b w | | ‘ ‘ Ÿ ¡ ° ¹ Ó è í í ÿ      - 2 2 D I I [ ` ` r w w ‰ � �   ¥ ¥ · ¼ ¼ Î Ó Ó å ç ç ù û û !!!!K!K!a!a!a!h!‚!—!œ!œ!œ!¤!¾!Ó!Ø!Ø!Ø!ß!ù!"""""4"I"N"N"c"c"q"s"‚"‹"¥"º"¿"¿"Ñ"Ö"Ö"è"í"í"ÿ"#####-#2#2#D#I#I#[#`#`#r#w#w#‰#�#�# #¥#¥#·#¹#¹#Ë#Í#Í#ß#á#á#ä#$$$($($2$D$Y$c$u$Š$œ$®$¹$Ï$ß$ô$ %%4%6%G%a%r%y%4- ˜CSğ-ğ-.. . .&.6.<.S.k.n.€.°. PµÜx x † � � � š ¥ Á Ì Ì Ğ Õ Line truncated
+2 -2
View File
@@ -8,7 +8,7 @@
#include "Unassembler"
#include "Directives"
#include "Lex"
#include "CodeGen"
#include "ICLCC"
#include "Hash1b"
#include "Assembler"
#include "ExpParser"
@@ -19,6 +19,6 @@
#include "OptPass4"
#include "OptPass5"
#include "OptPass6"
#include "OptPass789A"
#include "OptPass789"
#include "CmpInit"
#include "CmpMain"
File diff suppressed because it is too large. Load diff
+368
View File
@@ -0,0 +1,368 @@
// Intermediate Code / Lex Code
U0 ICClassPut(CHashClass *c)
{
I64 i;
if (!c) return;
if (c->ptr_cnt>4) {
PrintErr("put_class ptrcnt=%d\n",c->ptr_cnt);
while (TRUE)
//TODO:
Yield;
}
for (i=0;i<c->ptr_cnt;i++)
'*';
c-=c->ptr_cnt;
if (c->str)
"%s",c->str;
else {
PrintErr("put_class str=NULL\n");
while (TRUE)
//TODO:
Yield;
}
'' CH_SPACE;
}
U0 ICArgPut(CICArg *p)
{
if (p->ptype)
"%Z %Z %Z ",
p->type&IT_MASK,"ST_IT_TYPES",
p->ptype&IT_MASK,"ST_IT_TYPES",
p->type>>4,"ST_TY_TYPES";
else
"%Z %Z ",
p->type&IT_MASK,"ST_IT_TYPES",
p->type>>4,"ST_TY_TYPES";
switch (p->type>>4) {
case TY_STK>>4:
"STK";
break;
case TY_IMM>>4:
"#%X",p->disp;
break;
case TY_REG>>4:
"%Z",p->reg,"ST_U64_REGS";
break;
case TY_DISP>>4:
"%X[%Z]",p->disp,p->reg,"ST_U64_REGS";
break;
case TY_RIP_DISP32>>4:
"[%X]",p->disp;
break;
case TY_SIB>>4:
if (p->disp)
"%X",p->disp;
if (p->reg==CREG_RIP)
'[';
else
"[%Z+",p->reg&7,"ST_U64_REGS";
"%Z",p->reg>>8&7,"ST_U64_REGS";
switch (p->reg>>14) {
case 0: "]"; break;
case 1: "*2]"; break;
case 2: "*4]"; break;
case 3: "*8]"; break;
}
break;
}
}
U0 ICPut(CIntermediateCode *tempi)
{
I64 opcode=tempi->ic_opcode,i;
if (opcode>=IC_END_EXP && opcode!=IC_NOP2) {
"%15ts %016X ",
DefineSub(opcode,"ST_INTERMEDIATE_CODE")+4,
tempi->ic_data;
if (tempi->r.type&TY_MASK) {
ICArgPut(&tempi->r);
"<-";
}
if (tempi->p1.type&TY_MASK)
ICArgPut(&tempi->p1);
',';
if (tempi->p2.type&TY_MASK)
ICArgPut(&tempi->p2);
'' CH_SPACE;
ICClassPut(tempi->ic_class);
if (tempi->ic_flags & ICF_LOCK)
"$$FG,BROWN$$lock$$FG$$ ";
if (tempi->ic_flags & ICF_P2_TO_F64)
"$$FG,LTBLUE$$p2d$$FG$$ ";
if (tempi->ic_flags & ICF_P2_TO_INT)
"$$FG,GREEN$$p2i$$FG$$ ";
if (tempi->ic_flags & ICF_P1_TO_F64)
"$$FG,LTBLUE$$p1d$$FG$$ ";
if (tempi->ic_flags & ICF_P1_TO_INT)
"$$FG,GREEN$$p1i$$FG$$ ";
if (tempi->ic_flags & ICF_R_TO_F64)
"$$FG,LTBLUE$$rd$$FG$$ ";
if (tempi->ic_flags & ICF_R_TO_INT)
"$$FG,GREEN$$ri$$FG$$ ";
if (tempi->ic_flags & ICF_USE_F64)
"[F64] ";
if (tempi->ic_flags & ICF_USE_UNSIGNED)
"[unsigned] ";
if (tempi->ic_flags & ICF_USE_INT)
"[int] ";
if (tempi->ic_flags & ICF_NO_DEPEND_RESULT)
"-DEP ";
if (tempi->ic_flags & ICF_DEPEND_RESULT)
"+DEP ";
if (tempi->ic_flags & ICF_NOT_ADDR)
"NOT_ADDR ";
if (tempi->ic_flags & ICF_PUSH_RESULT)
"PUSH ";
if (tempi->ic_flags & ICF_PUSH_CMP)
"PUSH_CMP ";
if (tempi->ic_flags & ICF_POP_CMP)
"POP_CMP ";
if (tempi->ic_flags & ICF_DEL_PREVIOUS_INS)
"DELINS ";
for (i=0;i<4;i++) {
if (Bt(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+i))
"DONT_PUSH#%d ",i;
if (Bt(&tempi->ic_flags,ICf_DONT_POP_FLOAT0+i))
"DONT_POP#%d ",i;
}
if (tempi->ic_flags & ICF_ALTERNATE_TEMPLATE)
"ALT_TEMP ";
NewLine;
}
}
U0 LCCQuePut(CLex *lx)
{
CIntermediateCode *tempi=lx->lcc.lcc_root.next;
while (tempi->ic_opcode) {
if (tempi->ic_flags&ICF_TRACE)
ICPut(tempi);
tempi=tempi->next;
}
}
U0 LCCInit(CLex *lx)
{
CLexCodeCtrl *tempcbh=&lx->lcc;
QueInit(&tempcbh->lcc_root.next);
QueInit(&tempcbh->lcc_next_misc);
tempcbh->lcc_root.ic_opcode=IC_END;
}
CIntermediateCode *LCCAdd(CLex *lx,
I64 opcode_and_precedence,I64 arg, CHashClass *c,I64 flags=0)
{
CIntermediateCode *tempi=MAlloc(sizeof(CIntermediateCode));
tempi->ic_opcode=opcode_and_precedence.u16[0];
tempi->ic_precedence=opcode_and_precedence.u16[1];
tempi->ic_data=arg;
tempi->ic_class=c;
if (Bt(&lx->opts,OPTf_OPT_TRACE)) {
Bts(&lx->flags,Lf_OPT_TRACE_PRESENT);
flags|=ICF_TRACE;
}
if (lx->lock_cnt)
flags|=ICF_LOCK;
tempi->ic_flags=flags;
tempi->ic_line=lx->last_line_num;
if (lx->opts & OPTF_PARSE_TRACE)
ICPut(tempi);
QueIns(tempi,lx->lcc.lcc_root.last);
return tempi;
}
U0 LCCPush(CLex *lx)
{
CLexCodeCtrl *tempcbh=MAlloc(sizeof(CLexCodeCtrl));
MemCpy(tempcbh,&lx->lcc,sizeof(CLexCodeCtrl));
lx->lcc.lcc_next=tempcbh;
}
CLex *LCCPopNoFree(CLex *lx)
{
CLexCodeCtrl *tempcbh=lx->lcc.lcc_next;
MemCpy(&lx->lcc,tempcbh,sizeof(CLexCodeCtrl));
return tempcbh;
}
U0 LCCPop(CLex *lx)
{
Free(LCCPopNoFree(lx));
}
U0 LCCAppend(CLex *lx, CLexCodeCtrl *tempcbh)
{
if (tempcbh->lcc_root.next!=&lx->lcc.lcc_root.next) {
lx->lcc.lcc_root.last->next=tempcbh->lcc_root.next;
tempcbh->lcc_root.next->last=lx->lcc.lcc_root.last;
lx->lcc.lcc_root.last=tempcbh->lcc_root.last;
tempcbh->lcc_root.last->next=&lx->lcc.lcc_root.next;
}
if (tempcbh->lcc_next_misc!=&lx->lcc.lcc_next_misc) {
lx->lcc.lcc_last_misc->next=tempcbh->lcc_next_misc;
tempcbh->lcc_next_misc->last=lx->lcc.lcc_last_misc;
lx->lcc.lcc_last_misc=tempcbh->lcc_last_misc;
tempcbh->lcc_last_misc->next=&lx->lcc.lcc_next_misc;
}
Free(tempcbh);
}
CLexCodeMisc *LCCMiscNew(CLex *lx,I64 ty)
{
CLexCodeMisc *result=CAlloc(sizeof(CLexCodeMisc));
result->addr=INVALID_PTR;
result->type=ty;
QueIns(result,lx->lcc.lcc_last_misc);
return result;
}
CLexCodeMisc *LCCGoToLabelFind(CLex *lx,U8 *name)
{
CLexCodeMisc *mc=lx->lcc.lcc_next_misc;
while (mc!=&lx->lcc.lcc_next_misc) {
if (mc->type==CMT_GOTO_LABEL) {
if (!StrCmp(mc->str,name))
return mc;
}
mc=mc->next;
}
return NULL;
}
I64 LCCFloatConstFind(CLex *lx,F64 d)
{
I64 i;
CLexCodeMisc *mc=lx->lcc.lcc_next_misc;
while (mc!=&lx->lcc.lcc_next_misc) {
if (mc->type==CMT_FLOAT_CONSTS) {
for (i=0;i<mc->num_consts;i++)
if (mc->float_consts[i]==d)
return mc->addr+i*sizeof(F64);
if (mc->num_consts<CM_MAX_CONSTS) {
mc->float_consts[mc->num_consts++]=d;
return mc->addr+i*sizeof(F64);
}
}
mc=mc->next;
}
mc=LCCMiscNew(lx,CMT_FLOAT_CONSTS);
mc->float_consts=MAlloc(CM_MAX_CONSTS*sizeof(F64));
mc->float_consts[mc->num_consts++]=d;
return mc->addr;
}
U0 LCCDel(CLex *lx)
{
CLexCodeMisc *mc,*mc1;
U8 *undef=NULL;
QueDel(&lx->lcc.lcc_root.next);
mc=lx->lcc.lcc_next_misc;
while (mc!=&lx->lcc.lcc_next_misc) {
mc1=mc->next;
switch (mc->type) {
case CMT_GOTO_LABEL:
if (!(mc->flags&CMF_DEFINED)) {
undef=mc->str;
mc->str=NULL;
} else if (!(mc->flags&CMF_USED)) {
PrintWarn("%S%s\n","ST_UNUSED_LABEL",mc->str);
LexPutWarn(lx,"ST_UNUSED_LABEL_AT");
}
break;
case CMT_JMP_TABLE:
Free(mc->jmp_table);
break;
case CMT_FLOAT_CONSTS:
Free(mc->float_consts);
break;
case CMT_ARRAY_DIM:
LinkedLstDel(mc->dim);
break;
case CMT_HASH_ENTRY:
HashDel(mc->h);
break;
}
Free(mc->str);
Free(mc);
mc=mc1;
}
if (undef) {
PrintErr("%S%s\n","ST_UNDEFINED_GOTO_LABEL",undef);
Free(undef);
LexExcept(lx,"ST_UNDEFINED_GOTO_LABEL_AT");
}
}
U0 LCCHeaderPut(CLex *lx,I64 pass,Bool put)
{
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) {
if (put) {
if (Bt(&lx->pass_trace_mask,pass-1)) {
"$$IV,1$$Pass %d:$$IV,0$$\n",pass-1;
LCCQuePut(lx);
}
} else {
if (Bt(&lx->pass_trace_mask,pass))
"$$IV,1$$Pass %d:$$IV,0$$\n",pass;
}
}
lx->pass=pass;
}
U8 *LCCCompile(CLex *lx,CHashFun *fun_class,
I64 *_code_size,CDbgInfo **_dbg,I64 *type=NULL)
{
U8 *result,code_size,last_code_size;
COptReg register_offsets[NUM_REGS];
if (_dbg) *_dbg=NULL;
LCCHeaderPut(lx,1,TRUE);
OptPass012(lx,fun_class);
LCCHeaderPut(lx,2,TRUE);
OptPass012(lx,fun_class);
LCCHeaderPut(lx,3,TRUE);
OptPass3(lx,fun_class,register_offsets);
LCCHeaderPut(lx,4,TRUE);
OptPass4(lx,register_offsets,type);
LCCHeaderPut(lx,5,TRUE);
OptPass5(lx);
LCCHeaderPut(lx,6,TRUE);
OptPass6(lx,fun_class);
LCCHeaderPut(lx,7,TRUE);
LCCHeaderPut(lx,7,FALSE);
code_size=OptPass789(lx,fun_class,register_offsets,NULL,NULL);
do {
last_code_size=code_size;
LCCHeaderPut(lx,8,FALSE);
code_size=OptPass789(lx,fun_class,register_offsets,NULL,NULL);
if (code_size>last_code_size) {
"Pass:8 Code Size\n";
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
} while (code_size<last_code_size);
if (lx->flags&LF_AOT_COMPILE)
result=MAlloc(code_size);
else
result=MAlloc(code_size,Fs->code_heap);
LCCHeaderPut(lx,9,FALSE);
code_size=OptPass789(lx,fun_class,register_offsets,result,_dbg);
compiled_bytes+=code_size;
LCCDel(lx);
if (Bt(&lx->opts,OPTf_COMPILE_TRACE)) {
if (lx->flags&LF_AOT_COMPILE) {
if (lx->a->seg_size==16)
Un(result,code_size,16);
else if (lx->a->seg_size==64)
Un(result,code_size,64);
else
Un(result,code_size,32);
} else
Un(result,code_size,64);
}
if (_code_size) *_code_size=code_size;
return result;
}
+12 -16
View File
@@ -9,7 +9,7 @@ U8 *CmpPmt(Bool dbl_semicolon=FALSE)
"%8.6fs ans%d=0x%08X=%d\n",Fs->answer_times[i],i,Fs->answers[i],Fs->answers[i];
}
if (st=CurDir) {
"" st;
"%s",st;
Free(st);
}
'>';
@@ -42,7 +42,7 @@ CLex *LexNew(U8 *buf,I64 flags,U8 *filename=NULL)
QueInit(lx);
lx->flags=flags;
lx->opts=1<<OPTf_WARN_UNUSED_VAR;
lx->pass_trace_mask=0b10001111101;
lx->pass_trace_mask=0b1001111101;
lx->htc.hash_mask=HTG_ALL-HTT_IMPORT_SYS_SYM-HTT_ASM_KEYWORD;
lx->htc.define_hash_table=lx->htc.hash_table_lst=lx->htc.glbl_hash_table=lx->htc.local_hash_table=Fs->hash_table;
if (flags&LF_KEEP_AT_SIGN)
@@ -78,6 +78,7 @@ U0 LexDel(CLex *lx)
if (!(lx->flags & LF_DONT_FREE_BUF))
Free(tempf->buf);
Free(lx->ident);
Free(lx->cur_index);
Free(lx->dollar);
Free(lx);
}
@@ -105,7 +106,7 @@ I64 LexSize(CLex *lx)
U0 SetSrcFileInfo(CLex *lx,CHashSrcSym *h)
{
CLexFile *tempf=lx->cur_lfn;
h->src_link=MSPrintF("FL:%s,%d",tempf->name,tempf->line_num);
h->src_link=MPrint("FL:%s,%d",tempf->name,tempf->line_num);
if (Bt(&lx->opts,OPTf_KEEP_PRIVATE))
h->type|=HTF_PRIVATE;
if (lx->cur_index)
@@ -118,10 +119,10 @@ U0 LexPutToken(CLex *lx)
{
'"';
if (lx->token==TK_IDENT || lx->token==TK_STR)
"" lx->ident;
"%s",lx->ident;
else if (lx->token==TK_INTEGER)
"INT:%X",lx->cur_i;
else if (lx->token==TK_U8)
else if (lx->token==TK_CHAR_CONST)
"U8:%X",lx->cur_i;
else if (lx->token==TK_F64)
"FLOAT:%e",lx->cur_f;
@@ -154,7 +155,7 @@ Bool LexDollar(CLex *lx,CDoc *doc,CDocEntry *doc_e)
if (lx->flags&LF_IN_QUOTES) {
Free(lx->dollar);
st=Doc2PlainText(doc,doc_e);
lx->dollar=MSPrintF("$$%Q$$",st);
lx->dollar=MPrint("$$%Q$$",st);
lx->dollar_cnt=2;
Free(st);
return TRUE;
@@ -369,11 +370,6 @@ U0 LexSkipEol(CLex *lx)
while (Bt(non_eol_chars_bitmap,ch));
}
U0 ExpressionDel(U8 *code)
{
Free(code);
}
U0 LexIncludeStr(CLex *lx,U8 *abs_filename,U8 *src,Bool actual_file)
{
CLexFile *tempf;
@@ -1084,7 +1080,7 @@ lex_octal:
}
}
lx->cur_i=k;
lx->token=TK_U8;
lx->token=TK_CHAR_CONST;
goto lex_end;
case '#':
if (lx->flags&LF_KEEP_NUM_SIGN) {
@@ -1231,7 +1227,7 @@ lex_if:
lx->flags&=~LF_IN_IF;
goto lex_end;
}
if (Expression(lx)) {
if (LexExpression(lx)) {
lx->flags&=~LF_IN_IF;
switch (lx->token) {
case TK_IF: goto lex_if;
@@ -1408,7 +1404,7 @@ lex_ifjit:
case KW_ASSERT:
if (!Lex(lx))
goto lex_end;
if (!Expression(lx))
if (!LexExpression(lx))
LexPutWarn(lx,"ST_ASSERT_FAILED");
goto lex_end;
case KW_EXE:
@@ -1653,7 +1649,7 @@ U0 LexPutPos(CLex *lx)
U0 LexPutWarn(CLex *lx,U8 *name=NULL,CHashFun *fun_class=NULL)
{
if (name) PrintFWarn("%S",name);
if (name) PrintWarn("%S",name);
if (fun_class) {
"%S'%s'.\n","ST_IN_FUN",fun_class->str;
if (IsRaw)
@@ -1674,7 +1670,7 @@ U0 LexExcept(CLex *lx,U8 *name=NULL,CHashFun *fun_class=NULL)
Preempt(OFF);
Raw(ON);
}
if (name) PrintFErr("%S",name);
if (name) PrintErr("%S",name);
if (!IsRaw)
AdamErr("Task:%08X %S\n",Fs,name);
LexPutPos(lx);
+207 -105
View File
@@ -170,15 +170,17 @@ KEYWORD endif 32;
KEYWORD assert 33;
KEYWORD reg 34;
KEYWORD noreg 35;
KEYWORD nounusedwarn 36;
KEYWORD help_index 37;
KEYWORD help_file 38;
KEYWORD static 39;
KEYWORD interrupt 40;
KEYWORD lock 41;
KEYWORD defined 42;
KEYWORD argpop 43;
KEYWORD noargpop 44;
KEYWORD lastclass 36;
KEYWORD nounusedwarn 37;
KEYWORD help_index 38;
KEYWORD help_file 39;
KEYWORD static 40;
KEYWORD interrupt 41;
KEYWORD haserrcode 42;
KEYWORD lock 43;
KEYWORD defined 44;
KEYWORD argpop 45;
KEYWORD noargpop 46;
ASM_KEYWORD ALIGN 64;
ASM_KEYWORD MODULE_ORG 65;
@@ -258,19 +260,31 @@ OPCODE MOV
0x89,/R 32 RM64 R64
0x8C,/R 32 RM16 SREG
0x8E,/R 32 SREG RM16
0xB0,+R R8 UIMM8
0xB8,+R 16 R16 UIMM16
0xB8,+R 32 R32 UIMM32
0xB8,+R 32 R64 UIMM64
0xC6, RM8 UIMM8
0xC7, 16 RM16 UIMM16
0xC7, 32 RM32 UIMM32
0xB0,+R &R8 UIMM8
0xB0,+R R8 IMM8
0xB8,+R 16 &R16 UIMM16
0xB8,+R 16 R16 IMM16
0xB8,+R 32 &R32 UIMM32
0xB8,+R 32 R32 IMM32
0xB8,+R 32 `R64 UIMM32
0xB8,+R 32 &R64 UIMM64
0xB8,+R 32 R64 IMM64
0xC6, &RM8 UIMM8
0xC6, RM8 IMM8
0xC7, 16 &RM16 UIMM16
0xC7, 16 RM16 IMM16
0xC7, 32 &RM32 UIMM32
0xC7, 32 RM32 IMM32
0xC7, 32 `RM64 UIMM32
0xC7, 32 RM64 IMM32;
OPCODE ADC
0x14, IB AL UIMM8
0x15, 16 IW AX UIMM16
0x15, 32 ID EAX UIMM32
0x14, IB &AL UIMM8
0x14, IB AL IMM8
0x15, 16 IW &AX UIMM16
0x15, 16 IW AX IMM16
0x15, 32 ID &EAX UIMM32
0x15, 32 ID EAX IMM32
0x80,/2 IB RM8 IMM8
0x83,/2 16 IB RM16 IMM8
0x83,/2 32 IB RM32 IMM8
@@ -287,10 +301,14 @@ OPCODE ADC
0x11,/R 32 RM32 R32
0x11,/R 32 RM64 R64;
OPCODE ADD
0x04, IB AL UIMM8
0x05, 16 IW AX UIMM16
0x05, 32 ID EAX UIMM32
0x80,/0 IB RM8 UIMM8
0x04, IB &AL UIMM8
0x04, IB AL IMM8
0x05, 16 IW &AX UIMM16
0x05, 16 IW AX IMM16
0x05, 32 ID &EAX UIMM32
0x05, 32 ID EAX IMM32
0x80,/0 IB &RM8 UIMM8
0x80,/0 IB RM8 IMM8
0x83,/0 16 IB RM16 IMM8
0x83,/0 32 IB RM32 IMM8
0x83,/0 32 IB RM64 IMM8
@@ -306,10 +324,14 @@ OPCODE ADD
0x01,/R 32 RM32 R32
0x01,/R 32 RM64 R64;
OPCODE AND
0x24, IB AL UIMM8
0x25, 16 IW AX UIMM16
0x25, 32 ID EAX UIMM32
0x80,/4 IB RM8 UIMM8
0x24, IB &AL UIMM8
0x24, IB AL IMM8
0x25, 16 IW &AX UIMM16
0x25, 16 IW AX IMM16
0x25, 32 ID &EAX UIMM32
0x25, 32 ID EAX IMM32
0x80,/4 IB &RM8 UIMM8
0x80,/4 IB RM8 IMM8
0x83,/4 16 IB RM16 IMM8
0x83,/4 32 IB RM32 IMM8
0x83,/4 32 IB RM64 IMM8
@@ -325,10 +347,14 @@ OPCODE AND
0x21,/R 32 RM32 R32
0x21,/R 32 RM64 R64;
OPCODE CMP
0x3C, IB AL UIMM8
0x3D, 16 IW AX UIMM16
0x3D, 32 ID EAX UIMM32
0x80,/7 IB RM8 UIMM8
0x3C, IB &AL UIMM8
0x3C, IB AL IMM8
0x3D, 16 IW &AX UIMM16
0x3D, 16 IW AX IMM16
0x3D, 32 ID &EAX UIMM32
0x3D, 32 ID EAX IMM32
0x80,/7 IB &RM8 UIMM8
0x80,/7 IB RM8 IMM8
0x83,/7 16 IB RM16 IMM8
0x83,/7 32 IB RM32 IMM8
0x83,/7 32 IB RM64 IMM8
@@ -344,10 +370,14 @@ OPCODE CMP
0x39,/R 32 RM32 R32
0x39,/R 32 RM64 R64;
OPCODE OR
0x0C, IB AL UIMM8
0x0D, 16 IW AX UIMM16
0x0D, 32 ID EAX UIMM32
0x80,/1 IB RM8 UIMM8
0x0C, IB &AL UIMM8
0x0C, IB AL IMM8
0x0D, 16 IW &AX UIMM16
0x0D, 16 IW AX IMM16
0x0D, 32 ID &EAX UIMM32
0x0D, 32 ID EAX IMM32
0x80,/1 IB &RM8 UIMM8
0x80,/1 IB RM8 IMM8
0x83,/1 16 IB RM16 IMM8
0x83,/1 32 IB RM32 IMM8
0x83,/1 32 IB RM64 IMM8
@@ -363,10 +393,14 @@ OPCODE OR
0x09,/R 32 RM32 R32
0x09,/R 32 RM64 R64;
OPCODE SBB
0x1C, IB AL UIMM8
0x1D, 16 IW AX UIMM16
0x1D, 32 ID EAX UIMM32
0x80,/3 IB RM8 UIMM8
0x1C, IB &AL UIMM8
0x1C, IB AL IMM8
0x1D, 16 IW &AX UIMM16
0x1D, 16 IW AX IMM16
0x1D, 32 ID &EAX UIMM32
0x1D, 32 ID EAX IMM32
0x80,/3 IB &RM8 UIMM8
0x80,/3 IB RM8 IMM8
0x83,/3 16 IB RM16 IMM8
0x83,/3 32 IB RM32 IMM8
0x83,/3 32 IB RM64 IMM8
@@ -382,10 +416,14 @@ OPCODE SBB
0x19,/R 32 RM32 R32
0x19,/R 32 RM64 R64;
OPCODE SUB
0x2C, IB AL UIMM8
0x2D, 16 IW AX UIMM16
0x2D, 32 ID EAX UIMM32
0x80,/5 IB RM8 UIMM8
0x2C, IB &AL UIMM8
0x2C, IB AL IMM8
0x2D, 16 IW &AX UIMM16
0x2D, 16 IW AX IMM16
0x2D, 32 ID &EAX UIMM32
0x2D, 32 ID EAX IMM32
0x80,/5 IB &RM8 UIMM8
0x80,/5 IB RM8 IMM8
0x83,/5 16 IB RM16 IMM8
0x83,/5 32 IB RM32 IMM8
0x83,/5 32 IB RM64 IMM8
@@ -401,10 +439,14 @@ OPCODE SUB
0x29,/R 32 RM32 R32
0x29,/R 32 RM64 R64;
OPCODE TEST
0xA8, IB AL UIMM8
0xA9, 16 IW AX UIMM16
0xA9, 32 ID EAX UIMM32
0xF6,/0 IB RM8 UIMM8
0xA8, IB &AL UIMM8
0xA8, IB AL IMM8
0xA9, 16 IW &AX UIMM16
0xA9, 16 IW AX IMM16
0xA9, 32 ID &EAX UIMM32
0xA9, 32 ID EAX IMM32
0xF6,/0 IB &RM8 UIMM8
0xF6,/0 IB RM8 IMM8
0xF7,/0 16 IW RM16 IMM16
0xF7,/0 32 ID RM32 IMM32
0xF7,/0 32 ID RM64 IMM32
@@ -413,6 +455,7 @@ OPCODE TEST
0x85,/R 32 RM32 R32
0x85,/R 32 RM64 R64;
OPCODE NOP 0x90;
OPCODE NOP2 0x66 0x90;
OPCODE XCHG
0x90,+R 16 R16 AX
0x90,+R 16 AX R16
@@ -429,10 +472,14 @@ OPCODE XCHG
0x87,/R 32 RM32 R32
0x87,/R 32 RM64 R64;
OPCODE XOR
0x34, IB AL UIMM8
0x35, 16 IW AX UIMM16
0x35, 32 ID EAX UIMM32
0x80,/6 IB RM8 UIMM8
0x34, IB &AL UIMM8
0x34, IB AL IMM8
0x35, 16 IW &AX UIMM16
0x35, 16 IW AX IMM16
0x35, 32 ID &EAX UIMM32
0x35, 32 ID EAX IMM32
0x80,/6 IB &RM8 UIMM8
0x80,/6 IB RM8 IMM8
0x83,/6 16 IB RM16 IMM8
0x83,/6 32 IB RM32 IMM8
0x83,/6 32 IB RM64 IMM8
@@ -758,9 +805,12 @@ OPCODE IMUL2
0x6B,/R 16 IB RM16 IMM8
0x6B,/R 32 IB RM32 IMM8
0x6B,/R 32 IB RM64 IMM8
0x69,/R 16 IW RM16 UIMM16
0x69,/R 32 ID RM32 UIMM32
0x69,/R 32 ID RM64 UIMM32;
0x69,/R 16 IW &RM16 UIMM16
0x69,/R 16 IW RM16 IMM16
0x69,/R 32 ID &RM32 UIMM32
0x69,/R 32 ID RM32 IMM32
0x69,/R 32 ID &RM64 UIMM32
0x69,/R 32 ID RM64 IMM32;
OPCODE DIV
0xF6,/6 RM8
0xF7,/6 16 RM16
@@ -796,30 +846,42 @@ OPCODE BT
0x0F 0xA3,/R 16 RM16 R16
0x0F 0xA3,/R 32 RM32 R32
0x0F 0xA3,/R 32 RM64 R64
0x0F 0xBA,/4 16 IB RM16 UIMM8
0x0F 0xBA,/4 32 IB RM32 UIMM8
0x0F 0xBA,/4 32 IB RM64 UIMM8;
0x0F 0xBA,/4 16 IB &RM16 UIMM8
0x0F 0xBA,/4 16 IB RM16 IMM8
0x0F 0xBA,/4 32 IB &RM32 UIMM8
0x0F 0xBA,/4 32 IB RM32 IMM8
0x0F 0xBA,/4 32 IB &RM64 UIMM8
0x0F 0xBA,/4 32 IB RM64 IMM8;
OPCODE BTC
0x0F 0xBB,/R 16 RM16 R16
0x0F 0xBB,/R 32 RM32 R32
0x0F 0xBB,/R 32 RM64 R64
0x0F 0xBA,/7 16 IB RM16 UIMM8
0x0F 0xBA,/7 32 IB RM32 UIMM8
0x0F 0xBA,/7 32 IB RM64 UIMM8;
0x0F 0xBA,/7 16 IB &RM16 UIMM8
0x0F 0xBA,/7 16 IB RM16 IMM8
0x0F 0xBA,/7 32 IB &RM32 UIMM8
0x0F 0xBA,/7 32 IB RM32 IMM8
0x0F 0xBA,/7 32 IB &RM64 UIMM8
0x0F 0xBA,/7 32 IB RM64 IMM8;
OPCODE BTR
0x0F 0xB3,/R 16 RM16 R16
0x0F 0xB3,/R 32 RM32 R32
0x0F 0xB3,/R 32 RM64 R64
0x0F 0xBA,/6 16 IB RM16 UIMM8
0x0F 0xBA,/6 32 IB RM32 UIMM8
0x0F 0xBA,/6 32 IB RM64 UIMM8;
0x0F 0xBA,/6 16 IB &RM16 UIMM8
0x0F 0xBA,/6 16 IB RM16 IMM8
0x0F 0xBA,/6 32 IB &RM32 UIMM8
0x0F 0xBA,/6 32 IB RM32 IMM8
0x0F 0xBA,/6 32 IB &RM64 UIMM8
0x0F 0xBA,/6 32 IB RM64 IMM8;
OPCODE BTS
0x0F 0xAB,/R 16 RM16 R16
0x0F 0xAB,/R 32 RM32 R32
0x0F 0xAB,/R 32 RM64 R64
0x0F 0xBA,/5 16 IB RM16 UIMM8
0x0F 0xBA,/5 32 IB RM32 UIMM8
0x0F 0xBA,/5 32 IB RM64 UIMM8;
0x0F 0xBA,/5 16 IB &RM16 UIMM8
0x0F 0xBA,/5 16 IB RM16 IMM8
0x0F 0xBA,/5 32 IB &RM32 UIMM8
0x0F 0xBA,/5 32 IB RM32 IMM8
0x0F 0xBA,/5 32 IB &RM64 UIMM8
0x0F 0xBA,/5 32 IB RM64 IMM8;
OPCODE CBW 0x98, 16;
OPCODE CWDE 0x98, 32;
OPCODE CDQE 0x98, 32=;
@@ -846,9 +908,12 @@ OPCODE DAS 0x2F;
OPCODE ENTER 0xC8, $$IW IMM16;
OPCODE HLT 0xF4;
OPCODE IN
0xE4, IB AL UIMM8
0xE5, 16 IB AX UIMM8
0xE5, 32 IB EAX UIMM8
0xE4, IB &AL UIMM8
0xE4, IB AL IMM8
0xE5, 16 IB &AX UIMM8
0xE5, 16 IB AX IMM8
0xE5, 32 IB &EAX UIMM8
0xE5, 32 IB EAX IMM8
0xEC, AL DX
0xED, 16 AX DX
0xED, 32 EAX DX;
@@ -861,7 +926,9 @@ OPCODE INSW 0x6D, 16;
OPCODE INSD 0x6D, 32;
OPCODE INTO 0xCE;
OPCODE INT3 0xCC;
OPCODE INT 0xCD, IB UIMM8;
OPCODE INT
0xCD, IB &UIMM8
0xCD, IB IMM8;
OPCODE INVD 0x0F 0x08;
OPCODE IRET 0xCF, 32=;
OPCODE LAHF 0x9F;
@@ -938,9 +1005,12 @@ OPCODE MOVZX
0x0F 0xB7,/R 32 R32 RM16
0x0F 0xB7,/R 32 R64 RM16;
OPCODE OUT
0xE6, IB UIMM8 AL
0xE7, 16 IB UIMM8 AX
0xE7, 32 IB UIMM8 EAX
0xE6, IB &UIMM8 AL
0xE6, IB IMM8 AL
0xE7, 16 IB &UIMM8 AX
0xE7, 16 IB IMM8 AX
0xE7, 32 IB &UIMM8 EAX
0xE7, 32 IB IMM8 EAX
0xEE, DX AL
0xEF, 16 DX AX
0xEF, 32 DX EAX;
@@ -1071,10 +1141,14 @@ OPCODE RCL
0xD3,/2 16 RM16 CL
0xD3,/2 32 RM32 CL
0xD3,/2 32 RM64 CL
0xC0,/2 IB RM8 UIMM8
0xC1,/2 16 IB RM16 UIMM8
0xC1,/2 32 IB RM32 UIMM8
0xC1,/2 32 IB RM64 UIMM8;
0xC0,/2 IB &RM8 UIMM8
0xC0,/2 IB RM8 IMM8
0xC1,/2 16 IB &RM16 UIMM8
0xC1,/2 16 IB RM16 IMM8
0xC1,/2 32 IB &RM32 UIMM8
0xC1,/2 32 IB RM32 IMM8
0xC1,/2 32 IB &RM64 UIMM8
0xC1,/2 32 IB RM64 IMM8;
OPCODE RCL1
0xD0,/2 RM8
0xD1,/2 16 RM16
@@ -1085,10 +1159,14 @@ OPCODE RCR
0xD3,/3 16 RM16 CL
0xD3,/3 32 RM32 CL
0xD3,/3 32 RM64 CL
0xC0,/3 IB RM8 UIMM8
0xC1,/3 16 IB RM16 UIMM8
0xC1,/3 32 IB RM32 UIMM8
0xC1,/3 32 IB RM64 UIMM8;
0xC0,/3 IB &RM8 UIMM8
0xC0,/3 IB RM8 IMM8
0xC1,/3 16 IB &RM16 UIMM8
0xC1,/3 16 IB RM16 IMM8
0xC1,/3 32 IB &RM32 UIMM8
0xC1,/3 32 IB RM32 IMM8
0xC1,/3 32 IB &RM64 UIMM8
0xC1,/3 32 IB RM64 IMM8;
OPCODE RCR1
0xD0,/3 RM8
0xD1,/3 16 RM16
@@ -1099,10 +1177,14 @@ OPCODE ROL
0xD3,/0 16 RM16 CL
0xD3,/0 32 RM32 CL
0xD3,/0 32 RM64 CL
0xC0,/0 IB RM8 UIMM8
0xC1,/0 16 IB RM16 UIMM8
0xC1,/0 32 IB RM32 UIMM8
0xC1,/0 32 IB RM64 UIMM8;
0xC0,/0 IB &RM8 UIMM8
0xC0,/0 IB RM8 IMM8
0xC1,/0 16 IB &RM16 UIMM8
0xC1,/0 16 IB RM16 IMM8
0xC1,/0 32 IB &RM32 UIMM8
0xC1,/0 32 IB RM32 IMM8
0xC1,/0 32 IB &RM64 UIMM8
0xC1,/0 32 IB RM64 IMM8;
OPCODE ROL1
0xD0,/0 RM8
0xD1,/0 16 RM16
@@ -1113,10 +1195,14 @@ OPCODE ROR
0xD3,/1 16 RM16 CL
0xD3,/1 32 RM32 CL
0xD3,/1 32 RM64 CL
0xC0,/1 IB RM8 UIMM8
0xC1,/1 16 IB RM16 UIMM8
0xC1,/1 32 IB RM32 UIMM8
0xC1,/1 32 IB RM64 UIMM8;
0xC0,/1 IB &RM8 UIMM8
0xC0,/1 IB RM8 IMM8
0xC1,/1 16 IB &RM16 UIMM8
0xC1,/1 16 IB RM16 IMM8
0xC1,/1 32 IB &RM32 UIMM8
0xC1,/1 32 IB RM32 IMM8
0xC1,/1 32 IB &RM64 UIMM8
0xC1,/1 32 IB RM64 IMM8;
OPCODE ROR1
0xD0,/1 RM8
0xD1,/1 16 RM16
@@ -1128,10 +1214,14 @@ OPCODE SAL
0xD3,/4 16 RM16 CL
0xD3,/4 32 RM32 CL
0xD3,/4 32 RM64 CL
0xC0,/4 IB RM8 UIMM8
0xC1,/4 16 IB RM16 UIMM8
0xC1,/4 32 IB RM32 UIMM8
0xC1,/4 32 IB RM64 UIMM8;
0xC0,/4 IB &RM8 UIMM8
0xC0,/4 IB RM8 IMM8
0xC1,/4 16 IB &RM16 UIMM8
0xC1,/4 16 IB RM16 IMM8
0xC1,/4 32 IB &RM32 UIMM8
0xC1,/4 32 IB RM32 IMM8
0xC1,/4 32 IB &RM64 UIMM8
0xC1,/4 32 IB RM64 IMM8;
OPCODE SAL1
0xD0,/4 RM8
0xD1,/4 16 RM16
@@ -1143,10 +1233,14 @@ OPCODE SAR
0xD3,/7 16 RM16 CL
0xD3,/7 32 RM32 CL
0xD3,/7 32 RM64 CL
0xC0,/7 IB RM8 UIMM8
0xC1,/7 16 IB RM16 UIMM8
0xC1,/7 32 IB RM32 UIMM8
0xC1,/7 32 IB RM64 UIMM8;
0xC0,/7 IB &RM8 UIMM8
0xC0,/7 IB RM8 IMM8
0xC1,/7 16 IB &RM16 UIMM8
0xC1,/7 16 IB RM16 IMM8
0xC1,/7 32 IB &RM32 UIMM8
0xC1,/7 32 IB RM32 IMM8
0xC1,/7 32 IB &RM64 UIMM8
0xC1,/7 32 IB RM64 IMM8;
OPCODE SAR1
0xD0,/7 RM8
0xD1,/7 16 RM16
@@ -1158,10 +1252,14 @@ OPCODE SHL
0xD3,/4 16 RM16 CL
0xD3,/4 32 RM32 CL
0xD3,/4 32 RM64 CL
0xC0,/4 IB RM8 UIMM8
0xC1,/4 16 IB RM16 UIMM8
0xC1,/4 32 IB RM32 UIMM8
0xC1,/4 32 IB RM64 UIMM8;
0xC0,/4 IB &RM8 UIMM8
0xC0,/4 IB RM8 IMM8
0xC1,/4 16 IB &RM16 UIMM8
0xC1,/4 16 IB RM16 IMM8
0xC1,/4 32 IB &RM32 UIMM8
0xC1,/4 32 IB RM32 IMM8
0xC1,/4 32 IB &RM64 UIMM8
0xC1,/4 32 IB RM64 IMM8;
OPCODE SHL1
0xD0,/4 RM8
0xD1,/4 16 RM16
@@ -1173,10 +1271,14 @@ OPCODE SHR
0xD3,/5 16 RM16 CL
0xD3,/5 32 RM32 CL
0xD3,/5 32 RM64 CL
0xC0,/5 IB RM8 UIMM8
0xC1,/5 16 IB RM16 UIMM8
0xC1,/5 32 IB RM32 UIMM8
0xC1,/5 32 IB RM64 UIMM8;
0xC0,/5 IB &RM8 UIMM8
0xC0,/5 IB RM8 IMM8
0xC1,/5 16 IB &RM16 UIMM8
0xC1,/5 16 IB RM16 IMM8
0xC1,/5 32 IB &RM32 UIMM8
0xC1,/5 32 IB RM32 IMM8
0xC1,/5 32 IB &RM64 UIMM8
0xC1,/5 32 IB RM64 IMM8;
OPCODE SHR1
0xD0,/5 RM8
0xD1,/5 16 RM16
+297 -297
View File
@@ -1,37 +1,30 @@
U0 OptMissing(CLex *lx,CIntermediateCode *tempi)
{
"Pass:%d Missing IC handler\n",lx->pass;
CBPutIC(tempi);
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
/*
OptPass012
CIntermediateCode opt_nop;
Pass#0
When parsing the arg expressions to a function
call, there is a call to OptPass012 to determine
the type of the expression. $LK,"OptPass012","FF:::/TempleOS/Compiler/ExpParser.CPP.Z,OptPass012"$
CPrsStk *OptStart(CLex *lx,CIntermediateCode **temp_lag=NULL)
{
I64 i;
CPrsStk *ps=MAlloc(sizeof(CPrsStk));
CBInPtrsInit(&lx->cbh);
ps->ptr=0;
ps->ptr2=0;
if (temp_lag)
for (i=0;i<4;i++)
temp_lag[i]=&opt_nop;
return ps;
}
Pass#1&2
Constant expressions are simplified.
Eliminated opcodes are set to NOP.
Types are determined by reconstructing an
expression tree for operators
$LK,"CIntermediateCode","MN:CIntermediateCode"$.$LK,"CICTreeLinks","MN:CICTreeLinks"$.
U0 OptEnd(CLex *lx,CPrsStk *ps)
{
if (ps->ptr>2) {
"Pass:%d Stk:%08X\n",lx->pass,ps->ptr;
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
Free(ps);
}
Pointer arithmetic size is set, once
the type is determined.
CCodeBlkMisc *OptLabelFwd(CCodeBlkMisc *lb)
Branches are expressed with short-circuit
logic. 3-Arg comparisons are established.
*/
CLexCodeMisc *OptLabelFwd(CLexCodeMisc *lb)
{
CCodeBlkMisc *lb1;
CLexCodeMisc *lb1;
while (lb1=lb->fwd)
lb=lb1;
return lb;
@@ -64,10 +57,10 @@ U0 OptSetNOP2(CIntermediateCode *tempi,I64 stk_delta=1)
CIntermediateCode *OptLag(CIntermediateCode *tempi)
{
do {
if (tempi->ic_opcode==IC_START)
if (!tempi->ic_opcode)
return NULL;
else
tempi--;
tempi=tempi->last;
} while (tempi->ic_opcode<=IC_END_EXP);
return tempi;
}
@@ -75,19 +68,30 @@ CIntermediateCode *OptLag(CIntermediateCode *tempi)
CIntermediateCode *OptLag1(CIntermediateCode *tempi)
{
do {
if (tempi->ic_opcode==IC_START)
if (!tempi->ic_opcode)
return NULL;
else
tempi--;
tempi=tempi->last;
} while (tempi->ic_opcode==IC_NOP1||tempi->ic_opcode==IC_NOP2);
return tempi;
}
CIntermediateCode *OptLead1(CLex *,CIntermediateCode *tempi)
CIntermediateCode *OptLag2(CIntermediateCode *tempi)
{
do {
tempi++;
if (tempi->ic_opcode==IC_END)
if (!tempi->ic_opcode)
return NULL;
else
tempi=tempi->last;
} while (tempi->ic_opcode<IC_END_EXP);
return tempi;
}
CIntermediateCode *OptLead1(CIntermediateCode *tempi)
{
do {
tempi=tempi->next;
if (!tempi->ic_opcode)
return NULL;
} while (tempi->ic_opcode==IC_NOP1||tempi->ic_opcode==IC_NOP2);
return tempi;
@@ -225,7 +229,7 @@ extern U0 OptBrNotZero(CLex *lx,CIntermediateCode *tempi);
CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi)
{
CCodeBlkMisc *lb_true,*lb_false;
CLexCodeMisc *lb_true,*lb_false;
CIntermediateCode *tempii=OptLag(tempi),*tempii2;
switch (tempii->ic_opcode) {
case IC_NOT:
@@ -333,22 +337,22 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi)
!(tempi->ic_flags&ICF_USE_F64)) {
tempi->ic_opcode+=IC_BR_NOT_EQUAL2-IC_BR_NOT_EQUAL;
tempi->ic_flags&=~ICF_PUSH_CMP;
tempii =tempi+1; //IC_PUSH_CMP instruction
tempii =tempi->next; //IC_PUSH_CMP instruction
while (tempii->ic_opcode!=IC_PUSH_CMP)
tempii++;
tempii=tempii->next;
tempii->t.p1t=tempi;
OptSetNOP1(tempii);
}
lb_true=tempi->ic_data;
if (tempi->ic_opcode==IC_BR_AND_AND_ZERO) {
tempii=tempi->t.p1t+1;
tempii=tempi->t.p1t->next;
tempii->ic_data=lb_true;
tempii->t.p1t=tempi->t.p1t;
tempii->t.p1c=tempi->t.p1c;
tempii->ic_opcode=IC_BR_ZERO;
OptBrZero(lx,tempii);
tempii=tempi->t.p2t+1;
tempii=tempi->t.p2t->next;
tempii->t.p1t=tempi->t.p2t;
tempii->t.p1c=tempi->t.p2c;
tempii->ic_data=lb_true;
@@ -356,17 +360,17 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi)
tempii=OptBrZero(lx,tempii);
OptSetNOP1(tempi);;
} else if (tempi->ic_opcode==IC_BR_OR_OR_ZERO) {
lb_false=CBMiscNew(lx,CBMT_LABEL);
lb_false=LCCMiscNew(lx,CMT_LABEL);
tempi->ic_opcode=IC_LABEL;
tempi->ic_flags=0;
tempi->ic_data=lb_false;
tempii=tempi->t.p1t+1;
tempii=tempi->t.p1t->next;
tempii->t.p1t=tempi->t.p1t;
tempii->t.p1c=tempi->t.p1c;
tempii->ic_data=lb_false;
tempii->ic_opcode=IC_BR_NOT_ZERO;
OptBrNotZero(lx,tempii);
tempii=tempi->t.p2t+1;
tempii=tempi->t.p2t->next;
tempii->t.p1t=tempi->t.p2t;
tempii->t.p1c=tempi->t.p2c;
tempii->ic_data=lb_true;
@@ -386,7 +390,7 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi)
CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi)
{
CCodeBlkMisc *lb_true,*lb_false;
CLexCodeMisc *lb_true,*lb_false;
CIntermediateCode *tempii=OptLag(tempi),*tempii2;
switch (tempii->ic_opcode) {
case IC_NOT:
@@ -494,22 +498,22 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi)
!(tempi->ic_flags&ICF_USE_F64)) {
tempi->ic_opcode+=IC_BR_NOT_EQUAL2-IC_BR_NOT_EQUAL;
tempi->ic_flags&=~ICF_PUSH_CMP;
tempii =tempi+1; //IC_PUSH_CMP instruction
tempii =tempi->next; //IC_PUSH_CMP instruction
while (tempii->ic_opcode!=IC_PUSH_CMP)
tempii++;
tempii=tempii->next;
tempii->t.p1t=tempi;
OptSetNOP1(tempii);
}
lb_true=tempi->ic_data;
if (tempi->ic_opcode==IC_BR_OR_OR_NOT_ZERO) {
tempii=tempi->t.p1t+1;
tempii=tempi->t.p1t->next;
tempii->t.p1t=tempi->t.p1t;
tempii->t.p1c=tempi->t.p1c;
tempii->ic_data=lb_true;
tempii->ic_opcode=IC_BR_NOT_ZERO;
OptBrNotZero(lx,tempii);
tempii=tempi->t.p2t+1;
tempii=tempi->t.p2t->next;
tempii->t.p1t=tempi->t.p2t;
tempii->t.p1c=tempi->t.p2c;
tempii->ic_data=lb_true;
@@ -517,17 +521,17 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi)
tempii=OptBrNotZero(lx,tempii);
OptSetNOP1(tempi);;
} else if (tempi->ic_opcode==IC_BR_AND_AND_NOT_ZERO) {
lb_false=CBMiscNew(lx,CBMT_LABEL);
lb_false=LCCMiscNew(lx,CMT_LABEL);
tempi->ic_opcode=IC_LABEL;
tempi->ic_flags=0;
tempi->ic_data=lb_false;
tempii=tempi->t.p1t+1;
tempii=tempi->t.p1t->next;
tempii->t.p1t=tempi->t.p1t;
tempii->t.p1c=tempi->t.p1c;
tempii->ic_data=lb_false;
tempii->ic_opcode=IC_BR_ZERO;
OptBrZero(lx,tempii);
tempii=tempi->t.p2t+1;
tempii=tempi->t.p2t->next;
tempii->t.p1t=tempi->t.p2t;
tempii->t.p1c=tempi->t.p2c;
tempii->ic_data=lb_true;
@@ -568,7 +572,7 @@ here:
}
}
CIntermediateCode *OptPass012(CLex *lx,CHashFun *fun_class,Bool combined)
CIntermediateCode *OptPass012(CLex *lx,CHashFun *fun_class)
{
/*
Simplify CONST arithmetic.
@@ -581,22 +585,13 @@ args.
Bool is_unsigned;
CHashClass *tempc,*tempc1,*tempc2;
CIntermediateCode *tempi,*tempi1,*tempi2,*tempi3,*tempi_push,
*temp_lag[4],*last_with_class=NULL,*tempii;
CPrsStk *ps=OptStart(lx,temp_lag);
CCodeBlkMisc *lb,*lb1,*lb2;
if (combined)
tempi=lx->cbh.cb_in_ptr;
else
tempi=CBGetIC1(&lx->cbh);
if (tempi->ic_opcode==IC_START) {
if (combined)
tempi++;
else
tempi=CBGetIC1(&lx->cbh);
}
#assert !IC_END
*last_with_class=NULL;
CLexCodeMisc *lb,*lb1,*lb2;
CPrsStk *ps=MAlloc(sizeof(CPrsStk));
ps->ptr=0;
ps->ptr2=0;
tempi=lx->lcc.lcc_root.next;
while (code=tempi->ic_opcode) {
OptNext(tempi,temp_lag);
tempc=tempi->ic_class;
tempi->ic_class2=tempc;
tempi_push=tempi;
@@ -619,8 +614,8 @@ args.
case 0: //nobound_switch
break;
}
if (Bt(not_constant_bitmap,code))
lx->flags|=LF_NOT_CONSTANT;
if (Bt(not_const_bitmap,code))
lx->flags|=LF_NOT_CONST;
nobound_switch (code) {
case IC_IMM_F64:
tempi->ic_flags&=~ICF_R_TO_F64;
@@ -669,30 +664,28 @@ args.
case IC_FS:
case IC_GS:
//CALL,FS/GS,CALL_END,IMM,ADD,DEREF-->MOV_FS/GS
if (combined) {
tempi1=tempi+2; //IMM
tempi2=tempi+3; //ADD
tempi3=tempi+4; //DEREF
if (tempi1->ic_opcode==IC_IMM_U64 && tempi2->ic_opcode==IC_ADD &&
tempi3->ic_opcode==IC_DEREF && !(tempi3->ic_flags&~ICF_NO_CVT_MASK)) {
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags|tempi3->ic_flags;
if (tempi->ic_opcode==IC_FS)
tempi->ic_opcode=IC_MOV_FS;
else
tempi->ic_opcode=IC_MOV_GS;
tempi->ic_data=tempi1->ic_data;
tempi->ic_class =tempi3->ic_class;
tempi->ic_class2=tempi3->ic_class2;
OptSetNOP1(tempi1);
OptSetNOP1(tempi2);
OptSetNOP1(tempi3);
tempi1=tempi->next->next; //IMM
tempi2=tempi1->next; //ADD
tempi3=tempi2->next; //DEREF
if (tempi1->ic_opcode==IC_IMM_U64 && tempi2->ic_opcode==IC_ADD &&
tempi3->ic_opcode==IC_DEREF && !(tempi3->ic_flags&~ICG_NO_CVT_MASK)) {
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags|tempi3->ic_flags;
if (tempi->ic_opcode==IC_FS)
tempi->ic_opcode=IC_MOV_FS;
else
tempi->ic_opcode=IC_MOV_GS;
tempi->ic_data=tempi1->ic_data;
tempi->ic_class =tempi3->ic_class;
tempi->ic_class2=tempi3->ic_class2;
OptSetNOP1(tempi1);
OptSetNOP1(tempi2);
OptSetNOP1(tempi3);
tempi1=tempi-1; //CALL
tempi2=tempi+1; //CALL_END
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags;
OptSetNOP1(tempi1);
OptSetNOP1(tempi2);
}
tempi1=tempi->last; //CALL
tempi2=tempi->next; //CALL_END
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags;
OptSetNOP1(tempi1);
OptSetNOP1(tempi2);
}
break;
case IC_STR_CONST:
@@ -703,10 +696,12 @@ args.
case IC_SIZEOF:
break;
case IC_PUSH_CMP:
tempi1=temp_lag[1];
if (tempi1->ic_opcode==IC_AND_AND)
tempi1=temp_lag[2];
tempi->ic_class=tempi1->ic_class;
if (tempi1=OptLag(tempi)) {
if (tempi1->ic_opcode==IC_AND_AND)
tempi1=OptLag(tempi1);
if (tempi1)
tempi->ic_class=tempi1->ic_class;
}
tempi->ic_class2=tempi->ic_class;
tempi->ic_data=0;
if (tempi->ic_class->sub_type==IT_F64)
@@ -837,23 +832,12 @@ args.
break;
case IC_POWER:
if (tempc1->sub_type>tempc2->sub_type)
tempi->ic_class=tempc1;
else
tempi->ic_class=tempc2;
tempc=tempi->ic_class;
tempc=tempi->ic_class=sys_internal_types[IT_F64];
if (tempc1->sub_type!=IT_F64)
tempi1->ic_flags|=ICF_R_TO_F64;
if (tempc2->sub_type!=IT_F64)
tempi2->ic_flags|=ICF_R_TO_F64;
if (tempc->sub_type!=IT_F64)
tempi->ic_flags|=ICF_R_TO_INT|ICF_USE_F64;
if (!tempi_push->ic_class->ptr_cnt) {
if (tempi_push->ic_class->sub_type==IT_F64)
tempi_push->ic_class2=sys_internal_types[IT_F64];
else
tempi_push->ic_class2=sys_internal_types[IT_I64];
}
tempi_push->ic_class2=sys_internal_types[IT_F64];
break;
case IC_SHL:
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
@@ -1673,14 +1657,40 @@ args.
tempi->ic_data=-fun_class->size;
break;
case IC_ADD_RSP:
if (temp_lag[1]->ic_opcode==IC_ADD_RSP) {
tempi->ic_data+=temp_lag[1]->ic_data;
tempi->ic_flags|=temp_lag[1]->ic_flags;
OptSetNOP1(temp_lag[1]);
if (tempi1=OptLag(tempi)) {
if (tempi1->ic_opcode==IC_ADD_RSP) {
tempi->ic_data+=tempi1->ic_data;
tempi->ic_flags|=tempi1->ic_flags;
OptSetNOP1(tempi1);
}
}
case IC_ADD_RSP1:
break;
case IC_BSF:
if (tempi1->ic_opcode==IC_IMM_U64) {
tempi1->ic_data=Bsf(tempi1->ic_data);
tempi_push=tempi1;
OptSetNOP1(OptLag(tempi1)); //CALL_START
tempi2=OptLead1(tempi);
tempi1->ic_flags|=tempi->ic_flags|tempi2->ic_flags;
OptSetNOP1(tempi2); //CALL_END
OptSetNOP1(tempi); //BSF
}
break;
case IC_BSR:
if (tempi1->ic_opcode==IC_IMM_U64) {
tempi1->ic_data=Bsr(tempi1->ic_data);
tempi_push=tempi1;
OptSetNOP1(OptLag(tempi1)); //CALL_START
tempi2=OptLead1(tempi);
tempi1->ic_flags|=tempi->ic_flags|tempi2->ic_flags;
OptSetNOP1(tempi2); //CALL_END
OptSetNOP1(tempi); //BSR
}
break;
case IC_CALL:
case IC_CALL_INDIRECT:
case IC_CALL_INDIRECT2:
@@ -1698,10 +1708,10 @@ args.
case IC_INVLPG:
case IC_CLFLUSH:
case IC_PAUSE:
case IC_GET_FLAGS:
case IC_GET_RFLAGS:
case IC_CARRY:
case IC_GET_BASE_PTR:
case IC_GET_STK_PTR:
case IC_GET_RBP:
case IC_GET_RSP:
case IC_GET_RAX:
case IC_RETURN_VAL:
case IC_RETURN_VAL2:
@@ -1712,12 +1722,10 @@ args.
case IC_TYPE:
case IC_RDTSC:
case IC_HPET:
case IC_SET_FLAGS:
case IC_SET_BASE_PTR:
case IC_SET_STK_PTR:
case IC_SET_RFLAGS:
case IC_SET_RBP:
case IC_SET_RSP:
case IC_SET_RAX:
case IC_BSF:
case IC_BSR:
case IC_PREEMPT:
case IC_SIGN_I64:
case IC_TOUPPER:
@@ -1758,165 +1766,152 @@ args.
tempi->ic_flags|=ICF_LOCK;
break;
case IC_TO_I64:
if (combined) {
if (tempi1->ic_opcode==IC_IMM_F64) {
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_INT;
tempi->ic_opcode=IC_IMM_U64;
tempi->ic_data=ToI64(tempi1->ic_data(F64));
tempi->ic_class=sys_internal_types[IT_I64];
tempi->ic_class2=sys_internal_types[IT_I64];
OptSetNOP1(tempi1);
if (tempi1->ic_opcode==IC_IMM_F64) {
tempi2=tempi1->last;
while (tempi2->ic_opcode!=IC_CALL_START)
tempi2=tempi2->last;
OptSetNOP1(tempi2);
tempii=tempi1-1;
while (tempii->ic_opcode!=IC_CALL_START)
tempii--;
OptSetNOP1(tempii);
tempi2=tempi->next;
while (tempi2->ic_opcode!=IC_CALL_END)
tempi2=tempi2->next;
tempii=tempi+1;
while (tempii->ic_opcode!=IC_CALL_END)
tempii++;
OptSetNOP1(tempii);
} else if (tempi1->ic_opcode==IC_IMM_U64) {
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64;
tempi->ic_opcode=IC_IMM_U64;
tempi->ic_data=tempi1->ic_data;
tempi->ic_class=sys_internal_types[IT_I64];
tempi->ic_class2=sys_internal_types[IT_I64];
OptSetNOP1(tempi1);
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_INT|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempii=tempi1-1;
while (tempii->ic_opcode!=IC_CALL_START)
tempii--;
OptSetNOP1(tempii);
tempi->ic_opcode=IC_IMM_U64;
tempi->ic_data=ToI64(tempi1->ic_data(F64));
tempi->ic_class=sys_internal_types[IT_I64];
tempi->ic_class2=sys_internal_types[IT_I64];
OptSetNOP1(tempi1);
} else if (tempi1->ic_opcode==IC_IMM_U64) {
tempi2=tempi1->last;
while (tempi2->ic_opcode!=IC_CALL_START)
tempi2=tempi2->last;
OptSetNOP1(tempi2);
tempii=tempi+1;
while (tempii->ic_opcode!=IC_CALL_END)
tempii++;
OptSetNOP1(tempii);
tempi2=tempi->next;
while (tempi2->ic_opcode!=IC_CALL_END)
tempi2=tempi2->next;
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempi->ic_opcode=IC_IMM_U64;
tempi->ic_data=tempi1->ic_data;
tempi->ic_class=sys_internal_types[IT_I64];
tempi->ic_class2=sys_internal_types[IT_I64];
OptSetNOP1(tempi1);
}
if (tempi1->ic_flags&ICF_R_TO_F64) {
i=0;
tempi2=tempi1->last;
while (TRUE) {
if (tempi2->ic_opcode==IC_CALL_START) {
if (!i) break;
i--;
} else if (tempi2->ic_opcode==IC_CALL_END)
i++;
tempi2=tempi2->last;
}
if (tempi1->ic_flags&ICF_R_TO_F64) {
tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags&~(ICF_R_TO_F64|ICF_PUSH_RESULT);
tempi1->ic_class=sys_internal_types[IT_I64];
tempi1->ic_class2=sys_internal_types[IT_I64];
tempi_push=tempi1;
OptSetNOP1(tempi);;
OptSetNOP1(tempi2);
i=0;
tempii=tempi1-1;
while (TRUE) {
if (tempii->ic_opcode==IC_CALL_START) {
if (!i) break;
i--;
} else if (tempii->ic_opcode==IC_CALL_END)
i++;
tempii--;
}
OptSetNOP1(tempii);
tempi2=tempi1->next;
while (tempi2->ic_opcode!=IC_CALL_END)
tempi2=tempi2->next;
i=0;
tempii=tempi1+1;
while (TRUE) {
if (tempii->ic_opcode==IC_CALL_END) {
if (!i) break;
i--;
} else if (tempii->ic_opcode==IC_CALL_START)
i++;
tempii++;
}
OptSetNOP1(tempii);
}
tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags&~(ICF_R_TO_F64|ICF_PUSH_RESULT)|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempi1->ic_class=sys_internal_types[IT_I64];
tempi1->ic_class2=sys_internal_types[IT_I64];
tempi_push=tempi1;
OptSetNOP1(tempi);;
}
break;
case IC_TO_F64:
if (combined) {
if (tempi1->ic_opcode==IC_IMM_U64) {
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64;
tempi->ic_opcode=IC_IMM_F64;
tempi->ic_data(F64)=ToF64(tempi1->ic_data);
tempi->ic_class=sys_internal_types[IT_F64];
tempi->ic_class2=sys_internal_types[IT_F64];
OptSetNOP1(tempi1);
if (tempi1->ic_opcode==IC_IMM_U64) {
tempi2=tempi1->last;
while (tempi2->ic_opcode!=IC_CALL_START)
tempi2=tempi2->last;
OptSetNOP1(tempi2);
tempii=tempi1-1;
while (tempii->ic_opcode!=IC_CALL_START)
tempii--;
OptSetNOP1(tempii);
tempi2=tempi->next;
while (tempi2->ic_opcode!=IC_CALL_END)
tempi2=tempi2->next;
tempii=tempi+1;
while (tempii->ic_opcode!=IC_CALL_END)
tempii++;
OptSetNOP1(tempii);
} else if (tempi1->ic_opcode==IC_IMM_F64) {
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_INT;
tempi->ic_opcode=IC_IMM_F64;
tempi->ic_data=tempi1->ic_data;
tempi->ic_class=sys_internal_types[IT_F64];
tempi->ic_class2=sys_internal_types[IT_F64];
OptSetNOP1(tempi1);
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempii=tempi1-1;
while (tempii->ic_opcode!=IC_CALL_START)
tempii--;
OptSetNOP1(tempii);
tempi->ic_opcode=IC_IMM_F64;
tempi->ic_data(F64)=ToF64(tempi1->ic_data);
tempi->ic_class=sys_internal_types[IT_F64];
tempi->ic_class2=sys_internal_types[IT_F64];
OptSetNOP1(tempi1);
} else if (tempi1->ic_opcode==IC_IMM_F64) {
tempi2=tempi1->last;
while (tempi2->ic_opcode!=IC_CALL_START)
tempi2=tempi2->last;
OptSetNOP1(tempi2);
tempii=tempi+1;
while (tempii->ic_opcode!=IC_CALL_END)
tempii++;
OptSetNOP1(tempii);
tempi2=tempi->next;
while (tempi2->ic_opcode!=IC_CALL_END)
tempi2=tempi2->next;
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_INT|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempi->ic_opcode=IC_IMM_F64;
tempi->ic_data=tempi1->ic_data;
tempi->ic_class=sys_internal_types[IT_F64];
tempi->ic_class2=sys_internal_types[IT_F64];
OptSetNOP1(tempi1);
}
if (tempi1->ic_flags&ICF_R_TO_INT) {
i=0;
tempi2=tempi1->last;
while (TRUE) {
if (tempi2->ic_opcode==IC_CALL_START) {
if (!i) break;
i--;
} else if (tempi2->ic_opcode==IC_CALL_END)
i++;
tempi2=tempi2->last;
}
if (tempi1->ic_flags&ICF_R_TO_INT) {
tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags&~(ICF_R_TO_INT|ICF_PUSH_RESULT);
OptSetNOP1(tempi);;
tempi1->ic_class=sys_internal_types[IT_F64];
tempi1->ic_class2=sys_internal_types[IT_F64];
tempi_push=tempi1;
OptSetNOP1(tempi2);
i=0;
tempii=tempi1-1;
while (TRUE) {
if (tempii->ic_opcode==IC_CALL_START) {
if (!i) break;
i--;
} else if (tempii->ic_opcode==IC_CALL_END)
i++;
tempii--;
}
OptSetNOP1(tempii);
tempi2=tempi1->next;
while (tempi2->ic_opcode!=IC_CALL_END)
tempi2=tempi2->next;
i=0;
tempii=tempi1+1;
while (TRUE) {
if (tempii->ic_opcode==IC_CALL_END) {
if (!i) break;
i--;
} else if (tempii->ic_opcode==IC_CALL_START)
i++;
tempii++;
}
OptSetNOP1(tempii);
}
tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags&~(ICF_R_TO_INT|ICF_PUSH_RESULT)|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempi1->ic_class=sys_internal_types[IT_F64];
tempi1->ic_class2=sys_internal_types[IT_F64];
tempi_push=tempi1;
OptSetNOP1(tempi);;
}
break;
case IC_TO_BOOL:
if (combined) {
if (tempi1->ic_opcode==IC_IMM_U64 || tempi1->ic_opcode==IC_IMM_F64) {
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64;
tempi->ic_opcode=IC_IMM_U64;
tempi->ic_data=ToBool(tempi1->ic_data);
tempi->ic_class=sys_internal_types[IT_I64];
tempi->ic_class2=sys_internal_types[IT_I64];
OptSetNOP1(tempi1);
if (tempi1->ic_opcode==IC_IMM_U64 || tempi1->ic_opcode==IC_IMM_F64) {
tempi2=tempi1->last;
while (tempi2->ic_opcode!=IC_CALL_START)
tempi2=tempi2->last;
OptSetNOP1(tempi2);
tempii=tempi1-1;
while (tempii->ic_opcode!=IC_CALL_START)
tempii--;
OptSetNOP1(tempii);
tempi2=tempi->next;
while (tempi2->ic_opcode!=IC_CALL_END)
tempi2=tempi2->next;
tempii=tempi+1;
while (tempii->ic_opcode!=IC_CALL_END)
tempii++;
OptSetNOP1(tempii);
}
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempi->ic_opcode=IC_IMM_U64;
tempi->ic_data=ToBool(tempi1->ic_data);
tempi->ic_class=sys_internal_types[IT_I64];
tempi->ic_class2=sys_internal_types[IT_I64];
OptSetNOP1(tempi1);
}
break;
@@ -1930,12 +1925,10 @@ args.
break;
case IC_BR_ZERO:
if (combined)
tempi_push=OptBrZero(lx,tempi);
tempi_push=OptBrZero(lx,tempi);
break;
case IC_BR_NOT_ZERO:
if (combined)
tempi_push=OptBrNotZero(lx,tempi);
tempi_push=OptBrNotZero(lx,tempi);
break;
case IC_BR_NOT_EQUAL:
case IC_BR_EQUAL_EQUAL:
@@ -1976,11 +1969,11 @@ args.
break;
case IC_NOP1:
if (combined && tempi->ic_flags&ICF_PUSH_RESULT) {
tempii=tempi;
do tempii--;
while (tempii->ic_opcode==IC_NOP1);
tempii->ic_flags|=ICF_PUSH_RESULT;
if (tempi->ic_flags&ICF_PUSH_RESULT) {
tempi1=tempi;
do tempi1=tempi1->last;
while (tempi1->ic_opcode==IC_NOP1);
tempi1->ic_flags|=ICF_PUSH_RESULT;
tempi->ic_flags&=~ICF_PUSH_RESULT;
}
break;
@@ -1994,27 +1987,29 @@ args.
lb1->fwd=lb;
lb1=lb2;
}
tempii=temp_lag[1];
if (tempii->ic_opcode==IC_JMP) {
lb1=tempii->ic_data;
while (lb1->fwd)
lb1=lb1->fwd;
if (lb1==lb) {
tempi->ic_flags|=tempii->ic_flags;
OptSetNOP1(tempii);
}
} else if (tempii->ic_opcode==IC_LABEL) {
lb1=tempii->ic_data;
if (!lb1->fwd)
lb1->fwd=lb;
tempii=temp_lag[2];
if (tempii->ic_opcode==IC_JMP) {
lb1=tempii->ic_data;
if (tempi1=OptLag(tempi)) {
if (tempi1->ic_opcode==IC_JMP) {
lb1=tempi1->ic_data;
while (lb1->fwd)
lb1=lb1->fwd;
if (lb1==lb) {
tempi->ic_flags|=tempii->ic_flags;
OptSetNOP1(tempii);
tempi->ic_flags|=tempi1->ic_flags;
OptSetNOP1(tempi1);
}
} else if (tempi1->ic_opcode==IC_LABEL) {
lb1=tempi1->ic_data;
if (!lb1->fwd)
lb1->fwd=lb;
if (tempi1=OptLag(tempi1)) {
if (tempi1->ic_opcode==IC_JMP) {
lb1=tempi1->ic_data;
while (lb1->fwd)
lb1=lb1->fwd;
if (lb1==lb) {
tempi->ic_flags|=tempi1->ic_flags;
OptSetNOP1(tempi1);
}
}
}
}
}
@@ -2031,15 +2026,19 @@ args.
case IC_IRQ:
break;
case IC_JMP:
if (temp_lag[1]->ic_opcode==IC_LABEL) {
lb=OptLabelFwd(tempi->ic_data);
lb1=OptLabelFwd(temp_lag[1]->ic_data);
if (lb!=lb1)
lb1->fwd=lb;
if (tempi1=OptLag(tempi)) {
if (tempi1->ic_opcode==IC_LABEL) {
lb=OptLabelFwd(tempi->ic_data);
lb1=OptLabelFwd(tempi1->ic_data);
if (lb!=lb1)
lb1->fwd=lb;
}
}
break;
default:
OptMissing(lx,tempi);
"Pass:%d Missing IC handler\n",lx->pass;
ICPut(tempi);
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
if (cmp_arg_cnt[code]==2) {
if (tempi_push->ic_precedence.u8[0]&~ASSOC_MASK==PREC_ASSIGN)
@@ -2061,12 +2060,13 @@ args.
if (code>IC_END_EXP)
last_with_class=tempi;
}
if (combined)
tempi++;
else
tempi=CBGetIC1(&lx->cbh);
tempi=tempi->next;
}
OptEnd(lx,ps);
if (ps->ptr>2) {
"Pass:%d Stk:%08X\n",lx->pass,ps->ptr;
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
Free(ps);
/*
This is for determining type conversions
+54 -27
View File
@@ -49,14 +49,16 @@ I64 OptMVCompare(OptMemberVar *mv1,OptMemberVar *mv2)
U0 OptPass3(CLex *lx,CHashFun *fun_class,COptReg *register_offsets)
{
CHashClass *tempc,*tempc1,*tempc2;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
CIntermediateCode *tempi,*tempi1,*tempi2,
*tempil1,*tempil2,
*temp_lag[4];
*tempil1,*tempil2;
I64 code,i,j,l,member_cnt,used_reg_mask=0;
CMemberLst *tempm;
CPrsStk *ps=OptStart(lx,temp_lag);
OptMemberVar *mv=NULL;
CPrsStk *ps=MAlloc(sizeof(CPrsStk));
ps->ptr=0;
ps->ptr2=0;
for (i=0;i<NUM_REGS;i++) {
register_offsets[i].offset=MAX_I64;
register_offsets[i].m=NULL;
@@ -72,7 +74,7 @@ U0 OptPass3(CLex *lx,CHashFun *fun_class,COptReg *register_offsets)
tempc=OptClassFwd(tempm->member_class);
if (0<=tempm->register<NUM_REGS) {
if (Bts(&used_reg_mask,tempm->register))
PrintFWarn("%S\n $$LK-A,\"FL:%s,%d\"$$ '%s' in '%s'\n","ST_REG_IN_USE",
PrintWarn("%S\n $$LK-A,\"FL:%s,%d\"$$ '%s' in '%s'\n","ST_REG_IN_USE",
lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,fun_class->str);
register_offsets[tempm->register].offset=tempm->offset;
register_offsets[tempm->register].m=tempm;
@@ -84,7 +86,7 @@ U0 OptPass3(CLex *lx,CHashFun *fun_class,COptReg *register_offsets)
mv[member_cnt++].m=tempm;
} else {
if (tempm->register==CREG_ALLOC)
PrintFWarn("%S\n $$LK-A,\"FL:%s,%d\"$$ '%s' in '%s'\n","ST_CANT_REG_VAR",
PrintWarn("%S\n $$LK-A,\"FL:%s,%d\"$$ '%s' in '%s'\n","ST_CANT_REG_VAR",
lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,fun_class->str);
}
tempm=tempm->next;
@@ -92,14 +94,14 @@ U0 OptPass3(CLex *lx,CHashFun *fun_class,COptReg *register_offsets)
} else
member_cnt=0;
tempi=lx->cbh.cb_in_ptr;
if (tempi->ic_opcode==IC_START)
tempi++;
tempi=lx->lcc.lcc_root.next;
while (code=tempi->ic_opcode) {
if (code!=IC_NOP1) {
OptNext(tempi,temp_lag);
tempil1=temp_lag[1];
tempil2=temp_lag[2];
if (tempil1=OptLag(tempi)) {
if (!(tempil2=OptLag(tempil1)))
tempil2=&opt_nop;
} else
tempil1=tempil2=&opt_nop;
tempc=tempi->ic_class;
nobound_switch (cmp_arg_cnt[code]) {
case 9:
@@ -362,16 +364,16 @@ U0 OptPass3(CLex *lx,CHashFun *fun_class,COptReg *register_offsets)
case IC_INVLPG:
case IC_CLFLUSH:
case IC_PAUSE:
case IC_GET_FLAGS:
case IC_GET_RFLAGS:
case IC_CARRY:
case IC_RDTSC:
case IC_HPET:
case IC_SET_FLAGS:
case IC_GET_BASE_PTR:
case IC_SET_BASE_PTR:
case IC_GET_STK_PTR:
case IC_SET_RFLAGS:
case IC_GET_RBP:
case IC_SET_RBP:
case IC_GET_RSP:
case IC_GET_RAX:
case IC_SET_STK_PTR:
case IC_SET_RSP:
case IC_SET_RAX:
case IC_ABS_ADDR:
case IC_HEAP_GLBL:
@@ -419,9 +421,30 @@ U0 OptPass3(CLex *lx,CHashFun *fun_class,COptReg *register_offsets)
break;
case IC_NOBOUND_SWITCH:
case IC_SWITCH:
lb=OptLabelFwd(tempi->ic_data(CCodeBlkMisc *)->dft);
lb->flags|=CBMF_USED;
lb=OptLabelFwd(tempi->ic_data(CLexCodeMisc *)->dft);
lb->flags|=CMF_USED;
break;
case IC_BR_NOT_EQUAL:
case IC_BR_EQUAL_EQUAL:
if ((tempi1->ic_opcode==IC_IMM_U64 || tempi1->ic_opcode==IC_IMM_F64) && !tempi1->ic_data) {
OptSetNOP1(tempi1);
MemCpy(&tempi->p1,&tempi->p2,sizeof(CICArg));
tempi->p2.type=TY_NULL;
if (code==IC_BR_EQUAL_EQUAL)
code=tempi->ic_opcode=IC_BR_ZERO;
else
code=tempi->ic_opcode=IC_BR_NOT_ZERO;
tempi1=tempi2;
tempc1=tempc2;
} else if ((tempi2->ic_opcode==IC_IMM_U64 || tempi2->ic_opcode==IC_IMM_F64) && !tempi2->ic_data) {
OptSetNOP1(tempi2);
tempi->p2.type=TY_NULL;
if (code==IC_BR_EQUAL_EQUAL)
code=tempi->ic_opcode=IC_BR_ZERO;
else
code=tempi->ic_opcode=IC_BR_NOT_ZERO;
} else
goto here1;
case IC_BR_ZERO:
case IC_BR_NOT_ZERO:
if (tempi1->ic_opcode==IC_IMM_U64 || tempi1->ic_opcode==IC_IMM_F64) {
@@ -499,8 +522,6 @@ U0 OptPass3(CLex *lx,CHashFun *fun_class,COptReg *register_offsets)
case IC_BR_LESS2:
case IC_BR_NOT_EQUAL2:
case IC_BR_EQUAL_EQUAL2:
case IC_BR_NOT_EQUAL:
case IC_BR_EQUAL_EQUAL:
case IC_GET_LABEL:
case IC_BR_BT:
case IC_BR_BTS:
@@ -522,7 +543,7 @@ here1:
lb=tempi->ic_data;
else
lb=OptLabelFwd(tempi->ic_data);
lb->flags|=CBMF_USED;
lb->flags|=CMF_USED;
break;
case IC_LEAVE:
case IC_RET:
@@ -544,10 +565,12 @@ here1:
break;
default:
OptMissing(lx,tempi);
"Pass:%d Missing IC handler\n",lx->pass;
ICPut(tempi);
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
}
tempi++;
tempi=tempi->next;
}
if (fun_class) {
fun_class->used_reg_mask=fun_class->used_reg_mask&~(CREG_VARS_MASK|CREG_NON_PTR_MASK)|used_reg_mask;
@@ -563,7 +586,7 @@ here1:
mv[j++].offset=mv[i].offset;
} else {
if (mv[i].m->register==CREG_ALLOC)
PrintFWarn("%S\n $$LK-A,\"FL:%s,%d\"$$ '%s' in '%s'\n","ST_CANT_REG_VAR",
PrintWarn("%S\n $$LK-A,\"FL:%s,%d\"$$ '%s' in '%s'\n","ST_CANT_REG_VAR",
lx->cur_lfn->name,lx->cur_lfn->line_num,mv[i].m->str,fun_class->str);
}
}
@@ -613,6 +636,10 @@ here1:
}
Free(mv);
}
OptEnd(lx,ps);
if (ps->ptr>2) {
"Pass:%d Stk:%08X\n",lx->pass,ps->ptr;
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
Free(ps);
}
+37 -32
View File
@@ -19,7 +19,7 @@ Bool OptIC4(CIntermediateCode *tempi)
i=tempil1->ic_data;
if (MIN_I32<=i<=MAX_I32 &&
!Bt(&non_ptr_vars_mask,tempil2->p1.reg)) {
tempil1->ic_flags|=tempil2->ic_flags&ICF_NO_CVT_MASK;
tempil1->ic_flags|=tempil2->ic_flags&ICG_NO_CVT_MASK;
tempil1->ic_opcode=IC_LEA;
tempil1->p1.type=TY_DISP+tempil1->p1.type&IT_MASK;
tempil1->p1.reg=tempil2->p1.reg;
@@ -33,7 +33,7 @@ Bool OptIC4(CIntermediateCode *tempi)
if (MIN_I32<=i<=MAX_I32 &&
tempil2->p1.reg!=CREG_RSP &&
1<=tempil2->ic_data<=3) {
tempil1->ic_flags|=tempil2->ic_flags&ICF_NO_CVT_MASK;
tempil1->ic_flags|=tempil2->ic_flags&ICG_NO_CVT_MASK;
tempil1->ic_opcode=IC_LEA;
tempil1->p1.type=TY_SIB+tempil1->p1.type&IT_MASK;
tempil1->p1.reg=tempil2->p1.reg<<8+CREG_NONE;
@@ -84,7 +84,7 @@ Bool OptIC4(CIntermediateCode *tempi)
tempil1->p2.reg=tempil2->p1.reg;
tempil1->p2.disp=tempil2->p1.disp;
tempil1->ic_flags|=tempil2->ic_flags&ICF_NO_CVT_MASK;
tempil1->ic_flags|=tempil2->ic_flags&ICG_NO_CVT_MASK;
OptSetNOP2(tempil2);
return TRUE;
}
@@ -124,7 +124,7 @@ Bool OptIC4(CIntermediateCode *tempi)
tempil1->p1.reg=tempil2->p1.reg;
tempil1->p1.disp=tempil2->p1.disp;
tempil1->ic_flags|=tempil2->ic_flags&ICF_NO_CVT_MASK;
tempil1->ic_flags|=tempil2->ic_flags&ICG_NO_CVT_MASK;
OptSetNOP2(tempil2);
return TRUE;
}
@@ -171,33 +171,32 @@ Bool OptIC4(CIntermediateCode *tempi)
U0 OptPass4(CLex *lx,COptReg *register_offsets,I64 *_type)
{
CHashClass *tempc,*tempc1,*tempc2,*tempc3;
CIntermediateCode *tempi,*tempi1,*tempi2,*tempi3,*tempil1,*tempil2,*tempil3,
*temp_lag[4];
CIntermediateCode *tempi,*tempi1,*tempi2,*tempi3,*tempil1,*tempil2,*tempil3;
I64 code,i;
CPrsStk *ps=OptStart(lx,temp_lag);
Bool dead_code=FALSE;
CCodeBlkMisc *lb;
CLexCodeMisc *lb;
CPrsStk *ps=MAlloc(sizeof(CPrsStk));
ps->ptr=0;
ps->ptr2=0;
if (_type)
*_type=IT_I64;
tempi=lx->cbh.cb_in_ptr;
if (tempi->ic_opcode==IC_START)
tempi++;
tempi=lx->lcc.lcc_root.next;
while (code=tempi->ic_opcode) {
OptNext2(tempi,temp_lag);
if (dead_code&&code!=IC_LABEL)
OptSetNOP1(tempi);
else {
tempc=tempi->ic_class;
tempi3=&opt_nop;
tempi2=&opt_nop;
tempi1=&opt_nop;
tempil1=temp_lag[1];
tempil2=temp_lag[2];
tempil3=temp_lag[3];
tempi1=tempi2=tempi3=&opt_nop;
if (tempil1=OptLag2(tempi)) {
if (tempil2=OptLag2(tempil1)) {
if (!(tempil3=OptLag2(tempil2)))
tempil3=&opt_nop;
} else
tempil2=tempil3=&opt_nop;
} else
tempil1=tempil2=tempil3=&opt_nop;
nobound_switch (cmp_arg_cnt[code]) {
case 9:
ps->ptr-=tempi->ic_data>>3;
@@ -343,7 +342,7 @@ lea_gone:
tempi->p1.disp=0;
tempi->p1.reg=tempi2->p1.reg+tempi1->p1.reg<<8;
sib:
tempi->ic_flags|=(tempi1->ic_flags|tempi2->ic_flags)&ICF_NO_CVT_MASK;
tempi->ic_flags|=(tempi1->ic_flags|tempi2->ic_flags)&ICG_NO_CVT_MASK;
OptSetNOP2(tempi1);
OptSetNOP1(tempi2);
@@ -499,16 +498,16 @@ sib:
case IC_INVLPG:
case IC_CLFLUSH:
case IC_PAUSE:
case IC_GET_FLAGS:
case IC_GET_RFLAGS:
case IC_CARRY:
case IC_RDTSC:
case IC_HPET:
case IC_SET_FLAGS:
case IC_GET_BASE_PTR:
case IC_SET_BASE_PTR:
case IC_GET_STK_PTR:
case IC_SET_RFLAGS:
case IC_GET_RBP:
case IC_SET_RBP:
case IC_GET_RSP:
case IC_GET_RAX:
case IC_SET_STK_PTR:
case IC_SET_RSP:
case IC_SET_RAX:
break;
case IC_RETURN_VAL:
@@ -676,13 +675,13 @@ sib:
case IC_BR_LESS:
lb=tempi->ic_data;
if (tempi->ic_flags&ICF_PUSH_CMP) {
lb->flags|=CBMF_POP_CMP;
lb->flags|=CMF_POP_CMP;
lb->fwd=NULL;
}
break;
case IC_LABEL:
lb=tempi->ic_data;
if (lb->flags&CBMF_USED)
if (lb->flags&CMF_USED)
dead_code=FALSE;
break;
case IC_JMP:
@@ -708,7 +707,9 @@ sib:
}
break;
default:
OptMissing(lx,tempi);
"Pass:%d Missing IC handler\n",lx->pass;
ICPut(tempi);
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
while (OptIC4(tempi));
@@ -716,7 +717,11 @@ sib:
if (cmp_result_cnt[code])
PrsPush(ps,tempi);
}
tempi++;
tempi=tempi->next;
}
OptEnd(lx,ps);
if (ps->ptr>2) {
"Pass:%d Stk:%08X\n",lx->pass,ps->ptr;
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
Free(ps);
}
+15 -13
View File
@@ -2,32 +2,30 @@ U0 OptPass5(CLex *lx)
{
CIntermediateCode *tempi,*tempi1;
I64 code,i,ty,pt,ty1,pt1;
CPrsStk *ps=OptStart(lx);
CPrsStk *ps=MAlloc(sizeof(CPrsStk));
ps->ptr=0;
ps->ptr2=0;
tempi=lx->cbh.cb_in_ptr;
if (tempi->ic_opcode==IC_START)
tempi++;
tempi=lx->lcc.lcc_root.next;
while (code=tempi->ic_opcode) {
if (code>IC_NOP2) {
if (tempi->ic_flags&ICF_TRACE) {
if (Bt(&lx->pass_trace_mask,5)) {
"%2d:",ps->ptr;
CBPutIC(tempi);
ICPut(tempi);
}
}
if (cmp_arg_cnt[code]==9)
ps->ptr-=tempi->ic_data>>3;
if (code==IC_PUSH_REGS) {
for (i=0;i<NUM_REGS;i++)
if (Bt(&tempi->ic_data,i))
ps->ptr++;
} else if (code==IC_POP_REGS) {
} else if (code==IC_POP_REGS) {
for (i=0;i<NUM_REGS;i++)
if (Bt(&tempi->ic_data,i))
ps->ptr--;
}
}
if (tempi->p2.type&TY_MASK==TY_STK) {
tempi1=PrsPop(ps);
if (tempi1->ic_opcode==IC_MOV ||
@@ -64,7 +62,7 @@ U0 OptPass5(CLex *lx)
tempi->p2.reg=tempi1->p1.reg;
tempi->p2.disp=tempi1->p1.disp;
tempi->ic_flags|=tempi1->ic_flags&ICF_NO_CVT_MASK;
tempi->ic_flags|=tempi1->ic_flags&ICG_NO_CVT_MASK;
OptSetNOP2(tempi1);
}
}
@@ -108,14 +106,18 @@ U0 OptPass5(CLex *lx)
tempi->p1.reg=tempi1->p1.reg;
tempi->p1.disp=tempi1->p1.disp;
tempi->ic_flags|=tempi1->ic_flags&ICF_NO_CVT_MASK;
tempi->ic_flags|=tempi1->ic_flags&ICG_NO_CVT_MASK;
OptSetNOP2(tempi1);
}
}
if (tempi->r.type&TY_MASK==TY_STK)
PrsPush(ps,tempi);
}
tempi++;
tempi=tempi->next;
}
OptEnd(lx,ps);
if (ps->ptr>2) {
"Pass:%d Stk:%08X\n",lx->pass,ps->ptr;
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
Free(ps);
}
+54 -47
View File
@@ -44,7 +44,7 @@ U0 OptPass6Lag(CLex *lx,
if (tempi->ic_flags&ICF_TRACE) {
if (Bt(&lx->pass_trace_mask,6)) {
"%2d:",i;
CBPutIC(tempi);
ICPut(tempi);
}
}
if (code==IC_CALL_START) {
@@ -130,64 +130,67 @@ U0 OptPass6Lag(CLex *lx,
U0 OptPass6(CLex *lx,CHashFun *fun_class)
{
CIntermediateCode *tempi,*tempil1,*tempif1,*tempif2,
*temp_lag[4],*old_tempil1=NULL;
CPrsStk *ps=OptStart(lx,temp_lag);
I64 i=0,code,num_stk,clobbered_reg_mask=CALWAYS_CLOBBERED_MASK,
fun_num=0;
CIntermediateCode *tempi,*tempil1,*tempil2,*tempil3,*tempif1,*tempif2,*old_tempil2;
I64 i=0,code,num_stk,clobbered_reg_mask=CALWAYS_CLOBBERED_MASK,fun_num=0;
CPrsStk *ps=MAlloc(sizeof(CPrsStk));
ps->ptr=0;
ps->ptr2=0;
if (fun_class)
fun_num=compiled_funs++;
if (Bt(&lx->opts,OPTf_NO_REG_VAR) ||
lx->flags&LF_NO_REG_OPT)
num_stk=0;
else
num_stk=num_stk_temps;
tempi=lx->cbh.cb_in_ptr;
if (tempi->ic_opcode==IC_START)
tempi++;
tempi=lx->lcc.lcc_root.next;
old_tempil2=NULL;
tempil1=tempil2=tempil3=&opt_nop;
while (code=tempi->ic_opcode) {
OptNext3(tempi,temp_lag);
tempil1=temp_lag[1];
if (tempil1->ic_opcode==IC_END_EXP) {
if ( tempi ->ic_opcode>=IC_END_EXP && tempi ->ic_opcode!=IC_NOP2) {
if ( tempil1->ic_opcode>=IC_END_EXP && tempil1->ic_opcode!=IC_NOP2) {
if (tempil2->ic_opcode>=IC_END_EXP && tempil2->ic_opcode!=IC_NOP2)
tempil3=tempil2;
tempil2=tempil1;
}
tempil1=tempi;
}
if (tempil2->ic_opcode==IC_END_EXP) {
if (code!=IC_RETURN_VAL2 && code!=IC_NOP1) {
if (!(temp_lag[2]->ic_flags&
if (!(tempil3->ic_flags&
(ICF_R_TO_F64|ICF_R_TO_INT|ICF_PUSH_RESULT|ICF_DEPEND_RESULT))) {
temp_lag[2]->ic_flags|=ICF_NO_DEPEND_RESULT;
temp_lag[2]->r.type=TY_NULL+temp_lag[2]->r.type&IT_MASK;
tempil1->ic_flags|=ICF_NO_DEPEND_RESULT;
tempil1->r.type=TY_NULL+tempil1->r.type&IT_MASK;
tempil3->ic_flags|=ICF_NO_DEPEND_RESULT;
tempil3->r.type=TY_NULL+tempil3->r.type&IT_MASK;
tempil2->ic_flags|=ICF_NO_DEPEND_RESULT;
tempil2->r.type=TY_NULL+tempil2->r.type&IT_MASK;
}
}
}
if (code<=IC_NOP2) {
} else {
if (tempi->p2.type&TY_MASK==TY_STK) {
if (tempil1->r.type&TY_MASK==TY_STK &&
!(tempil1->ic_flags&ICF_PUSH_RESULT)) {
if (tempil2->r.type&TY_MASK==TY_STK &&
!(tempil2->ic_flags&ICF_PUSH_RESULT)) {
tempif2=NULL;
if (tempi->ic_opcode==IC_ASSIGN &&
tempi->ic_flags&ICF_NOT_ADDR &&
tempil1->ic_opcode!=IC_CALL_END &&
tempil1->ic_opcode!=IC_CALL_END2 &&
tempil1->ic_opcode!=IC_SET_RAX &&
tempil2->ic_opcode!=IC_CALL_END &&
tempil2->ic_opcode!=IC_CALL_END2 &&
tempil2->ic_opcode!=IC_SET_RAX &&
!(tempi->ic_flags&
(ICF_P2_TO_F64|ICF_P2_TO_INT)) &&
!(tempil1->ic_flags&
!(tempil2->ic_flags&
(ICF_R_TO_F64|ICF_R_TO_INT))) {
if (tempif1=OptLead1(lx,tempi)) //predict NO_DEPEND
if (tempif2=OptLead1(lx,tempif1))
if (tempif1=OptLead1(tempi)) //predict NO_DEPEND
if (tempif2=OptLead1(tempif1))
if (tempif1->ic_opcode==IC_END_EXP &&
tempif2->ic_opcode!=IC_RETURN_VAL2) {
tempil1->r.type =tempi->p1.type&TY_MASK+tempi->p1.ptype;
tempil1->r.ptype=tempi->p1.ptype;
tempil1->r.reg =tempi->p1.reg;
tempil1->r.disp =tempi->p1.disp;
tempil1->ic_flags=tempil1->ic_flags&~(ICF_NO_DEPEND_RESULT|ICF_R_WAS_STK)|
tempil2->r.type =tempi->p1.type&TY_MASK+tempi->p1.ptype;
tempil2->r.ptype=tempi->p1.ptype;
tempil2->r.reg =tempi->p1.reg;
tempil2->r.disp =tempi->p1.disp;
tempil2->ic_flags=tempil2->ic_flags&~(ICF_NO_DEPEND_RESULT|ICF_R_WAS_STK)|
tempi->ic_flags&~(ICF_NOT_ADDR|ICF_P1_WAS_STK|ICF_P2_WAS_STK)|ICF_DEPEND_RESULT;
old_tempil1=NULL;
old_tempil2=NULL;
OptSetNOP1(tempi);
} else
tempif2=NULL;
@@ -196,33 +199,37 @@ U0 OptPass6(CLex *lx,CHashFun *fun_class)
tempi->p2.type=TY_REG+tempi->p2.type&IT_MASK;
tempi->p2.reg=CREG_RAX;
tempi->p2.disp=0;
tempil1->r.type=TY_REG+tempil1->r.type&IT_MASK;
tempil1->r.reg=CREG_RAX;
tempil1->r.disp=0;
tempil2->r.type=TY_REG+tempil2->r.type&IT_MASK;
tempil2->r.reg=CREG_RAX;
tempil2->r.disp=0;
}
}
} else if (tempi->p1.type&TY_MASK==TY_STK) {
if (tempil1->r.type&TY_MASK==TY_STK &&
!(tempil1->ic_flags&ICF_PUSH_RESULT)) {
if (tempil2->r.type&TY_MASK==TY_STK &&
!(tempil2->ic_flags&ICF_PUSH_RESULT)) {
tempi->p1.type=TY_REG+tempi->p1.type&IT_MASK;
tempi->p1.reg=CREG_RAX;
tempi->p1.disp=0;
tempil1->r.type=TY_REG+tempil1->r.type&IT_MASK;
tempil1->r.reg=CREG_RAX;
tempil1->r.disp=0;
tempil2->r.type=TY_REG+tempil2->r.type&IT_MASK;
tempil2->r.reg=CREG_RAX;
tempil2->r.disp=0;
}
}
if (tempi->ic_flags & ICF_PUSH_RESULT)
tempi->r.type==TY_STK+tempi->r.type&IT_MASK;
}
if (old_tempil1!=tempil1) {
OptPass6Lag(lx,ps,tempil1,&i,num_stk,&clobbered_reg_mask,fun_num);
old_tempil1=tempil1;
if (old_tempil2!=tempil2) {
OptPass6Lag(lx,ps,tempil2,&i,num_stk,&clobbered_reg_mask,fun_num);
old_tempil2=tempil2;
}
tempi++;
tempi=tempi->next;
}
OptEnd(lx,ps);
if (ps->ptr>2) {
"Pass:%d Stk:%08X\n",lx->pass,ps->ptr;
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
Free(ps);
if (fun_class) {
fun_class->used_reg_mask&=~CSTK_TEMPS_MASK;
@@ -1,10 +1,15 @@
I64 OptPass789A(CLex *lx,CHashFun *fun_class,
I64 OptPass789(CLex *lx,CHashFun *fun_class,
COptReg *register_offsets,U8 *buf,CDbgInfo **_dbg)
{
/*
lx->pass==7 is first time
lx->pass==8 is repeated until size stops shrinking
lx->pass==9 is final
*/
CIntermediateCode *tempi;
I64 code,i,cnt,*qq,num_lines=lx->max_line-lx->min_line+1,ip=0,ip2;
CCodeBlkMisc *lb,*lb1;
CExe *tempex;
CLexCodeMisc *lb,*lb1;
CExe *tempx;
CExeAbsAddr *tempa;
CExeImportExport *tempe;
CExeHeapGlbl *temphg;
@@ -35,16 +40,14 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
lx->last_float_op_ic=NULL;
tempi=lx->cbh.cb_in_ptr;
if (tempi->ic_opcode==IC_START) {
tempi->ic_cnt=0;
tempi->ic_last_cnt=-1;
tempi++;
}
tempi=&lx->lcc.lcc_root;
tempi->ic_cnt=0;
tempi->ic_last_cnt=-1;
tempi=tempi->next;
while (code=tempi->ic_opcode) {
if (code>IC_END_EXP) {
if (tempi->ic_flags&ICF_TRACE && Bt(&lx->pass_trace_mask,lx->pass))
CBPutIC(tempi);
ICPut(tempi);
ip2=ip;
if (lx->flags&LF_AOT_COMPILE)
ip2+=a->ip;
@@ -173,7 +176,7 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
if (buf && !(lx->flags&LF_NO_ABSS)) {
tempg=tempi->ic_data;
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIE_LIT_U32;
tempe->type=EIE_IMM_U32;
tempe->ip=ip2+tempi->ic_cnt-4;
tempe->next=tempg->ie_lst;
tempg->ie_lst=tempe;
@@ -195,16 +198,16 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
tempi->ic_flags&=~ICF_CODE_FINAL;
break;
case IC_ASM:
tempex=tempi->ic_data;
tempi->ic_cnt+=tempex->code_U8s;
tempx=tempi->ic_data;
tempi->ic_cnt+=tempx->ex_U8s;
if (buf) {
MemCpy(buf+ip,tempex->code,tempex->code_U8s);
Free(tempex->code);
tempex->code=buf+ip;
MemCpy(buf+ip,tempx->ex,tempx->ex_U8s);
ExpressionBinDel(tempx->ex);
tempx->ex=buf+ip;
if (lx->flags&LF_AOT_COMPILE)
CmpFixUpAOTAsm(lx,tempex,ip2);
CmpFixUpAOTAsm(lx,tempx,ip2);
else
CmpFixUpJITAsm(lx,tempex,ip2);
CmpFixUpJITAsm(lx,tempx,ip2);
cnt=tempi->ic_cnt;
goto skip_copy;
}
@@ -482,11 +485,11 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
TY_IMM+IT_I64,0,tempi->ic_data,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2);
break;
case IC_ADD_CONST:
ICAddConst(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
ICAddSubEctImm(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
tempi->p1.type,tempi->p1.reg,tempi->p1.disp,tempi->ic_data,0x0003,ip2);
break;
case IC_SUB_CONST:
ICAddConst(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
ICAddSubEctImm(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
tempi->p1.type,tempi->p1.reg,tempi->p1.disp,tempi->ic_data,0x052B,ip2);
break;
case IC_ENTER:
@@ -566,13 +569,13 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
tempi->ic_flags&=~ICF_CODE_FINAL;
break;
case IC_CALL_IMPORT:
if (GetOpt(OPTf_USE_LIT64)) {
if (GetOpt(OPTf_USE_IMM64)) {
ICU16(tempi,0xBB48);
ICU64(tempi,0);
if (buf) {
tempf=tempi->ic_data;
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIE_LIT_U64;
tempe->type=EIE_IMM_U64;
tempe->ip=ip2+tempi->ic_cnt-8;
tempe->next=tempf->ie_lst;
tempf->ie_lst=tempe;
@@ -580,7 +583,7 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
ICU16(tempi,0xD3FF);
} else {
ICU8(tempi,0xE8);
ICU32(tempi,-(ip2+5));
ICU32(tempi,0);
if (buf) {
tempf=tempi->ic_data;
tempe=CAlloc(sizeof(CExeImportExport));
@@ -632,7 +635,7 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
case IC_PAUSE:
ICU16(tempi,0x90F3);
break;
case IC_GET_FLAGS:
case IC_GET_RFLAGS:
ICU8(tempi,0x9C);
ICPop(tempi,TY_REG+IT_I64,CREG_RAX,0,ip2);
break;
@@ -646,23 +649,23 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
case IC_HPET:
ICCopyTemplate(lx,tempi,CMP_TEMPLATE_HPET,TRUE,FALSE,FALSE,CN_MAIN);
break;
case IC_SET_FLAGS:
case IC_SET_RFLAGS:
ICPush(tempi,tempi->p1.type,tempi->p1.reg,tempi->p1.disp,ip2);
ICU8(tempi,0x9D);
break;
case IC_GET_BASE_PTR:
case IC_GET_RBP:
ICMov(tempi,TY_REG+IT_I64,CREG_RAX,0,
TY_REG+IT_I64,CREG_RBP,0,ip2);
break;
case IC_SET_BASE_PTR:
case IC_SET_RBP:
ICMov(tempi,TY_REG+IT_I64,CREG_RBP,0,
tempi->p1.type,tempi->p1.reg,tempi->p1.disp,ip2);
break;
case IC_GET_STK_PTR:
case IC_GET_RSP:
ICMov(tempi,TY_REG+IT_I64,CREG_RAX,0,
TY_REG+IT_I64,CREG_RSP,0,ip2);
break;
case IC_SET_STK_PTR:
case IC_SET_RSP:
ICMov(tempi,TY_REG+IT_I64,CREG_RSP,0,
tempi->p1.type,tempi->p1.reg,tempi->p1.disp,ip2);
break;
@@ -676,22 +679,22 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
case IC_GET_RAX:
break;
case IC_BT:
ICBitOps(tempi,&tempi->p1,&tempi->p2,tempi+1,
ICBitOps(tempi,&tempi->p1,&tempi->p2,tempi->next,
0xA30F,0x20BA0F,ip2);
break;
case IC_BTS:
case IC_LBTS:
ICBitOps(tempi,&tempi->p1,&tempi->p2,tempi+1,
ICBitOps(tempi,&tempi->p1,&tempi->p2,tempi->next,
0xAB0F,0x28BA0F,ip2);
break;
case IC_BTR:
case IC_LBTR:
ICBitOps(tempi,&tempi->p1,&tempi->p2,tempi+1,
ICBitOps(tempi,&tempi->p1,&tempi->p2,tempi->next,
0xB30F,0x30BA0F,ip2);
break;
case IC_BTC:
case IC_LBTC:
ICBitOps(tempi,&tempi->p1,&tempi->p2,tempi+1,
ICBitOps(tempi,&tempi->p1,&tempi->p2,tempi->next,
0xBB0F,0x38BA0F,ip2);
break;
case IC_BSF:
@@ -752,7 +755,7 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
case IC_ABS_I64:
ICMov(tempi,TY_REG+IT_I64,CREG_RAX,0,
tempi->p1.type,tempi->p1.reg,tempi->p1.disp,ip2);
ICU24(tempi,0xC00B48);
ICU24(tempi,0xC08548);
ICU16(tempi,0x0379);
ICU24(tempi,0xD8F748);
break;
@@ -1066,9 +1069,11 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
ICAddRSP(tempi,tempi->ic_data);
ICPop(tempi,TY_REG+IT_I64,CREG_RBP,0,ip2);
}
if (fun_class && Bt(fun_class->flags,Ff_INTERRUPT))
if (fun_class && Bt(fun_class->flags,Ff_INTERRUPT)) {
if (Bt(fun_class->flags,Ff_HASERRCODE))
ICAddRSP(tempi,8);
ICU16(tempi,0xCF48);
else if (fun_class && fun_class->arg_cnt &&
} else if (fun_class && fun_class->arg_cnt &&
(Bt(fun_class->flags,Ff_RET1) || Bt(fun_class->flags,Ff_ARGPOP)) &&
!Bt(fun_class->flags,Ff_NOARGPOP)) {
ICU8(tempi,0xC2);
@@ -1083,12 +1088,15 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
lb=OptLabelFwd(tempi->ic_data);
short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP);
if (!buf && lb->addr!=INVALID_PTR &&
MIN_I8+5<lb->addr-ip<MAX_I8-5)
MIN_I8+5<lb->addr-ip<MAX_I8-5)
short_jmp=TRUE;
if (short_jmp) {
tempi->ic_flags|=ICF_SHORT_JMP;
i=lb->addr-(ip+2);
ICU16(tempi,i<<8+0xEB);
if (buf || i)
ICU16(tempi,i<<8+0xEB);
else
tempi->ic_opcode=IC_NOP1;
} else {
i=lb->addr-(ip+5);
ICU8(tempi,0xE9);
@@ -1099,7 +1107,7 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
case IC_LABEL:
lb=tempi->ic_data;
lb->addr=ip;
if (lb->flags&CBMF_POP_CMP) {
if (lb->flags&CMF_POP_CMP) {
ICAddRSP(tempi,-8,FALSE);
ICAddRSP(tempi,8,FALSE);
}
@@ -1134,7 +1142,9 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
break;
default:
OptMissing(lx,tempi);
"Pass:%d Missing IC handler\n",lx->pass;
ICPut(tempi);
LexExcept(lx,"ST_OPT_INTERNAL_ERROR");
}
if (tempi->r.type&TY_MASK) {
if (tempi->ic_flags & ICF_R_TO_F64) {
@@ -1194,19 +1204,19 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
tempi->ic_cnt=0;
tempi->ic_last_cnt=-1;
}
tempi++;
tempi=tempi->next;
}
lb=lx->cbh.cb_misc_lst;
while (lb) {
lb=lx->lcc.lcc_next_misc;
while (lb!=&lx->lcc.lcc_next_misc) {
switch (lb->type) {
case CBMT_STR_CONST:
case CMT_STR_CONST:
lb->addr=ip;
if (buf)
MemCpy(buf+ip,lb->str,lb->st_len);
ip+=lb->st_len;
break;
case CBMT_JMP_TABLE:
case CMT_JMP_TABLE:
lb->addr=ip;
if (buf) {
for (i=0;i<lb->range;i++) {
@@ -1225,7 +1235,7 @@ I64 OptPass789A(CLex *lx,CHashFun *fun_class,
}
ip+=lb->range*sizeof(U8 *);
break;
case CBMT_FLOAT_CONSTS:
case CMT_FLOAT_CONSTS:
lb->addr=ip;
if (buf)
MemCpy(buf+lb->addr,lb->float_consts,lb->num_consts*sizeof(F64));
File diff suppressed because it is too large. Load diff
+40 -40
View File
@@ -217,15 +217,15 @@ U0 UnasmHashLoad()
QSortI64(unasm_table,cnt,&InstEntriesCompare);
}
I64 StrStrBits(U8 *st)
I64 StrMatchBits(U8 *st)
{
if (StrStr(st,"8"))
if (StrMatch("8",st))
return 8;
if (StrStr(st,"16"))
if (StrMatch("16",st))
return 16;
if (StrStr(st,"32"))
if (StrMatch("32",st))
return 32;
if (StrStr(st,"64"))
if (StrMatch("64",st))
return 64;
return 0;
}
@@ -262,18 +262,18 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
else
*line1=0;
SPrintF(line1+StrLen(line1),"%24tP ",ip);
SPrint(line1+StrLen(line1),"%24tP ",ip);
bin_data_area1=line1+StrLen(line1);
for (i=0;i<6;i++) {
SPrintF(buf2,"%02X",ip[i]);
SPrint(buf2,"%02X",ip[i]);
StrCat(line1,buf2);
}
StrCat(line1," ");
SPrintF(line2,"%24tP ",ip+6);
SPrint(line2,"%24tP ",ip+6);
bin_data_area2=line2+StrLen(line2);
for (i=6;i<12;i++) {
SPrintF(buf2,"%02X",ip[i]);
SPrint(buf2,"%02X",ip[i]);
StrCat(line2,buf2);
}
@@ -409,19 +409,19 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
a1=tempi->arg1;
a2=tempi->arg2;
if (a1_size=StrStrBits(DefineSub(a1,"ST_ARG_TYPES"))) {
if (a1_size=StrMatchBits(DefineSub(a1,"ST_ARG_TYPES"))) {
if (Bt(&uasm_signed_arg_mask,a1))
SPrintF(buf2,"I%d ",a1_size);
SPrint(buf2,"I%d ",a1_size);
else
SPrintF(buf2,"U%d ",a1_size);
SPrint(buf2,"U%d ",a1_size);
StrCat(a1_st,buf2);
}
if (a2_size=StrStrBits(DefineSub(a2,"ST_ARG_TYPES"))) {
if (a2_size=StrMatchBits(DefineSub(a2,"ST_ARG_TYPES"))) {
if (Bt(&uasm_signed_arg_mask,a2))
SPrintF(buf2,"I%d ",a2_size);
SPrint(buf2,"I%d ",a2_size);
else
SPrintF(buf2,"U%d ",a2_size);
SPrint(buf2,"U%d ",a2_size);
StrCat(a2_st,buf2);
}
@@ -490,11 +490,11 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
SIB=*ip++;
if (Mod==1) {
disp=*ip(U8 *)++;
SPrintF(buf2,"%02X",disp);
SPrint(buf2,"%02X",disp);
StrCat(reloced_a1_st,buf2);
} else if (Mod==2) {
disp=*ip(U32 *)++;
SPrintF(buf2,"%08X",disp);
SPrint(buf2,"%08X",disp);
StrCat(reloced_a1_st,buf2);
}
if (tempi->slash_val<8)
@@ -534,7 +534,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
else if (reloced_a2==ARGT_IMM64 || reloced_a2==ARGT_UIMM64)
disp+=8;
}
SPrintF(buf2,"[%X] ",disp);
SPrint(buf2,"[%X] ",disp);
StrCat(reloced_a1_st,buf2);
RM1=-1;
} else {
@@ -558,15 +558,15 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
ptr="ST_U32_REGS";
if (r1==CREG_RBP && !Mod) {
disp=*ip(U32 *)++;
SPrintF(buf2,"%08X",disp);
SPrint(buf2,"%08X",disp);
StrCat(reloced_a1_st,buf2);
SPrintF(buf2,"[%Z*%d]",r2,ptr,scale);
SPrint(buf2,"[%Z*%d]",r2,ptr,scale);
StrCat(reloced_a1_st,buf2);
} else if (r2==4) {
SPrintF(buf2,"[%Z]",r1,ptr);
SPrint(buf2,"[%Z]",r1,ptr);
StrCat(reloced_a1_st,buf2);
} else {
SPrintF(buf2,"[%Z+%Z*%d]",r1,ptr,r2,ptr,scale);
SPrint(buf2,"[%Z+%Z*%d]",r1,ptr,r2,ptr,scale);
StrCat(reloced_a1_st,buf2);
}
} else {
@@ -576,7 +576,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
ptr="ST_U32_REGS";
else
ptr="ST_U64_REGS";
SPrintF(buf2,"[%Z]",RM1,ptr);
SPrint(buf2,"[%Z]",RM1,ptr);
StrCat(reloced_a1_st,buf2);
}
} else {
@@ -602,7 +602,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
case ARGT_IMM8:
case ARGT_UIMM8:
imm=*ip(U8 *)++;
SPrintF(buf2,"%02X",imm);
SPrint(buf2,"%02X",imm);
StrCat(a1_st,buf2);
if (tempi->opcode[0]==0xCD) {
if (ptr=DefineSub(imm,"ST_INT_NAMES")) {
@@ -614,39 +614,39 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
case ARGT_IMM16:
case ARGT_UIMM16:
imm=*ip(U16 *)++;
SPrintF(buf2,"%04X",imm);
SPrint(buf2,"%04X",imm);
StrCat(a1_st,buf2);
break;
case ARGT_IMM32:
case ARGT_UIMM32:
imm=*ip(U32 *)++;
SPrintF(buf2,"%08X",imm);
SPrint(buf2,"%08X",imm);
StrCat(a1_st,buf2);
break;
case ARGT_IMM64:
case ARGT_UIMM64:
imm=*ip(I64 *)++;
SPrintF(buf2,"%016X",imm);
SPrint(buf2,"%016X",imm);
StrCat(a1_st,buf2);
break;
case ARGT_REL8:
disp=*ip(I8 *)++;
disp+=ip;
SPrintF(buf2,"%P ",disp);
SPrint(buf2,"%P ",disp);
if (_jmp_dst) *_jmp_dst=disp;
StrCat(a1_st,buf2);
break;
case ARGT_REL16:
disp=*ip(I16 *)++;
disp+=ip;
SPrintF(buf2,"%P ",disp);
SPrint(buf2,"%P ",disp);
if (_jmp_dst) *_jmp_dst=disp;
StrCat(a1_st,buf2);
break;
case ARGT_REL32:
disp=*ip(I32 *)++;
disp+=ip;
SPrintF(buf2,"%P ",disp);
SPrint(buf2,"%P ",disp);
if (_jmp_dst) *_jmp_dst=disp;
StrCat(a1_st,buf2);
break;
@@ -658,7 +658,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
disp=*ip(U16 *)++;
else
disp=*ip(U32 *)++;
SPrintF(buf2,"[%X]",disp);
SPrint(buf2,"[%X]",disp);
StrCat(a1_st,buf2);
break;
case ARGT_CL:
@@ -710,25 +710,25 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
case ARGT_IMM8:
case ARGT_UIMM8:
imm=*ip(U8 *)++;
SPrintF(buf2,"%02X",imm);
SPrint(buf2,"%02X",imm);
StrCat(a2_st,buf2);
break;
case ARGT_IMM16:
case ARGT_UIMM16:
imm=*ip(U16 *)++;
SPrintF(buf2,"%04X",imm);
SPrint(buf2,"%04X",imm);
StrCat(a2_st,buf2);
break;
case ARGT_IMM32:
case ARGT_UIMM32:
imm=*ip(U32 *)++;
SPrintF(buf2,"%08X",imm);
SPrint(buf2,"%08X",imm);
StrCat(a2_st,buf2);
break;
case ARGT_IMM64:
case ARGT_UIMM64:
imm=*ip(I64 *)++;
SPrintF(buf2,"%016X",imm);
SPrint(buf2,"%016X",imm);
StrCat(a2_st,buf2);
break;
case ARGT_MOFFS8...ARGT_MOFFS64:
@@ -739,7 +739,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
disp=*ip(U16 *)++;
else
disp=*ip(U32 *)++;
SPrintF(buf2,"[%X]",disp);
SPrint(buf2,"[%X]",disp);
StrCat(a2_st,buf2);
break;
case ARGT_CL:
@@ -822,11 +822,11 @@ U8 *U(U8 *ip,I64 cnt=20,I64 seg_size=64)
I64 i;
U8 buf[1024];
if (seg_size==16)
PrintFWarn("%S","ST_16BIT_UNASM");
PrintWarn("%S","ST_16BIT_UNASM");
"$$HL,1$$";
for (i=0;i<cnt;i++) {
Ui(buf,&ip,seg_size);
"" buf;
"%s",buf;
}
"$$HL,0$$";
return ip;
@@ -838,11 +838,11 @@ I64 Un(U8 *ip,I64 cnt=0x80,I64 seg_size=64)
I64 i=0;
U8 buf[1024],*end_ip=ip(I64)+cnt;
if (seg_size==16)
PrintFWarn("%S","ST_16BIT_UNASM");
PrintWarn("%S","ST_16BIT_UNASM");
"$$HL,1$$";
while (ip<end_ip) {
Ui(buf,&ip,seg_size);
"" buf;
"%s",buf;
i++;
}
"$$HL,0$$";