TempleOSCD_150216.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:46:15 +02:00
1 parent 64f679eeb9
commit 401601816c
531 files changed
+23341 -22071

No files matched your search

+93 -86
View File
@@ -224,7 +224,7 @@ U0 AsmResolve(CLex *lx,CAsmUnresolvedRef *tempu,U8 *label,Bool undefined)
}
templu=templu->next; //Technically, more than one won't work.
}
} else if (!(tempu->type & 1)) {//Rel?
} else if (!(tempu->type&1)) {//Rel?
r-=tempu->rel_ip;
if (tempu->type==EIT_REL_I8 && !(MIN_I8<=r<=MAX_I8) ||
tempu->type==EIT_REL_I16 && !(MIN_I16<=r<=MAX_I16)) {
@@ -286,7 +286,7 @@ U0 AsmGlblsResolve(CLex *lx,CExe *tempx)
CAOTCtrl *a=lx->a;
CHashFun *tempf;
CAsmUnresolvedRef *tempu=a->glbl_unresolved,*tempu1;
I64 j;
I64 i,j;
CExeImportExport *tempe,*tempe1;
CLexUndef *templu;
CHashExport *tempex;
@@ -317,12 +317,12 @@ U0 AsmGlblsResolve(CLex *lx,CExe *tempx)
tempex->use_cnt++;
} else {
PrintErr("undefined sym at line:%04d %s\n",
tempu->line_num,tempex->str);
tempu->line_num,tempex->str);
LexExcept(lx);
}
} else if (undefined) {
PrintErr("Two imports in same expression not allowed at line:%04d %s\n",
tempu->line_num,tempex->str);
tempu->line_num,tempex->str);
LexExcept(lx);
}
undefined=TRUE;
@@ -338,56 +338,58 @@ U0 AsmGlblsResolve(CLex *lx,CExe *tempx)
tempu=tempu1;
}
tempex=lx->htc.glbl_hash_table->next_added;
while (tempex!=lx->htc.glbl_hash_table) {
if (tempex->type & (HTF_IMPORT|HTF_GOTO_LABEL)) {
if (tempex->use_cnt && (tempe=tempex->ie_lst)) {
if (tempex->type&HTF_GOTO_LABEL)
tempe->flags|=EIF_GOTO_LABEL;
if (tempex->import_name)
tempe->str=StrNew(tempex->import_name);
else
for (i=0;i<=lx->htc.glbl_hash_table->mask;i++) {
tempex=lx->htc.glbl_hash_table->body[i];
while (tempex) {
if (tempex->type & (HTF_IMPORT|HTF_GOTO_LABEL)) {
if (tempex->use_cnt && (tempe=tempex->ie_lst)) {
if (tempex->type&HTF_GOTO_LABEL)
tempe->flags|=EIF_GOTO_LABEL;
if (tempex->import_name)
tempe->str=StrNew(tempex->import_name);
else
tempe->str=StrNew(tempex->str);
do {
tempe1=tempe->next;
QueIns(tempe,tempx->last_ie);
} while (tempe=tempe1);
tempex->ie_lst=NULL;
}
} else if (tempex->type & (HTF_EXPORT|HTF_RESOLVE)) {
if (tempex->type & HTF_UNRESOLVED) {
PrintErr("undefined sym at %s\n",tempex->str);
LexExcept(lx);
}
if (tempex->type & HTF_RESOLVE) {
tempf=tempex;
tempeu=tempf->ext_lst;
while (tempeu) {
tempeu8=tempeu->next;
j=tempf->executable_addr-(tempeu->ip+4);
AsmStoreCodeU8At(lx,tempeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]);
Free(tempeu);
tempeu=tempeu8;
}
}
if (tempex->type & HTF_EXPORT) {
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIT_REL32_EXPORT;
if (tempex->type & HTT_FUN)
tempe->ip=tempf->executable_addr;
else if (tempex->type & HTT_GLBL_VAR)
tempe->ip=tempex(CHashGlblVar *)->data_addr_ip;
else
tempe->ip=tempex->val;
tempe->exe=lx->exe;
if (tempex->type & HTF_IMM)
tempe->type++;
tempe->str=StrNew(tempex->str);
do {
tempe1=tempe->next;
tempe->src_link=StrNew(tempex->src_link);
QueIns(tempe,tempx->last_ie);
} while (tempe=tempe1);
tempex->ie_lst=NULL;
}
} else if (tempex->type & (HTF_EXPORT|HTF_RESOLVE)) {
if (tempex->type & HTF_UNRESOLVED) {
PrintErr("undefined sym at %s\n",tempex->str);
LexExcept(lx);
}
if (tempex->type & HTF_RESOLVE) {
tempf=tempex;
tempeu=tempf->ext_lst;
while (tempeu) {
tempeu8=tempeu->next;
j=tempf->executable_addr-(tempeu->ip+4);
AsmStoreCodeU8At(lx,tempeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]);
Free(tempeu);
tempeu=tempeu8;
}
}
if (tempex->type & HTF_EXPORT) {
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIT_REL32_EXPORT;
if (tempex->type & HTT_FUN)
tempe->ip=tempf->executable_addr;
else if (tempex->type & HTT_GLBL_VAR)
tempe->ip=tempex(CHashGlblVar *)->data_addr_ip;
else
tempe->ip=tempex->val;
tempe->exe=lx->exe;
if (tempex->type & HTF_IMM)
tempe->type++;
tempe->str=StrNew(tempex->str);
tempe->src_link=StrNew(tempex->src_link);
QueIns(tempe,tempx->last_ie);
}
tempex=tempex->next;
}
tempex=tempex->next_added;
}
}
@@ -425,7 +427,7 @@ Bool PrsAsmImm(CLex *lx,CAsmArg *arg)
return TRUE;
}
U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
U0 PrsAsmArg(CLex *lx,CAsmArg *arg,Bool rel)
{
CHashGeneric *temph,*temph1;
CHashReg *tempr;
@@ -499,16 +501,19 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
LexExcept(lx,"syntax error at ");
}
Lex(lx); //skip keyword
} else {
PrsAsmImm(lx,arg);
arg->num.abs_cnts=lx->abs_cnts;
if (lx->token!='[')
return;
}
} else
goto pa_asm_direct_imm;
}
} else {
pa_asm_direct_imm:
PrsAsmImm(lx,arg);
arg->num.abs_cnts=lx->abs_cnts;
if (arg->size<=1 && !rel && arg->num.abs_cnts&1) {
if (lx->a->seg_size==16)
arg->size=2;
else
arg->size=4;
}
if (lx->token!='[')
return;
}
@@ -530,14 +535,10 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
} else
arg->reg2=tempr->reg_num;
Lex(lx);
} else {
PrsAsmImm(lx,arg);
arg->num.abs_cnts=lx->abs_cnts;
}
} else {
PrsAsmImm(lx,arg);
arg->num.abs_cnts=lx->abs_cnts;
}
} else
goto pa_asm_indirect_imm;
} else
goto pa_asm_indirect_imm;
} else if (lx->token=='*') {
Lex(lx);
if (lx->token!=TK_INTEGER)
@@ -549,6 +550,7 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
} else if (lx->token=='+') {
Lex(lx); //skip '+'
} else {
pa_asm_indirect_imm:
PrsAsmImm(lx,arg);
arg->num.abs_cnts=lx->abs_cnts;
}
@@ -557,12 +559,8 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg)
LexExcept(lx,"missing ']' at ");
Lex(lx); //skip ]
return;
} else {
PrsAsmImm(lx,arg);
arg->num.abs_cnts=lx->abs_cnts;
if (lx->token!='[')
return;
}
} else
goto pa_asm_direct_imm;
}
}
@@ -676,7 +674,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
else if (!num2->imm_flag && !(MIN_I8<=num2->num.i<=MAX_I8))
LexExcept(lx,"branch out of range at ");
if (num2->imm_flag) {
if (num2->num.abs_cnts.abs_addres & 1) {
if (num2->num.abs_cnts.abs_addres&1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
@@ -684,7 +682,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
tempa->type=EAT_ADD_U8;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
if (num2->num.abs_cnts.c_addres&1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
@@ -701,7 +699,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
else if (!num2->imm_flag && !(MIN_I16<=num2->num.i<=MAX_I16))
LexExcept(lx,"branch out of range at ");
if (num2->imm_flag) {
if (num2->num.abs_cnts.abs_addres & 1) {
if (num2->num.abs_cnts.abs_addres&1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
@@ -709,7 +707,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
tempa->type=EAT_ADD_U16;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
if (num2->num.abs_cnts.c_addres&1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
@@ -726,7 +724,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
else if (!num2->imm_flag && !(MIN_I32<=num2->num.i<=MAX_I32))
LexExcept(lx,"branch out of range at ");
if (num2->imm_flag) {
if (num2->num.abs_cnts.abs_addres & 1) {
if (num2->num.abs_cnts.abs_addres&1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
@@ -734,7 +732,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
tempa->type=EAT_ADD_U32;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
if (num2->num.abs_cnts.c_addres&1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
@@ -748,7 +746,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
AsmUnresolvedAdd(lx,num2->num.ex,EIT_REL_I64+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) {
if (num2->num.abs_cnts.abs_addres&1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
@@ -756,7 +754,7 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail)
tempa->type=EAT_ADD_U64;
}
} else {
if (num2->num.abs_cnts.c_addres & 1) {
if (num2->num.abs_cnts.c_addres&1) {
tempa=CAlloc(sizeof(CExeAbsAddr));
tempa->next=a->abss;
a->abss=tempa;
@@ -850,7 +848,7 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt)
found_second_possible=TRUE;
if (!a->arg1.size)
PrintWarn("no size specified at %s,%04d\n",
lx->cur_lfn->name,lx->cur_lfn->line_num-1);
lx->cur_lfn->full_name,lx->cur_lfn->line_num-1);
}
if (tempi->flags & IEF_PLUS_OPCODE) {
if (tempi->slash_val==SV_R_REG) {
@@ -957,7 +955,7 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt)
found_second_possible=TRUE;
if (!a->arg1.size && !a->arg2.size)
PrintWarn("no size specified at %s,%04d\n",
lx->cur_lfn->name,lx->cur_lfn->line_num-1);
lx->cur_lfn->full_name,lx->cur_lfn->line_num-1);
}
if (tempi->flags & IEF_PLUS_OPCODE) {
if (tempi->slash_val==SV_R_REG) {
@@ -1119,8 +1117,11 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt)
MemCpy(&cur.imm.num,&tempa2->num,sizeof(CAsmNum));
if (a2==ARGT_IMM8 || a2==ARGT_UIMM8) cur.imm.U8_cnt=1;
else if (a2==ARGT_IMM16 || a2==ARGT_UIMM16) cur.imm.U8_cnt=2;
else if (a2==ARGT_IMM32 || a2==ARGT_UIMM32) cur.imm.U8_cnt=4;
else {
else if (a2==ARGT_IMM32 || a2==ARGT_UIMM32) {
cur.imm.U8_cnt=4;
if (tempi->flags&IEF_REX_ONLY_R8_R15 && a2==ARGT_UIMM32)
cur.REX&=~8;
} else {
cur.imm.U8_cnt=8;
cur.REX|=8;
}
@@ -1384,14 +1385,20 @@ U0 PrsAsmBlk(CLex *lx,I64 cmp_flags)
argcnt=0;
if (tempo->ins[0].arg1) {
argcnt++;
PrsAsmArg(lx,&a->arg1);
if (ARGT_REL8<=tempo->ins[0].arg1<=ARGT_REL32)
PrsAsmArg(lx,&a->arg1,TRUE);
else
PrsAsmArg(lx,&a->arg1,FALSE);
if (tempo->ins[0].arg2) {
argcnt++;
if (lx->token!=',')
LexExcept(lx,"expecting ',' at ");
else {
Lex(lx); //skip ','
PrsAsmArg(lx,&a->arg2);
if (ARGT_REL8<=tempo->ins[0].arg2<=ARGT_REL32)
PrsAsmArg(lx,&a->arg2,TRUE);
else
PrsAsmArg(lx,&a->arg2,FALSE);
}
}
}
@@ -1413,7 +1420,7 @@ U0 PrsAsmBlk(CLex *lx,I64 cmp_flags)
LexExcept(lx,"expecting ':' at ");
if (lx->token==TK_DBL_COLON) {
lx->hash_entry->type|=HTF_EXPORT;
SetSrcFileInfo(lx,lx->hash_entry);
HashSrcFileSet(lx,lx->hash_entry);
AsmLocalsResolve(lx);
a->last_label=next_last_label;
@@ -1459,7 +1466,7 @@ U0 PrsAsmBlk(CLex *lx,I64 cmp_flags)
}
if (lx->token==TK_DBL_COLON) {
tempex->type|=HTF_EXPORT;
SetSrcFileInfo(lx,tempex);
HashSrcFileSet(lx,tempex);
AsmLocalsResolve(lx);
a->last_label=tempex->str;
+4 -8
View File
@@ -75,8 +75,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,
else
i=0x48;
if (!d &&
(op.u8[0]==0x03||op.u8[0]==0x2B||
op.u8[0]==0x33||op.u8[0]==0x0B))
(op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B))
return;
else if (d==1 && op.u8[0]==0x03) {
ICU24(tempi,0xC0FF00+op.u8[1]<<19+i+(r1&7)<<16);
@@ -116,8 +115,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,
}
if (!d &&
(op.u8[0]==0x03||op.u8[0]==0x2B||
op.u8[0]==0x33||op.u8[0]==0x0B))
(op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B))
return;
r=op.u8[1]; //not a reg but a slash val
if (op.u8[0]==0x03 && d==-1) //add -1
@@ -145,8 +143,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,
ICModr2(tempi,i,d1,ip+4);
return;
}
if (MIN_I8<=d<=MAX_I8 ||
t1&(RT_MASK-1)==RT_I8) {
if (MIN_I8<=d<=MAX_I8 || t1&(RT_MASK-1)==RT_I8) {
i=ICModr1(r,t1,r1,d1);
if (tempi->ic_flags&ICF_LOCK)
ICU8(tempi,OC_LOCK_PREFIX);
@@ -169,8 +166,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,
ICU8(tempi,d);
return;
}
if (MIN_I32<=d<=MAX_I32 ||
t1&RT_MASK<RT_I64) {
if (MIN_I32<=d<=MAX_I32 || t1&RT_MASK<RT_I64) {
i=ICModr1(r,t1,r1,d1);
if (tempi->ic_flags&ICF_LOCK)
ICU8(tempi,OC_LOCK_PREFIX);
+12 -11
View File
@@ -417,7 +417,7 @@ U0 ICPreIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
I64 r;
CHashClass *tempc=tempi->ic_class,*tempc1=tempc-1;
if (tempi->ic_flags & ICF_NOT_ADDR) {
if (tempc->ptr_cnt && tempc1->size!=1) {
if (tempc->ptr_stars_cnt && tempc1->size!=1) {
ICAddSubEctImm(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,
tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,
tempc1->size,op.u16[3],ip);
@@ -434,7 +434,7 @@ U0 ICPreIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip);
r=REG_RCX;
}
if (tempc->ptr_cnt &&
if (tempc->ptr_stars_cnt &&
tempc1->size!=1) {
ICAddSubEctImm(tempi,TY_DISP+tempi->a1.type_pointed,r,0,
TY_DISP+tempi->a1.type_pointed,r,0,
@@ -457,7 +457,7 @@ U0 ICPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip);
}
if (tempc->ptr_cnt &&
if (tempc->ptr_stars_cnt &&
tempc1->size!=1) {
ICAddSubEctImm(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,
tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,
@@ -477,7 +477,7 @@ U0 ICPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip)
ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,
TY_DISP+tempi->a1.type_pointed,r,0,ip);
}
if (tempc->ptr_cnt &&
if (tempc->ptr_stars_cnt &&
tempc1->size!=1) {
ICAddSubEctImm(tempi,TY_DISP+tempi->a1.type_pointed,r,0,
TY_DISP+tempi->a1.type_pointed,r,0,
@@ -577,25 +577,26 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip,
U8 *buf,I64 ip2)
{
I64 r1,r2,i=0x48,j,t1,t2,result_reg;
Bool short_jmp,done;
Bool short_jmp,swap,done;
CLexCodeMisc *lb;
CICArg *a1=&tempi->a1,*a2=&tempi->a2,*swap;
CICArg *a1=&tempi->a1,*a2=&tempi->a2;
j=a1->disp;
if (a1->type&TY_MASK==TY_IMM && MIN_I32<=j<=MAX_I32) {
swap=a1; a1=a2; a2=swap;
SwapI64(&a1,&a2);
swap=TRUE;
us=not_us;
is=not_is;
}
} else
swap=FALSE;
if (tempi->ic_class->raw_type&1 || tempi->ic_flags & ICF_USE_UNSIGNED)
is=us;
j=a2->disp;
if (a2->type&TY_MASK==TY_IMM && MIN_I32<=j<=MAX_I32) {
if (!has_result && TY_REG<=a1->type&TY_MASK<=TY_RIP_DISP32)
ICAddSubEctImm(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,
tempi->a1.type,tempi->a1.reg,tempi->a1.disp,
j,0x073B,ip2);
ICAddSubEctImm(tempi,a1->type,a1->reg,a1->disp,
a1->type,a1->reg,a1->disp,j,0x073B,ip2);
else {
if (a1->type&TY_MASK==TY_REG)
r1=a1->reg;
File renamed without changes.
+1 -1
View File
@@ -298,7 +298,7 @@ U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip)
ICU64(tempi,0);
if (buf) {
tempe=CAlloc(sizeof(CExeImportExport));
tempe->type=EIT_IMM_U64;
tempe->type=EIT_IMM_I64;
tempe->ip=ip+tempi->ic_cnt-8;
tempe->next=tempex->ie_lst;
tempex->ie_lst=tempe;
File renamed without changes.
+2 -1
View File
@@ -20,7 +20,7 @@ extern U0 OptPass3(CLex *lx,COptReg *reg_offsets);
extern U0 OptPass4(CLex *lx,COptReg *reg_offsets,I64 *_type);
extern U0 OptPass5(CLex *lx);
extern U0 OptPass6(CLex *lx);
extern I64 OptPass789(CLex *lx,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg);
extern I64 OptPass789A(CLex *lx,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg);
extern CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern);
extern CHashFun *PrsFunJoin(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags);
extern I64 PrsKeyWord(CLex *lx);
@@ -34,6 +34,7 @@ extern I64 PrsUnaryModifier(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayD
extern I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad,
I64 *max_prec,I64 *unary_pre_prec,I64 *paren_prec);
extern U0 PrsVarInit2(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass);
extern U0 StreamPrint(U8 *fmt,...);
_extern CMP_TEMPLATES U32 cmp_templates[1];
_extern CMP_TEMPLATES_DONT_POP U32 cmp_templates_dont_pop[1];
_extern CMP_TEMPLATES_DONT_PUSH2 U32 cmp_templates_dont_push2[1];
+8 -6
View File
@@ -56,7 +56,7 @@ I64 HashEntrySize2(CHashSrcSym *temph)
if (!(temph(CHashGlblVar *)->flags&GVF_ALIAS))
result+=MSize2(temph(CHashGlblVar *)->data_addr);
if (temph(CHashGlblVar *)->fun_ptr)
result+=HashEntrySize2(temph(CHashGlblVar *)->fun_ptr-temph(CHashGlblVar *)->fun_ptr->ptr_cnt);
result+=HashEntrySize2(temph(CHashGlblVar *)->fun_ptr-temph(CHashGlblVar *)->fun_ptr->ptr_stars_cnt);
}
} else if (temph->type & HTT_FILE)
result+=MSize2(temph(CHashGeneric *)->user_data0);
@@ -68,14 +68,16 @@ I64 HashEntrySize2(CHashSrcSym *temph)
I64 HashTableSize2(CHashTable *table)
{//Memory size of std system hash table and all entries.
I64 result=0;
I64 i,result=0;
CHashSrcSym *temph;
if (!table)
return 0;
temph=table->next_added;
while (temph!=table) {
result+=HashEntrySize2(temph);
temph=temph->next_added;
for (i=0;i<=table->mask;i++) {
temph=table->body[i];
while (temph) {
result+=HashEntrySize2(temph);
temph=temph->next;
}
}
result+=MSize2(table->body);
result+=MSize2(table);
+23 -258
View File
@@ -50,14 +50,14 @@ U0 AsmPrsInsFlags(CLex *lx,CInstruction *tempi)
return;
break;
case '!': tempi->flags|=IEF_DONT_SWITCH_MODES; break;
case '&': tempi->flags|=IEF_DFT; break;
case ':': tempi->flags|=IEF_STI; break;
case '-': tempi->flags|=IEF_NO_REX; break;
case '~': tempi->flags|=IEF_40_REX; break;
case '=': tempi->flags|=IEF_48_REX; break;
case '&': tempi->flags|=IEF_DFT; break;
case ':': tempi->flags|=IEF_STI; break;
case '-': tempi->flags|=IEF_NO_REX; break;
case '~': tempi->flags|=IEF_40_REX; break;
case '=': tempi->flags|=IEF_48_REX; break;
case '`': tempi->flags|=IEF_REX_ONLY_R8_R15; break;
case '^': tempi->flags|=IEF_REX_XOR_LIKE; break;
case '$$': tempi->flags|=IEF_ENDING_ZERO; break;
case '^': tempi->flags|=IEF_REX_XOR_LIKE; break;
case '$$': tempi->flags|=IEF_ENDING_ZERO; break;
default:
return;
}
@@ -76,7 +76,7 @@ U0 AsmHashLoad()
CInstruction *tempi;
CHashClass *tempc;
cmp.asm_hash=HashTableNew(2048);
cmp.asm_hash=HashTableNew(1024);
size1=offset(CHashOpcode.ins)+sizeof(CInstruction)<<5;
tempo=MAlloc(size1);
@@ -230,248 +230,13 @@ U0 CmpLoadDefines()
"MM\0MM32\0MM64\0XMM\0XMM32\0XMM64\0XMM128\0XMM0\0");
DefineLstLoad("ST_SEG_REGS","ES\0CS\0SS\0DS\0FS\0GS\0");
DefineLstLoad("ST_FSTK_REGS","ST0\0ST1\0ST2\0ST3\0ST4\0ST5\0ST6\0ST7\0");
DefineLstLoad("ST_INTERMEDIATE_CODE",
/*
[arg_cnt][result_cnt][deref/assign/cmp][fpop][nonconst]
'9' arg_cnt means var
'*' means it is a dereference instruction
'=' means it is an assignment instruction
'^' means it is a compare instruction
'N' means not const. Sets LF_NOT_CONST
which means an expression contains mem
accesses or things which might change.
*/
"00...END\0"
"00...NOP1\0"
"10...END_EXP\0"
"00...NOP2\0"
"00...LABEL\0"
"00...CALL_START\0"
"01...CALL_END\0"
"00...CALL_END2\0"
"10...RETURN_VAL\0"
"00...RETURN_VAL2\0"
"01...IMM_U64\0"
"01...IMM_F64\0"
"01..NSTR_CONST\0"
"01..NABS_ADDR\0"
"01..NADDR_IMPORT\0"
"01..NHEAP_GLBL\0"
"01...SIZEOF\0"
"01...TYPE\0"
"01..NGET_LABEL\0"
"01..NRBP\0"
"01..NREG\0"
"00..NFS\0"
"01..NMOV_FS\0"
"00..NGS\0"
"01..NMOV_GS\0"
"01..NLEA\0"
"01..NMOV\0"
"10...TO_I64\0"
"10...TO_F64\0"
"10...TO_BOOL\0"
"10...TOUPPER\0"
"11...HOLYC_TYPECAST\0"
"11..NADDR\0"
"11...COM\0"
"11...NOT\0"
"11...UNARY_MINUS\0"
"11*.NDEREF\0"
"11*.NDEREF_PP\0"
"11*.NDEREF_MM\0"
"11*PN_PP\0"
"11*PN_MM\0"
"11*PNPP_\0"
"11*PNMM_\0"
"21...SHL\0"
"21...SHR\0"
"11=..SHL_CONST\0"
"11=..SHR_CONST\0"
"21...POWER\0"
"21.P.MUL\0"
"21.P.DIV\0"
"21...MOD\0"
"21...AND\0"
"21...OR\0"
"21...XOR\0"
"21.P.ADD\0"
"21.P.SUB\0"
"11=..ADD_CONST\0"
"11=..SUB_CONST\0"
"21^..EQUAL_EQUAL\0"
"21^..NOT_EQUAL\0"
"21^..LESS\0"
"21^..GREATER\0"
"21^..LESS_EQUAL\0"
"21^..GREATER_EQUAL\0"
"01...PUSH_CMP\0"
"21...AND_AND\0"
"21...OR_OR\0"
"21...XOR_XOR\0"
"21=.NASSIGN\0"
"21=.NASSIGN_PP\0"
"21=.NASSIGN_MM\0"
"21=.NSHL_EQUAL\0"
"21=.NSHR_EQUAL\0"
"21=.NMUL_EQUAL\0"
"21=.NDIV_EQUAL\0"
"21=.NMOD_EQUAL\0"
"21=.NAND_EQUAL\0"
"21=.NOR_EQUAL\0"
"21=.NXOR_EQUAL\0"
"21=.NADD_EQUAL\0"
"21=.NSUB_EQUAL\0"
"00...JMP\0"
"00...SUB_CALL\0"
"20...SWITCH\0"
"20...NOBOUND_SWITCH\0"
"90...ADD_RSP\0"
"90...ADD_RSP1\0"
"00...ENTER\0"
"00=..PUSH_REGS\0"
"00=..POP_REGS\0"
"00...LEAVE\0"
"00...RET\0"
"00..NCALL\0"
"00..NCALL_INDIRECT\0"
"00..NCALL_INDIRECT2\0"
"00..NCALL_IMPORT\0"
"00..NCALL_EXTERN\0"
"00..NASM\0"
"10..NPREEMPT\0"
"10..NPUSH\0"
"00..NPOP\0"
"10..NCLFLUSH\0"
"10..NINVLPG\0"
"10..NIN_U8\0"
"10..NIN_U16\0"
"10..NIN_U32\0"
"20..NOUT_U8\0"
"20..NOUT_U16\0"
"20..NOUT_U32\0"
"00..NGET_RFLAGS\0"
"00..NCARRY\0"
"10..NSET_RFLAGS\0"
"00..NGET_RAX\0"
"10..NSET_RAX\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"
"20..NBT\0"
"20..NBTS\0"
"20..NBTR\0"
"20..NBTC\0"
"20..NLBTS\0"
"20..NLBTR\0"
"20..NLBTC\0"
"10..NBSF\0"
"10..NBSR\0"
"10..NQUE_INIT\0"
"20..NQUE_INS\0"
"20..NQUE_INS_REV\0"
"10..NQUE_REM\0"
"10..NSTRLEN\0"
"10...BR_ZERO\0"
"10...BR_NOT_ZERO\0"
"00...BR_CARRY\0"
"00...BR_NOT_CARRY\0"
"20...BR_NOT_EQUAL\0"
"20...BR_EQUAL_EQUAL\0"
"20...BR_GREATER_EQUAL\0"
"20...BR_LESS_EQUAL\0"
"20...BR_GREATER\0"
"20...BR_LESS\0"
"21...BR_2NOT_EQUAL\0"
"21...BR_2EQUAL_EQUAL\0"
"21...BR_2GREATER_EQUAL\0"
"21...BR_2LESS_EQUAL\0"
"21...BR_2GREATER\0"
"21...BR_2LESS\0"
"20...BR_AND_ZERO\0"
"20...BR_AND_NOT_ZERO\0"
"10..NBR_MM_ZERO\0"
"10..NBR_MM_NOT_ZERO\0"
"20...BR_AND_AND_ZERO\0"
"20...BR_AND_AND_NOT_ZERO\0"
"20...BR_OR_OR_ZERO\0"
"20...BR_OR_OR_NOT_ZERO\0"
"20..NBR_BT\0"
"20..NBR_BTS\0"
"20..NBR_BTR\0"
"20..NBR_BTC\0"
"20..NBR_LBTS\0"
"20..NBR_LBTR\0"
"20..NBR_LBTC\0"
"20..NBR_NOT_BT\0"
"20..NBR_NOT_BTS\0"
"20..NBR_NOT_BTR\0"
"20..NBR_NOT_BTC\0"
"20..NBR_NOT_LBTS\0"
"20..NBR_NOT_LBTR\0"
"20..NBR_NOT_LBTC\0"
"20..NSWAP_U8\0"
"20..NSWAP_U16\0"
"20..NSWAP_U32\0"
"20..NSWAP_U64\0"
"10...ABS_I64\0"
"10...SIGN_I64\0"
"20...MIN_I64\0"
"20...MIN_U64\0"
"20...MAX_I64\0"
"20...MAX_U64\0"
"20...MOD_U64\0"
"10...SQRI64\0"
"10...SQRU64\0"
"11.P.SQR\0"
"11.P.ABS\0"
"11.P.SQRT\0"
"11.P.SIN\0"
"11.P.COS\0"
"11.P.TAN\0"
"11.P.ATAN\0"
);$AN,"Anchor for adding intermediate codes",A="IC_INIT_TABLE"$
}
U0 CmpFillTables()
{
U8 *st;
I64 i,k;
U32 *d;
cmp.ic_bitmap_assign =CAlloc((IC_NUM_ENTRIES+7)>>3);
cmp.ic_bitmap_deref =CAlloc((IC_NUM_ENTRIES+7)>>3);
cmp.ic_bitmap_cmp =CAlloc((IC_NUM_ENTRIES+7)>>3);
cmp.ic_bitmap_not_const=CAlloc((IC_NUM_ENTRIES+7)>>3);
cmp.ic_bitmap_fpop =CAlloc((IC_NUM_ENTRIES+7)>>3);
cmp.arg_cnt =CAlloc(IC_NUM_ENTRIES);
cmp.result_cnt =CAlloc(IC_NUM_ENTRIES);
st=Define("ST_INTERMEDIATE_CODE");
for (i=0;i<IC_NUM_ENTRIES;i++) {
cmp.arg_cnt[i]=*st-'0';
cmp.result_cnt[i]=st[1]-'0';
if (st[2]=='*')
Bts(cmp.ic_bitmap_deref,i);
else if (st[2]=='=')
Bts(cmp.ic_bitmap_assign,i);
else if (st[2]=='^')
Bts(cmp.ic_bitmap_cmp,i);
if (st[3]=='P')
Bts(cmp.ic_bitmap_fpop,i);
if (st[4]=='N')
Bts(cmp.ic_bitmap_not_const,i);
st+=StrLen(st)+1;
//See $LK,"ICPut",A="FF:::/Compiler/ICLCC.CPP,ST_INTERMEDIATE_CODE"$.
}
cmp.to_reg_vars_map=CAlloc(NUM_REGS*sizeof(U8));
cmp.num_reg_vars=0;
cmp.reg_vars_mask=REG_VARS_MASK;
@@ -486,7 +251,7 @@ U0 CmpFillTables()
if (Bt(&cmp.non_ptr_vars_mask,i))
cmp.non_ptr_vars_map[cmp.num_non_ptr_vars++]=i;
/* STK TEMP ALLOCATION: See $LK,"::/Compiler/OptPass6.CPP.Z"$.
/* STK TEMP ALLOCATION: See $LK,"::/Compiler/OptPass6.CPP"$.
Expressions are evaluated with a stack machine.
@@ -503,7 +268,7 @@ STK[2]: RAX 1 1 1 1 1 RAX
STK[1]: RAX 2 RAX 5 RAX
STK[0]: RAX RAX
Two regs are allocated for stk temps.
Two regs are alloced for stk temps.
STK[0]:
R9 : RAX R9 R9 R9 R9 R9 RAX
@@ -562,22 +327,22 @@ STK[0]:
d['/']=TK_DIV_EQUAL<<16+'=';
cmp.binary_ops=d=CAlloc(sizeof(U32)*TK_NUM_TK);
d['`'] =(PREC_EXP+ASSOCF_RIGHT)<<16+IC_POWER;
d[TK_SHL] =(PREC_EXP+ASSOCF_LEFT)<<16+IC_SHL;
d[TK_SHR] =(PREC_EXP+ASSOCF_LEFT)<<16+IC_SHR;
d['`'] =(PREC_EXP+ASSOCF_RIGHT)<<16+IC_POWER;
d[TK_SHL]=(PREC_EXP+ASSOCF_LEFT)<<16+IC_SHL;
d[TK_SHR]=(PREC_EXP+ASSOCF_LEFT)<<16+IC_SHR;
d['*'] =PREC_MUL<<16+IC_MUL;
d['/'] =(PREC_MUL+ASSOCF_LEFT)<<16+IC_DIV;
d['%'] =(PREC_MUL+ASSOCF_LEFT)<<16+IC_MOD;
d['*']=PREC_MUL<<16+IC_MUL;
d['/']=(PREC_MUL+ASSOCF_LEFT)<<16+IC_DIV;
d['%']=(PREC_MUL+ASSOCF_LEFT)<<16+IC_MOD;
d['&'] =PREC_AND<<16+IC_AND;
d['&']=PREC_AND<<16+IC_AND;
d['^'] =PREC_XOR<<16+IC_XOR;
d['^']=PREC_XOR<<16+IC_XOR;
d['|'] =PREC_OR<<16+IC_OR;
d['|']=PREC_OR<<16+IC_OR;
d['+'] =PREC_ADD<<16+IC_ADD;
d['-'] =(PREC_ADD+ASSOCF_LEFT)<<16+IC_SUB;
d['+']=PREC_ADD<<16+IC_ADD;
d['-']=(PREC_ADD+ASSOCF_LEFT)<<16+IC_SUB;
d['<'] =PREC_CMP<<16+IC_LESS;
d['>'] =PREC_CMP<<16+IC_GREATER;
@@ -589,11 +354,11 @@ STK[0]:
d[TK_AND_AND] =PREC_AND_AND<<16+IC_AND_AND;
d[TK_XOR_XOR]=PREC_XOR_XOR<<16+IC_XOR_XOR;
d[TK_XOR_XOR] =PREC_XOR_XOR<<16+IC_XOR_XOR;
d[TK_OR_OR] =PREC_OR_OR<<16+IC_OR_OR;
d['='] =(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_ASSIGN;
d['='] =(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_ASSIGN;
d[TK_SHL_EQUAL]=(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_SHL_EQUAL;
d[TK_SHR_EQUAL]=(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_SHR_EQUAL;
d[TK_MUL_EQUAL]=(PREC_ASSIGN+ASSOCF_RIGHT)<<16+IC_MUL_EQUAL;
+22 -47
View File
@@ -23,7 +23,8 @@ U8 *LexStatement2Bin(CLex *lx,I64 *_type,I64 cmp_flags=0)
LCCInit(lx);
if (!PrsStatement(lx,,,cmp_flags)) {
if (lx->lcc.lcc_root.next!=&lx->lcc.lcc_root) {
LCCAdd(lx,IC_RETURN_VAL2,0,NULL);
lx->lcc.lcc_root.last->ic_flags&=~ICF_NO_DEPEND_RESULT;
LCCAdd(lx,IC_RETURN_VAL2,0,0);
LCCAdd(lx,IC_RET,0,0);
if (result=LCCCompile(lx,&size,NULL,_type)) {
if (lx->flags&LF_AOT_COMPILE) {
@@ -74,7 +75,7 @@ CExe *CmpJoin(CLex *lx,I64 cmp_flags,U8 *map_name=NULL,U8 mapfile_drv=0)
if (lx->htc.fun)
lx->htc.glbl_hash_table=HashTableNew(128);
else
lx->htc.glbl_hash_table=HashTableNew(2048);
lx->htc.glbl_hash_table=HashTableNew(1024);
if (lx->flags&LF_AOT_COMPILE) {
lx->htc.define_hash_table=lx->htc.glbl_hash_table;
if (lx->a_depth<=1)
@@ -235,7 +236,7 @@ U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx)
HashAdd(tempex,Fs->hash_table);
SysSymImportsResolve(tempex->str);
break;
case EIT_REL_I0...EIT_IMM_U64:
case EIT_REL_I0...EIT_IMM_I64:
if (tempe->str) {
if (tempe->flags&EIF_GOTO_LABEL) {
if(!(g_lb=LCCGoToLabelFind(lx,str)))
@@ -293,7 +294,7 @@ U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx)
case EIT_REL_I64:
*ptr(I64 *)=i-ptr-8;
break;
case EIT_IMM_U64:
case EIT_IMM_I64:
*ptr(I64 *)=i;
break;
}
@@ -326,30 +327,14 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx)
tempa->next=a->abss;
ptr=tempx->buf+tempx->ip+tempa->ip;
nobound_switch (tempa->type) {
case EAT_ADD_U8:
*ptr(U8 *)+=ip2;
break;
case EAT_SUB_U8:
*ptr(U8 *)-=ip2;
break;
case EAT_ADD_U16:
*ptr(U16 *)+=ip2;
break;
case EAT_SUB_U16:
*ptr(U16 *)-=ip2;
break;
case EAT_ADD_U32:
*ptr(U32 *)+=ip2;
break;
case EAT_SUB_U32:
*ptr(U32 *)-=ip2;
break;
case EAT_ADD_U64:
*ptr(I64 *)+=ip2;
break;
case EAT_SUB_U64:
*ptr(I64 *)-=ip2;
break;
case EAT_ADD_U8: *ptr(U8 *)+=ip2; break;
case EAT_SUB_U8: *ptr(U8 *)-=ip2; break;
case EAT_ADD_U16: *ptr(U16 *)+=ip2; break;
case EAT_SUB_U16: *ptr(U16 *)-=ip2; break;
case EAT_ADD_U32: *ptr(U32 *)+=ip2; break;
case EAT_SUB_U32: *ptr(U32 *)-=ip2; break;
case EAT_ADD_U64: *ptr(I64 *)+=ip2; break;
case EAT_SUB_U64: *ptr(I64 *)-=ip2; break;
}
a->abss=tempa;
tempa->ip+=ip2;
@@ -360,7 +345,7 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx)
while (tempe!=&tempx->next_ie) {
tempe1=tempe->next;
QueRem(tempe);
if (EIT_REL_I0<=tempe->type<=EIT_IMM_U64) {
if (EIT_REL_I0<=tempe->type<=EIT_IMM_I64) {
if (tempe->str) {
if (tempe->flags&EIF_GOTO_LABEL) {
if(!(g_lb=LCCGoToLabelFind(lx,tempe->str)))
@@ -409,7 +394,7 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx)
case EIT_REL_I64:
*ptr(I64 *)=i-ptr-8;
break;
case EIT_IMM_U64:
case EIT_IMM_I64:
*ptr(I64 *)=i;
break;
}
@@ -426,21 +411,13 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx)
case EIT_IMM_U8:
case EIT_IMM_U16:
case EIT_IMM_U32:
case EIT_IMM_U64:
case EIT_IMM_I64:
case EIT_REL_I0:
break;
case EIT_REL_I8:
*ptr(U8 *) -=ip2;
break;
case EIT_REL_I16:
*ptr(U16 *)-=ip2;
break;
case EIT_REL_I32:
*ptr(U32 *)-=ip2;
break;
case EIT_REL_I64:
*ptr(I64 *)-=ip2;
break;
case EIT_REL_I8: *ptr(U8 *) -=ip2; break;
case EIT_REL_I16: *ptr(U16 *)-=ip2; break;
case EIT_REL_I32: *ptr(U32 *)-=ip2; break;
case EIT_REL_I64: *ptr(I64 *)-=ip2; break;
sub_switch_end:
tempe->ip+=ip2;
break;
@@ -715,11 +692,9 @@ I64 StreamExePrint(U8 *fmt,...)
return result;
}
U0 CmpInit()
U0 CInit()
{
cmp.compiled_lines=0;
cmp.compiled_funs=0;
cmp.compiled_bytes=0;
cmp.dont_write_to_dsk=FALSE;
CmpLoadDefines;
CmpFillTables;
@@ -733,4 +708,4 @@ U0 CmpInit()
UasmHashLoad;
}
CmpInit;
CInit;
+622
View File
@@ -0,0 +1,622 @@
Bool OptEqu(I64 num,Bool val)
{//Set compiler option to value.
return BEqu(&Fs->last_lex->opts,num,val);
}
Bool OptOn(I64 num)
{//Turn on compiler option.
return OptEqu(num,ON);
}
Bool OptOff(I64 num)
{//Turn off compiler option.
return OptEqu(num,OFF);
}
Bool GetOpt(I64 num)
{//Get state of compiler option.
return Bt(&Fs->last_lex->opts,num);
}
Bool OTrace(Bool val)
{//Displays intermediate code after passes through optimization.
return OptEqu(OPTf_OPT_TRACE,val);
}
I64 OTraceMask(I64 i=0b10001111101)
{//Ctrls which optimizer passes are displayed.
I64 old=Fs->last_lex->otrace_mask;
Fs->last_lex->otrace_mask=i;
return old;
}
Bool CTrace(Bool val)
{//Displays assembly code output from compiler.
return OptEqu(OPTf_COMPILE_TRACE,val);
}
Bool Echo(Bool val)
{//Displays text as it is being compiled.
return OptEqu(OPTf_ECHO,val);
}
U0 StreamDir()
{
U8 *dirname;
if (dirname=DirFile(Fs->last_lex->cur_lfn->full_name)) {
StreamPrint("\"%s\"",dirname);
Free(dirname);
}
}
CIntermediateStruct intermediate_code_table[IC_NUM_ENTRIES]=
{
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"END"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOP1"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"END_EXP"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOP2"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"LABEL"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"CALL_START"},
{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"CALL_END"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"CALL_END2"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RETURN_VAL"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RETURN_VAL2"},
{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"IMM_I64"},
{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"IMM_F64"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"STR_CONST"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ABS_ADDR"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ADDR_IMPORT"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"HEAP_GLBL"},
{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SIZEOF"},
{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"TYPE"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"GET_LABEL"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RBP"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"REG"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"FS"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV_FS"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GS"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV_GS"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"LEA"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_I64"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_F64"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_BOOL"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TOUPPER"},
{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"HOLYC_TYPECAST"},
{IS_1_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ADDR"},
{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"COM"},
{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"NOT"},
{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"UNARY_MINUS"},
{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF"},
{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF_PP"},
{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF_MM"},
{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"_PP"},
{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"_MM"},
{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"PP_"},
{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"MM_"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SHL"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SHR"},
{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SHL_CONST"},
{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SHR_CONST"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"POWER"},
{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"MUL"},
{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"DIV"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"MOD"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"AND"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"OR"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"XOR"},
{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ADD"},
{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SUB"},
{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"ADD_CONST"},
{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SUB_CONST"},
{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"EQUAL_EQUAL"},
{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"NOT_EQUAL"},
{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"LESS"},
{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"GREATER_EQUAL"},
{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"GREATER"},
{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"LESS_EQUAL"},
{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"PUSH_CMP"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"AND_AND"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"OR_OR"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"XOR_XOR"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN_PP"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN_MM"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SHL_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SHR_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"MUL_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"DIV_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"MOD_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"AND_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"OR_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"XOR_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ADD_EQUAL"},
{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SUB_EQUAL"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"JMP"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SUB_CALL"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SWITCH"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOBOUND_SWITCH"},
{IS_V_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ADD_RSP"},
{IS_V_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ADD_RSP1"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ENTER"},
{IS_0_ARG,0,IST_ASSIGN,FALSE,FALSE,0,0,0,"PUSH_REGS"},
{IS_0_ARG,0,IST_ASSIGN,FALSE,FALSE,0,0,0,"POP_REGS"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"LEAVE"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RET"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_INDIRECT"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_INDIRECT2"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_IMPORT"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_EXTERN"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"ASM"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"PREEMPT"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"PUSH"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"POP"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CLFLUSH"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"INVLPG"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U8"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U16"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U32"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U8"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U16"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U32"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RFLAGS"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CARRY"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RFLAGS"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RAX"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RAX"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RBP"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RBP"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RSP"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RSP"},
{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RIP"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"RDTSC"},
{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"HPET"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BT"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTS"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTR"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTC"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTS"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTR"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTC"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BSF"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BSR"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INIT"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INS"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INS_REV"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_REM"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"STRLEN"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_ZERO"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_ZERO"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_CARRY"},
{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_CARRY"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_EQUAL_EQUAL"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_EQUAL"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_LESS"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_GREATER_EQUAL"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_GREATER"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_LESS_EQUAL"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2EQUAL_EQUAL"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2NOT_EQUAL"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2LESS"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2GREATER_EQUAL"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2GREATER"},
{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2LESS_EQUAL"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_ZERO"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_NOT_ZERO"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_MM_ZERO"},
{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_MM_NOT_ZERO"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_AND_ZERO"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_AND_NOT_ZERO"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_OR_OR_ZERO"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_OR_OR_NOT_ZERO"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BT"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTS"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTR"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTC"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BT"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTS"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTR"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTC"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U8"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U16"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U32"},
{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U64"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ABS_I64"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SIGN_I64"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MIN_I64"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MIN_U64"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MAX_I64"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MAX_U64"},
{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MOD_U64"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SQRI64"},
{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SQRU64"},
{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SQR"},
{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ABS"},
{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SQRT"},
{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SIN"},
{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"COS"},
{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"TAN"},
{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ATAN"},
};
U0 ICClassPut(CHashClass *c)
{
I64 i;
if (!c) return;
if (c->ptr_stars_cnt>4) {
PrintErr("put_class ptrcnt=%d\n",c->ptr_stars_cnt);
while (TRUE)
//TODO:
Yield;
}
for (i=0;i<c->ptr_stars_cnt;i++)
'*';
c-=c->ptr_stars_cnt;
if (c->str)
"%s",c->str;
else {
PrintErr("put_class str=NULL\n");
while (TRUE)
//TODO:
Yield;
}
'' CH_SPACE;
}
U0 ICArgPut(CICArg *a)
{
if (a->type_pointed)
"%Z %Z %Z ",
a->type&RT_MASK,"ST_RAW_TYPES",
a->type_pointed&RT_MASK,"ST_RAW_TYPES",
a->type>>4,"ST_TY_TYPES";
else
"%Z %Z ",
a->type&RT_MASK,"ST_RAW_TYPES",
a->type>>4,"ST_TY_TYPES";
switch (a->type>>4) {
case TY_STK>>4:
"STK";
break;
case TY_IMM>>4:
"#%X",a->disp;
break;
case TY_REG>>4:
"%Z",a->reg,"ST_U64_REGS";
break;
case TY_DISP>>4:
"%X[%Z]",a->disp,a->reg,"ST_U64_REGS";
break;
case TY_RIP_DISP32>>4:
"[%X]",a->disp;
break;
case TY_SIB>>4:
if (a->disp)
"%X",a->disp;
if (a->reg==REG_RIP)
'[';
else
"[%Z+",a->reg&15,"ST_U64_REGS";
"%Z",a->reg>>8&15,"ST_U64_REGS";
switch (a->reg>>14) {
case 0: "]"; break;
case 1: "*2]"; break;
case 2: "*4]"; break;
case 3: "*8]"; break;
}
break;
}
}
U0 ICPut(CLex *lx,CIntermediateCode *tempi)
{
I64 opcode=tempi->ic_code,i;
if (opcode>=IC_END_EXP && opcode!=IC_NOP2) {
"%15ts %016X ",intermediate_code_table[opcode].name,tempi->ic_data;
if (lx->pass) {
if (tempi->r.type&TY_MASK) {
ICArgPut(&tempi->r);
"<-";
}
if (tempi->a1.type&TY_MASK)
ICArgPut(&tempi->a1);
',';
if (tempi->a2.type&TY_MASK)
ICArgPut(&tempi->a2);
'' CH_SPACE;
}
ICClassPut(tempi->ic_class);
if (tempi->ic_flags & ICF_LOCK)
"$$BROWN$$lock$$FG$$ ";
if (tempi->ic_flags & ICF_A2_TO_F64)
"$$LTBLUE$$a2d$$FG$$ ";
if (tempi->ic_flags & ICF_A2_TO_INT)
"$$GREEN$$a2i$$FG$$ ";
if (tempi->ic_flags & ICF_A1_TO_F64)
"$$LTBLUE$$a1d$$FG$$ ";
if (tempi->ic_flags & ICF_A1_TO_INT)
"$$GREEN$$a1i$$FG$$ ";
if (tempi->ic_flags & ICF_R_TO_F64)
"$$LTBLUE$$rd$$FG$$ ";
if (tempi->ic_flags & ICF_R_TO_INT)
"$$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)
"DELPREV ";
if (tempi->ic_flags & ICF_PREVIOUS_DELETED)
"PREVDEL ";
for (i=0;i<3;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 ";
'\n';
}
}
U0 LCCQuePut(CLex *lx)
{
CIntermediateCode *tempi=lx->lcc.lcc_root.next;
while (tempi->ic_code) {
if (tempi->ic_flags&ICF_TRACE)
ICPut(lx,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_code=IC_END;
}
CIntermediateCode *LCCAdd(CLex *lx,
I64 opcode_and_precedence,I64 arg, CHashClass *c,I64 flags=0)
{
CIntermediateCode *tempi=MAlloc(sizeof(CIntermediateCode));
tempi->ic_code=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;
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||mc->type==CMT_ASM_LABEL) &&
!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,CLexCodeCtrl *lcc)
{
CLexCodeMisc *mc,*mc1;
U8 *undef=NULL;
QueDel(&lcc->lcc_root.next);
mc=lcc->lcc_next_misc;
while (mc!=&lcc->lcc_next_misc) {
mc1=mc->next;
switch (mc->type) {
case CMT_GOTO_LABEL:
case CMT_ASM_LABEL:
if (!(mc->flags&CMF_DEFINED)) {
undef=mc->str;
mc->str=NULL;
} else if (!mc->use_cnt) {
PrintWarn("Unused label %s\n",mc->str);
LexWarn(lx,"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("Undefined goto label %s\n",undef);
Free(undef);
LexExcept(lx,"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->otrace_mask,pass-1)) {
"$$IV,1$$Pass %d:$$IV,0$$\n",pass-1;
LCCQuePut(lx);
}
} else if (Bt(&lx->otrace_mask,pass))
"$$IV,1$$Pass %d:$$IV,0$$\n",pass;
}
lx->pass=pass;
}
U8 *LCCCompile(CLex *lx,I64 *_code_size,CDbgInfo **_dbg,I64 *_type)
{
U8 *result;
CLexCodeMisc *lb;
I64 i,code_size,last_code_size;
COptReg reg_offsets[NUM_REGS];
if (_dbg) *_dbg=NULL;
lx->pass=0;
LCCHeaderPut(lx,1,TRUE);
OptPass012(lx);
LCCHeaderPut(lx,2,TRUE);
OptPass012(lx);
LCCHeaderPut(lx,3,TRUE);
OptPass3(lx,reg_offsets);
LCCHeaderPut(lx,4,TRUE);
OptPass4(lx,reg_offsets,_type);
LCCHeaderPut(lx,5,TRUE);
OptPass5(lx);
LCCHeaderPut(lx,6,TRUE);
OptPass6(lx);
LCCHeaderPut(lx,7,TRUE);
lb=lx->lcc.lcc_next_misc;
while (lb!=&lx->lcc.lcc_next_misc) {
if (lb->type==CMT_JMP_TABLE) {
for (i=0;i<lb->range;i++)
lb->jmp_table[i]=OptLabelFwd(lb->jmp_table[i]);
lb->dft=OptLabelFwd(lb->dft);
}
lb=lb->next;
}
LCCHeaderPut(lx,7,FALSE);
OptPass789A(lx,reg_offsets,NULL,NULL);
LCCHeaderPut(lx,8,FALSE);
OptPass789A(lx,reg_offsets,NULL,NULL);
LCCHeaderPut(lx,9,FALSE);
code_size=OptPass789A(lx,reg_offsets,NULL,NULL);
do {
last_code_size=code_size;
LCCHeaderPut(lx,9,FALSE);
code_size=OptPass789A(lx,reg_offsets,NULL,NULL);
if (code_size>last_code_size) {
"Pass:9 Code Size\n";
LexExcept(lx,"Compiler Optimization Error at ");
}
} 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,10,FALSE);
code_size=OptPass789A(lx,reg_offsets,result,_dbg);
LCCDel(lx,&lx->lcc);
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;
}
Binary file not shown.
+448 -457
View File
@@ -1,460 +1,451 @@
$LK,"AsmGlblsResolve ",A="FL:D:/Compiler/Assembler.CPP.Z,284",BI=1$0000007F30 0001 0000000404 Funct Export Res
$LK,"AsmHashLoad ",A="FL:D:/Compiler/CmpInit.CPP.Z,68",BI=2$000002939A 0001 00000005BF Funct Export Res
$LK,"AsmLexExpression ",A="FL:D:/Compiler/Assembler.CPP.Z,189",BI=3$0000007B08 0004 00000000B7 Funct Export Res
$LK,"AsmLineLst ",A="FL:D:/Compiler/Assembler.CPP.Z,31",BI=4$0000007570 0001 0000000148 Funct Export Res
$LK,"AsmLocalsResolve ",A="FL:D:/Compiler/Assembler.CPP.Z,250",BI=5$0000007E08 0003 0000000127 Funct Export Res
$LK,"AsmMakeArgMask ",A="FL:D:/Compiler/Assembler.CPP.Z,569",BI=6$0000008898 0002 0000000444 Funct Export Res
$LK,"AsmPrsInsFlags ",A="FL:D:/Compiler/CmpInit.CPP.Z,18",BI=7$000002915A 0001 000000023B Funct Export Res
$LK,"AsmResolve ",A="FL:D:/Compiler/Assembler.CPP.Z,209",BI=8$0000007BC0 0002 0000000245 Funct Export Res
$LK,"AsmStoreCodeU32 ",A="FL:D:/Compiler/Assembler.CPP.Z,90",BI=9$00000077C0 0001 0000000145 Funct Export Res
$LK,"AsmStoreCodeU64 ",A="FL:D:/Compiler/Assembler.CPP.Z,129",BI=10$0000007908 0005 0000000146 Funct Export Res
$LK,"AsmStoreCodeU8 ",A="FL:D:/Compiler/Assembler.CPP.Z,61",BI=11$00000076B8 001D 0000000103 Funct Export Res
$LK,"AsmStoreCodeU8At ",A="FL:D:/Compiler/Assembler.CPP.Z,168",BI=12$0000007A50 0007 00000000B7 Funct Export Res
$LK,"AsmStoreNum ",A="FL:D:/Compiler/Assembler.CPP.Z,663",BI=13$0000008CE0 0004 00000004A6 Funct Export Res
$LK,"AsmUnresolvedAdd ",A="FL:D:/Compiler/Assembler.CPP.Z,1",BI=14$0000007460 0004 000000010C Funct Export Res
$LK,"CInternalType ",A="FL:D:/Compiler/CmpInit.CPP.Z,3"$003FD4FE40 0002 000000000A Class
$LK,"CMP_TEMPLATES ",A="FL:D:/Compiler/CmpAsm.CPP.Z,5"$0000000000 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_POP",A="FL:D:/Compiler/CmpAsm.CPP.Z,179"$000000018B 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:D:/Compiler/CmpAsm.CPP.Z,268"$0000000257 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:D:/Compiler/CmpAsm.CPP.Z,459"$0000000421 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:D:/Compiler/CmpAsm.CPP.Z,395"$0000000391 0001 ExportSysSym Export
$LK,"CN_A1 ",A="FL:D:/Compiler/BackF1a.CPP.Z,2"$1 0006 0000000008 DefineStr
$LK,"CN_A2 ",A="FL:D:/Compiler/BackF1a.CPP.Z,1"$0 0005 0000000008 DefineStr
$LK,"CN_MAIN ",A="FL:D:/Compiler/BackF1a.CPP.Z,3"$2 0022 0000000008 DefineStr
$LK,"CN_R ",A="FL:D:/Compiler/BackF1a.CPP.Z,4"$3 0003 0000000008 DefineStr
$LK,"COptMemberVar ",A="FL:D:/Compiler/OptLib.CPP.Z,570"$003FC79988 0005 0000000028 Class
$LK,"CSubSwitch ",A="FL:D:/Compiler/StmtParser.CPP.Z,1342"$003FC769B0 0004 0000000020 Class
$LK,"CSwitchCase ",A="FL:D:/Compiler/StmtParser.CPP.Z,1347"$003FD576B8 0004 0000000020 Class
$LK,"CTrace ",A="FL:D:/Compiler/ICLCC.CPP.Z,33",BI=15$0000002898 0000 0000000017 Funct Export Res
$LK,"CVI2 ",A="FL:D:/Compiler/StmtParser.CPP.Z,175"$003FC76C90 0003 0000000010 Class
$LK,"Cmp ",A="FL:D:/Compiler/CmpMain.CPP.Z,455",BI=16$000002BF32 0000 000000059C Funct Export Res
$LK,"CmpBuf ",A="FL:D:/Compiler/CmpMain.CPP.Z,170",BI=17$000002B5FA 0001 00000000B6 Funct Export Res
$LK,"CmpF1PushPop ",A="FL:D:/Compiler/OptLib.CPP.Z,553",BI=18$000000BCE6 0002 0000000031 Funct Export Res
$LK,"CmpF2PushPop ",A="FL:D:/Compiler/OptLib.CPP.Z,559",BI=19$000000BD1E 0005 0000000074 Funct Export Res
$LK,"CmpFillTables ",A="FL:D:/Compiler/CmpInit.CPP.Z,444",BI=20$000002A872 0001 000000051A Funct Export Res
$LK,"CmpFixUpAOTAsm ",A="FL:D:/Compiler/CmpMain.CPP.Z,314",BI=21$000002BB42 0000 00000003EA Funct Export Res
$LK,"CmpFixUpJITAsm ",A="FL:D:/Compiler/CmpMain.CPP.Z,187",BI=22$000002B6B2 0000 000000048F Funct Export Res
$LK,"CmpInit ",A="FL:D:/Compiler/CmpMain.CPP.Z,718",BI=23$000002C9DA 0001 0000000081 Funct Export Res
$LK,"CmpJoin ",A="FL:D:/Compiler/CmpMain.CPP.Z,48",BI=24$000002AF72 0001 0000000682 Funct Export Res
$LK,"CmpLoadDefines ",A="FL:D:/Compiler/CmpInit.CPP.Z,204",BI=25$000002995A 0001 0000000F18 Funct Export Res
$LK,"CmpNoteFloatOp ",A="FL:D:/Compiler/BackF1a.CPP.Z,6",BI=26$000001B3EE 000E 000000020D Funct Export Res
$LK,"CmpOffset2Reg ",A="FL:D:/Compiler/OptLib.CPP.Z,83",BI=27$000000B09E 0005 0000000046 Funct Export Res
$LK,"CmpPrompt ",A="FL:D:/Compiler/Lex.CPP.Z,1",BI=28$00000038D8 0001 00000001B5 Funct Export Res
$LK,"CmpRawType ",A="FL:D:/Compiler/OptLib.CPP.Z,533",BI=29$000000BC86 0006 0000000025 Funct Export Res
$LK,"CmpRawTypePointed ",A="FL:D:/Compiler/OptLib.CPP.Z,542",BI=30$000000BCAE 0005 0000000033 Funct Export Res
$LK,"CmpSetFloatOpPushPop",A="FL:D:/Compiler/BackF1a.CPP.Z,57",BI=31$000001B5FE 000C 0000000075 Funct Export Res
$LK,"Echo ",A="FL:D:/Compiler/ICLCC.CPP.Z,38",BI=32$00000028B0 0000 0000000017 Funct Export Res
$LK,"ExeFile ",A="FL:D:/Compiler/CmpMain.CPP.Z,650",BI=33$000002C6D2 0000 000000007B Funct Export Res
$LK,"ExeFile2 ",A="FL:D:/Compiler/CmpMain.CPP.Z,689",BI=34$000002C86A 0000 0000000079 Funct Export Res
$LK,"ExePrint ",A="FL:D:/Compiler/CmpMain.CPP.Z,641",BI=35$000002C682 0000 0000000049 Funct Export Res
$LK,"ExePrint2 ",A="FL:D:/Compiler/CmpMain.CPP.Z,680",BI=36$000002C822 0000 0000000047 Funct Export Res
$LK,"ExePutS ",A="FL:D:/Compiler/CmpMain.CPP.Z,606",BI=37$000002C4D2 0003 00000001A9 Funct Export Res
$LK,"ExePutS2 ",A="FL:D:/Compiler/CmpMain.CPP.Z,661",BI=38$000002C752 0002 00000000CC Funct Export Res
$LK,"FBO1_F64 ",A="FL:D:/Compiler/OptLib.CPP.Z,94"$2 0002 0000000008 DefineStr
$LK,"FBO1_INT ",A="FL:D:/Compiler/OptLib.CPP.Z,93"$1 0013 0000000008 DefineStr
$LK,"FBO1_NOT_CONST ",A="FL:D:/Compiler/OptLib.CPP.Z,92"$0 0004 0000000008 DefineStr
$LK,"GetOpt ",A="FL:D:/Compiler/ICLCC.CPP.Z,16",BI=39$0000002810 0004 000000002C Funct Export Res
$LK,"HashEntrySize ",A="FL:D:/Compiler/Hash1b.CPP.Z,1",BI=40$0000007158 0000 0000000103 Funct Export Res
$LK,"HashEntrySize2 ",A="FL:D:/Compiler/Hash1b.CPP.Z,32",BI=41$0000007260 0002 00000001A4 Funct Export Res
$LK,"HashTableSize2 ",A="FL:D:/Compiler/Hash1b.CPP.Z,69",BI=42$0000007408 0000 0000000054 Funct Export Res
$LK,"ICAddEct ",A="FL:D:/Compiler/Back1a.CPP.Z,1",BI=43$000001F056 0005 00000002F3 Funct Export Res
$LK,"ICAddRSP ",A="FL:D:/Compiler/BackLib.CPP.Z,69",BI=44$0000019D86 0017 00000002A7 Funct Export Res
$LK,"ICAddSubEctEqual ",A="FL:D:/Compiler/Back1a.CPP.Z,505",BI=45$000002095E 0005 0000000673 Funct Export Res
$LK,"ICAddSubEctImm ",A="FL:D:/Compiler/Back1a.CPP.Z,57",BI=46$000001F34E 000D 0000000685 Funct Export Res
$LK,"ICAndAnd ",A="FL:D:/Compiler/Back1b.CPP.Z,30",BI=47$00000215FE 0001 000000014B Funct Export Res
$LK,"ICAndBranch ",A="FL:D:/Compiler/Back1c.CPP.Z,1",BI=48$0000023896 0002 00000006E6 Funct Export Res
$LK,"ICAndEqual ",A="FL:D:/Compiler/Back1c.CPP.Z,675",BI=49$0000025776 0001 000000010D Funct Export Res
$LK,"ICArgPut ",A="FL:D:/Compiler/ICLCC.CPP.Z,73",BI=50$00000029D0 0003 00000002D6 Funct Export Res
$LK,"ICAssign ",A="FL:D:/Compiler/Back1c.CPP.Z,159",BI=51$0000023F7E 0001 0000000301 Funct Export Res
$LK,"ICAssignPostIncDec ",A="FL:D:/Compiler/Back1b.CPP.Z,534",BI=52$0000022C56 0002 0000000210 Funct Export Res
$LK,"ICBitOps ",A="FL:D:/Compiler/Back1b.CPP.Z,244",BI=53$0000021EF6 0007 00000004F1 Funct Export Res
$LK,"ICBrBitOps ",A="FL:D:/Compiler/Back1c.CPP.Z,207",BI=54$0000024286 0008 00000009FB Funct Export Res
$LK,"ICBuiltInFloatConst ",A="FL:D:/Compiler/BackLib.CPP.Z,420",BI=55$000001A8C6 000F 00000000BD Funct Export Res
$LK,"ICClassPut ",A="FL:D:/Compiler/ICLCC.CPP.Z,49",BI=56$00000028F8 0001 00000000D3 Funct Export Res
$LK,"ICCmp ",A="FL:D:/Compiler/Back1b.CPP.Z,124",BI=57$0000021A0E 0006 00000004E6 Funct Export Res
$LK,"ICCmpAndBranch ",A="FL:D:/Compiler/Back1b.CPP.Z,575",BI=58$0000022E66 000C 0000000737 Funct Export Res
$LK,"ICCopyTemplate ",A="FL:D:/Compiler/BackF1a.CPP.Z,69",BI=59$000001B676 0013 000000021D Funct Export Res
$LK,"ICDeref ",A="FL:D:/Compiler/BackLib.CPP.Z,656",BI=60$000001B32E 0001 00000000B9 Funct Export Res
$LK,"ICDerefPostIncDec ",A="FL:D:/Compiler/Back1b.CPP.Z,491",BI=61$0000022A5E 0002 00000001F1 Funct Export Res
$LK,"ICDiv ",A="FL:D:/Compiler/Back1a.CPP.Z,413",BI=62$000002048E 0001 00000000F1 Funct Export Res
$LK,"ICDivEqual ",A="FL:D:/Compiler/Back1a.CPP.Z,432",BI=63$0000020586 0002 00000002DE Funct Export Res
$LK,"ICFAdd ",A="FL:D:/Compiler/BackF1b.CPP.Z,633",BI=64$000001EA16 0001 00000001FF Funct Export Res
$LK,"ICFCmp ",A="FL:D:/Compiler/BackF1a.CPP.Z,549",BI=65$000001C9EE 0004 000000018B Funct Export Res
$LK,"ICFCmpAndBranch ",A="FL:D:/Compiler/BackF1b.CPP.Z,325",BI=66$000001DE4E 0004 00000009F7 Funct Export Res
$LK,"ICFCvt ",A="FL:D:/Compiler/BackF1a.CPP.Z,115",BI=67$000001B896 000C 000000017F Funct Export Res
$LK,"ICFCvt2 ",A="FL:D:/Compiler/BackF1a.CPP.Z,163",BI=68$000001BA16 0010 0000000116 Funct Export Res
$LK,"ICFDiv ",A="FL:D:/Compiler/BackF1b.CPP.Z,621",BI=69$000001E966 0001 00000000A9 Funct Export Res
$LK,"ICFMod ",A="FL:D:/Compiler/BackF1a.CPP.Z,241",BI=70$000001BD0E 0001 0000000145 Funct Export Res
$LK,"ICFModEqual ",A="FL:D:/Compiler/BackF1a.CPP.Z,589",BI=71$000001CB7E 0001 00000003D7 Funct Export Res
$LK,"ICFMul ",A="FL:D:/Compiler/BackF1b.CPP.Z,603",BI=72$000001E846 0001 000000011B Funct Export Res
$LK,"ICFOp ",A="FL:D:/Compiler/BackF1a.CPP.Z,350",BI=73$000001C14E 0004 000000089D Funct Export Res
$LK,"ICFOpEqual ",A="FL:D:/Compiler/BackF1b.CPP.Z,1",BI=74$000001CF56 0004 0000000EF7 Funct Export Res
$LK,"ICFPostIncDec ",A="FL:D:/Compiler/BackF1b.CPP.Z,716",BI=75$000001EE4E 0002 0000000151 Funct Export Res
$LK,"ICFPow ",A="FL:D:/Compiler/BackF1a.CPP.Z,271",BI=76$000001BE56 0001 00000002F7 Funct Export Res
$LK,"ICFPreIncDec ",A="FL:D:/Compiler/BackF1b.CPP.Z,694",BI=77$000001ED3E 0002 000000010A Funct Export Res
$LK,"ICFSub ",A="FL:D:/Compiler/BackF1b.CPP.Z,671",BI=78$000001EC16 0001 0000000124 Funct Export Res
$LK,"ICFTemplateFun ",A="FL:D:/Compiler/BackF1b.CPP.Z,744",BI=79$000001EFA6 0007 00000000AA Funct Export Res
$LK,"ICFUnaryMinus ",A="FL:D:/Compiler/BackF1a.CPP.Z,190",BI=80$000001BB2E 0001 00000001E0 Funct Export Res
$LK,"ICFlagBranch ",A="FL:D:/Compiler/Back1b.CPP.Z,803",BI=81$000002378E 0004 0000000106 Funct Export Res
$LK,"ICLastIns ",A="FL:D:/Compiler/BackLib.CPP.Z,59",BI=82$0000019D46 0002 0000000040 Funct Export Res
$LK,"ICLea ",A="FL:D:/Compiler/BackLib.CPP.Z,622",BI=83$000001B17E 0004 00000001AA Funct Export Res
$LK,"ICLocalVarInit ",A="FL:D:/Compiler/Back1c.CPP.Z,908",BI=84$0000026196 0001 0000000078 Funct Export Res
$LK,"ICMinMax ",A="FL:D:/Compiler/Back1c.CPP.Z,496",BI=85$000002504E 0004 00000002AB Funct Export Res
$LK,"ICMod ",A="FL:D:/Compiler/Back1a.CPP.Z,486",BI=86$0000020866 0001 00000000F1 Funct Export Res
$LK,"ICModU64 ",A="FL:D:/Compiler/Back1c.CPP.Z,575",BI=87$000002534E 0001 00000001B7 Funct Export Res
$LK,"ICModr1 ",A="FL:D:/Compiler/BackLib.CPP.Z,140",BI=88$000001A02E 0017 00000002FE Funct Export Res
$LK,"ICModr2 ",A="FL:D:/Compiler/BackLib.CPP.Z,230",BI=89$000001A32E 0016 00000000A6 Funct Export Res
$LK,"ICMov ",A="FL:D:/Compiler/BackLib.CPP.Z,442",BI=90$000001A986 019A 00000007F4 Funct Export Res
$LK,"ICMul ",A="FL:D:/Compiler/Back1a.CPP.Z,289",BI=91$000001FDCE 0001 00000002B8 Funct Export Res
$LK,"ICMulEqual ",A="FL:D:/Compiler/Back1a.CPP.Z,346",BI=92$0000020086 0001 0000000406 Funct Export Res
$LK,"ICNot ",A="FL:D:/Compiler/Back1b.CPP.Z,10",BI=93$00000214FE 0001 00000000FF Funct Export Res
$LK,"ICOpSizeRex ",A="FL:D:/Compiler/BackLib.CPP.Z,28",BI=94$0000019C5E 0006 0000000040 Funct Export Res
$LK,"ICOrEqual ",A="FL:D:/Compiler/Back1c.CPP.Z,698",BI=95$0000025886 0001 000000010D Funct Export Res
$LK,"ICOrOr ",A="FL:D:/Compiler/Back1b.CPP.Z,59",BI=96$000002174E 0001 0000000162 Funct Export Res
$LK,"ICPop ",A="FL:D:/Compiler/BackLib.CPP.Z,361",BI=97$000001A6CE 0009 00000000EA Funct Export Res
$LK,"ICPopRegs ",A="FL:D:/Compiler/BackLib.CPP.Z,388",BI=98$000001A7BE 000C 0000000057 Funct Export Res
$LK,"ICPostIncDec ",A="FL:D:/Compiler/Back1b.CPP.Z,451",BI=99$000002285E 0002 00000001FF Funct Export Res
$LK,"ICPreIncDec ",A="FL:D:/Compiler/Back1b.CPP.Z,415",BI=100$000002267E 0004 00000001DB Funct Export Res
$LK,"ICPreempt ",A="FL:D:/Compiler/Back1b.CPP.Z,348",BI=101$00000223EE 0001 0000000122 Funct Export Res
$LK,"ICPush ",A="FL:D:/Compiler/BackLib.CPP.Z,310",BI=102$000001A51E 001F 0000000152 Funct Export Res
$LK,"ICPushRegs ",A="FL:D:/Compiler/BackLib.CPP.Z,348",BI=103$000001A676 0006 0000000054 Funct Export Res
$LK,"ICPut ",A="FL:D:/Compiler/ICLCC.CPP.Z,118",BI=104$0000002CA8 0008 00000003B2 Funct Export Res
$LK,"ICQueInit ",A="FL:D:/Compiler/Back1c.CPP.Z,384",BI=105$0000024C86 0001 0000000070 Funct Export Res
$LK,"ICQueIns ",A="FL:D:/Compiler/Back1c.CPP.Z,398",BI=106$0000024CF6 0001 0000000162 Funct Export Res
$LK,"ICQueInsRev ",A="FL:D:/Compiler/Back1c.CPP.Z,439",BI=107$0000024E5E 0001 0000000162 Funct Export Res
$LK,"ICQueRem ",A="FL:D:/Compiler/Back1c.CPP.Z,480",BI=108$0000024FC6 0001 0000000088 Funct Export Res
$LK,"ICRex ",A="FL:D:/Compiler/BackLib.CPP.Z,22",BI=109$0000019C2E 0016 000000002D Funct Export Res
$LK,"ICShift ",A="FL:D:/Compiler/Back1a.CPP.Z,643",BI=110$0000020FD6 0004 00000001A3 Funct Export Res
$LK,"ICShiftEqual ",A="FL:D:/Compiler/Back1a.CPP.Z,676",BI=111$000002117E 0002 000000030E Funct Export Res
$LK,"ICSlashOp ",A="FL:D:/Compiler/BackLib.CPP.Z,282",BI=112$000001A3D6 0027 0000000145 Funct Export Res
$LK,"ICSqr ",A="FL:D:/Compiler/Back1c.CPP.Z,568",BI=113$00000252FE 0002 000000004A Funct Export Res
$LK,"ICSub ",A="FL:D:/Compiler/Back1a.CPP.Z,211",BI=114$000001F9D6 0001 00000003F5 Funct Export Res
$LK,"ICSwap ",A="FL:D:/Compiler/Back1c.CPP.Z,617",BI=115$0000025506 0001 000000026E Funct Export Res
$LK,"ICSwitch ",A="FL:D:/Compiler/Back1c.CPP.Z,744",BI=116$0000025A9E 0002 00000006F2 Funct Export Res
$LK,"ICTest ",A="FL:D:/Compiler/BackLib.CPP.Z,410",BI=117$000001A876 000C 000000004E Funct Export Res
$LK,"ICTestAndBranch ",A="FL:D:/Compiler/Back1b.CPP.Z,755",BI=118$000002359E 0002 00000001EC Funct Export Res
$LK,"ICToBool ",A="FL:D:/Compiler/Back1b.CPP.Z,400",BI=119$0000022606 0001 0000000075 Funct Export Res
$LK,"ICToF64 ",A="FL:D:/Compiler/Back1b.CPP.Z,395",BI=120$00000225C6 0001 000000003D Funct Export Res
$LK,"ICToI64 ",A="FL:D:/Compiler/Back1b.CPP.Z,390",BI=121$0000022586 0001 000000003D Funct Export Res
$LK,"ICToUpper ",A="FL:D:/Compiler/Back1b.CPP.Z,379",BI=122$0000022516 0001 000000006B Funct Export Res
$LK,"ICU16 ",A="FL:D:/Compiler/BackLib.CPP.Z,35",BI=123$0000019C9E 0092 0000000029 Funct Export Res
$LK,"ICU24 ",A="FL:D:/Compiler/BackLib.CPP.Z,41",BI=124$0000019CCE 0063 0000000026 Funct Export Res
$LK,"ICU32 ",A="FL:D:/Compiler/BackLib.CPP.Z,47",BI=125$0000019CF6 0054 0000000026 Funct Export Res
$LK,"ICU64 ",A="FL:D:/Compiler/BackLib.CPP.Z,53",BI=126$0000019D1E 0009 0000000028 Funct Export Res
$LK,"ICU8 ",A="FL:D:/Compiler/BackLib.CPP.Z,17",BI=127$0000019C06 0063 0000000028 Funct Export Res
$LK,"ICUnaries ",A="FL:D:/Compiler/Back1b.CPP.Z,1",BI=128$000002148E 0002 0000000069 Funct Export Res
$LK,"ICXorEqual ",A="FL:D:/Compiler/Back1c.CPP.Z,721",BI=129$0000025996 0001 0000000107 Funct Export Res
$LK,"ICXorXor ",A="FL:D:/Compiler/Back1b.CPP.Z,91",BI=130$00000218B6 0001 0000000155 Funct Export Res
$LK,"ICZero ",A="FL:D:/Compiler/BackLib.CPP.Z,401",BI=131$000001A816 0017 000000005E Funct Export Res
$LK,"IncludeDepth ",A="FL:D:/Compiler/ICLCC.CPP.Z,43",BI=132$00000028C8 0000 0000000030 Funct Export Res
$LK,"InstEntriesCompare ",A="FL:D:/Compiler/Unassembler.CPP.Z,1",BI=133$0000000738 0001 00000002A9 Funct Export Res
$LK,"InstEntryFind ",A="FL:D:/Compiler/Unassembler.CPP.Z,72",BI=134$00000009E8 0002 00000003C9 Funct Export Res
$LK,"IsLexExpression2Bin ",A="FL:D:/Compiler/ExpParser.CPP.Z,1153",BI=135$000000ECAE 0000 0000000029 Funct Export Res
$LK,"LCCAdd ",A="FL:D:/Compiler/ICLCC.CPP.Z,200",BI=136$00000030D8 00A9 000000009F Funct Export Res
$LK,"LCCAppend ",A="FL:D:/Compiler/ICLCC.CPP.Z,239",BI=137$0000003200 0003 00000000A6 Funct Export Res
$LK,"LCCCompile ",A="FL:D:/Compiler/ICLCC.CPP.Z,356",BI=138$0000003630 0006 00000002A7 Funct Export Res
$LK,"LCCDel ",A="FL:D:/Compiler/ICLCC.CPP.Z,299",BI=139$0000003420 0001 0000000164 Funct Export Res
$LK,"LCCFloatConstFind ",A="FL:D:/Compiler/ICLCC.CPP.Z,277",BI=140$0000003358 000F 00000000C6 Funct Export Res
$LK,"LCCGoToLabelFind ",A="FL:D:/Compiler/ICLCC.CPP.Z,265",BI=141$0000003300 0005 0000000057 Funct Export Res
$LK,"LCCHeaderPut ",A="FL:D:/Compiler/ICLCC.CPP.Z,342",BI=142$0000003588 000B 00000000A2 Funct Export Res
$LK,"LCCInit ",A="FL:D:/Compiler/ICLCC.CPP.Z,192",BI=143$0000003098 000A 000000003A Funct Export Res
$LK,"LCCMiscNew ",A="FL:D:/Compiler/ICLCC.CPP.Z,256",BI=144$00000032A8 0021 0000000055 Funct Export Res
$LK,"LCCPop ",A="FL:D:/Compiler/ICLCC.CPP.Z,234",BI=145$00000031E0 0008 000000001A Funct Export Res
$LK,"LCCPopNoFree ",A="FL:D:/Compiler/ICLCC.CPP.Z,227",BI=146$00000031B0 0003 000000002E Funct Export Res
$LK,"LCCPush ",A="FL:D:/Compiler/ICLCC.CPP.Z,220",BI=147$0000003178 000E 0000000037 Funct Export Res
$LK,"LCCQuePut ",A="FL:D:/Compiler/ICLCC.CPP.Z,182",BI=148$0000003060 0001 0000000037 Funct Export Res
$LK,"Lex ",A="FL:D:/Compiler/Lex.CPP.Z,725",BI=149$00000054C8 00ED 0000001881 Funct Export Res
$LK,"LexAttachDoc ",A="FL:D:/Compiler/Lex.CPP.Z,393",BI=150$0000004A70 0001 0000000163 Funct Export Res
$LK,"LexBackupLastChar ",A="FL:D:/Compiler/Lex.CPP.Z,131",BI=151$0000003E4C 0003 0000000041 Funct Export Res
$LK,"LexD2I32 ",A="FL:D:/Compiler/ExpParser.CPP.Z,1198",BI=152$000000EDCE 0000 00000000A6 Funct Export Res
$LK,"LexD3I32 ",A="FL:D:/Compiler/ExpParser.CPP.Z,1214",BI=153$000000EE76 0000 00000000D9 Funct Export Res
$LK,"LexDel ",A="FL:D:/Compiler/Lex.CPP.Z,66",BI=154$0000003BD0 0004 00000000A5 Funct Export Res
$LK,"LexDocRead ",A="FL:D:/Compiler/Lex.CPP.Z,372",BI=155$00000049DC 0001 0000000087 Funct Export Res
$LK,"LexDollar ",A="FL:D:/Compiler/Lex.CPP.Z,142",BI=156$0000003E94 0003 0000000070 Funct Export Res
$LK,"LexExcept ",A="FL:D:/Compiler/Lex.CPP.Z,1601",BI=157$0000007068 00B8 00000000ED Funct Export Res
$LK,"LexExpression ",A="FL:D:/Compiler/ExpParser.CPP.Z,1186",BI=158$000000ED8E 0002 000000003F Funct Export Res
$LK,"LexExpression2Bin ",A="FL:D:/Compiler/ExpParser.CPP.Z,1135",BI=159$000000EC16 0006 0000000094 Funct Export Res
$LK,"LexExpressionF64 ",A="FL:D:/Compiler/ExpParser.CPP.Z,1172",BI=160$000000ED36 0000 0000000054 Funct Export Res
$LK,"LexExpressionI64 ",A="FL:D:/Compiler/ExpParser.CPP.Z,1158",BI=161$000000ECDE 000A 0000000054 Funct Export Res
$LK,"LexExtStr ",A="FL:D:/Compiler/Lex.CPP.Z,1518",BI=162$0000006D50 0004 00000000C5 Funct Export Res
$LK,"LexFirstRem ",A="FL:D:/Compiler/Lex.CPP.Z,332",BI=163$0000004884 0000 00000000BC Funct Export Res
$LK,"LexGetChar ",A="FL:D:/Compiler/Lex.CPP.Z,156",BI=164$0000003F04 0031 000000094F Funct Export Res
$LK,"LexInStr ",A="FL:D:/Compiler/Lex.CPP.Z,628",BI=165$0000005198 0001 000000032A Funct Export Res
$LK,"LexIncludeStr ",A="FL:D:/Compiler/Lex.CPP.Z,354",BI=166$0000004944 0003 0000000098 Funct Export Res
$LK,"LexNew ",A="FL:D:/Compiler/Lex.CPP.Z,35",BI=167$0000003A90 0004 000000013D Funct Export Res
$LK,"LexPop ",A="FL:D:/Compiler/Lex.CPP.Z,450",BI=168$0000004C60 0004 0000000074 Funct Export Res
$LK,"LexPush ",A="FL:D:/Compiler/Lex.CPP.Z,438",BI=169$0000004BD8 000F 0000000081 Funct Export Res
$LK,"LexPutLine ",A="FL:D:/Compiler/Lex.CPP.Z,1543",BI=170$0000006E18 0003 000000009B Funct Export Res
$LK,"LexPutPos ",A="FL:D:/Compiler/Lex.CPP.Z,1571",BI=171$0000006EB8 0003 00000000CA Funct Export Res
$LK,"LexPutToken ",A="FL:D:/Compiler/Lex.CPP.Z,108",BI=172$0000003D18 0001 000000012B Funct Export Res
$LK,"LexSize ",A="FL:D:/Compiler/Lex.CPP.Z,88",BI=173$0000003C78 0000 000000009B Funct Export Res
$LK,"LexSkipEol ",A="FL:D:/Compiler/Lex.CPP.Z,325",BI=174$0000004854 0004 000000002B Funct Export Res
$LK,"LexStatement2Bin ",A="FL:D:/Compiler/CmpMain.CPP.Z,15",BI=175$000002AE3A 0001 0000000131 Funct Export Res
$LK,"LexWarn ",A="FL:D:/Compiler/Lex.CPP.Z,1585",BI=176$0000006F88 0009 00000000D9 Funct Export Res
$LK,"MDR_D32_INDIRECT_REG",A="FL:D:/Compiler/BackLib.CPP.Z,134"$3 0002 0000000008 DefineStr
$LK,"MDR_D8_INDIRECT_REG ",A="FL:D:/Compiler/BackLib.CPP.Z,133"$2 0002 0000000008 DefineStr
$LK,"MDR_INDIRECT_REG ",A="FL:D:/Compiler/BackLib.CPP.Z,132"$1 0002 0000000008 DefineStr
$LK,"MDR_REG ",A="FL:D:/Compiler/BackLib.CPP.Z,131"$0 0002 0000000008 DefineStr
$LK,"MDR_RIP_REL ",A="FL:D:/Compiler/BackLib.CPP.Z,138"$7 0004 0000000008 DefineStr
$LK,"MDR_SIB_D32_INDIRECT_REG",A="FL:D:/Compiler/BackLib.CPP.Z,137"$6 0003 0000000008 DefineStr
$LK,"MDR_SIB_D8_INDIRECT_REG",A="FL:D:/Compiler/BackLib.CPP.Z,136"$5 0002 0000000008 DefineStr
$LK,"MDR_SIB_INDIRECT_REG",A="FL:D:/Compiler/BackLib.CPP.Z,135"$4 0002 0000000008 DefineStr
$LK,"MemberAdd ",A="FL:D:/Compiler/Lex.CPP.Z,519",BI=177$0000004E10 0004 00000001BA Funct Export Res
$LK,"MemberFind ",A="FL:D:/Compiler/Lex.CPP.Z,484",BI=178$0000004D60 0005 0000000067 Funct Export Res
$LK,"MemberFind2 ",A="FL:D:/Compiler/Lex.CPP.Z,504",BI=179$0000004DC8 0001 0000000044 Funct Export Res
$LK,"MemberLstDel ",A="FL:D:/Compiler/Lex.CPP.Z,567",BI=180$0000004FD0 0001 00000000F3 Funct Export Res
$LK,"MemberLstNew ",A="FL:D:/Compiler/StmtParser.CPP.Z,38",BI=181$000000F026 0003 000000002A Funct Export Res
$LK,"MemberLstSize ",A="FL:D:/Compiler/Lex.CPP.Z,601",BI=182$00000050C8 0002 00000000CF Funct Export Res
$LK,"MemberMetaData ",A="FL:D:/Compiler/Lex.CPP.Z,462",BI=183$0000004CD8 0000 0000000041 Funct Export Res
$LK,"MemberMetaFind ",A="FL:D:/Compiler/Lex.CPP.Z,473",BI=184$0000004D20 0000 0000000040 Funct Export Res
$LK,"NUM_INTERNAL_TYPES ",A="FL:D:/Compiler/CmpInit.CPP.Z,1"$17 0002 0000000008 DefineStr
$LK,"OTrace ",A="FL:D:/Compiler/ICLCC.CPP.Z,21",BI=185$0000002840 0000 0000000017 Funct Export Res
$LK,"OTraceMask ",A="FL:D:/Compiler/ICLCC.CPP.Z,26",BI=186$0000002858 0000 0000000039 Funct Export Res
$LK,"OptBrNotZero ",A="FL:D:/Compiler/OptLib.CPP.Z,361",BI=187$000000B7DE 0004 0000000403 Funct Export Res
$LK,"OptBrZero ",A="FL:D:/Compiler/OptLib.CPP.Z,213",BI=188$000000B3D6 0006 0000000403 Funct Export Res
$LK,"OptClassFwd ",A="FL:D:/Compiler/OptLib.CPP.Z,9",BI=189$000000AEFE 0013 000000002B Funct Export Res
$LK,"OptEqu ",A="FL:D:/Compiler/ICLCC.CPP.Z,1",BI=190$00000027B0 0005 000000002E Funct Export Res
$LK,"OptFixSizeOf ",A="FL:D:/Compiler/OptLib.CPP.Z,509",BI=191$000000BBE6 0003 000000009B Funct Export Res
$LK,"OptFixupBinaryOp1 ",A="FL:D:/Compiler/OptLib.CPP.Z,96",BI=192$000000B0E6 0013 00000001CB Funct Export Res
$LK,"OptFixupBinaryOp2 ",A="FL:D:/Compiler/OptLib.CPP.Z,162",BI=193$000000B2B6 0001 0000000054 Funct Export Res
$LK,"OptFixupUnaryOp ",A="FL:D:/Compiler/OptLib.CPP.Z,178",BI=194$000000B30E 0003 00000000C8 Funct Export Res
$LK,"OptFree ",A="FL:D:/Compiler/OptLib.CPP.Z,33",BI=195$000000AFAE 0023 0000000024 Funct Export Res
$LK,"OptIC4 ",A="FL:D:/Compiler/OptPass4.CPP.Z,1",BI=196$00000179AE 0001 00000005CD Funct Export Res
$LK,"OptIC6 ",A="FL:D:/Compiler/OptPass6.CPP.Z,1",BI=197$00000192C6 0001 0000000128 Funct Export Res
$LK,"OptLabelFwd ",A="FL:D:/Compiler/OptLib.CPP.Z,1",BI=198$000000AED6 0010 0000000028 Funct Export Res
$LK,"OptLag ",A="FL:D:/Compiler/OptLib.CPP.Z,40",BI=199$000000AFD6 000E 000000002A Funct Export Res
$LK,"OptLag1 ",A="FL:D:/Compiler/OptLib.CPP.Z,51",BI=200$000000B006 0006 0000000031 Funct Export Res
$LK,"OptLag2 ",A="FL:D:/Compiler/OptLib.CPP.Z,62",BI=201$000000B03E 0003 000000002A Funct Export Res
$LK,"OptLead1 ",A="FL:D:/Compiler/OptLib.CPP.Z,73",BI=202$000000B06E 0004 0000000030 Funct Export Res
$LK,"OptMVCompare ",A="FL:D:/Compiler/OptLib.CPP.Z,576",BI=203$000000BD96 0001 000000001A Funct Export Res
$LK,"OptOff ",A="FL:D:/Compiler/ICLCC.CPP.Z,11",BI=204$00000027F8 0000 0000000016 Funct Export Res
$LK,"OptOn ",A="FL:D:/Compiler/ICLCC.CPP.Z,6",BI=205$00000027E0 0000 0000000016 Funct Export Res
$LK,"OptPass012 ",A="FL:D:/Compiler/OptPass012.CPP.Z,23",BI=206$0000013B76 0000 00000027CC Funct Export Res
$LK,"OptPass3 ",A="FL:D:/Compiler/OptPass3.CPP.Z,1",BI=207$0000016346 0000 0000001663 Funct Export Res
$LK,"OptPass4 ",A="FL:D:/Compiler/OptPass4.CPP.Z,171",BI=208$0000017F7E 0000 0000000F05 Funct Export Res
$LK,"OptPass5 ",A="FL:D:/Compiler/OptPass5.CPP.Z,1",BI=209$0000018E86 0000 000000043F Funct Export Res
$LK,"OptPass6 ",A="FL:D:/Compiler/OptPass6.CPP.Z,112",BI=210$0000019716 0000 00000004EA Funct Export Res
$LK,"OptPass6Lag ",A="FL:D:/Compiler/OptPass6.CPP.Z,28",BI=211$00000193EE 0001 0000000327 Funct Export Res
$LK,"OptPass789 ",A="FL:D:/Compiler/OptPass789.CPP.Z,1",BI=212$000002620E 0000 0000002E9E Funct Export Res
$LK,"OptSetNOP1 ",A="FL:D:/Compiler/OptLib.CPP.Z,17",BI=213$000000AF2E 0079 000000003A Funct Export Res
$LK,"OptSetNOP2 ",A="FL:D:/Compiler/OptLib.CPP.Z,25",BI=214$000000AF6E 000D 000000003C Funct Export Res
$LK,"PE_CHECK_BINARY_OPS1",A="FL:D:/Compiler/ExpParser.CPP.Z,43"$5 0001 0000000008 DefineStr
$LK,"PE_CHECK_BINARY_OPS2",A="FL:D:/Compiler/ExpParser.CPP.Z,44"$6 0001 0000000008 DefineStr
$LK,"PE_DEREFERENCE ",A="FL:D:/Compiler/ExpParser.CPP.Z,42"$4 0003 0000000008 DefineStr
$LK,"PE_DO_BINARY_OP ",A="FL:D:/Compiler/ExpParser.CPP.Z,46"$8 0001 0000000008 DefineStr
$LK,"PE_DO_UNARY_OP ",A="FL:D:/Compiler/ExpParser.CPP.Z,45"$7 0001 0000000008 DefineStr
$LK,"PE_MAYBE_MODIFIERS ",A="FL:D:/Compiler/ExpParser.CPP.Z,40"$2 000A 0000000008 DefineStr
$LK,"PE_POP_ALL1 ",A="FL:D:/Compiler/ExpParser.CPP.Z,49"$11 0001 0000000008 DefineStr
$LK,"PE_POP_ALL2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,50"$12 0001 0000000008 DefineStr
$LK,"PE_POP_HIGHER ",A="FL:D:/Compiler/ExpParser.CPP.Z,47"$9 0001 0000000008 DefineStr
$LK,"PE_PUSH_LOWER ",A="FL:D:/Compiler/ExpParser.CPP.Z,48"$10 0001 0000000008 DefineStr
$LK,"PE_UNARY_MODIFIERS ",A="FL:D:/Compiler/ExpParser.CPP.Z,41"$3 0009 0000000008 DefineStr
$LK,"PE_UNARY_TERM1 ",A="FL:D:/Compiler/ExpParser.CPP.Z,38"$0 0001 0000000008 DefineStr
$LK,"PE_UNARY_TERM2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,39"$1 0003 0000000008 DefineStr
$LK,"ParenWarning ",A="FL:D:/Compiler/ExpParser.CPP.Z,1",BI=215$000000BDB6 0004 000000004C Funct Export Res
$LK,"PrsAddOp ",A="FL:D:/Compiler/ExpParser.CPP.Z,52",BI=216$000000BEFE 0002 00000001EE Funct Export Res
$LK,"PrsArrayDims ",A="FL:D:/Compiler/StmtParser.CPP.Z,303",BI=217$000000FAAE 0001 000000012D Funct Export Res
$LK,"PrsAsmArg ",A="FL:D:/Compiler/Assembler.CPP.Z,428",BI=218$0000008470 0002 0000000424 Funct Export Res
$LK,"PrsAsmBlk ",A="FL:D:/Compiler/Assembler.CPP.Z,1277",BI=219$000000A5E6 0002 00000008ED Funct Export Res
$LK,"PrsAsmDefine ",A="FL:D:/Compiler/Assembler.CPP.Z,1188",BI=220$000000A286 0004 000000029D Funct Export Res
$LK,"PrsAsmImm ",A="FL:D:/Compiler/Assembler.CPP.Z,394",BI=221$0000008338 0006 0000000131 Funct Export Res
$LK,"PrsAsmInstruction ",A="FL:D:/Compiler/Assembler.CPP.Z,781",BI=222$000000918E 0001 00000010F3 Funct Export Res
$LK,"PrsBinFile ",A="FL:D:/Compiler/Assembler.CPP.Z,1261",BI=223$000000A526 0001 00000000BB Funct Export Res
$LK,"PrsClass ",A="FL:D:/Compiler/StmtParser.CPP.Z,785",BI=224$0000010B76 0002 0000000264 Funct Export Res
$LK,"PrsClassNew ",A="FL:D:/Compiler/StmtParser.CPP.Z,1",BI=225$000000EF56 0003 0000000068 Funct Export Res
$LK,"PrsDoWhile ",A="FL:D:/Compiler/StmtParser.CPP.Z,1281",BI=226$0000011F36 0001 0000000137 Funct Export Res
$LK,"PrsDotDotDot ",A="FL:D:/Compiler/StmtParser.CPP.Z,340",BI=227$000000FBDE 0001 0000000111 Funct Export Res
$LK,"PrsExpression ",A="FL:D:/Compiler/ExpParser.CPP.Z,298",BI=228$000000C756 0010 0000000149 Funct Export Res
$LK,"PrsExpression2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,102",BI=229$000000C0EE 0001 0000000667 Funct Export Res
$LK,"PrsFor ",A="FL:D:/Compiler/StmtParser.CPP.Z,1305",BI=230$000001206E 0001 0000000162 Funct Export Res
$LK,"PrsFun ",A="FL:D:/Compiler/StmtParser.CPP.Z,914",BI=231$0000010FC6 0001 00000003B7 Funct Export Res
$LK,"PrsFunCall ",A="FL:D:/Compiler/ExpParser.CPP.Z,409",BI=232$000000CBF6 0003 000000082D Funct Export Res
$LK,"PrsFunJoin ",A="FL:D:/Compiler/StmtParser.CPP.Z,851",BI=233$0000010DDE 0005 00000001E8 Funct Export Res
$LK,"PrsFunNew ",A="FL:D:/Compiler/StmtParser.CPP.Z,22",BI=234$000000EFBE 0001 0000000068 Funct Export Res
$LK,"PrsGlblInit ",A="FL:D:/Compiler/StmtParser.CPP.Z,263",BI=235$000000F8EE 0002 000000007C Funct Export Res
$LK,"PrsGlblVarLst ",A="FL:D:/Compiler/StmtParser.CPP.Z,976",BI=236$000001137E 0007 0000000991 Funct Export Res
$LK,"PrsIf ",A="FL:D:/Compiler/StmtParser.CPP.Z,1231",BI=237$0000011D16 0001 000000012C Funct Export Res
$LK,"PrsKeyWord ",A="FL:D:/Compiler/StmtParser.CPP.Z,45",BI=238$000000F056 000C 0000000040 Funct Export Res
$LK,"PrsNoUnusedWarn ",A="FL:D:/Compiler/StmtParser.CPP.Z,1553",BI=239$0000012A66 0001 000000008F Funct Export Res
$LK,"PrsOffsetOf ",A="FL:D:/Compiler/ExpParser.CPP.Z,379",BI=240$000000CAAE 0002 0000000148 Funct Export Res
$LK,"PrsPop ",A="FL:D:/Compiler/ExpParser.CPP.Z,13",BI=241$000000BE2E 0017 0000000022 Funct Export Res
$LK,"PrsPop2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,23",BI=242$000000BE8E 0001 000000002D Funct Export Res
$LK,"PrsPopDeref ",A="FL:D:/Compiler/ExpParser.CPP.Z,28",BI=243$000000BEBE 0004 000000003F Funct Export Res
$LK,"PrsPush ",A="FL:D:/Compiler/ExpParser.CPP.Z,8",BI=244$000000BE06 0017 0000000028 Funct Export Res
$LK,"PrsPush2 ",A="FL:D:/Compiler/ExpParser.CPP.Z,18",BI=245$000000BE56 0004 0000000033 Funct Export Res
$LK,"PrsSizeOf ",A="FL:D:/Compiler/ExpParser.CPP.Z,331",BI=246$000000C8A6 0001 0000000207 Funct Export Res
$LK,"PrsStatement ",A="FL:D:/Compiler/StmtParser.CPP.Z,1664",BI=247$0000012F66 0004 0000000C09 Funct Export Res
$LK,"PrsStaticInit ",A="FL:D:/Compiler/StmtParser.CPP.Z,272",BI=248$000000F96E 0002 000000013E Funct Export Res
$LK,"PrsStreamBlk ",A="FL:D:/Compiler/StmtParser.CPP.Z,1567",BI=249$0000012AF6 0000 00000001B2 Funct Export Res
$LK,"PrsSwitch ",A="FL:D:/Compiler/StmtParser.CPP.Z,1354",BI=250$00000121D6 0002 000000088F Funct Export Res
$LK,"PrsTryBlk ",A="FL:D:/Compiler/StmtParser.CPP.Z,1603",BI=251$0000012CAE 0001 00000002B7 Funct Export Res
$LK,"PrsType ",A="FL:D:/Compiler/StmtParser.CPP.Z,375",BI=252$000000FCF6 0002 000000039A Funct Export Res
$LK,"PrsUnaryModifier ",A="FL:D:/Compiler/ExpParser.CPP.Z,980",BI=253$000000E3B6 0000 0000000859 Funct Export Res
$LK,"PrsUnaryTerm ",A="FL:D:/Compiler/ExpParser.CPP.Z,617",BI=254$000000D426 0000 0000000F8E Funct Export Res
$LK,"PrsVarInit ",A="FL:D:/Compiler/StmtParser.CPP.Z,66",BI=255$000000F126 0001 00000004C8 Funct Export Res
$LK,"PrsVarInit2 ",A="FL:D:/Compiler/StmtParser.CPP.Z,181",BI=256$000000F5EE 0004 00000002FE Funct Export Res
$LK,"PrsVarLst ",A="FL:D:/Compiler/StmtParser.CPP.Z,469",BI=257$0000010096 0006 0000000ADC Funct Export Res
$LK,"PrsWhile ",A="FL:D:/Compiler/StmtParser.CPP.Z,1259",BI=258$0000011E46 0001 00000000EF Funct Export Res
$LK,"SLASH_OP_DEC ",A="FL:D:/Compiler/BackLib.CPP.Z,262"$0x052B0000 0006 0000000018 DefineStr
$LK,"SLASH_OP_DIV ",A="FL:D:/Compiler/BackLib.CPP.Z,267"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_FADD ",A="FL:D:/Compiler/BackLib.CPP.Z,271"$0x0000C1DE 0002 0000000018 DefineStr
$LK,"SLASH_OP_FDIV ",A="FL:D:/Compiler/BackLib.CPP.Z,275"$0x0000F9DE 0002 0000000018 DefineStr
$LK,"SLASH_OP_FDIVR ",A="FL:D:/Compiler/BackLib.CPP.Z,276"$0x0000F1DE 0003 0000000018 DefineStr
$LK,"SLASH_OP_FILD ",A="FL:D:/Compiler/BackLib.CPP.Z,280"$0x00000000 0002 0000000018 DefineStr
$LK,"SLASH_OP_FISTTP ",A="FL:D:/Compiler/BackLib.CPP.Z,279"$0x00000000 0002 0000000018 DefineStr
$LK,"SLASH_OP_FLD ",A="FL:D:/Compiler/BackLib.CPP.Z,277"$0x00000000 0008 0000000018 DefineStr
$LK,"SLASH_OP_FMUL ",A="FL:D:/Compiler/BackLib.CPP.Z,274"$0x0000C9DE 0002 0000000018 DefineStr
$LK,"SLASH_OP_FSTP ",A="FL:D:/Compiler/BackLib.CPP.Z,278"$0x00000000 000D 0000000018 DefineStr
$LK,"SLASH_OP_FSUB ",A="FL:D:/Compiler/BackLib.CPP.Z,272"$0x0000E9DE 0002 0000000018 DefineStr
$LK,"SLASH_OP_FSUBR ",A="FL:D:/Compiler/BackLib.CPP.Z,273"$0x0000E1DE 0003 0000000018 DefineStr
$LK,"SLASH_OP_IMUL ",A="FL:D:/Compiler/BackLib.CPP.Z,266"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_INC ",A="FL:D:/Compiler/BackLib.CPP.Z,261"$0x00030000 0004 0000000018 DefineStr
$LK,"SLASH_OP_MOV ",A="FL:D:/Compiler/BackLib.CPP.Z,268"$0x00000000 0002 0000000018 DefineStr
$LK,"SLASH_OP_MUL ",A="FL:D:/Compiler/BackLib.CPP.Z,265"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_NEG ",A="FL:D:/Compiler/BackLib.CPP.Z,264"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_NOT ",A="FL:D:/Compiler/BackLib.CPP.Z,263"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_POP ",A="FL:D:/Compiler/BackLib.CPP.Z,270"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_PUSH ",A="FL:D:/Compiler/BackLib.CPP.Z,269"$0x00000000 0001 0000000018 DefineStr
$LK,"StrMatchBits ",A="FL:D:/Compiler/Unassembler.CPP.Z,225",BI=259$0000000EC8 0002 0000000073 Funct Export Res
$LK,"StreamExePrint ",A="FL:D:/Compiler/CmpMain.CPP.Z,700",BI=260$000002C8EA 0000 00000000EC Funct Export Res
$LK,"StreamPrint ",A="FL:D:/Compiler/CmpMain.CPP.Z,1",BI=261$000002AD92 0000 00000000A8 Funct Export Res
$LK,"U ",A="FL:D:/Compiler/Unassembler.CPP.Z,643",BI=262$0000002600 0000 00000000CF Funct Export Res
$LK,"UasmHashLoad ",A="FL:D:/Compiler/Unassembler.CPP.Z,187",BI=263$0000000DB8 0001 0000000110 Funct Export Res
$LK,"Ui ",A="FL:D:/Compiler/Unassembler.CPP.Z,238",BI=264$0000000F40 0002 00000016C0 Funct Export Res
$LK,"Un ",A="FL:D:/Compiler/Unassembler.CPP.Z,658",BI=265$00000026D0 0008 00000000DA Funct Export Res
$LK,"UndefinedExtern ",A="FL:D:/Compiler/StmtParser.CPP.Z,54",BI=266$000000F096 0001 0000000048 Funct Export Res
$LK,"UnusedExternWarning ",A="FL:D:/Compiler/StmtParser.CPP.Z,60",BI=267$000000F0DE 0004 0000000043 Funct Export Res
$LK,"asm_seg_prefixes ",A="FL:D:/Compiler/Assembler.CPP.Z,779"$0000009188 0001 0000000006 GlbVar Export
$LK,"cmp ",A="FL:D:/Compiler/Compiler.PRJ.Z,13"$00000004E0 00E2 0000000229 GlbVar Export
$LK,"cmp_templates ",A="FL:D:/Compiler/CmpExts.CPP.Z,37"$0000000000 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_pop",A="FL:D:/Compiler/CmpExts.CPP.Z,38"$000000018B 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push",A="FL:D:/Compiler/CmpExts.CPP.Z,40"$0000000257 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push2",A="FL:D:/Compiler/CmpExts.CPP.Z,39"$0000000421 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push_pop",A="FL:D:/Compiler/CmpExts.CPP.Z,41"$0000000391 0002 0000000004 GlbVar Export
$LK,"cmp_type_flags_src_code",A="FL:D:/Compiler/Lex.CPP.Z,390"$0000004A68 0001 0000000008 GlbVar Export
$LK,"internal_types_table",A="FL:D:/Compiler/CmpInit.CPP.Z,8"$00000290B0 0001 00000000AA GlbVar Export
$LK,"lex_zeros ",A="FL:D:/Compiler/Lex.CPP.Z,129"$0000003E48 000A 0000000004 GlbVar Export
$LK,"uasm ",A="FL:D:/Compiler/Compiler.PRJ.Z,14"$0000000710 001C 0000000028 GlbVar Export
ÈŠ00HS^gory}†—›¡¯ÌÙèíùþ€€€€#€€3€<€K€C€[€d€j€j€x€{€�€˜€¡€¨€¬€±€¼€É€×€ó€ÿ€ÿ€�(�(�/�K�W�_�r�y���–���¡�¬�±�¸�Õ�‚ ‚␍‚‚‚&‚*‚?‚A‚R‚\‚g‚q‚€‚�‚«‚«‚¯‚´‚4ƒ0DÌš“š“°“Ó˓ٓù“”
””,”?”P”V”k”‰”‰”ž”£”«”³”¹”Ñ”ä”ï”ó”ý”•••'•)•;•;•B•F•J•X•k•o•x•�•‘•‘•¤•·•½•Á•Ê•ç•ë•ë•ë•ë•ð•–– –.–I–Y–i–n–n–n–z–‚–Š–�–¥–­–»–Å–Ó–Ù–Û–Û–Û–Û–Û–Û–Û–Û–Û–ç–ï–÷–ý–———&—4—:—:—:—L—R—^—d—q—Œ—œ—¨—®—»—Í—Û—ú—˜Y™`½Ñ{{{{#{+{6{A{L{N{f{f{x{„{�{�{¿{ˆ =pupu„u‹u’u–uºuÍuÔuåu
vv v"v-vRv]vhvjvqvzv|v‡vŽv˜v¸v˜ú~~ ~'~.~1~:~=~@~D~I~i~V~y~�~‰~Œ~Ž~ž~§~°~¶~¹~Ê~á~ò~ý~/ˆ9—˜ˆ˜ˆ²ˆ¹ˆÄˆãˆõˆ‰‰+‰=‰J‰J‰O‰V‰l‰~‰ƒ‰ž‰­‰¼‰Ë‰Ú‰ç‰ç‰ç‰ŠŠŠ/Š3ŠAŠPŠUŠUŠ\ŠrŠƒŠ…Š›Š³Š³Š³ŠÉŠÔŠêŠõŠ
‹‹'‹,‹D‹X‹]‹r‹w‹�‹”‹¬‹±‹É‹Î‹æ‹è‹ŒŒŒŒ*Œ1ŒGŒGŒbŒzŒ’ŒªŒÀŒÀŒÜŒØDZ‘Z‘n‘n‘”‘”‘±‘µ‘º‘º‘º‘Ƒˑۑà‘à‘à‘å‘å‘û‘’’#’,’<’E’G’G’G’G’N’U’\’c’j’q’x’’†’†’ˆ’ˆ’Ž’“’•“´ÑúÀ{À{ã{ð{õ{ù{|||&|1|9|D|L|O|[|c|}|£|�|³|¼|ñ|Ý|}}}$}@}G}k}¤}¤}¤}¤}~ ¬Z�ÀwÀwÖwÝwäwòwxxxx$x4x?xIxTxkxnxpx‚xˆx˜x¢x¬x³x¾xÓxÛxÛxñxñxñxy
¬�¨yyy%y,y:yKy]y_yfyly|y‡y‘yœy³y¶y¸yÊyÑyáyëyõyüyzz#z#z9z9z9zNz „=Z¸v¸vÑvØvßvævìvüvwww3w6w8wSw]wgwnwyw‹w“w“w©w©w»w d¨½PzPzpzwzzŠz”zŸz§z¶zÀzÃzçzézùzùz{␍à— àŒàŒ� �#�/�:�L�L�}�˜�¤�«�±�½�Ç�Î�Õ�Ù�Û�á�í�÷�þ�Ž Ž ŽŽŽ#Ž5Ž5ŽfŽ‡Ž“ŽšŽ Ž¬Ž¶Ž½ŽÄŽÈŽÊŽÐŽÜŽæŽíŽôŽøŽøŽ��#�5�5�f�‡�“�š� �¬��½�Ä�È�Ê�Ð�Ü�æ�í�ô�ø�ø���$�$�U�\�b�n�x��†�Š�Œ�’�ž�¨�¯��º�º�Ä�Û�ô�‘‘‘‘‘†‘ˆ `t`t“tŸt§t¯t³t·tÂtÆtÊtÎtÖtÛtßtðtuuuu)u6uIuPuZuZuZuZulu$!&˜(˜(¢(ª(¯(lÇ^2¿2¿K¿c¿s¿“¿¥¿½¿Ø¿Ø¿À
ÀÀÀÀÀ$À'À.À4À;ÀAÀEÀJÀTÀeÀlÀsÀuÀyÀ‚ÀŒÀ�ÀšÀ¦À©ÀºÀÅÀËÀÒÀÛÀôÀÁÁÁ Á*Á5ÁAÁRÁcÁoÁ}ÁÁ†Á�Á’Á–Á£ÁªÁÍÁÛÁåÁïÁøÁÂ"Â+Â4Â<ÂEÂKÂOÂTÂXÂeÂlÂz„™£¬ÂÅÂÖÂßÂèÂðÂùÂÿÂÃÃÃÃ"Ã>ÃLÃRÃWÃ_ÃgÃoÃ|ÄÖõþÃÙÃíÃíà ÄÄÄ%Ä,Ä5Ä>ÄGÄPÄpÄtÄÎÄTª»úµúµ#¶%¶3¶9¶W¶f¶u¶„¶’¶� ¶°¶()/æ¼æ¼ô¼ ½½½½</:½½2½@½F½^½d½~½„½Š½Š½’½ ¼`r¨r¨€¨�¨ ¨°¨À¨Шã¨ö¨©©'©=©O©Q©c©e©w©w©‰©‰©›©¹©¾©Ωä©ì©ö©ªª#ª9ªAªKªcªhªxªˆªžª¦ª°ªȪÔªܪæªöªûª««%«/«9«C«M«W«a«k«u««‰«“«©«³«½«Ç«Ñ«Û«å«ï«ù«¬¬#¬9¬C¬M¬W¬a¬k¬u¬¬‰¬“¬�¬§¬±¬»¬ŬϬÙ¬ã¬í¬÷¬­ ­­ ­)­3­=­G­Q­[­e­Œ­D:ÇB»B»`»k»|»»ƒ»Œ»“»¡»°»Æ»Æ»Õ»×»×»æ»è»è»ø»ú»ú»
¼ ¼ ¼¼¼¼(¼*¼*¼9¼;¼;¼J¼J¼X¼\¼`¼e¼i¼v¼}¼‹¼Ÿ¼¨¼®¼¼¼Õ¼×¼Û¼å¼å¼ê¼ê¼ê¼ï¼ï¼þ¼½½%½%½%½*½*½?½K½V½[½[½^½c½c½½‹½˜½š½š½ž½ ½ ½¼½ȽÔ½Ö½Ö½Ù½Û½Û½è½ê½ê½í½í½ö½ü½¾¾¾¾¾¾¾¾¾¾¾¾¾ ¾ ¾.¾0¾0¾@¾B¾B¾O¾Q¾Q¾`¾`¾d¾d¾l¾ˆ¾Œ¾‘¾,¿ »:²¶²¶̶×Ûäëò··*·<·N·]·l·}·Œ·Œ·“·—· ·­·´·½·Ä·È·è·è·è·è·è·ô·ø·û·¸¸¸&¸.¸6¸G¸R¸W¸W¸d¸j¸y¸�¸’¸�¸ª¸¹¸¼¸¾¸Ö¸í¸ï¸ý¸ÿ¸␍¹¹¹¹¹-¹4¹J¹J¹J¹O¹O¹d¹r¹}¹‚¹‚¹…¹йй¦¹´¹Á¹ùùǹɹɹå¹ó¹ÿ¹ººººººººººººº!º'º+º7ºWºdºrºyºA»XÎàÚÉÚÉÞÉéÉôÉÿÉÊ ÊÊ'Ê8ÊFÊOÊTÊYÊ[Êø0ªr¯r¯z¯‰¯�¯š¯§¯»¯ʯê¯÷¯ °+°K°Y°u°‡°Ÿ°¶°Á°â°±±*±5±P±i±i±„±­±DZâ±ô±²²²²0²A²T²d²q²|²‹²«²«²·²·²·²ȲÕ²ܲû²³³³³(³@³X³a³q³y³~³‘³µ³ųÕ³à³ô³ù³´'´)´4´g´�´�´™´¨´°´¿´È´дâ´µ µµµµ.µFµ^µvµ޵ µ·µÀµɵÛµéµíµôµÐ̼Z™Z™c™^™^™m™|™|™‹™‹™š™š™©™©™¸™¸™Ç™Ö™å™ô™ô™šš&š!š!š0šr¨Ü9î³î³´´N´_´_´z´€´…´…´ ´¦´«´«´´´´δÕ´Û´à´#µ-µ4µ:µ<µ<µOµUµUµUµZµvµ…µ—µœµœµœµ£µªµ±µƵ͵éµéµûµDS`ž°ž°²°º°Ç°Ñ°Ü°ä°˜#Ø8Ø8ë8ö8 9P9a9s9z9�9•9œ9ª9³9Ë9Ú9ç9ê9:: :":.:::>:L:S:V:�:4†¼†¼�¼”¼�¼¤¼¦¼«¼<)®¼®¼·¼¼¼Ê¼Ó¼Ú¼Ü¼á¼ @9Eþµþµ"¶&¶*¶/¶1¶M¶i¶i¶s¶ $&+°(°(º(Â(Ç(!<Š•ÒÆÒÆëÆúÆÇÇ#Ç)Ç,ÇMÇ"<±¼jÈjȃȒȦȳȹȿÈÂÈãÈ#4�Š‚Æ‚Æ˜Æ«ÆºÆÀÆÃÆËÆ$4¨±"È"È8ÈKÈXÈ^ÈaÈiÈ%œ^�ÒÄÒÄÚÄÞÄûÄÅ!Å>Å_ÅhÅyÅ Å·Å·ÅÙÅèÅñÅþÅÆ7ÆDÆHÆPÆPÆcÆsÆwÆ{Æ&\•¨RÇRÇoǃÇ�ǚDZÇÎÇìÇòÇûÇ ÈÈÈÈ'$(((7(<((Œ XqXqhq‰q‰q—q—q—q—q q q§qÒqÚqÚqåqåqóqrrrrr/r/r5r[r)¤ E`r`rpryrŒr™r¥r±r½rÉràràrïrúrs
ss=sBsTscsos„s„s­s­s¯sÂsÄsÞsêsíst*LETtttt#t't,t6t:tHtQt\t+ð9VðVð€ðƒð†ðŒð‘ð¨ð¿ðÖðèðñ5ñ8ñQñhñzñ‡ñšñ­ñ²ñºñÄñÌñÌñÓñÜñÜñçñò)ò/òHòaòcò}òƒòœòµò½òÈòÈòÒòÒòäò"ó7óIó,E�†�†�¥�Á�Æ�ç�žž2žFž^žežjž‹ž©ž¸žÕžæžýžŸŸŸ
ŸŸŸŸ&Ÿ,ŸIŸLŸLŸLŸQŸWŸsŸ�Ÿ�Ÿ–ŸªŸ²Ÿ»ŸןâŸîŸ÷Ÿ         - -8ùƒ^ ^ � › Î ¨ Ô 




!
<
C
Q
S
$LK,"AsmGlblsResolve ",A="FL:C:/Compiler/Asm.CPP.Z,284",BI=1$0000008E88 0001 0000000432 Funct Export Res
$LK,"AsmHashLoad ",A="FL:C:/Compiler/CInit.CPP.Z,68",BI=2$000002A482 0001 00000005BD Funct Export Res
$LK,"AsmLexExpression ",A="FL:C:/Compiler/Asm.CPP.Z,189",BI=3$0000008A60 0004 00000000B7 Funct Export Res
$LK,"AsmLineLst ",A="FL:C:/Compiler/Asm.CPP.Z,31",BI=4$00000084C8 0001 0000000148 Funct Export Res
$LK,"AsmLocalsResolve ",A="FL:C:/Compiler/Asm.CPP.Z,250",BI=5$0000008D60 0003 0000000127 Funct Export Res
$LK,"AsmMakeArgMask ",A="FL:C:/Compiler/Asm.CPP.Z,567",BI=6$00000097F8 0002 0000000444 Funct Export Res
$LK,"AsmPrsInsFlags ",A="FL:C:/Compiler/CInit.CPP.Z,18",BI=7$000002A242 0001 000000023B Funct Export Res
$LK,"AsmResolve ",A="FL:C:/Compiler/Asm.CPP.Z,209",BI=8$0000008B18 0002 0000000245 Funct Export Res
$LK,"AsmStoreCodeU32 ",A="FL:C:/Compiler/Asm.CPP.Z,90",BI=9$0000008718 0001 0000000145 Funct Export Res
$LK,"AsmStoreCodeU64 ",A="FL:C:/Compiler/Asm.CPP.Z,129",BI=10$0000008860 0005 0000000146 Funct Export Res
$LK,"AsmStoreCodeU8 ",A="FL:C:/Compiler/Asm.CPP.Z,61",BI=11$0000008610 001D 0000000103 Funct Export Res
$LK,"AsmStoreCodeU8At ",A="FL:C:/Compiler/Asm.CPP.Z,168",BI=12$00000089A8 0007 00000000B7 Funct Export Res
$LK,"AsmStoreNum ",A="FL:C:/Compiler/Asm.CPP.Z,661",BI=13$0000009C40 0004 00000004A6 Funct Export Res
$LK,"AsmUnresolvedAdd ",A="FL:C:/Compiler/Asm.CPP.Z,1",BI=14$00000083B8 0004 000000010C Funct Export Res
$LK,"CInit ",A="FL:C:/Compiler/CMain.CPP.Z,695",BI=15$000002CF52 0001 000000006B Funct Export Res
$LK,"CInternalType ",A="FL:C:/Compiler/CInit.CPP.Z,3"$007FCC2180 0002 000000000A Class
$LK,"CMP_TEMPLATES ",A="FL:C:/Compiler/Templates.CPP.Z,5"$0000000000 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_POP",A="FL:C:/Compiler/Templates.CPP.Z,179"$000000018B 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:C:/Compiler/Templates.CPP.Z,268"$0000000257 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:C:/Compiler/Templates.CPP.Z,459"$0000000421 0001 ExportSysSym Export
$LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:C:/Compiler/Templates.CPP.Z,395"$0000000391 0001 ExportSysSym Export
$LK,"CN_A1 ",A="FL:C:/Compiler/BackFA.CPP.Z,2"$1 0006 0000000008 DefineStr
$LK,"CN_A2 ",A="FL:C:/Compiler/BackFA.CPP.Z,1"$0 0005 0000000008 DefineStr
$LK,"CN_MAIN ",A="FL:C:/Compiler/BackFA.CPP.Z,3"$2 0022 0000000008 DefineStr
$LK,"CN_R ",A="FL:C:/Compiler/BackFA.CPP.Z,4"$3 0003 0000000008 DefineStr
$LK,"COptMemberVar ",A="FL:C:/Compiler/OptLib.CPP.Z,544"$007FD8D750 0005 0000000028 Class
$LK,"CSubSwitch ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1343"$007FD98150 0004 0000000020 Class
$LK,"CSwitchCase ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1348"$007FD868F0 0004 0000000020 Class
$LK,"CTrace ",A="FL:C:/Compiler/CMisc.CPP.Z,33",BI=16$0000002818 0000 0000000017 Funct Export Res
$LK,"CVI2 ",A="FL:C:/Compiler/PrsStmt.CPP.Z,177"$007FD9A0C0 0003 0000000010 Class
$LK,"Cmp ",A="FL:C:/Compiler/CMain.CPP.Z,432",BI=17$000002C4AA 0000 000000059A Funct Export Res
$LK,"CmpBuf ",A="FL:C:/Compiler/CMain.CPP.Z,171",BI=18$000002BB72 0001 00000000B6 Funct Export Res
$LK,"CmpF1PushPop ",A="FL:C:/Compiler/OptLib.CPP.Z,527",BI=19$000000CCE6 0002 0000000042 Funct Export Res
$LK,"CmpF2PushPop ",A="FL:C:/Compiler/OptLib.CPP.Z,533",BI=20$000000CD2E 0005 0000000096 Funct Export Res
$LK,"CmpFillTables ",A="FL:C:/Compiler/CInit.CPP.Z,235",BI=21$000002AF3A 0001 00000003C3 Funct Export Res
$LK,"CmpFixUpAOTAsm ",A="FL:C:/Compiler/CMain.CPP.Z,315",BI=22$000002C0BA 0000 00000003EA Funct Export Res
$LK,"CmpFixUpJITAsm ",A="FL:C:/Compiler/CMain.CPP.Z,188",BI=23$000002BC2A 0000 000000048C Funct Export Res
$LK,"CmpJoin ",A="FL:C:/Compiler/CMain.CPP.Z,49",BI=24$000002B4EA 0001 0000000682 Funct Export Res
$LK,"CmpLoadDefines ",A="FL:C:/Compiler/CInit.CPP.Z,204",BI=25$000002AA42 0001 00000004F1 Funct Export Res
$LK,"CmpNoteFloatOp ",A="FL:C:/Compiler/BackFA.CPP.Z,6",BI=26$000001C43E 000E 000000020D Funct Export Res
$LK,"CmpOffset2Reg ",A="FL:C:/Compiler/OptLib.CPP.Z,83",BI=27$000000C05E 0005 0000000046 Funct Export Res
$LK,"CmpPrompt ",A="FL:C:/Compiler/Lex.CPP.Z,1",BI=28$0000004A69 0001 00000001B5 Funct Export Res
$LK,"CmpRawType ",A="FL:C:/Compiler/OptLib.CPP.Z,507",BI=29$000000CC8E 0006 0000000025 Funct Export Res
$LK,"CmpRawTypePointed ",A="FL:C:/Compiler/OptLib.CPP.Z,516",BI=30$000000CCB6 0005 0000000030 Funct Export Res
$LK,"CmpSetFloatOpPushPop",A="FL:C:/Compiler/BackFA.CPP.Z,57",BI=31$000001C64E 000C 0000000075 Funct Export Res
$LK,"Echo ",A="FL:C:/Compiler/CMisc.CPP.Z,38",BI=32$0000002830 0000 0000000017 Funct Export Res
$LK,"ExeFile ",A="FL:C:/Compiler/CMain.CPP.Z,627",BI=33$000002CC4A 0000 000000007B Funct Export Res
$LK,"ExeFile2 ",A="FL:C:/Compiler/CMain.CPP.Z,666",BI=34$000002CDE2 0000 0000000079 Funct Export Res
$LK,"ExePrint ",A="FL:C:/Compiler/CMain.CPP.Z,618",BI=35$000002CBFA 0000 0000000049 Funct Export Res
$LK,"ExePrint2 ",A="FL:C:/Compiler/CMain.CPP.Z,657",BI=36$000002CD9A 0000 0000000047 Funct Export Res
$LK,"ExePutS ",A="FL:C:/Compiler/CMain.CPP.Z,583",BI=37$000002CA4A 0003 00000001A9 Funct Export Res
$LK,"ExePutS2 ",A="FL:C:/Compiler/CMain.CPP.Z,638",BI=38$000002CCCA 0002 00000000CC Funct Export Res
$LK,"FBO1_F64 ",A="FL:C:/Compiler/OptLib.CPP.Z,94"$2 0002 0000000008 DefineStr
$LK,"FBO1_INT ",A="FL:C:/Compiler/OptLib.CPP.Z,93"$1 0013 0000000008 DefineStr
$LK,"FBO1_NOT_CONST ",A="FL:C:/Compiler/OptLib.CPP.Z,92"$0 0005 0000000008 DefineStr
$LK,"GetOpt ",A="FL:C:/Compiler/CMisc.CPP.Z,16",BI=39$0000002790 0004 000000002C Funct Export Res
$LK,"HashEntrySize ",A="FL:C:/Compiler/CHash.CPP.Z,1",BI=40$0000008098 0000 0000000103 Funct Export Res
$LK,"HashEntrySize2 ",A="FL:C:/Compiler/CHash.CPP.Z,32",BI=41$00000081A0 0002 00000001A1 Funct Export Res
$LK,"HashTableSize2 ",A="FL:C:/Compiler/CHash.CPP.Z,69",BI=42$0000008348 0000 000000006F Funct Export Res
$LK,"ICAddEct ",A="FL:C:/Compiler/BackA.CPP.Z,1",BI=43$00000200A6 0005 00000002F3 Funct Export Res
$LK,"ICAddRSP ",A="FL:C:/Compiler/BackLib.CPP.Z,69",BI=44$000001ADD6 0017 00000002A7 Funct Export Res
$LK,"ICAddSubEctEqual ",A="FL:C:/Compiler/BackA.CPP.Z,501",BI=45$00000219AE 0005 0000000673 Funct Export Res
$LK,"ICAddSubEctImm ",A="FL:C:/Compiler/BackA.CPP.Z,57",BI=46$000002039E 000D 0000000685 Funct Export Res
$LK,"ICAndAnd ",A="FL:C:/Compiler/BackB.CPP.Z,30",BI=47$000002264E 0001 000000014B Funct Export Res
$LK,"ICAndBranch ",A="FL:C:/Compiler/BackC.CPP.Z,1",BI=48$00000249C6 0002 00000006E6 Funct Export Res
$LK,"ICAndEqual ",A="FL:C:/Compiler/BackC.CPP.Z,675",BI=49$00000268A6 0001 000000010D Funct Export Res
$LK,"ICArgPut ",A="FL:C:/Compiler/CMisc.CPP.Z,267",BI=50$0000003B19 0003 00000002D6 Funct Export Res
$LK,"ICAssign ",A="FL:C:/Compiler/BackC.CPP.Z,159",BI=51$00000250AE 0001 0000000301 Funct Export Res
$LK,"ICAssignPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,534",BI=52$0000023C9E 0002 000000020D Funct Export Res
$LK,"ICBitOps ",A="FL:C:/Compiler/BackB.CPP.Z,244",BI=53$0000022F46 0007 00000004F1 Funct Export Res
$LK,"ICBrBitOps ",A="FL:C:/Compiler/BackC.CPP.Z,207",BI=54$00000253B6 0008 00000009FB Funct Export Res
$LK,"ICBuiltInFloatConst ",A="FL:C:/Compiler/BackLib.CPP.Z,420",BI=55$000001B916 000F 00000000BD Funct Export Res
$LK,"ICClassPut ",A="FL:C:/Compiler/CMisc.CPP.Z,243",BI=56$0000003A49 0001 00000000D0 Funct Export Res
$LK,"ICCmp ",A="FL:C:/Compiler/BackB.CPP.Z,124",BI=57$0000022A5E 0006 00000004E6 Funct Export Res
$LK,"ICCmpAndBranch ",A="FL:C:/Compiler/BackB.CPP.Z,575",BI=58$0000023EAE 000C 000000081A Funct Export Res
$LK,"ICCopyTemplate ",A="FL:C:/Compiler/BackFA.CPP.Z,69",BI=59$000001C6C6 0013 000000021D Funct Export Res
$LK,"ICDeref ",A="FL:C:/Compiler/BackLib.CPP.Z,656",BI=60$000001C37E 0001 00000000B9 Funct Export Res
$LK,"ICDerefPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,491",BI=61$0000023AA6 0002 00000001F1 Funct Export Res
$LK,"ICDiv ",A="FL:C:/Compiler/BackA.CPP.Z,409",BI=62$00000214DE 0001 00000000F1 Funct Export Res
$LK,"ICDivEqual ",A="FL:C:/Compiler/BackA.CPP.Z,428",BI=63$00000215D6 0002 00000002DE Funct Export Res
$LK,"ICFAdd ",A="FL:C:/Compiler/BackFB.CPP.Z,633",BI=64$000001FA66 0001 00000001FF Funct Export Res
$LK,"ICFCmp ",A="FL:C:/Compiler/BackFA.CPP.Z,549",BI=65$000001DA3E 0004 000000018B Funct Export Res
$LK,"ICFCmpAndBranch ",A="FL:C:/Compiler/BackFB.CPP.Z,325",BI=66$000001EE9E 0004 00000009F7 Funct Export Res
$LK,"ICFCvt ",A="FL:C:/Compiler/BackFA.CPP.Z,115",BI=67$000001C8E6 000C 000000017F Funct Export Res
$LK,"ICFCvt2 ",A="FL:C:/Compiler/BackFA.CPP.Z,163",BI=68$000001CA66 0010 0000000116 Funct Export Res
$LK,"ICFDiv ",A="FL:C:/Compiler/BackFB.CPP.Z,621",BI=69$000001F9B6 0001 00000000A9 Funct Export Res
$LK,"ICFMod ",A="FL:C:/Compiler/BackFA.CPP.Z,241",BI=70$000001CD5E 0001 0000000145 Funct Export Res
$LK,"ICFModEqual ",A="FL:C:/Compiler/BackFA.CPP.Z,589",BI=71$000001DBCE 0001 00000003D7 Funct Export Res
$LK,"ICFMul ",A="FL:C:/Compiler/BackFB.CPP.Z,603",BI=72$000001F896 0001 000000011B Funct Export Res
$LK,"ICFOp ",A="FL:C:/Compiler/BackFA.CPP.Z,350",BI=73$000001D19E 0004 000000089D Funct Export Res
$LK,"ICFOpEqual ",A="FL:C:/Compiler/BackFB.CPP.Z,1",BI=74$000001DFA6 0004 0000000EF7 Funct Export Res
$LK,"ICFPostIncDec ",A="FL:C:/Compiler/BackFB.CPP.Z,716",BI=75$000001FE9E 0002 0000000151 Funct Export Res
$LK,"ICFPow ",A="FL:C:/Compiler/BackFA.CPP.Z,271",BI=76$000001CEA6 0001 00000002F7 Funct Export Res
$LK,"ICFPreIncDec ",A="FL:C:/Compiler/BackFB.CPP.Z,694",BI=77$000001FD8E 0002 000000010A Funct Export Res
$LK,"ICFSub ",A="FL:C:/Compiler/BackFB.CPP.Z,671",BI=78$000001FC66 0001 0000000124 Funct Export Res
$LK,"ICFTemplateFun ",A="FL:C:/Compiler/BackFB.CPP.Z,744",BI=79$000001FFF6 0007 00000000AA Funct Export Res
$LK,"ICFUnaryMinus ",A="FL:C:/Compiler/BackFA.CPP.Z,190",BI=80$000001CB7E 0001 00000001E0 Funct Export Res
$LK,"ICFlagBranch ",A="FL:C:/Compiler/BackB.CPP.Z,804",BI=81$00000248BE 0004 0000000106 Funct Export Res
$LK,"ICLastIns ",A="FL:C:/Compiler/BackLib.CPP.Z,59",BI=82$000001AD96 0002 0000000040 Funct Export Res
$LK,"ICLea ",A="FL:C:/Compiler/BackLib.CPP.Z,622",BI=83$000001C1CE 0004 00000001AA Funct Export Res
$LK,"ICLocalVarInit ",A="FL:C:/Compiler/BackC.CPP.Z,908",BI=84$00000272C6 0001 0000000078 Funct Export Res
$LK,"ICMinMax ",A="FL:C:/Compiler/BackC.CPP.Z,496",BI=85$000002617E 0004 00000002AB Funct Export Res
$LK,"ICMod ",A="FL:C:/Compiler/BackA.CPP.Z,482",BI=86$00000218B6 0001 00000000F1 Funct Export Res
$LK,"ICModU64 ",A="FL:C:/Compiler/BackC.CPP.Z,575",BI=87$000002647E 0001 00000001B7 Funct Export Res
$LK,"ICModr1 ",A="FL:C:/Compiler/BackLib.CPP.Z,140",BI=88$000001B07E 0017 00000002FE Funct Export Res
$LK,"ICModr2 ",A="FL:C:/Compiler/BackLib.CPP.Z,230",BI=89$000001B37E 0016 00000000A6 Funct Export Res
$LK,"ICMov ",A="FL:C:/Compiler/BackLib.CPP.Z,442",BI=90$000001B9D6 019A 00000007F4 Funct Export Res
$LK,"ICMul ",A="FL:C:/Compiler/BackA.CPP.Z,285",BI=91$0000020E1E 0001 00000002B8 Funct Export Res
$LK,"ICMulEqual ",A="FL:C:/Compiler/BackA.CPP.Z,342",BI=92$00000210D6 0001 0000000406 Funct Export Res
$LK,"ICNot ",A="FL:C:/Compiler/BackB.CPP.Z,10",BI=93$000002254E 0001 00000000FF Funct Export Res
$LK,"ICOpSizeRex ",A="FL:C:/Compiler/BackLib.CPP.Z,28",BI=94$000001ACAE 0006 0000000040 Funct Export Res
$LK,"ICOrEqual ",A="FL:C:/Compiler/BackC.CPP.Z,698",BI=95$00000269B6 0001 000000010D Funct Export Res
$LK,"ICOrOr ",A="FL:C:/Compiler/BackB.CPP.Z,59",BI=96$000002279E 0001 0000000162 Funct Export Res
$LK,"ICPop ",A="FL:C:/Compiler/BackLib.CPP.Z,361",BI=97$000001B71E 0009 00000000EA Funct Export Res
$LK,"ICPopRegs ",A="FL:C:/Compiler/BackLib.CPP.Z,388",BI=98$000001B80E 000C 0000000057 Funct Export Res
$LK,"ICPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,451",BI=99$00000238A6 0002 00000001FC Funct Export Res
$LK,"ICPreIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,415",BI=100$00000236CE 0004 00000001D8 Funct Export Res
$LK,"ICPreempt ",A="FL:C:/Compiler/BackB.CPP.Z,348",BI=101$000002343E 0001 0000000122 Funct Export Res
$LK,"ICPush ",A="FL:C:/Compiler/BackLib.CPP.Z,310",BI=102$000001B56E 001F 0000000152 Funct Export Res
$LK,"ICPushRegs ",A="FL:C:/Compiler/BackLib.CPP.Z,348",BI=103$000001B6C6 0006 0000000054 Funct Export Res
$LK,"ICPut ",A="FL:C:/Compiler/CMisc.CPP.Z,312",BI=104$0000003DF1 0008 00000003DD Funct Export Res
$LK,"ICQueInit ",A="FL:C:/Compiler/BackC.CPP.Z,384",BI=105$0000025DB6 0001 0000000070 Funct Export Res
$LK,"ICQueIns ",A="FL:C:/Compiler/BackC.CPP.Z,398",BI=106$0000025E26 0001 0000000162 Funct Export Res
$LK,"ICQueInsRev ",A="FL:C:/Compiler/BackC.CPP.Z,439",BI=107$0000025F8E 0001 0000000162 Funct Export Res
$LK,"ICQueRem ",A="FL:C:/Compiler/BackC.CPP.Z,480",BI=108$00000260F6 0001 0000000088 Funct Export Res
$LK,"ICRex ",A="FL:C:/Compiler/BackLib.CPP.Z,22",BI=109$000001AC7E 0016 000000002D Funct Export Res
$LK,"ICShift ",A="FL:C:/Compiler/BackA.CPP.Z,639",BI=110$0000022026 0004 00000001A3 Funct Export Res
$LK,"ICShiftEqual ",A="FL:C:/Compiler/BackA.CPP.Z,672",BI=111$00000221CE 0002 000000030E Funct Export Res
$LK,"ICSlashOp ",A="FL:C:/Compiler/BackLib.CPP.Z,282",BI=112$000001B426 0027 0000000145 Funct Export Res
$LK,"ICSqr ",A="FL:C:/Compiler/BackC.CPP.Z,568",BI=113$000002642E 0002 000000004A Funct Export Res
$LK,"ICSub ",A="FL:C:/Compiler/BackA.CPP.Z,207",BI=114$0000020A26 0001 00000003F5 Funct Export Res
$LK,"ICSwap ",A="FL:C:/Compiler/BackC.CPP.Z,617",BI=115$0000026636 0001 000000026E Funct Export Res
$LK,"ICSwitch ",A="FL:C:/Compiler/BackC.CPP.Z,744",BI=116$0000026BCE 0002 00000006F2 Funct Export Res
$LK,"ICTest ",A="FL:C:/Compiler/BackLib.CPP.Z,410",BI=117$000001B8C6 000C 000000004E Funct Export Res
$LK,"ICTestAndBranch ",A="FL:C:/Compiler/BackB.CPP.Z,756",BI=118$00000246CE 0002 00000001EC Funct Export Res
$LK,"ICToBool ",A="FL:C:/Compiler/BackB.CPP.Z,400",BI=119$0000023656 0001 0000000075 Funct Export Res
$LK,"ICToF64 ",A="FL:C:/Compiler/BackB.CPP.Z,395",BI=120$0000023616 0001 000000003D Funct Export Res
$LK,"ICToI64 ",A="FL:C:/Compiler/BackB.CPP.Z,390",BI=121$00000235D6 0001 000000003D Funct Export Res
$LK,"ICToUpper ",A="FL:C:/Compiler/BackB.CPP.Z,379",BI=122$0000023566 0001 000000006B Funct Export Res
$LK,"ICU16 ",A="FL:C:/Compiler/BackLib.CPP.Z,35",BI=123$000001ACEE 0092 0000000029 Funct Export Res
$LK,"ICU24 ",A="FL:C:/Compiler/BackLib.CPP.Z,41",BI=124$000001AD1E 0063 0000000026 Funct Export Res
$LK,"ICU32 ",A="FL:C:/Compiler/BackLib.CPP.Z,47",BI=125$000001AD46 0054 0000000026 Funct Export Res
$LK,"ICU64 ",A="FL:C:/Compiler/BackLib.CPP.Z,53",BI=126$000001AD6E 0009 0000000028 Funct Export Res
$LK,"ICU8 ",A="FL:C:/Compiler/BackLib.CPP.Z,17",BI=127$000001AC56 0063 0000000028 Funct Export Res
$LK,"ICUnaries ",A="FL:C:/Compiler/BackB.CPP.Z,1",BI=128$00000224DE 0002 0000000069 Funct Export Res
$LK,"ICXorEqual ",A="FL:C:/Compiler/BackC.CPP.Z,721",BI=129$0000026AC6 0001 0000000107 Funct Export Res
$LK,"ICXorXor ",A="FL:C:/Compiler/BackB.CPP.Z,91",BI=130$0000022906 0001 0000000155 Funct Export Res
$LK,"ICZero ",A="FL:C:/Compiler/BackLib.CPP.Z,401",BI=131$000001B866 0017 000000005E Funct Export Res
$LK,"InstEntriesCompare ",A="FL:C:/Compiler/UAsm.CPP.Z,1",BI=132$00000006F0 0001 00000002A9 Funct Export Res
$LK,"InstEntryFind ",A="FL:C:/Compiler/UAsm.CPP.Z,72",BI=133$00000009A0 0002 00000003C9 Funct Export Res
$LK,"IsLexExpression2Bin ",A="FL:C:/Compiler/PrsExp.CPP.Z,1153",BI=134$000000FCCE 0000 0000000029 Funct Export Res
$LK,"LCCAdd ",A="FL:C:/Compiler/CMisc.CPP.Z,396",BI=135$0000004249 00A9 000000009F Funct Export Res
$LK,"LCCAppend ",A="FL:C:/Compiler/CMisc.CPP.Z,435",BI=136$0000004371 0003 00000000A6 Funct Export Res
$LK,"LCCCompile ",A="FL:C:/Compiler/CMisc.CPP.Z,552",BI=137$00000047A1 0006 00000002C7 Funct Export Res
$LK,"LCCDel ",A="FL:C:/Compiler/CMisc.CPP.Z,495",BI=138$0000004591 0001 0000000164 Funct Export Res
$LK,"LCCFloatConstFind ",A="FL:C:/Compiler/CMisc.CPP.Z,473",BI=139$00000044C9 000F 00000000C6 Funct Export Res
$LK,"LCCGoToLabelFind ",A="FL:C:/Compiler/CMisc.CPP.Z,461",BI=140$0000004471 0006 0000000057 Funct Export Res
$LK,"LCCHeaderPut ",A="FL:C:/Compiler/CMisc.CPP.Z,538",BI=141$00000046F9 000C 00000000A2 Funct Export Res
$LK,"LCCInit ",A="FL:C:/Compiler/CMisc.CPP.Z,388",BI=142$0000004209 000A 000000003A Funct Export Res
$LK,"LCCMiscNew ",A="FL:C:/Compiler/CMisc.CPP.Z,452",BI=143$0000004419 0021 0000000055 Funct Export Res
$LK,"LCCPop ",A="FL:C:/Compiler/CMisc.CPP.Z,430",BI=144$0000004351 0008 000000001A Funct Export Res
$LK,"LCCPopNoFree ",A="FL:C:/Compiler/CMisc.CPP.Z,423",BI=145$0000004321 0003 000000002E Funct Export Res
$LK,"LCCPush ",A="FL:C:/Compiler/CMisc.CPP.Z,416",BI=146$00000042E9 000E 0000000037 Funct Export Res
$LK,"LCCQuePut ",A="FL:C:/Compiler/CMisc.CPP.Z,378",BI=147$00000041D1 0001 0000000038 Funct Export Res
$LK,"Lex ",A="FL:C:/Compiler/Lex.CPP.Z,694",BI=148$0000006548 00ED 0000001746 Funct Export Res
$LK,"LexAttachDoc ",A="FL:C:/Compiler/Lex.CPP.Z,389",BI=149$0000005BC8 0001 0000000163 Funct Export Res
$LK,"LexBackupLastChar ",A="FL:C:/Compiler/Lex.CPP.Z,131",BI=150$0000004FE0 0003 0000000041 Funct Export Res
$LK,"LexD2I32 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1198",BI=151$000000FDEE 0000 00000000A6 Funct Export Res
$LK,"LexD3I32 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1214",BI=152$000000FE96 0000 00000000D9 Funct Export Res
$LK,"LexDel ",A="FL:C:/Compiler/Lex.CPP.Z,66",BI=153$0000004D61 0004 00000000A5 Funct Export Res
$LK,"LexDocRead ",A="FL:C:/Compiler/Lex.CPP.Z,368",BI=154$0000005B38 0001 0000000085 Funct Export Res
$LK,"LexDollar ",A="FL:C:/Compiler/Lex.CPP.Z,142",BI=155$0000005028 0003 0000000070 Funct Export Res
$LK,"LexExcept ",A="FL:C:/Compiler/Lex.CPP.Z,1532",BI=156$0000007FA8 00B8 00000000ED Funct Export Res
$LK,"LexExpression ",A="FL:C:/Compiler/PrsExp.CPP.Z,1186",BI=157$000000FDAE 0002 000000003F Funct Export Res
$LK,"LexExpression2Bin ",A="FL:C:/Compiler/PrsExp.CPP.Z,1135",BI=158$000000FC36 0006 0000000094 Funct Export Res
$LK,"LexExpressionF64 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1172",BI=159$000000FD56 0000 0000000054 Funct Export Res
$LK,"LexExpressionI64 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1158",BI=160$000000FCFE 000A 0000000054 Funct Export Res
$LK,"LexExtStr ",A="FL:C:/Compiler/Lex.CPP.Z,1449",BI=161$0000007C90 0004 00000000C5 Funct Export Res
$LK,"LexFirstRem ",A="FL:C:/Compiler/Lex.CPP.Z,328",BI=162$00000059E0 0000 00000000BC Funct Export Res
$LK,"LexGetChar ",A="FL:C:/Compiler/Lex.CPP.Z,156",BI=163$0000005098 002C 0000000915 Funct Export Res
$LK,"LexInStr ",A="FL:C:/Compiler/Lex.CPP.Z,624",BI=164$00000062E8 0001 000000025B Funct Export Res
$LK,"LexIncludeStr ",A="FL:C:/Compiler/Lex.CPP.Z,350",BI=165$0000005AA0 0003 0000000098 Funct Export Res
$LK,"LexNew ",A="FL:C:/Compiler/Lex.CPP.Z,35",BI=166$0000004C21 0004 000000013D Funct Export Res
$LK,"LexPop ",A="FL:C:/Compiler/Lex.CPP.Z,446",BI=167$0000005DB8 0004 0000000074 Funct Export Res
$LK,"LexPush ",A="FL:C:/Compiler/Lex.CPP.Z,434",BI=168$0000005D30 000F 0000000081 Funct Export Res
$LK,"LexPutLine ",A="FL:C:/Compiler/Lex.CPP.Z,1474",BI=169$0000007D58 0003 000000009B Funct Export Res
$LK,"LexPutPos ",A="FL:C:/Compiler/Lex.CPP.Z,1502",BI=170$0000007DF8 0003 00000000CA Funct Export Res
$LK,"LexPutToken ",A="FL:C:/Compiler/Lex.CPP.Z,108",BI=171$0000004EA9 0001 000000012B Funct Export Res
$LK,"LexSize ",A="FL:C:/Compiler/Lex.CPP.Z,88",BI=172$0000004E09 0000 000000009B Funct Export Res
$LK,"LexSkipEol ",A="FL:C:/Compiler/Lex.CPP.Z,321",BI=173$00000059B0 0004 000000002B Funct Export Res
$LK,"LexStatement2Bin ",A="FL:C:/Compiler/CMain.CPP.Z,15",BI=174$000002B3AA 0001 0000000140 Funct Export Res
$LK,"LexWarn ",A="FL:C:/Compiler/Lex.CPP.Z,1516",BI=175$0000007EC8 0009 00000000D9 Funct Export Res
$LK,"MDR_D32_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,134"$3 0002 0000000008 DefineStr
$LK,"MDR_D8_INDIRECT_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,133"$2 0002 0000000008 DefineStr
$LK,"MDR_INDIRECT_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,132"$1 0002 0000000008 DefineStr
$LK,"MDR_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,131"$0 0002 0000000008 DefineStr
$LK,"MDR_RIP_REL ",A="FL:C:/Compiler/BackLib.CPP.Z,138"$7 0004 0000000008 DefineStr
$LK,"MDR_SIB_D32_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,137"$6 0003 0000000008 DefineStr
$LK,"MDR_SIB_D8_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,136"$5 0002 0000000008 DefineStr
$LK,"MDR_SIB_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,135"$4 0002 0000000008 DefineStr
$LK,"MemberAdd ",A="FL:C:/Compiler/Lex.CPP.Z,515",BI=176$0000005F68 0004 00000001B7 Funct Export Res
$LK,"MemberFind ",A="FL:C:/Compiler/Lex.CPP.Z,480",BI=177$0000005EB8 0005 0000000064 Funct Export Res
$LK,"MemberFind2 ",A="FL:C:/Compiler/Lex.CPP.Z,500",BI=178$0000005F20 0001 0000000044 Funct Export Res
$LK,"MemberLstDel ",A="FL:C:/Compiler/Lex.CPP.Z,563",BI=179$0000006120 0001 00000000F3 Funct Export Res
$LK,"MemberLstNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,38",BI=180$0000010046 0003 000000002A Funct Export Res
$LK,"MemberLstSize ",A="FL:C:/Compiler/Lex.CPP.Z,597",BI=181$0000006218 0002 00000000CF Funct Export Res
$LK,"MemberMetaData ",A="FL:C:/Compiler/Lex.CPP.Z,458",BI=182$0000005E30 0000 0000000041 Funct Export Res
$LK,"MemberMetaFind ",A="FL:C:/Compiler/Lex.CPP.Z,469",BI=183$0000005E78 0000 0000000040 Funct Export Res
$LK,"NUM_INTERNAL_TYPES ",A="FL:C:/Compiler/CInit.CPP.Z,1"$17 0002 0000000008 DefineStr
$LK,"OTrace ",A="FL:C:/Compiler/CMisc.CPP.Z,21",BI=184$00000027C0 0000 0000000017 Funct Export Res
$LK,"OTraceMask ",A="FL:C:/Compiler/CMisc.CPP.Z,26",BI=185$00000027D8 0000 0000000039 Funct Export Res
$LK,"OptBrNotZero ",A="FL:C:/Compiler/OptLib.CPP.Z,357",BI=186$000000C83E 0004 00000003B5 Funct Export Res
$LK,"OptBrZero ",A="FL:C:/Compiler/OptLib.CPP.Z,230",BI=187$000000C476 0006 00000003C4 Funct Export Res
$LK,"OptClassFwd ",A="FL:C:/Compiler/OptLib.CPP.Z,9",BI=188$000000BEC6 0013 0000000028 Funct Export Res
$LK,"OptEqu ",A="FL:C:/Compiler/CMisc.CPP.Z,1",BI=189$0000002730 0005 000000002E Funct Export Res
$LK,"OptFixSizeOf ",A="FL:C:/Compiler/OptLib.CPP.Z,484",BI=190$000000CBF6 0003 0000000098 Funct Export Res
$LK,"OptFixupBinaryOp1 ",A="FL:C:/Compiler/OptLib.CPP.Z,96",BI=191$000000C0A6 0013 00000002B0 Funct Export Res
$LK,"OptFixupBinaryOp2 ",A="FL:C:/Compiler/OptLib.CPP.Z,181",BI=192$000000C356 0001 0000000054 Funct Export Res
$LK,"OptFixupUnaryOp ",A="FL:C:/Compiler/OptLib.CPP.Z,195",BI=193$000000C3AE 0003 00000000C8 Funct Export Res
$LK,"OptFree ",A="FL:C:/Compiler/OptLib.CPP.Z,33",BI=194$000000BF6E 0024 0000000024 Funct Export Res
$LK,"OptIC4 ",A="FL:C:/Compiler/OptPass4.CPP.Z,1",BI=195$0000018AAE 0001 00000005CD Funct Export Res
$LK,"OptIC6 ",A="FL:C:/Compiler/OptPass6.CPP.Z,1",BI=196$000001A3EE 0001 0000000128 Funct Export Res
$LK,"OptLabelFwd ",A="FL:C:/Compiler/OptLib.CPP.Z,1",BI=197$000000BE9E 0010 0000000028 Funct Export Res
$LK,"OptLag ",A="FL:C:/Compiler/OptLib.CPP.Z,40",BI=198$000000BF96 000E 000000002A Funct Export Res
$LK,"OptLag1 ",A="FL:C:/Compiler/OptLib.CPP.Z,51",BI=199$000000BFC6 0006 0000000031 Funct Export Res
$LK,"OptLag2 ",A="FL:C:/Compiler/OptLib.CPP.Z,62",BI=200$000000BFFE 0003 000000002A Funct Export Res
$LK,"OptLead1 ",A="FL:C:/Compiler/OptLib.CPP.Z,73",BI=201$000000C02E 0003 0000000030 Funct Export Res
$LK,"OptMVCompare ",A="FL:C:/Compiler/OptLib.CPP.Z,550",BI=202$000000CDC6 0001 000000001A Funct Export Res
$LK,"OptOff ",A="FL:C:/Compiler/CMisc.CPP.Z,11",BI=203$0000002778 0000 0000000016 Funct Export Res
$LK,"OptOn ",A="FL:C:/Compiler/CMisc.CPP.Z,6",BI=204$0000002760 0000 0000000016 Funct Export Res
$LK,"OptPass012 ",A="FL:C:/Compiler/OptPass012.CPP.Z,23",BI=205$0000014BAE 0000 00000027E8 Funct Export Res
$LK,"OptPass3 ",A="FL:C:/Compiler/OptPass3.CPP.Z,1",BI=206$0000017396 0000 0000001717 Funct Export Res
$LK,"OptPass4 ",A="FL:C:/Compiler/OptPass4.CPP.Z,171",BI=207$000001907E 0000 0000000F16 Funct Export Res
$LK,"OptPass5 ",A="FL:C:/Compiler/OptPass5.CPP.Z,1",BI=208$0000019F96 0000 0000000457 Funct Export Res
$LK,"OptPass6 ",A="FL:C:/Compiler/OptPass6.CPP.Z,111",BI=209$000001A84E 0000 0000000402 Funct Export Res
$LK,"OptPass6Lag ",A="FL:C:/Compiler/OptPass6.CPP.Z,28",BI=210$000001A516 0001 0000000338 Funct Export Res
$LK,"OptPass789A ",A="FL:C:/Compiler/OptPass789A.CPP.Z,1",BI=211$000002733E 0000 0000002E58 Funct Export Res
$LK,"OptSetNOP1 ",A="FL:C:/Compiler/OptLib.CPP.Z,17",BI=212$000000BEEE 0079 000000003A Funct Export Res
$LK,"OptSetNOP2 ",A="FL:C:/Compiler/OptLib.CPP.Z,25",BI=213$000000BF2E 000D 000000003C Funct Export Res
$LK,"PE_CHECK_BINARY_OPS1",A="FL:C:/Compiler/PrsExp.CPP.Z,43"$5 0001 0000000008 DefineStr
$LK,"PE_CHECK_BINARY_OPS2",A="FL:C:/Compiler/PrsExp.CPP.Z,44"$6 0001 0000000008 DefineStr
$LK,"PE_DEREFERENCE ",A="FL:C:/Compiler/PrsExp.CPP.Z,42"$4 0003 0000000008 DefineStr
$LK,"PE_DO_BINARY_OP ",A="FL:C:/Compiler/PrsExp.CPP.Z,46"$8 0001 0000000008 DefineStr
$LK,"PE_DO_UNARY_OP ",A="FL:C:/Compiler/PrsExp.CPP.Z,45"$7 0001 0000000008 DefineStr
$LK,"PE_MAYBE_MODIFIERS ",A="FL:C:/Compiler/PrsExp.CPP.Z,40"$2 000A 0000000008 DefineStr
$LK,"PE_POP_ALL1 ",A="FL:C:/Compiler/PrsExp.CPP.Z,49"$11 0001 0000000008 DefineStr
$LK,"PE_POP_ALL2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,50"$12 0001 0000000008 DefineStr
$LK,"PE_POP_HIGHER ",A="FL:C:/Compiler/PrsExp.CPP.Z,47"$9 0001 0000000008 DefineStr
$LK,"PE_PUSH_LOWER ",A="FL:C:/Compiler/PrsExp.CPP.Z,48"$10 0001 0000000008 DefineStr
$LK,"PE_UNARY_MODIFIERS ",A="FL:C:/Compiler/PrsExp.CPP.Z,41"$3 0009 0000000008 DefineStr
$LK,"PE_UNARY_TERM1 ",A="FL:C:/Compiler/PrsExp.CPP.Z,38"$0 0001 0000000008 DefineStr
$LK,"PE_UNARY_TERM2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,39"$1 0003 0000000008 DefineStr
$LK,"ParenWarning ",A="FL:C:/Compiler/PrsExp.CPP.Z,1",BI=214$000000CDE6 0004 000000004C Funct Export Res
$LK,"PrsAddOp ",A="FL:C:/Compiler/PrsExp.CPP.Z,52",BI=215$000000CF2E 0002 00000001EB Funct Export Res
$LK,"PrsArrayDims ",A="FL:C:/Compiler/PrsStmt.CPP.Z,305",BI=216$0000010ADE 0001 000000012D Funct Export Res
$LK,"PrsAsmArg ",A="FL:C:/Compiler/Asm.CPP.Z,430",BI=217$00000093F8 0004 00000003FE Funct Export Res
$LK,"PrsAsmBlk ",A="FL:C:/Compiler/Asm.CPP.Z,1278",BI=218$000000B55E 0002 000000093F Funct Export Res
$LK,"PrsAsmDefine ",A="FL:C:/Compiler/Asm.CPP.Z,1189",BI=219$000000B1FE 0004 000000029D Funct Export Res
$LK,"PrsAsmImm ",A="FL:C:/Compiler/Asm.CPP.Z,396",BI=220$00000092C0 0002 0000000131 Funct Export Res
$LK,"PrsAsmInstruction ",A="FL:C:/Compiler/Asm.CPP.Z,779",BI=221$000000A0EE 0001 0000001110 Funct Export Res
$LK,"PrsBinFile ",A="FL:C:/Compiler/Asm.CPP.Z,1262",BI=222$000000B49E 0001 00000000B9 Funct Export Res
$LK,"PrsClass ",A="FL:C:/Compiler/PrsStmt.CPP.Z,786",BI=223$0000011B9E 0002 0000000261 Funct Export Res
$LK,"PrsClassNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1",BI=224$000000FF76 0003 0000000068 Funct Export Res
$LK,"PrsDoWhile ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1283",BI=225$0000012F46 0001 0000000137 Funct Export Res
$LK,"PrsDotDotDot ",A="FL:C:/Compiler/PrsStmt.CPP.Z,342",BI=226$0000010C0E 0001 0000000111 Funct Export Res
$LK,"PrsExpression ",A="FL:C:/Compiler/PrsExp.CPP.Z,298",BI=227$000000D7DE 0010 000000014C Funct Export Res
$LK,"PrsExpression2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,102",BI=228$000000D11E 0001 00000006BB Funct Export Res
$LK,"PrsFor ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1306",BI=229$000001307E 0001 0000000162 Funct Export Res
$LK,"PrsFun ",A="FL:C:/Compiler/PrsStmt.CPP.Z,915",BI=230$0000011FEE 0001 00000003C9 Funct Export Res
$LK,"PrsFunCall ",A="FL:C:/Compiler/PrsExp.CPP.Z,409",BI=231$000000DC7E 0003 000000082D Funct Export Res
$LK,"PrsFunJoin ",A="FL:C:/Compiler/PrsStmt.CPP.Z,852",BI=232$0000011E06 0005 00000001E8 Funct Export Res
$LK,"PrsFunNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,22",BI=233$000000FFDE 0001 0000000068 Funct Export Res
$LK,"PrsGlblInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,265",BI=234$0000010926 0002 0000000076 Funct Export Res
$LK,"PrsGlblVarLst ",A="FL:C:/Compiler/PrsStmt.CPP.Z,981",BI=235$00000123BE 0007 0000000967 Funct Export Res
$LK,"PrsIf ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1236",BI=236$0000012D26 0001 000000012C Funct Export Res
$LK,"PrsKeyWord ",A="FL:C:/Compiler/PrsStmt.CPP.Z,45",BI=237$0000010076 000C 0000000040 Funct Export Res
$LK,"PrsNoUnusedWarn ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1554",BI=238$0000013A76 0001 000000008F Funct Export Res
$LK,"PrsOffsetOf ",A="FL:C:/Compiler/PrsExp.CPP.Z,379",BI=239$000000DB36 0002 0000000148 Funct Export Res
$LK,"PrsPop ",A="FL:C:/Compiler/PrsExp.CPP.Z,13",BI=240$000000CE5E 0016 0000000022 Funct Export Res
$LK,"PrsPop2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,23",BI=241$000000CEBE 0001 000000002D Funct Export Res
$LK,"PrsPopDeref ",A="FL:C:/Compiler/PrsExp.CPP.Z,28",BI=242$000000CEEE 0004 000000003F Funct Export Res
$LK,"PrsPush ",A="FL:C:/Compiler/PrsExp.CPP.Z,8",BI=243$000000CE36 0017 0000000028 Funct Export Res
$LK,"PrsPush2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,18",BI=244$000000CE86 0004 0000000033 Funct Export Res
$LK,"PrsSizeOf ",A="FL:C:/Compiler/PrsExp.CPP.Z,331",BI=245$000000D92E 0001 0000000207 Funct Export Res
$LK,"PrsStatement ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1665",BI=246$0000013F7E 0004 0000000C2C Funct Export Res
$LK,"PrsStaticInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,274",BI=247$000001099E 0002 000000013E Funct Export Res
$LK,"PrsStreamBlk ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1568",BI=248$0000013B06 0000 00000001B2 Funct Export Res
$LK,"PrsSwitch ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1355",BI=249$00000131E6 0002 000000088F Funct Export Res
$LK,"PrsTryBlk ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1604",BI=250$0000013CBE 0001 00000002BD Funct Export Res
$LK,"PrsType ",A="FL:C:/Compiler/PrsStmt.CPP.Z,377",BI=251$0000010D26 0002 0000000391 Funct Export Res
$LK,"PrsUnaryModifier ",A="FL:C:/Compiler/PrsExp.CPP.Z,980",BI=252$000000F3E6 0000 000000084A Funct Export Res
$LK,"PrsUnaryTerm ",A="FL:C:/Compiler/PrsExp.CPP.Z,617",BI=253$000000E4AE 0000 0000000F38 Funct Export Res
$LK,"PrsVarInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,66",BI=254$0000010146 0001 00000004DA Funct Export Res
$LK,"PrsVarInit2 ",A="FL:C:/Compiler/PrsStmt.CPP.Z,183",BI=255$0000010626 0004 00000002FE Funct Export Res
$LK,"PrsVarLst ",A="FL:C:/Compiler/PrsStmt.CPP.Z,471",BI=256$00000110BE 0006 0000000AD9 Funct Export Res
$LK,"PrsWhile ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1263",BI=257$0000012E56 0001 00000000EF Funct Export Res
$LK,"SLASH_OP_DEC ",A="FL:C:/Compiler/BackLib.CPP.Z,262"$0x052B0000 0006 0000000018 DefineStr
$LK,"SLASH_OP_DIV ",A="FL:C:/Compiler/BackLib.CPP.Z,267"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_FADD ",A="FL:C:/Compiler/BackLib.CPP.Z,271"$0x0000C1DE 0002 0000000018 DefineStr
$LK,"SLASH_OP_FDIV ",A="FL:C:/Compiler/BackLib.CPP.Z,275"$0x0000F9DE 0002 0000000018 DefineStr
$LK,"SLASH_OP_FDIVR ",A="FL:C:/Compiler/BackLib.CPP.Z,276"$0x0000F1DE 0003 0000000018 DefineStr
$LK,"SLASH_OP_FILD ",A="FL:C:/Compiler/BackLib.CPP.Z,280"$0x00000000 0002 0000000018 DefineStr
$LK,"SLASH_OP_FISTTP ",A="FL:C:/Compiler/BackLib.CPP.Z,279"$0x00000000 0002 0000000018 DefineStr
$LK,"SLASH_OP_FLD ",A="FL:C:/Compiler/BackLib.CPP.Z,277"$0x00000000 0008 0000000018 DefineStr
$LK,"SLASH_OP_FMUL ",A="FL:C:/Compiler/BackLib.CPP.Z,274"$0x0000C9DE 0002 0000000018 DefineStr
$LK,"SLASH_OP_FSTP ",A="FL:C:/Compiler/BackLib.CPP.Z,278"$0x00000000 000D 0000000018 DefineStr
$LK,"SLASH_OP_FSUB ",A="FL:C:/Compiler/BackLib.CPP.Z,272"$0x0000E9DE 0002 0000000018 DefineStr
$LK,"SLASH_OP_FSUBR ",A="FL:C:/Compiler/BackLib.CPP.Z,273"$0x0000E1DE 0003 0000000018 DefineStr
$LK,"SLASH_OP_IMUL ",A="FL:C:/Compiler/BackLib.CPP.Z,266"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_INC ",A="FL:C:/Compiler/BackLib.CPP.Z,261"$0x00030000 0004 0000000018 DefineStr
$LK,"SLASH_OP_MOV ",A="FL:C:/Compiler/BackLib.CPP.Z,268"$0x00000000 0002 0000000018 DefineStr
$LK,"SLASH_OP_MUL ",A="FL:C:/Compiler/BackLib.CPP.Z,265"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_NEG ",A="FL:C:/Compiler/BackLib.CPP.Z,264"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_NOT ",A="FL:C:/Compiler/BackLib.CPP.Z,263"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_POP ",A="FL:C:/Compiler/BackLib.CPP.Z,270"$0x00000000 0001 0000000018 DefineStr
$LK,"SLASH_OP_PUSH ",A="FL:C:/Compiler/BackLib.CPP.Z,269"$0x00000000 0001 0000000018 DefineStr
$LK,"StrMatchBits ",A="FL:C:/Compiler/UAsm.CPP.Z,229",BI=258$0000000EC8 0002 0000000073 Funct Export Res
$LK,"StreamDir ",A="FL:C:/Compiler/CMisc.CPP.Z,43",BI=259$0000002848 0000 000000004E Funct Export Res
$LK,"StreamExePrint ",A="FL:C:/Compiler/CMain.CPP.Z,677",BI=260$000002CE62 0000 00000000EC Funct Export Res
$LK,"StreamPrint ",A="FL:C:/Compiler/CMain.CPP.Z,1",BI=261$000002B302 0000 00000000A8 Funct Export Res
$LK,"U ",A="FL:C:/Compiler/UAsm.CPP.Z,640",BI=262$0000002580 0000 00000000CF Funct Export Res
$LK,"UasmHashLoad ",A="FL:C:/Compiler/UAsm.CPP.Z,187",BI=263$0000000D70 0001 0000000154 Funct Export Res
$LK,"Ui ",A="FL:C:/Compiler/UAsm.CPP.Z,242",BI=264$0000000F40 0002 000000163B Funct Export Res
$LK,"Un ",A="FL:C:/Compiler/UAsm.CPP.Z,655",BI=265$0000002650 0008 00000000DA Funct Export Res
$LK,"UndefinedExtern ",A="FL:C:/Compiler/PrsStmt.CPP.Z,54",BI=266$00000100B6 0001 0000000048 Funct Export Res
$LK,"UnusedExternWarning ",A="FL:C:/Compiler/PrsStmt.CPP.Z,60",BI=267$00000100FE 0004 0000000043 Funct Export Res
$LK,"asm_seg_prefixes ",A="FL:C:/Compiler/Asm.CPP.Z,777"$000000A0E8 0001 0000000006 GlbVar Export
$LK,"cmp ",A="FL:C:/Compiler/Compiler.PRJ.Z,16"$00000004E0 00C0 00000001E1 GlbVar Export
$LK,"cmp_templates ",A="FL:C:/Compiler/CExts.CPP.Z,38"$0000000000 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_pop",A="FL:C:/Compiler/CExts.CPP.Z,39"$000000018B 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push",A="FL:C:/Compiler/CExts.CPP.Z,41"$0000000257 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push2",A="FL:C:/Compiler/CExts.CPP.Z,40"$0000000421 0002 0000000004 GlbVar Export
$LK,"cmp_templates_dont_push_pop",A="FL:C:/Compiler/CExts.CPP.Z,42"$0000000391 0002 0000000004 GlbVar Export
$LK,"cmp_type_flags_src_code",A="FL:C:/Compiler/Lex.CPP.Z,386"$0000005BC0 0001 0000000008 GlbVar Export
$LK,"intermediate_code_table",A="FL:C:/Compiler/CMisc.CPP.Z,52"$0000002898 0014 0000000BB0 GlbVar Export
$LK,"internal_types_table",A="FL:C:/Compiler/CInit.CPP.Z,8"$000002A198 0001 00000000AA GlbVar Export
$LK,"lex_zeros ",A="FL:C:/Compiler/Lex.CPP.Z,129"$0000004FDC 000A 0000000004 GlbVar Export
$LK,"uasm ",A="FL:C:/Compiler/Compiler.PRJ.Z,17"$00000006C8 001C 0000000028 GlbVar Export
Ì‹ˆŽˆŽ¢Ž­Ž¸ŽÁŽÉŽÌŽÓŽ×ŽàŽñŽõŽûŽ �%�,�7�<�H�M�T�`�e�h�r�j�‚�‹�š�’�ª�³�¹�¹�Ç�Ê�Þ�ç�ð�÷�û���/�8�F�b�n�n�†�—�—�ž�º�Æ�Î�á�è�ü�‘‘‘‘'‘2‘L‘}‘†‘Ž‘�‘›‘§‘«‘¼‘¾‘ϑّä‘î‘ý‘ ’(’(’+’3’8’º’,DË‚¤‚¤˜¤«¤³¤Á¤ߤê¤ð¤ý¤¥%¥6¥<¥Q¥o¥o¥„¥‰¥‘¥™¥Ÿ¥·¥Ê¥Õ¥Ù¥ã¥ø¥þ¥¦␍¦¦!¦!¦(¦,¦0¦>¦Q¦U¦^¦s¦w¦w¦Ц�¦£¦§¦°¦ͦѦѦѦѦÖ¦è¦÷¦§§/§?§O§T§T§T§`§h§p§v§‹§“§¡§«§¹§¿§Á§Á§Á§Á§Á§Á§Á§Á§Á§ͧÕ§ݧã§ø§¨¨ ¨¨ ¨ ¨ ¨2¨8¨D¨J¨W¨r¨‚¨ލ”¨¡¨³¨Á¨à¨©?ª\½Ð`Š`ŠnŠpŠ{ŠƒŠŽŠ™Š¤Š¦Š¾Š¾ŠÐŠÜŠåŠèŠ‹„ <ȄȄ܄ã„ê„î„…%…,…=…b…m…x…z………ª…µ…À…Â…É…Ò…Ô…ß…æ…ð…†”ú`�`�x��†�‰�’�•�˜�œ�¡�Á�®�Ñ�Ù�á�ä�æ�ö�ÿ�ŽŽŽ"Ž9ŽJŽUއŽ„7”ø—ø—˜˜$˜C˜U˜g˜y˜‹˜�˜ª˜ª˜¯˜¶˜Ì˜Þ˜ã˜þ˜␍™™+™:™G™G™G™g™g™}™�™“™¡™°™µ™µ™¼™Ò™ã™å™û™ššš)š4šJšUšjšoš‡šŒš¤š¸š½šÒš×šïšôš ››)›.›F›H›a›r›r›t›Š›‘›§›§›Â›Ú›ò›
œ œ œ<œÔCB¢B¢V¢V¢|¢|¢™¢�¢¢¢¢¢¢¢®¢³¢âȢȢȢ͢͢ã¢ê¢ý¢ ££$£-£/£/£/£/£6£=£D£K£R£Y£`£g£n£n£p£p£v£{£}¤°Ñù‹‹;‹H‹M‹Q‹Z‹g‹s‹~‹‰‹‘‹œ‹¤‹§‹³‹»‹Õ‹û‹õ‹ ŒŒIŒ5ŒYŒYŒqŒ|Œ˜ŒŸŒÃŒüŒüŒüŒüŒ]� ¨Z€‡‡.‡5‡<‡J‡[‡m‡o‡v‡|‡Œ‡—‡¡‡¬‡Ã‡Æ‡È‡Ú‡à‡ð‡ú‡ˆ ˆˆ+ˆ3ˆ3ˆIˆIˆIˆ]ˆ
¨�§`ˆ`ˆvˆ}ˆ„ˆ’ˆ£ˆµˆ·ˆ¾ˆÄˆÔˆßˆéˆôˆ ‰‰‰"‰)‰9‰C‰M‰T‰_‰s‰{‰{‰‘‰‘‰‘‰¦‰ €=Y††)†0†7†>†D†T†_†i†t†‹†Ž†�†«†µ†¿†Æ†Ñ†ã†ë†ë†‡‡‡ `¨¼¨‰¨‰È‰Ï‰×‰â‰ì‰÷‰ÿ‰ŠŠŠ?ŠAŠQŠQŠ_Š␍Ü•@œ@œeœlœƒœ�œšœ¬œ¬œÝœøœ� ���'�.�5�9�;�A�M�W�^�e�i�i�s�x�ƒ�•�•�Æ�ç�ó�ú�ž žžž$ž(ž*ž0ž<žFžMžTžXžXžežsžƒž•ž•žÆžçžóžúžŸ ŸŸŸ$Ÿ(Ÿ*Ÿ0Ÿ<ŸFŸMŸTŸXŸXŸbŸrŸ„Ÿ„ŸµŸ¼ŸÂŸÎŸØŸßŸæŸêŸìŸòŸþŸ     $ ; T ` d d g p æ „¸ƒ¸ƒëƒ÷ƒÿƒ„ „„„„"„&„.„3„7„H„Y„[„_„p„�„Ž„¡„¨„²„²„²„²„Ä„L·ÆRÏRÏVÏaÏhÏmÏrÏ‰ÏšÏ¨Ï±Ï¶Ï»Ï½Ï !%(("(*(/(h°FªÄªÄÃÄÛÄëÄ ÅÅ5ÅPÅPÅzłņʼnÅ�ŒŜşŦŬųŹŽÅÂÅÌÅÝÅäÅëÅíÅñÅúÅÆÆÆÆ!Æ2Æ=ÆCÆJÆSÆlÆ}ƆÆ�ƗƢƭƹÆÊÆÛÆçÆõÆ÷ÆþÆÇ
ÇÇÇ"ÇEÇSÇ]ÇgÇpljǚǣǬǴǽÇÃÇÇÇÌÇÐÇÝÇäÇòÇüÇÈÈ$È=ÈNÈWÈ`ÈhÈqÈwÈ{ȀȆÈ�ȚȶÈÄÈÊÈÏÈ×ÈßÈçÈôÈüÈÉ-É6ÉQÉeÉeɂɉɒɛɢɫɴɽɯɿÉêÉDÊP«»r»r»›»�»«»±»Ï»Þ»í»ü»
¼¼¼(¼$æÌæÌôÌÍ"Í"Í(Í8 .Í.ÍBÍPÍVÍͅͰͶͼͼÍÄÍ8ëu:¯:¯F¯V¯l¯t¯~¯–¯›¯«¯Á¯ɯÓ¯ë¯ð¯°°&°.°8°P°\°d°n°~°ƒ°™°£°­°·°Á°˰Õ°ß°é°ó°ý°±±±1±;±E±O±Y±c±m±w±�±—±¡±«±Á±˱ձ߱é±ó±ý±²²²%²/²9²C²M²W²a²k²u²²‰²“²�²§²±²»²ŲϲÙ²ã²í²ý²à;¯ºÀºÀØÀãÀôÀ÷ÀûÀÁ ÁÁ(Á>ÁOÁ`ÁrÁ„Á“Á¢Á³ÁÂÁÂÁÐÁÔÁØÁÝÁáÁîÁõÁ Â&Â4ÂMÂOÂSÂ]Â]ÂbÂbÂbÂgÂgÂv‡Â�Â�Â�¢¢·ÂÃÂÎÂÓÂÓÂÖÂÛÂÛÂ÷ÂÃÃÃÃÃÃÃ4Ã@ÃLÃNÃNÃQÃSÃSÃ`ÃbÃbÃeÃeÃnÃtÃyÕÕÕÕÕÕÕÕÕÕÕÕ×èúÃÉÃØÃØÃÜÃÜÃäÃÄÄ Ä¤Ä¼:*¼*¼D¼O¼S¼\¼c¼j¼€¼‘¼¢¼´¼ƼÕ¼ä¼õ¼½½ ½½½%½,½5½<½@½`½`½`½`½`½l½p½s½{½‰½‘½ž½¦½®½¿½ʽϽϽܽâ½ñ½¾
¾¾"¾1¾4¾6¾N¾e¾g¾u¾w¾‚¾ˆ¾ˆ¾�¾�¾¢¾©¾¿¾¿¾¿¾ľľÙ¾ç¾ò¾÷¾÷¾ú¾ÿ¾ÿ¾¿)¿6¿8¿8¿<¿>¿>¿Z¿h¿t¿v¿v¿y¿{¿{¿ˆ¿Š¿Š¿�¿�¿�¿�¿�¿–¿œ¿ ¿¬¿Ì¿Ù¿ç¿î¿¶Àô1ªê´ê´ò´µµµ µ3µBµbµoµ�µ£µõѵíµÿµ.¶9¶Zx‡¢­ȶá¶á¶ü¶%·?·Z·l·{·Š·Š·•·¨·¹·Ì·Ü·é·ô·¸#¸#¸/¸/¸/¸@¸M¸T¸s¸|¸‰¸�¸•¸ ¸¸¸иÙ¸é¸ñ¸ö¸ ¹-¹=¹M¹X¹l¹q¹y¹Ÿ¹¡¹¬¹ß¹ù¹ù¹º º(º7º@ºHºZºyº�º‰º”º–º¦º¾ºÖºîº»»/»8»A»S»a»e»l»ˆÌêBªBªKªFªFªUªdªdªsªsª‚ª‚ª‘ª‘ª ª ª¯ª¾ªͪܪܪëªúª «3¯Ø8>Ä>ÄfÄiĞįįÄÊÄÐÄÕÄÕÄðÄöÄûÄûÄÅÅÅ%Å+Å0ÅsÅ}Å„ÅŠÅŒÅŒÅŸÅ¥Å¥Å¥ÅªÅÆÅÕÅçÅìÅìÅìÅóÅúÅÆÆÆ9Æ9ÆKÆ0S[^À^ÀrÀzÀ‡À‘À¤À”"iJiJ|J‡J±JáJòJK KK&K-K;KDK\KkKxK{K”K—KœK³K¿KËKÏKÝKäKçKL0ûŽÌŽÌ—̜̥̬̮̳Ì8¶Ì¶Ì¿ÌÄÌÏÌØÌßÌáÌæÌ <9DNÆNÆhÆrÆvÆzÆÆ�Æ�ƹƹÆÃÆ &*0(0(:(B(G(!8s}JÌJÌcÌr̡̛̤̆̕ÌÅÌ"8š¤âÍâÍûÍ
ÎÎ+Î1Î7Î:Î[Î#0jrúËúËÌ#Ì2Ì8Ì;ÌCÌ$0‘™šÍšÍ°ÍÃÍÐÍÖÍÙÍáÍ%˜GiJÊJÊRÊVÊsʆʙʶÊ×ÊàÊñÊË/Ë/ËQË`ËiËvË}˯˼ËÀËÈËÈËÛËëËïËóË&X~�ÊÌÊÌçÌûÌÍÍ)ÍFÍdÍjÍsÍ�͇͖͊Í' �'�'™'·'¼'(ˆ ˜€˜€¨€É€É€×€×€×€×€à€à€ç€���%�%�3�C�C�Q�W�W�o�o�u�›�)  D � �°�¹�Ì�Ù�å�ñ�ý� ‚ ‚ ‚/‚:‚C‚J‚S‚}‚‚‚”‚£‚¯‚Á‚Á‚ê‚ê‚ì‚ÿ‚ƒƒ'ƒ*ƒAƒ*TEVHƒHƒZƒ]ƒfƒoƒ}ƒ‚ƒ‹ƒŽƒ“ƒ¡ƒªƒ·ƒ+ì8¦¦ÐÓÖÜáø&8^…ˆ¡¸Ê×êý
#,,7_y˜±³ÍÓì␍""4r‡™,üE€Ö­Ö­õ­®®7®U®d®‚®–®®®µ®º®Û®ù®¯%¯6¯M¯Q¯Q¯U¯Z¯_¯i¯l¯v¯|¯™¯œ¯œ¯œ¯¡¯§¯ïѯݯæ¯ú¯° °'°2°>°G°[°[°j°o°o°}°-4õ~®®àëø$RWW[eqŒ“¡£«Åàòÿ+07\clnt‡¥·ÄÜò$69;A]uw�¡¤¦¬ÈÈÈÚÚèò//48T`{˜¢¦Éàãõ *.DWnqƒ�¡«´ËÕ×ëõ     " 5 M O g z ‘ — © ± Ò é é é   ! .d9ΞžÔÛãìý
 "%)2@JOw|‰µºÇçìû'/4Iu}‚‚•¨¸¼Ûìññ#8;>BBGot}Š’­¿Ì×õõõ(?AANeev{›­¿ÝÝÝê'))6MM^fk‘£µÓÓÓà÷ùù   2 4 ; ] { € ‡ • Ÿ ¡ ¡ ¡ ½ Å Ç Ç é #
/€:N&N&b&i&u&…&¤&ª&±&Ð&Ò&ñ&ý&␍','2'9'9'A'I'T'\'g'r'‘'™'0„žÆIÆIäIöIüIJ
J JJJJJ9J=JCJCJ[JoJ€J€JˆJ¬JÌJíJòJKK$K/K4KAKDK{KŒK‘K—K™KŸK¢K³K¸K»KÃKÌKçKLL1L6L:L\LoLtL‹LžL£L§LÉLäLMMM-M2M5M7M=MCMTMYM_MgMgMqMzM‘M¤M©M­MÏMêM
NN"N=N]NtN‡NŒN�N²NÅNÅNàNàNàNîNOOOOO.O0O0O>OVOVOhOhOqO~O”O´OÎOÕOßOòOöOöOöOýOPP$P.PFPHPNPhPoPyP‡P’P’P¬P1h£¹¦h¦h¼hÈhÞhëhõhii!i'iFi:iWiYiYiŠixiYi©i³i2À 7;;";I;7;);j;z;l;›;¾;¾;Î;Ó;Ó;ç;ì;ì;<␍<␍<-<2<2<F<K<K<h<h<v<š<À<à<ò<==&=&=&=&=&=ï=3̟ήP®PÂPáPÍPQQ Q&Q`QeQ‘Q‘Q–Q¬Q¾QÔQêQR,RdRPRRŒR¸R½RäRìRSòR!S:S&SZSFSnS{S§S§S§S§S¯S4°>ž<ž<´<¼<Ç<Ó<Þ<à< ===6=C=n=™=“=‡=±=Ó=ë=Ø=þ=÷=>
>1>>>i>‚>|>p>Ž>¡>¡>¡>«>5¬ô[F/F/l/Œ/”/Ÿ/®/·/»/Æ/Ñ/æ/ë/0$0*0/0B0x0Ž0”0œ0Ÿ0¤0·0á0÷0ý0111(1-1J1i1o1w1w1|1‚1…1�1›1°1µ1Ï1î1ô1ù122"2'2F2N2S2^2s2|2~2�2¥2°2Å2Ê2ä23 333333"37373O3Z3m3z3’3¦3·3Á3Ã3×3è3í3ø3%4%4%4746Ð϶S¶SÔSäSïSúS?TfT„T®T´TºTÂTÄTÌTçTêTõTUFUmU‹UµU»UÁUÉUÎUÖUñUôUÿU VVUV|VšVÄVÊVÐVØVÚVâVýVW WW\WƒW¡WËWÑW×WßWäWìWX
XX!X!X&X,X2X:XBXMX_XnX�XÇXÍXÒXäXóX%YOYUY]YbYtYƒY²YÜYâYçYùYZ7ZaZgZlZlZlZ}ZˆZ“Z¹ZÑZÜZäZñZñZöZ [ [%[K[c[n[v[ƒ[ƒ[ˆ[›[¨[²[Æ[Ý[ö[\\@\T\k\y\{\�\¦\¦\¯\»\Ñ\ê\ý\ ]] ] ] ]'],]?]K]b]d]i]|]ˆ]•]Ÿ]Ÿ]±]7d¤¹¹¹¹-¹-¹G¹N¹Z¹Z¹q¹q¹ˆ¹ˆ¹Ÿ¹Ÿ¹¶¹¶¹͹ϹϹÓ¹8ló
I:I:W:a:h:::„:†:’:œ:ª:Ç:É:Ù:Ù:Þ:à:ç:;9ì|ó^*^*€*Š*½*Ì*â*+ +++ +/+6+?+D+Y+j+‰+‘+“+²+º+É+Ð+Ü+á+è+ð+ö+ø+,,,,;,A,A,I,R,a,€,‡,‰,¨,¯,¯,¯,Ã,×,Û,é,ü,ô,--$-+-3-9-;-G-W-\-^-~-„-„-�- -¥-ª-Ê-Ð-Õ-á-ñ-ö-ø-..%.-.3.5.A.Q.V.X.x.~.~.~.†.�.�.™.™.±.á.õ.ù.///2/2/D/:à?ó®>®>Ñ>Ù>é>ñ>?5?9?A?I?O?c?k?k?s?¬?ô?Ï?@@.@=@?@i@o@x@@‡@�@›@£@«@¾@Æ@Ë@Õ@õ@ý@ÿ@ AA8A@ABAbAjAjAjAsAzA�A•AžAžA£A§A¯A¸AÁAÍAèABBHBKBdBqB…BœB B¬BÑBíBÿB)C/C1C[C^C^CuC‚C–C­C¶CºCÅCÐCâCñCóCD D2DADFDpDvD{D�DœDžDÈDËDÝDìDîDEEEE(E(E3EdEmEmEmEmEvE‚E˜E±EÄEËE×EÞEÞEñEõEõEõEüEFFF'F.F.FEFGFLF_FfFrFyFyF†F�F�F¶F¶FÈF;ÄErÆÆÆÆòÆõÆúÆÇ ÇÇ Ç$Ç(Ç+Ç>ÇWÇyÇ‚Ç�ǔǭÇÏÇÔÇíÇÈÈÈ4ÈVÈXÈqȓȓȓȨÈÂÈÑÈãÈ<T�¡~Ã~ÒßîîúÃÀÃêÃÄìÃÄ Ä/Ä7Ä=¸ë¦:¦:¾:Â:Ð:ß:ê:ö:;;,;2;2;T;ƒ;g;[;¥;ª;Ñ;Ö;â;í;ï;<<<1<J<D<8<V<i<i<‹<‹<—<>X™«ÞÞìó13Rq‡’”ŸªÉÏ?ä¬áÖÖëöý*IKj—¥­¸ºÅÐÐÕ49@_~‰‹ªÉÉäòú=ZZg‹¬¬¬´@¤yžfúfú„ú•ú¡ú¸ú¿úØúÐúðúûüúû-û2ûSû?ûkû|û“ûšû³û«ûËûëû×û÷ûüü
ü6üCüCü[ü[üeüA¬%L>Ú>Ú\ÚnÚuÚ|Ú‹Ú�Ú¯Ú¯Ú´ÚÓÚØÚßÚîÚðÚÛÛ.ÛCÛ0ÛOÛ^Û`ÛÛÛÛÛŽÛ§Û Û¿ÛÉÛBdEZžîžî¼îÏîÖîÝîäîèîêîñîøîüîüîïï'ï'ï;ïFïTïeïiïnïyïŠï›ï²ï¶ï¿ïÃïÈïÙïöïöïððð6ðGðKðKðKðPð~ð“ðšð­ð±ð¶ðÁðÒðãðúðñ ñññ%ñ7ñGñ[ñ]ñvñ‰ñ�ñ�ñ�ñ˜ñ©ñºñÑñÕñÞñâñçñøñòò#ò7ò<òUòfòjò|ò|ò|ò�ò�ò’ò±ò±òÐòÛòáò÷òó␍ó"ó-ó>óOófójósówó|ó�ó¦ó¦ó´óÈóÊóãóôóøóøóÿóôô(ô-ô8ôIôZôqôyô‚ô†ô‹ôœô²ôÂôÖôÛôôôõ õõõõõ5õ"õAõPõRõqõ|õ‚õ˜õ©õ©õ©õ°õÃõÜõÜõÜõëõëõþõö ö1ö6ö<öFöHöTöTö[öfö{ö}öˆö�ö©ö«ö¶öÂöÒöÙöàöêöòöööúöüö÷ ÷␍÷ ÷!÷&÷.÷2÷4÷4÷=÷J÷`÷€÷š÷¦÷²÷¹÷¹÷Ì÷Ð÷Ð÷Ð÷×÷Ü÷ö÷øøøø,ø.ø3øMøYøeøløløyøƒøƒø•øCÌs¢æÈæÈÉÉÉ É&É(É.É4É4ÉFÉQÉXÉeÉrɅɔɨɮɰɷɽÉÇÉÇÉØÉÚÉáÉçÉñÉñÉñÉÊÊ!Ê0Ê2ÊDÊSÊSÊeÊDx£½fÊfÊ�ʓʚʠʦʨʮʴʻÊÈÊÕÊèÊõÊË
Ë ËËË+Ë=ËLËjË|ËE<mx¶ù¶ùÐùÜùîùú%úú=úUúUú_úF„ñ^Í^Ív͈Í�͖͵ͺÍÙÍÞÍøÍåÍÎÎ#Î8Î%ÎWÎDÎcÎcÎuÎ|ΛΛΣÎGM�ÎÛÎÛæÛøÛÜ+Ü
Ü7ÜUÜ‚Üa܎ܨܨÜÇÜÜÜÉÜ ÝèÜÝ/Ý/ÝAÝ[Ý[݈ݕÝÎÝÓÝÚÝÞùÝÞ2Þ>ÞpÞ]Þ‹Þ|Þ—ÞµÞÊÞ·ÞÖÞßõÞß*ß*ß<ßVßqß~ß�ß�ߥßHT[l–ø–ø°ø¼øÎøäøùòøù.ù@ùVùwùdù�ù§ù§ù±ùI(^$žÑžÑÄÑ×ÑßÑæÑíÑóÑõÑüÑÒÒÒÒÒ+Ò6ÒAÒRÒcÒzÒ‚Ò‹Ò“Ò˜Ò©Ò¿ÒÏÒáÒæÒÓÓÓÓ!ÓMÓbÓmÓ~Ó�Ó¦Ó®Ó·Ó¿ÓÄÓÕÓçÓ÷Ó Ô Ô%Ô=ÔAÔAÔLÔ]ÔnÔ…Ô�Ô–ÔžÔ£Ô´ÔÊÔÚÔìÔñÔ Õ#Õ'Õ:Õ:Õ:ÕRÕ?ÕrÕ_ÕÕ‹Õ‘Õ©ÕÁÕÆÕÛÕæÕ÷ÕÖ Ö'Ö0Ö8Ö=ÖNÖ`ÖpÖ‚Ö„ÖžÖ¶ÖºÖºÖÅÖÖÖçÖþÖ××××-×C×S×e×jׄלנ׳׳׳×Ë׸×ëר׸ר
Ø"Ø:Ø:Ø:ØFØLØWØbØt؄؛زØÉØàØàØôØÙÙÙ1Ù1Ù?ÙAÙAÙOÙOÙXÙcÙqٌٛ٢ٲٴÙÑÙÙÙöÙÚ"Ú"Ú;ÚJD¦ß¦ßÄßËßÒßÝßåßþßþßà+à+à6à:àEàmàLàyà�à�à³à·à¼àÎàßàöà␍áááá#áJá`ádádátá±á�á½áÚáÚáùáâ
â â1â6âHâYâpâ‡âŒâ”â˜âšâÁâ×âÛâæâ÷âã ã'ã,ã0ã5ãFã\ãjã~ãƒãœã­ã±ãÃãÃãÃãÃãÈã÷ãäã$ää0äMäXä^ätä…äŠä•ä¦ä·äÎäÖäÛäßäääõäåå)å+åDåUåYåYåYåkå|å“åªå¯å·å»å½åäåúåþå æ æ æ ææ$æ.æ5æHæ_æ_æ{æ{æ‰æ‹æ‹æ™æ™æ¯æ¿æÍæäæ÷æüæç ç<çLçSçaççwç¤çÍçÍçÍçÚçèè#è)è4èSèjèZèvèŒèšè²èÈèÌèÜèûè'éé3éPéPéoézé€é–é§é¬éÂéØéÜéçéøé ê ê(ê-ê1ê6êGê]êkêê„ê�ê®ê²êÄêÄêÄêÄêÉêøêåêë3ë#ë?ë\ëgëmëƒë”ë™ë¤ëµëÆëÝëåëêëîëóëìì$ì8ì:ìSìdìhìhì‡ì�ì³ì·ìÄìÄìÄì×ìÝìçìîìíííí4í4íBíDíDíRíRíhíxí†í¡í´í¹íÕíÝíùí îî4îPîPî]î}î}î}î�îK|Ìçžþžþ¸þàþÃþìþùþ ÿ%ÿÿ=ÿUÿBÿhÿaÿtÿ�ÿ”ÿ­ÿ¦ÿ¹ÿ¹ÿÆÿåÿåÿïÿLH]¦Î¦ÎÊÎâÎýÎéÎÏ Ï)Ï?Ï+Ï_ÏKÏkÏwÏ|ψϘϟϬϷÏÃÏÎÏÖÏÛÏçÏìÏÐÐ ÐÐÐ&Ð?ÐHÐTÐYÐmÐtÐxÐxÐ}ЖЛдÐÉÐÛÐàÐëÐóÐóÐóÐõÐÑ#Ñ.Ñ8ÑCÑEÑPÑXÑXÑeÑ]Ñ}Ñ�ÑMdËŽýŽý¨ýÌý¯ýØýñýêý þþ þ1þ*þ=þVþOþbþbþoþŽþŽþ˜þNhŸµfüfü„ü�ü§ü¸ü¿üØüÐüðüýüüý-ýCý/ý[ýhýhý€ý€ýŠýOLè÷öÿöÿ&-LL^q~w– Pؾð~Ë~ˠ˧˲ËÈËÈËÚËåËðËÌÌ)Ì-Ì2Ì6Ì8ÌIÌ[ÌgÌyÌ{̧̧̧̣̺̔ÌÏÌÏÌÛÌáÌëÌöÌÍ ÍÍÍ2ÍLÍLÍ^ÍQ�$D¾H¾HÜHäHðHII)I4ICIIIIIIINISIaIlI‚I„I‰I—I¢I¯I¶IÄIR4;D–­–­Ÿ­«­Ê­Ï­Ñ­Ñ­Ö­S”n�ÎÁÎÁÂ#Â#Â6Â:ÂYÂmÂrÂr‡Â�¤°ÂÁÂÆÂ×ÂëÂðÂò Ã#Ã%Ã%Ã>ÃVÃVÃxÃT<Œ—ÆrÆrÏrÚrårðrûrs#s.s>sU,ð7~a~aša a«a¼aÁaÇaÊaÎaÎaîaóa)bb5bNb:bZbsb_bb†b‹b•b˜bœb¡bºb¦bÆbÆbÆbËbÜbábçbêbîbîbccIc5cUcncZczc�c|cœc£c¨c®c±cµc·cÐc¼cÜcÜcÜcÜcôcd)dVXâôÄËê  *IW_jlw‚¡§W´?h~d~d–d¡dÄdÜdádædêdìdòdødeûdee9eQe>e]e€e˜e�e¢e¦e¨e®e´eÊe·eÖeÖeéeñefff)f5fXtŒå~°~°–°ž°«°˰ݰä°î°ô°ú°þ°±$±$±+±.±3±B±F±X±s±w±|±|±ƒ±†±‹±—±¥±©±º±ɱͱϱÞ±â±â±ô±²²␍²␍²!²$²0²:²A²g²r²v²{²±²ȲÓ²ײè²ó²÷²ù²³³³³³"³&³(³(³3³7³E³Q³U³U³U³Y³|³Yˆæ~³~³’³¨³¨³¨³ª³ª³±³³³³³º³¼³¼³ɳ˳˳سß³á³á³î³õ³÷³÷³´´´$´ZܺmÖ¹Ö¹ ºº#ºEºEºVºcº�º‰º¶º»ºäº»»#»'»J»p»u»ž»¸»Þ»õ»û»ÿ»¼ ¼%¼6¼>¼]¼c¼g¼€¼ˆ¼§¼¬¼½¼żä¼é¼ñ¼÷¼û¼ÿ¼½½%½9½>½P½U½f½k½~½‹½Ÿ½ª½³½×½ ¾4¾9¾9¾9¾I¾P¾^¾k¾�¾�¾¤¾©¾©¾À¾¾¾Ö¾ؾؾï¾ñ¾ñ¾¿
¿
¿!¿!¿2¿7¿7¿G¿l¿~¿ƒ¿ƒ¿ƒ¿ƒ¿Š¿¾¿Ï¿í¿í¿í¿ú¿ÀÀÀÀ À7À9À9ÀFÀ]À]ÀrÀtÀ�À«À«À«À¯À±À±À±À¶À¸À¸À½À½ÀÇÀÌÀÌÀêÀêÀêÀòÀôÀôÀôÀüÀþÀþÀÁÁÁÁ+Á-Á@ÁTÁTÁTÁTÁTÁgÁÁ‡Á‡ÁÊÁ[ðU<?QX_dfmtxмÃîó (7qv£«°¹ÄÌÓòø8CZy††Œ�“¤ÄÖ\V˜ÖÖîõ:EQ€€Œ”£Ýß AFe€†•ª¬·¿Úßèóû␍:Y[z§¯Üáè&(Gf�‰¤¤¤ÐÐÜ]\
N%N%`%l%Š%¦%³%Ê%Ý%è%ê% &&&/&(&G&M&^("®¬®¬½¬Ьè¬è¬î¬_hºÐ¶i¶iÌiØiîiûiÿij-j1j7jVjJjgjijijšjˆjij¹jÃj`Œ;Zž'ž'´'º'Á'Í'Ý'ý'( ()(+(K(W(g(‡(Œ(“(“(“(™(œ( (¨(À(Ë(Ö(ö()axiƒ··>·`·`·j·o·o·Ž·›·�·�·�·�·ª·²·Å·Ù·Û·Û·ã·ö·ö·¸b@„�¸¸¸'¸.¸M¸Z¸Z¸]¸_¸e¸c¬Ãê¦8¦8¾8Æ8Ñ8ÿ8Þ899Q919%9w9|9§9¬9¸9ß9ä9æ9: :'::?:F:g:Y:M:{:}:–:–:–:¢:dœŸÂÎ6Î6æ6î6ù63777Y7[7†7†7“7Ì7Ñ7Ý7è7ê7 88878)88K8M8f8f8s8š8š8š8¦8eˆ\z>4>4R4U4g4o4z4‰4‰4�4ª4µ4º4Ú4é4ñ4ü4555%505;5F5F5X5X5`5f¤6[nµnµ޵°µ°µϵßµäµäµóµ'¶.¶0¶C¶K¶K¶K¶M¶M¶M¶M¶k¶k¶k¶k¶}¶’¶�À¶g@\hƶƶÔ¶ܶã¶······h8yñ=ñ=> > >O>[>h>r>‚>‚>™> >·>¾>Ç>Þ>Þ>ô>ô>
?
? ? ?6?6?L?L?b?b?x?x?Ž?Ž?¥?¥?¼?¼?Ó?Ó?ê?ê?@@@@/@/@G@G@_@g@r@ƒ@Ž@Ÿ@¢@¤@»@Â@Â@ÎAiD€�¶]¶]Ê]Ö]ì]Ø]ø]ú] ^^&^j°Ž&^&^<^C^T^Y^n^[^z^€^€^Œ^¤^‘^°^³^µ^Ã^È^Ý^Ê^é^ì^ì^ø^␍_ú^_ _ _2_E_X_k_~_ˆ_k°·ßŽ_Ž_¤_«_¼_Á_Ö_Ã_â_è_è_ô_ `ù_```+`0`E`2`Q`T`T```u`b`�`‡`‡`š`­`À`Ó`æ`ð`lLàïö`ö`
aa,aa8a:aMa`akava~am$~¬~¬�¬¥¬¥¬«¬n�Ÿ& & T Y m u ƒ ‡ � � • ¢ ¸ â ç  !!! !5!K!M!c!y!�!·!É!o ãÎ!Î!"""'"."5">"@"C"b"i"„"†"�"¨"¯"¸"º"½"Ü"Ü"Ü"ê"ô"#!###=#E#E#a#€#…#Œ#¢#©#Ä#Æ#Í#è#þ#$$ $-$M$O$i$q$q$�$¤$¤$Ê$Ü$p|5&´&´J´^´i´~´œ´§´Å´Å´Å´Ò´ê´ì´ì´ì´ù´µµµ!µ.µFµFµWµkµq(8>.d.dUdBdadpdxdrDÏ&
&
N
[
u
�
¢
¯
Ç
Û
à
ç
    $ 7 U g t Œ ¢ ¾   Í Ô æ é ë ñ ␍ % ' ? Q T V \ x x x Š Š ˜ ¢ à ß ß ä è ␍␍+␍H␍R␍V␍f␍y␍�␍“␍¥␍¹␍Ã␍Ú␍Þ␍ô␍!3=Q[d{…‡›¥¼ÀÀÀËÒåýÿ*AGYa‚™™™¿¿Ñ.x9ÓNóNó„ó‹ó“óœó­óºóÏóÒóÕóÙóâóðóúóÿó
ô'ô,ô9ôeôjôwô—ôœô«ô×ôßôäôùô%õ-õ2õ2õEõXõhõlõ‹õœõ¡õ¡õÃõÃõÃõÃõÃõÓõèõëõîõòõòõ÷õö ö$ö-ö:öBö]öoö|ö‡ö¥ö¥ö¥ö²öÉöËöËöËöØöïöñöñöþö÷÷&÷+÷4÷K÷]÷o÷�÷�÷�÷š÷±÷³÷³÷³÷À÷×÷Ù÷Ù÷æ÷ý÷ý÷øøø'øAøSøeøƒøƒøƒø�ø§ø©ø©ø¶øÍøÍøâøäøëø␍ù+ù0ù7ùEùOùQùQùQùmùuùwùwù™ùÓù/„;þþ%5TZa€‚¡­½Üâééñù "AI0ˆŸ–8–8´8Æ8Ì8Ó8Ú8Ü8ß8æ8í8í8 9␍999+9?9P9P9X9|9œ9½9Â9ã9è9ô9ÿ9:::K:\:a:g:i:o:r:ƒ:ˆ:‹:“:œ:·:×:î:;;
;,;?;D;[;n;s;w;™;´;Ô;ç;ì;ý;<<<␍<<$<)</<7<7<A<J<a<t<y<}<Ÿ<º<Ú<í<ò<␍=-=D=W=\=`=‚=•=•=°=°=°=¾=Ö=Ø=Ø=Ø=æ=þ=>>>&>&>8>8>A>N>d>„>ž>¥>¯>Â>Æ>Æ>Æ>Í>Ó>í>ô>þ>???8???I?W?b?b?|?1l£ºvWvWŒW˜W®W»WÅWÔWíWñW÷WX
X'X)X)XZXHX)XyXƒX2ÄIvÐ)Ð)Ù)*î)à)!*1*#*R*u*u*…*Š*Š*ž*£*£*¿*Ä*Ä*ä*é*é*ý*++ + +-+Q+w+—+©+»+Í+Ý+Ý+Ý+Ý+Ý+¦,3ПÏ~?~?’?±?�?×?ä?ð?ö?0@5@a@a@f@|@Ž@¤@º@í@ü@4A AOA\AˆA�A´A¼AÖAÂAñA
BöA*BB>BKBwBwBwBwBB4´?V,V,l,w,‚,Ž,™,›,Ä,Ê,Ê,ñ,þ,)-T-N-B-l-Ž-¦-“-¹-²-Ø-Å-ì-ù-$.=.7.+.I.\.\.\.f.5°ô\öö < D O ^ g k v � – › µ Ô Ú ß ò ( > D L O T g ‘ § ­ µ ¸ Ã Ø Ý ú ! !'!'!,!2!5!@!K!`!e!!ž!¤!©!´!É!Ò!×!ö!þ!""#","."M"U"`"u"z"”"³"¹"¾"¾"¾"¾"Ë"Ò"ç"ç"ÿ"
##*#B#V#g#q#s#‡#˜#�#¨#Õ#Õ#Õ#ç#6ÔÏ€†B†B¤B´B¿BÊBC6CTC~C„CŠC’C”CœC·CºCÅCÑCD=D[D…D‹D‘D™DžD¦DÁDÄDÏDÛDàD%ELEjE”EšE E¨EªE²EÍEÐEÛEçE,FSFqF›F¡F§F¯F´F¼F×FÚFåFñFñFöFüFG
GGG/G>GmG—G�G¢G´GÃGõG H%H-H2HDHSH‚H¬H²H·HÉHØHI1I7I<I<I<IMIXIcI‰I¡I¬I´IÁIÁIÆIÙIðIõIJ3J>JFJSJSJXJkJxJ‚J–J­JÆJØJåJK$K;KIKKK_KvKvKK‹K¡KºKÍKÙKìKðKðKðK÷KüKLL2L4L9LLLXLeLoLoL�L7h¤ºƨƨʨݨݨ÷¨þ¨
©
©!©!©8©8©O©O©f©f©}©©©ƒ©8p1Iø(ø())).).)3)5)A)K)\)y){)‹)‹)�)’)™)Ë)9ð|ô0:m|’»¿ÇÐßæïô 9ACbjy€Œ‘˜ ¦¨´ÄÉËëññù079X___s‡‹™¬¤ÄÉÔÛãéë÷ .44@PUZz€…‘¡¦¨ÈÎÕÝãåñ(...6??IIa‘¥©·ÊÂââô:à?óf.f.„.Œ.š.ž.Ä.Ï.×.ß.ó.û.û.ÿ.1/j/X/O/‚/‡/’/�/Ÿ/¾/Ä/Í/Ô/Ü/ä/ð/ø/000 0*0J0R0T0^0m0�0•0—0·0¿0¿0¿0Ê0Ó0ç0ï0ø0ø0ý01 111181T1p1�1’1§1´1È1Û1ß1ì12.2A2`2f2h2‡2Š2Š2Ÿ2¬2À2Ó2Þ2â2í2ø2333/323=3H3M3l3r3w3‚3�3�3®3±3¼3Ç3É3è3î3î3î3ø3ø3444?4?4?4?4H4T4j4ƒ4–4�4©4°4°4Ã4Ç4Ç4Ç4Î4Ó4æ4í4ù4555551585D5K5K5X5b5b5‹5‹5�5;ÈEsv¶v¶¢¶¥¶ª¶·¶¼¶ζжÔ¶ضÛ¶î¶·)·2·=·D·]··„·�·¿·Ä·Ë·ä·¸¸!¸C¸C¸C¸X¸r¸�¸“¸<T�¡.³.³B³O³^³^³j³p³š³°³œ³dz¼³ß³ç³=¼ë^*^*v*z*ˆ*—*¢*®*¹*»*ä*ê*ê* +;+ ++]+b+‰+Ž+š+¥+§+Ð+Ö+Ö+é+,ü+ð+,!,!,C,C,O,>\�°ŽŽœ£Âáã!/7BDOZy?è°æ††›¦­ÚùûGU]hju€€…²·äéð.9;Zyy”¢ªµ·ÂÍÍí

;\\\d@¨yŸêê4êEêQêhêoêˆê€ê êÀê¬êÌêÝêâêëïêë,ëCëJëcë[ë{ë›ë‡ë§ë¸ëÎëºëæëóëóë ì ììA°%MîÉîÉ ÊÊ%Ê,Ê;Ê@Ê_Ê_ÊdʃʈÊ�ʞʠʿʿÊÞÊóÊàÊÿÊËË/Ë/Ë/Ë/Ë>ËWËPËoËyËBhE[NÞNÞlÞÞ†Þ�Þ”Þ˜ÞšÞ¡Þ¨Þ¬Þ¬Þ´ÞÍÞ×Þ×ÞëÞöÞßßßß)ß:ßKßbßfßoßsßx߉ߦߦߴßÈßÍßæß÷ßûßûßûßà.àCàJà]àaàfàqà‚à“àªà²à»à¿àÄàÕàçà÷à á␍á&á9á=á=á=áHáYájá�á…áŽá’á—á¨áÅáÅáÓáçáìáâââ,â,â,â1â@âBâaâaâ€â‹â‘â§â¸â½âÒâÝâîâÿâãã#ã'ã,ã=ãVãVãdãxãzã“ã¤ã¨ã¨ã¯ãÂãÆãØãÝãèãùã
ä!ä)ä2ä6ä;äLäbärä†ä‹ä¤ä·ä»äÍäÍäÍäÍäåäÒäñäåå!å,å2åHåYåYåYå`åsåŒåŒåŒå›å›å®åÅåÐåáåæåìåöåøåææ ææ+æ-æ8æMæYæ[æfæræ‚æ‰æ�æšæ¢æ¦æªæ¬æ±æ¹æ½æÏæÑæÖæÞæâæäæäæíæúæç0çJçVçbçiçiç|ç€ç€ç€ç‡çŒç¦ç²ç¾çÅçÅçÜçÞçãçýç èèèè)è3è3èEèCÐs£–¸–¸À¸øʸиÖ¸ظÞ¸ä¸ä¸ö¸¹¹¹"¹5¹D¹X¹^¹`¹g¹m¹w¹w¹ˆ¹й‘¹—¹¡¹¡¹¡¹¸¹ʹѹà¹â¹ô¹ºººD|£¾ºº@ºCºJºPºVºXº^ºdºkºxº…º˜º¥º´ººº¼ºº̺Ûºíºüº»,»E@myféfé€éŒéžé´éÕéÂéíéêêêFˆñ½½&½8½?½F½e½j½‰½޽¨½•½ǽ´½Ó½è½Õ½¾ô½¾¾%¾,¾K¾K¾S¾GM�~Ë~˖˨˳ËÛ˺ËçËÌ2ÌÌ>ÌXÌXÌwÌŒÌy̹̘ÌÅÌßÌßÌñÌ Í Í8ÍEÍ~̓͊͸ͩÍÄÍâÍîÍ Î␍Î;Î,ÎGÎeÎzÎgΆδΥÎÀÎÚÎÚÎìÎÏ!Ï.ÏMÏMÏUÏHX[mFèFè`èlè~è”èµè¢èÍèÞèðèé'éé?éWéWéaéI,^%NÁNÁtÁ‡Á�Á–Á�Á£Á¥Á¬Á³Á¶Á¶ÁÈÁÈÁÛÁæÁñÁÂÂ*Â2Â;ÂCÂHÂYÂo‘–°ÂÈÂÌÂÌÂÑÂýÂÃÃ.Ã?ÃVÃ^ÃgÃoÃtÅ×çùûÃÕÃíÃñÃñÃüÃ␍ÄÄ5Ä=ÄFÄNÄSÄdÄzĊĜġĻÄÓÄ×ÄêÄêÄêÄÅïÄ"ÅÅ/Å;ÅAÅYÅqÅvŋŖŧŸÅÏÅ×ÅàÅèÅíÅþÅÆ Æ2Æ4ÆNÆfÆjÆjÆuƆƗƮƶƿÆÇÆÌÆÝÆóÆÇÇÇ4ÇLÇPÇcÇcÇcÇ{ÇhǛLjǨǴǺÇÒÇêÇêÇêÇöÇüÇÈÈ$È4ÈKÈbÈyÈ�È�ȤÈÀÈÀÈÀÈáÈáÈïÈñÈñÈÿÈÿÈÉÉ!É<ÉKÉRÉbÉdÉ�ɉɦɷÉÒÉÒÉëÉJ EVÏVÏtÏ{Ï‚Ï�ϕϮϮÏÂÏÛÏÛÏæÏêÏõÏÐüÏ)Ð?ÐMÐcÐgÐlÐ~Ð�ЦнÐÂÐÊÐÎÐÓÐúÐÑÑÑ$ÑaÑ@ÑmъъѩѴѺÑÐÑáÑæÑøÑ Ò Ò7Ò<ÒDÒHÒJÒqÒ‡Ò‹Ò–Ò§Ò¸ÒÏÒ×ÒÜÒàÒåÒöÒ ÓÓ.Ó3ÓLÓ]ÓaÓsÓsÓsÓsÓxÓ§Ó”ÓÔÓ³ÓàÓýÓÔÔ$Ô5Ô:ÔEÔVÔgÔ~Ô†Ô‹Ô�Ô”Ô¥Ô·ÔÅÔÙÔÛÔôÔÕ Õ Õ ÕÕ,ÕCÕZÕ_ÕgÕkÕmÕ”ÕªÕ®Õ»Õ»Õ»Õ»ÕÎÕÔÕÞÕåÕøÕÖÖ+Ö+Ö9Ö;Ö;ÖIÖIÖ_ÖoÖ}Ö”Ö§Ö¬ÖÈÖÐÖìÖüÖ××/×'×T×}×}×}׊×Ã×È×Ó×Ù×äרØ
Ø&Ø<ØJØbØxØ|،ثØרÇØãØÙÙ Ù*Ù0ÙFÙWÙ\Ùrوٌٗ٨ٹÙÐÙØÙÝÙáÙæÙ÷Ù␍ÚÚ/Ú4ÚMÚ^ÚbÚtÚtÚtÚtÚyÚ¨Ú•Ú´ÚãÚÓÚïÚ ÛÛÛ3ÛDÛIÛTÛeÛvÛ�Û•ÛšÛžÛ£Û´ÛÆÛÔÛèÛêÛÜÜÜÜ7ÜMÜcÜgÜtÜtÜt܇Ü�ܗܞܱÜÈÜÈÜÈÜäÜäÜòÜôÜôÜÝÝÝ(Ý6ÝQÝdÝiÝ…Ý�ݩݹÝÇÝäÝÞÞ␍Þ-Þ-Þ-ÞMÞK€ÌèNîNîhî�îsîœî©î¼îÕîÎîíîïòîïï$ï1ïDï]ïVïiïiïvï•ï•ïŸïLL^V¾V¾z¾’¾­¾™¾;¹¾Ù¾ï¾Û¾¿û¾¿'¿,¿8¿H¿O¿\¿g¿s¿~¿†¿‹¿—¿œ¿°¿·¿»¿Æ¿Ë¿Ö¿ï¿ø¿À ÀÀ$À(À(À-ÀFÀKÀdÀyÀ‹À�À›À£À£À£À¥À¾ÀÓÀÞÀèÀóÀõÀÁÁÁÁ␍Á-ÁMÁMhÌ>í>íXí|í_íˆí¡íší¹íÎí»íáíÚíííîÿíîî î>î>îHîNlŸìì4ì@ìWìhìoìˆì€ì ìÀì¬ìÌìÝìóìßì ííí0í0í:íOLè÷¦ï¦ïÄïÖïÝïüïüïð!ð.ð'ðFðPðPܾñ.».»P»W»b»x»x»Š»•» »±»»Ù»Ý»â»æ»è»ù» ¼¼)¼+¼D¼S¼W¼W¼W¼j¼¼¼‹¼‘¼›¼¦¼´¼»¼ʼ̼â¼ü¼ü¼½Q�#CŽ7Ž7¬7´7À7Ö7ë7ù7888888#818<8R8T8Y8g8r88†8”8R8;EF�F�O�[�z������†�S˜n�~±~±°±Ó±Ó±æ±ê± ²²"²"²/²7²?²T²`²q²v²‡²›² ²¢²»²Ó²Õ²Õ²î²³³(³T<Œ—–a–aŸaªaµaÀaËaÕaóaþabU0ð8NPNPjPpP{PŒP‘P—PšPžPžP¾PÃPùPåPQQ
Q*QCQ/QOQVQ[QeQhQlQqQŠQvQ–Q–Q–Q›Q¬Q±Q·QºQ¾Q¾QÞQãQRR%R>R*RJR`RLRlRsRxR~R�R…R‡R RŒR¬R¬R¬R¬RÄRíRùRV\æùfft{š¹»Úù    ' 2 Q W W¸?iNSNSfSqS”S¬S±S¶SºS¼SÂSÈSÞSËSêSêS T!TT-TPThTmTrTvTxT~T„TšT‡T¦T¦T¹TÁTÓTíTæTùTUXxŒæ. . F N [ { � ” ž ¤ ª ® ² Ô Ô Û Þ ã ò ö ¡#¡'¡,¡,¡3¡6¡;¡G¡U¡Y¡j¡y¡}¡¡Ž¡’¡’¡¤¡´¡¸¡½¡½¡Ñ¡Ô¡à¡ê¡ñ¡¢"¢&¢+¢a¢x¢ƒ¢‡¢˜¢£¢§¢©¢´¢¸¢¸¢¸¢Æ¢Ò¢Ö¢Ø¢Ø¢ã¢ç¢õ¢££££ £,£Yàæ.£.£B£X£X£X£Z£Z£a£c£c£j£l£l£y£{£{£ˆ£�£‘£‘£ž£¥£§£§£¿£Ä£Ä£Ä£Ô£Zàºn†©†©¼©Å©Ó©õ©õ©ªª1ª9ªfªkª”ª±ªͪÓªתúª «%«N«h«Ž«¥«««¯«È«ЫÕ«æ«î«␍¬¬¬0¬8¬W¬\¬m¬u¬”¬™¬¡¬§¬«¬¯¬Á¬ɬÕ¬é¬î¬­­­­.­;­O­Z­c­‡­»­ä­é­é­é­ù­®®®=®=®T®Y®Y®p®r®r®†®ˆ®ˆ®Ÿ®¡®¡®¸®º®º®Ñ®Ñ®â®ç®ç®÷®¯.¯3¯3¯3¯3¯:¯n¯¯�¯�¯�¯ª¯Á¯ïïïЯç¯é¯é¯ö¯␍°␍°"°$°=°[°[°[°_°a°a°a°f°h°h°m°m°w°|°|°š°š°š°¢°¤°¤°¤°¬°®°®°¶°¶°¸°¿°Û°ݰð°±±±±±±/±7±7±z±[ô!ZÎýÎýìýïýþþþþþþ$þ(þ:þlþsþžþ£þÄþÄþÐþØþçþ!ÿ&ÿSÿ[ÿ`ÿiÿtÿ|ÿƒÿ¢ÿ¨ÿÇÿÉÿèÿóÿ
)/66<?CTt†\Z�††ž¥·êõ00<DS��¼ÄÄñö06EZ\goŠ�˜£«½ê  *Wf_Œ‘˜·ÖØ÷19TTT€€Œ]`
þþ:Vcz�˜š¹ÁÌߨ÷ý^,#^œ^œmœ€œ˜œ˜œžœ_lºÑ†X†XœX¨X¾XËXÏXÞXýXYY&YY7Y9Y9YjYXY9Y‰Y“Y`�;[NNdjq}�­²¹ÙÛû7<CCCILPXp{†¦°a|i„ΦΦ§§ § §>§K§M§M§M§M§Z§b§u§‰§‹§‹§“§¦§¦§¸§bD„‘¾§¾§̧×§Þ§ý§
¨
¨␍¨¨¨c°Ãë^(^(v(�(Œ(º(™(Ò(Ù( )ì(à(2)7)b)g)s)š)Ÿ)¡)À)Æ)â)Ó)ú)*"***6*8*Q*Q*Q*]*d ŸÃ~&~&–&¡&¬&æ&Æ&º& ''9'9'F''„'�'›'�'¼'Â'É'ê'Ü'Ð'þ'(((&(M(M(M(Y(eŒ\{î#î#$$$ $*$9$9$M$Z$e$j$Š$™$¡$¬$´$¿$Ê$Õ$à$ë$ö$ö$%%%f¨6\¥¥>¥`¥`¥¥�¥”¥”¥£¥µ¥Ï¥×¥Þ¥à¥ó¥û¥û¥û¥ý¥ý¥ý¥ý¥¦¦¦¦-¦/¦/¦/¦/¦B¦M¦p¦gD\iv¦v¦„¦Œ¦“¦²¦¿¦¿¦¦Ħʦhv¨,¨,¸,½,æ,Õ,Ñ,ö,-␍---4-;-R-Y-b-y-y-�-�-¥-¥-»-»-Ñ-Ñ-ç-ç-ý-ý-..).).@.@.W.W.n.n.….….œ.œ.³.³.Ê.Ê.â.ê.õ.//"/%/'/>/E/E/Z0iH€Ž†L†LšL¦L¼L¨LÈLÊLÜLîLöLj´Ž·öLöL MM$M)M>M+MJMPMPM\MtMaM€MƒM…M“M˜M­MšM¹M¼M¼MÈMÝMÊMéMïMïMNN(N;NNNXNk´·à^N^NtN{NŒN‘N¦N“N²N¸N¸NÄNÜNÉNèNëNíNûNOOO!O$O$O0OEO2OQOWOWOjO}O�O£O¶OÀOlPàðÆOÆOÚOæOüOèOP
PP0P;PFPNPm(.œ.œ=œUœUœ[œn”ƒ¤ÖÖ %37@@ERh’—»ÃÈÏåûý)Mgyo¤ç~~°ÄÌ×Þåîðó46=X_hjmŒŒŒš¤±ÑÓíõõ05<RYtv}˜®ÅÈÐÝýÿ!!=TTzŒp€6Ö£Ö£ú£¤¤.¤L¤W¤u¤u¤u¤‚¤š¤œ¤œ¤œ¤©¤Á¤ääѤÞ¤ö¤ö¤¥¥q,8?þRþR%SS1S@SHSrHÓ!ÖùÖùþù úúúú4úKúbú¢ú¾úØúÝúâúíúûû#û6ûLû`ûeûpû�û•û˜û²ûÌûÔûÜûáûûûüü%ü*üDüLüQüqüvüyü“ü­üµü½ü¿üÙüóüûüýý ý'ý'ý,ý1ý<ý<ýGýGýSýSýeý¥ý»ý»ýËýsøi£UUU(U3U8UDUOUTU[U`UkUpUpU�U®U°UµUÀUÅUÅUäUV*V*V=VPVcVvV{V{VŽV¡V´VÇVÌVÌVßVòVWWWW-W@WSWfWfWfWtWt èŒžZžZ¼ZàZæZíZíZôZ[[/[G[3[S[b[t[}[…[�[§[¹[Â[Ê[Ò[ë[×[÷[ \\\ \;\'\[\G\g\}\i\�\‰\©\»\Å\Í\Í\Ö\Þ\ô\␍] ].]2]2]9]>]\]^]c]n]„]„]„]ˆ]”]µ]Ã]Ñ]Þ]ÿ]␍^^^^6^E^T^W^{^^¥^©^Ð^Ô^÷^û^û^û^___2_8_C_O_Q_Y___x_ƒ_‘_›_´_·_¿_Ë_Í_Õ_Ø_ñ_ó_ÿ_` ``(`@`L`a`f`x`‡` `±`±`¼`Ç`ß`ë`aaa&a?aPaPaVaaaiawa~a�au8š¤v¨v¨Ѝ�¨•¨™¨�¨¼¨ĨvÐó#ž5ž5À5Ö5â566)6@6S6^6`6€6ˆ6ˆ6—6—6Ÿ6«6Á6Ö6å6ð67 7 7 777"7-7D7F7K7Z7e7r7|7|7Š7wL�Ÿ&&&&&1&G&3&S&U&\&g&s&{&x$‹�Æ%Æ%Ú%û%&y$†‹†%†%š%»%Ã%z<{†%%7%$%C%N%Y%d%o%{%�%{(#)žœžœ­œ¼œÁœÇœ|()/ΜΜÛœéœîœôœ}(/5öœöœ����~(5;��,�;�@�F�$œœœ(œ.œ€4
ŽŽµ¢Á×Ðï÷�lÑè–Y–Y¬Y¸YÎYÛYßYîYZ ZZ0Z$ZAZCZCZtZbZCZ“Z�Z‚”[|ÊÑã.0Oa€†��•�¨³»ÃÎÙä ƒ4‘š¨¨$¨*¨.¨M¨n¨n¨t¨„(+1È(È(Ñ(Û(õ(ø(…,H88Vfppzz„–£¦¨±¾¾Øßßù$3BXXXhhzzˆ–¬¬å 4 4 B P c c – É Ï Ï Ï á †ÜH»è è 
^
g
m
„
›
²
ò
 ( - 2 = T f s † œ ° µ À à å è   $ , 1 K e m u z ” œ ¡ Á Æ É ã ý ␍␍␍␍)␍C␍K␍S␍U␍o␍w␍w␍|␍�␍Œ␍Œ␍—␍—␍£␍£␍µ␍õ␍  sôi¢6f6fLfXfcfhftff„f‹f�f›f f f¿fÞfàfåfðfõfõfg3gZgZgmg€g“g¦g«g«g¾gÑgäg÷gügügh"h5hHhJhJh]hphƒh–h–h–h¤htœè‹ÎkÎkìkllll$lDlIl_lwlclƒl’l¤l­lµl½l×lélòlúlmmm'm9mCmKmPmkmWm‹mwm—m­m™mÍm¹mÙmëmõmýmýmnn$n=nOn^nbnbninnnŒnŽn“nžn´n´n´n¸nÄnånónoo/o=oKoMoMofouo„o‡o«o¯oÕoÙopp'p+p+p+p1p?pIpbphpspp�p‰p�p¨p³pÁpËpäpçpïpûpýpqq!q#q/q1q9q?qXqpq|q‘q–q¨q·qÐqáqáqìq÷qrr0r5rGrVror€r€r†r‘r™r§r®rÀru4š£ƸƸÚ¸߸å¸é¸í¸ ¹¹vÌô#ÎFÎFðFGG0GLGYGpGƒGŽG�G°G¸G¸GÇGÇGÏGÛGñGHH H3H9H9H9H>HCHRH]HtHvH{HŠH•H¢H¬H¬HºHwH�žV6V6j6v6�6—6ƒ6£6¥6¬6·6Ã6Ë6x ‹�66*6K6S6y †ŠÖ5Ö5ê5 66z8{…f5f5‡5t5“5ž5©5´5¿5Ë5Ñ5{$#(î¬î¬ý¬ ­­­|$).­­+­9­>­D­}$/4F­F­S­a­f­l­~$5:n­n­|­‹­�­–­ V¬V¬e¬x¬~¬€0 Þ$Þ$%ò$%'% %?%G%�hÑçÆjÆjÜjèjþj kkk7k;kAk`kTkqksksk¤k’kskÃkÍk‚�[{)))!)3)R)X)_)~)€)Ÿ)±)Ð)Ö)Ý)Ý)å)í)ø)* ***)*4*S*[*ƒ0‘™f¸f¸t¸z¸~¸�¸¾¸¾¸ĸ„ð9ðð((22<N[^`ivv�——±¸ÎÎÜëú  22@Ndd�Öììú   N � ‡ ‡ ‡ ™ …ØHº    º ½ Ì Ì Ù ê í ð ð õ ú 



!
2
5
8
8
=
B
K
V
\
k
~
ƒ
˜
£
­
­
Ö
#
6
;
P
[
e
e
Ž
™
¤
Í
á
ì
 ) G M R ] { ‚ ‡ › Õ Ú à æ í ò ò ø þ    A G L j q q q v y  … Œ ‘ ‘ — � ¢ ¢ ¸ Ò à õ û ␍␍␍+␍2␍4␍N␍U␍U␍U␍U␍U␍U␍[␍`␍d␍f␍i␍t␍€␍ƒ␍…␍‰␍‰␍Ž␍Ž␍Ÿ␍±␍‡$�†®ì®ì¼ìÑì×ìˆ`ÈÜØ0Ø0ø01111!1*1/14141E1I1P1h1k1w1‰Tï2222)2;2F2T2a2o2�2Œ2š2 2¦2Š$d©0606U6a6k6q6{6�6‹6™6£6µ6¿6Å6Ï6Õ6ß6æ6ò6ø67,7;7>7@7J7\7f7{7{7~7ˆ7�7¢7²7½7Â7Ö7é7ó7888&8.8<8M8]8n8{8{8ˆ8ˆ8�8×8‹¼+V 4 484:4F4J4W4Z4t4t4t4z4~4†4‘4¥4±4³4³4¼4¾4¾4Ç4É4É4Ò4Ô4Ô4Ý4Ý4æ4ì4ï4ù4
5555„5Œh+X3X3h3o3{3�3‰3—3ª3¶3Í3Ú3Ú3Ý3ë3û3444�@ 3333'333C3H3K3O3W3ŽHVdˆ5ˆ5�5¤5©5·5Ì5Ò5Þ5ï5ï5ö5*6�0ÀȘ0˜0¦0°0»0Æ0Ì0Ò0�4 ¨2¨2¼2È2Ö2Ú2ò2õ2ý2‘$êïà1à1é1õ1ú1’,ãê°1°1¾1Å1Õ1Ø1Þ1“,Üãx1x1†1’1¢1©1¯1”8À`0`0n0u00Œ0�0‘0—0•t ÕîÈTÈTåTôTôTôTUUUU#U%U%U+U-U-U3U5U5U<U@UEUEUEUEUEUEUMUbUbUlUqUzU„U‘U¦U¨UÃUÅUàUåUVV V V V#VJVWVVoV�V�V˜V�V»V©VÁVÐVÕVÜVåVøVWW␍W␍W␍WW/W5W5WNW\WvWŒWŽW–WœW¤W©W©W¯W¯W¸WÉWËWàWâWêWðWøWýWýWXX XX/X1X9X?XGXLXLXLXLXZXnXpX„X„XŒX’XšXŸX¨X°X¹X¿XÅXÇXÇXÇXÏXÏXÝXñXõX÷XYY Y&Y.Y3Y<YGYJYPYVY_YbYbYpY~Y€Y£YÀYÆYÎYÓYÜYÞYÞYãYåYíYíYZZ Z+Z1Z4ZKZMZPZ`ZdZkZtZƒZ‘Z—ZŸZ¤Z¬Z±Z±ZºZÇZÌZÔZëZõZ[[#[([([.[3[3[9[>[>[D[I[I[O[T[T[Z[_[_[e[j[j[j[r[r[‹[™[³[É[É[Ë[Ë[Ô[Ú[ß[ß[ß[ç[ç[ð[ÿ[\\\\#\(\(\(\0\2\2\;\;\;\D\S\g\i\i\r\x\z\z\€\†\†\Ž\—\�\©\©\°\Ä\Æ\É\Î\Ö\Þ\ã\ã\é\í\ò\]]]]]']N]N]T]b]s]]†]”]£]»]Á]Æ]Æ]Ë]Þ]ê]ò]^ ^^#^*^,^5^5^;^I^U^h^{^�^•^—^ª^¯^¯^Ì^Ì^Þ^ä^í^ó^ü^
___"_(_*_5_G_Z_Z_n_z_Œ_‘_�_£_¦_½_¿_Â_Ò_Ü_ß_ß_î_```$`*`-`D`F`I`Y`]`e`s`x`}`}`ƒ`‹`�`�`–`–`¤`ª`°`º`Ä`ç`ê`ì`ö`ö`ø`aa
aaaaa"a"a'a2a7a<aGaLarataya~aƒaˆa�a’a—a—aœa¡a½aïaõaýaýa bbb!b+bNbQbSb]blbqbqbqbyb~b‡b‡bŒbŒb’bšbŸbŸb¤b¯b´b¹b¾bÍbÍbÞbäbäbòbøbþbcc5c8c:cDcScXcXcXc`cecncscscyc�c†c†c‹c–c›c c¥c´c´cÅcËcËcÙcßcåcïcùcd d!d+d:d?d?d?dGdLdUdZdZd`dhdmdmdzd€d€dŽd”dšd¤d®dÑdÔdÖdàdïdôdôdôdüde
eeeee"e"e/e5e5eCeIeOeYece†e‰e‹e•e¤e©e©e©e±e¶e¿eÄeÄeÎeÖeÛeÛeÛeáeëeñef
f
fff f%f%f+f9fBfJfWfafifnfnftf‚fŽfŸf¬f³f»fÅfÓfÓfØfØfãfãfãfçfìfìfòföfûfg g gg#g+g0g6g6g>gDgRg]gbghgpgugugugugugugugugugugŽg”g�g£g«g°gµg¾gÉgÒgÚgßgßgßgågígògògögûgûghhh+h1h1h:hNhNhTh]hqhqhzh|h‚h‹hŸhŸh¨h¨h¨h­h²h²hºh¿h¿hÜhêhöhÿhiiiiii0i9i?iQi[i[icicikimimi†i�i™i›i›i›i¡i¥i§i§i§i§i¬i²i¸i¼iIm–ĉpJpJ–J§J¬J³JÂJÂJÊJÝJáJæJûJýJKK K K#K/K6K:KAKIKKKSK`KnKvKxK{K‰K•K£K«K³KÁKÅKÓK—<ƒŽL>L>Z>a>l>t>{>�>‡>‡>�>˜P®¾ÎíÎíÜíîíôíüíîîî/î5î8îtî™\¾Ñvîvî„î–îœî¤î¶î¼îÅî×îÝîæîøîþîOïšhBXÐ;Ð;à;ç;ó;ú;<<<<)<2<@<L<U<^<g<m<u<›Xt†ÜIÜIòIþIJ
JJ+J1J=JEJPJVJYJcJœHŽœ”>”>®>µ>¾>Ê>ß>ç>í>ó>õ>õ>?�TARhphpvp„p�p–p¦p·p¼pÙpßpæpípûpqUqž@¢®ŽíŽíží¯í¸í¾íÂíÅíÍíŸXo�ìì,ì:ì@ìFìWìeìsì…ì‰ì�ì�ì ìªì H”¢6í6íFíZícíií{í{íí‚íŠí¡H†”ÞìÞìîìí íí#í#í'í*í2í¢tîPmPmnmrmvm~mˆm‹mŽm�m¡m¥m­m¶mÂm×mèmïmömömnnn£hLb„H„H¦H°H³H³H½HÐHÒHßHáHìHIIII#I+I.I@I¤´œE???&?&?<?C?E?a?a?a?h?r?v?z?}?}?†?Š? ? ?Ö?â?ó?@@@!@&@&@&@>@E@R@Y@l@t@|@�@�@™@¥@­@²@²@Ê@×@ß@ä@ä@ü@AAA!A-ACANAqAuAƒA‹A�A�A¨AÂAÌAØAàAåAåABB!B&B>BJBYB^BmBzBBBB‚B‡B‡B‡B¦B²BÃBÅBÈBÍBÍBÍB×BéBðBÿBCCC#C,C4C<CCCGCRC]CcCqCCC…C�C¦C«C«C¾CÆCÆCÈCÈCÈCÍCÍCÔCÚCÞCåCéCüCDDDDDDD8DADADEDSH¥”tÕ˜Q˜Q¼Q¿QÃQÐQÙQäQðQøQR*R*R6R8R8RDRIRIRURZRZRfRkRkRwR|R|RˆR�R�R™RžRžRžR R R¹RÇRÛRëRëRíRíRùRÿRSSSSSSS+S-S-S9S?SDSDSDSFSHSHSOSOSOSXSgSuSwSwSƒS‰SŽSŽS”S S S«S·SÄSÙSáSçSçSøSøSTTÂT¦XbtDIDIeIlI{I~I‚IŠIŽI’IšI¬IÉIÐIÜI§Œ#B�:�:¬:»:Å:Ò:Ù:è:þ:$;:;K;R;`;r;�;�;¡;¶;¾;Á;Í;¨@ÂÎ`L`LpLwL–L¡L¯LºLÂLÌLÔL©@ÂØKØKèKïKL#L)L6L@LYLª€#nn.n7nBn[n[n^nmnsn|n~n„n�n�n•nŸn¦n©n©n³n«H#1¸n¸nÁnÇnânçnoo1oWo^ooo‚o¬dl�==!=(=<=P=U=s=x=–=˜=¶=¸=Ï=ã=ì=î=>>C>­`Xlx<x<Š<‘<“<Ÿ<¦<µ<À<Ì<Ð<Þ<ð<ü<= ==®,ELTHTHbHkHyHH¯”0:®:®\®f®r®w®‡®�®¢®¶®Ä®Ò®é®ñ®û®
¯¯ ¯'¯*¯*¯*¯,¯;¯E¯N¯V¯Y¯k¯°P1Aˆoˆo–o§o³oÎoÓoóoõop+p+p3p:pap±Ð7NN0N4NuNƒN‰N£NÂNÐNÐNÕNÙNàNëNöNO O OOOO(O5O7ODOFOHOHOHOPOPOPOXO`OhOpOtO~OÊO²`äø`M`MvMvMzMM’M•MšMšM¤MªMªM»M½MÇM³LøÈMÈMÜMàMåMðMðMúMNNN N´˜7YÐOÐOäOèOñOôOýOPPPAPEPJPMPVPfPmPpPxP{PˆP�P˜P P§P·P·PÃPµ,&-&ð&ð4ðCðGðJðPð|YtÈPÈPÚPÜPàPéPõPQQQBQFQKQWQjQtQwQ‚Q…Q�Q—Q·<ÎÙØLØLìLðLõLÿL
M␍MMM¸<Ùä M M4M8M=MGMQMTMXM`M¹$@(@(J(R(W(º,!X(X(f(w(ˆ(‹(‘(»`iýÞ·Þ·ø·¸!¸!¸'¸/¸7¸?¸G¸M¸Z¸Z¸`¸e¸e¸k¸p¸p¸v¸{¸{¸�¸†¸†¸Œ¸‘¸‘¸—¸œ¸œ¸¢¸§¸§¸­¸²¸²¸¸¸½¸½¸Õ¸è¸î¸ó¸ó¸ü¸ ¹ ¹ ¹'¹)¹)¹0¹2¹2¹9¹;¹;¹B¹D¹D¹K¹M¹M¹T¹Z¹\¹\¹c¹i¹k¹k¹r¹x¹x¹€¹†¹Œ¹”¹”¹”¹”¹ ¹¨¹°¹¸¹À¹È¹Ð¹Ö¹î¹ý¹º
º
ººº º º$º,º3º;ºCºGºMºUº\ºdºlºpºvº�º‡º”º º¦º®º²º¹ºÁºÉºÍºÓºÛºâºêºòºöºüº» »"»3»8»;»á»¼`ÕiÖ³Ö³ð³ù³´´ ´'´/´7´?´E´R´R´X´]´]´c´h´h´n´s´s´y´~´~´„´‰´‰´�´”´”´š´Ÿ´Ÿ´¥´ª´ª´°´µ´µ´Í´à´æ´ë´ë´ô´µµµ µ!µ!µ(µ*µ*µ1µ3µ3µ:µ<µ<µCµEµEµLµRµTµTµ[µaµcµcµjµpµpµxµ~µ„µŒµŒµŒµŒµ˜µ µ¨µ°µ¸µÀµÈµÎµæµõµÿµ $¶+¶/¶7¶?¶E¶M¶T¶\¶d¶h¶n¶y¶Œ¶˜¶ž¶¦¶ª¶±¶¹¶Á¶Å¶Ë¶Ó¶Ú¶â¶ê¶î¶ô¶ÿ¶··+·0·3·Ù·½0 þ®þ® ¯¯¯#¯)¯¾$°'°'¿'Ø'Þ'¿pýæ»æ»ú»¼¼(¼,¼3¼:¼C¼R¼T¼T¼h¼j¼s¼y¼y¼y¼y¼�¼À`¢æ°æ°±±±±$±&±2±2±?±A±N±P±\±\±r±{±{±†±�±œ±§±­±²±´±À±Ç±Ö±á±ç±ì±î±ú±ú±²²#²)²/²5²9²9²f²m²ƒ²�²•²›²¡²£²£²±²ÁP¢²¶²¶²Ì²Ï²Ò²ß²å²å²ò²õ²ø²þ²³
³Â”²Ó³³*³6³:³>³E³L³[³f³l³q³s³³†³Ž³”³š³ž³ž³­³´³¼³Â³È³Ê³Ê³Ö³Ã,!(®¯®¯·¯Å¯Ë¯Í¯Ò¯Ä¸«®y®yÈy×y×yÚyãyïyïyûyz1zCzUzYziz‰z›z¡z´z½zÁzÇzÐzÐzñzõz{{0{B{H{[{m{y{{{‡{�{“{™{¢{¢{¢{¢{´{Ê{Ð{Ü{ñ{ø{| |!|(|(|(|6|D|N|Q|_|i|l|~|ƒ|ˆ|˜|›| |°|³|·|À|È|Ú|â|ë|}}}(}/}7}I}O}^}o}o}v}v}v}„}’}œ}Ÿ}­}·}º}Ì}Ñ}Ö}æ}é}î}þ}~~~~(~0~9~9~D~[~s~w~ƒ~›~£~©~µ~¾~Â~Ê~Ó~Ó~Ó~ì~ô~ú~"(...5GS[aggi{Å|Æ’Æ’Ô’é’ð’û’“Q“m““““™“¥“®“¶“¾“À“Æ“Ì“Ø“à“æ“è“î“Æ0 Ö®Ö®ä®ë®ó®ø®þ®Ç<(3֯֯߯߯í¯ñ¯ø¯û¯°È<3>°°°°°!°/°2°7°É<>I>°>°G°G°U°Y°`°c°h°Ê8ISn°n°w°w°z°ˆ°–°™°ž°Ë @D–½–½¤½°½Ì$ ø'ø'( ((Í$ à'à'é'ñ'ö'ÎD$v;v;“;›;­;É;Ô;æ;í;þ;<<< <><><S<U<U<a<i<m<z<z<†<Ž<’<Ÿ<Ÿ<Ÿ<¬<²<Ã<Ã<È<à<ï<ô<ú<=
=
=='=6=;=A=L=Q=Q=_=h=t=|=„=Œ=�=•=š=£=µ=¾=Ï=ß=ß=ä=ì=ô=÷=ý=ý=>>>> >>>W>n>{>ƒ>‹>—>£>©>°>¹>½>À>Ì>Ò>Ù>Þ>Þ>ì>ü>ü> ? ???"?1?6?6?=?H?N?V?\?g?l?l?{?†?˜?ž?¦?¬?±?¼?Î?Ô?Ü?â?ç?ç?û?@ @@@$@*@*@L@s@x@x@Œ@’@¨@¹@¿@Ä@Ý@ã@ó@û@A AAA"A(A>AOAUAZAsAyA‰A‘A™AŸA¤A¤AºAÀAÖAçAíAòABBB B(B.B5B:B:BPBVBlB}BƒB…B”BšB¤B¬B´BºBÁBÁBÁBÓBÜBíBýBýBCCCC)C<CCCICQCWCgCmCuC{C{C{C€C€C€C€C€CŸC«C°C°CÆCÏCÚCãCîCùCþCþCDD0DADGDLD^DdDiD‚D D D¥D¥D±D¹D¼DÂDÈDÍDÍDñDùDEEEEE.ELELEQEQE]EeEhEoEuEzEzEšE¢E²E¸E¿EÝEìEôE FFFF$F<FDF\FdFgFnFtFtFtF“F£F¯F·FºFÁFÇF×FæFòF␍GGG G%G=GIGdGlGoGvG|G|G|G|G�G�GšG°G¶GÎGáGçGìGþGH H%H+H7H?HBHIHOHxH€H�H–H�H�H�H¢H¢HÃHÙHßH÷H
III@IFIYI¢I¾IÆIÌIÑIÑIëI÷IJJJJJ-J9JEJPJPJUJUJoJ{J‡J’J’J—J—J­J³J¿JÅJÊJÜJâJçJöJKKKK!K4K?KHKTK\K_KeKkKpK„K“K›K³K»K¾KÄKÊKâKêK
L$L,L/L5L;L;LLLULaLiLlLsLyL~L�LŸL§L¿LÇLÊLÑL×LïL÷LM0M8M;MBMHMHMXMaMmMuMxM~M„M‰M�M¬M´MÎMÖMÙMßMåMýMN'NCNKNNNTNZNZNkNtN€NˆN‹N’N˜N�N¯N¾NÆNáNéNìNóNùNOO;OXO`OcOjOpOpOpOpOpOuOuO‹O‘O�O£O¨OºOÀOÅOÓOßOèOôOüOÿOP PP#P2P:PRPZP]PdPjP‚PŠP©PÃPËPÎPÕPÛPÛPÛPìPõPQ Q QQQQ0Q?QKQfQnQqQxQ~Q–Q¢QÄQáQéQìQóQùQùQùQùQùQþQþQR,R2R=RBRBRURkRqR|R~R~R‘R´RºRÅRÅR×RàRñRöRSSSSS0SFSLSZSiSnSnS�S—S�S«SºS¿S¿SÕSÛSøSTT:T@TETQTZTiTiTnTnT„TŠT§T¿TÁTéTïTôTU UUUUU3U9UVUnUpU˜UžU£U¯U¸UÇUÇUÌUÌUâUèUVV VGVMVOV[VdVoVoVoVoVtV‚V‹VœVžV°V½V½V½VÍVÝVâVWWWW-WJWZW~WŽW”W”W”W™WžW³WÆWXXXX!X2XAXsX{X�XƒXˆX�X�X˜XªX½XÆXÕXÕXÚXßXîX÷XYY␍YYY9Y@YFYNYYY_YoYuY}YˆYŽYŽY“Y˜YŸY¦Y­Y´Y½YÌYÌYÌYÑYÑYÑYãYèYèYúYZ␍ZZZZZ Z Z+Z<Z?ZKZTZ`ZgZmZrZrZ}ZŽZ‘Z�Z¦Z²Z¹Z¿ZÄZÄZÄZÄZÉZÎZÎZÕZÙZÙZåZîZñZñZüZþZ[[[,[7[B[H[Q[U[U[a[j[m[m[x[z[Œ[“[™[¡[¬[·[½[Ç[Ê[Î[Î[Ö[Ý[à[â[í[ñ[ú[ý[ý[\
\"\)\4\?\B\H\M\M\T\X\X\d\m\p\p\{\}\�\–\œ\«\¶\Á\Ç\Ð\Ô\Ô\à\é\ì\ì\÷\ù\ ]]] ]+]6]<]F]I]M]M]U]\]_]a]l]p]y]|]|]‡]‰]¡]¨]³]¾]Á]Ç]Ì]Ì]Þ]â]â]î]÷]ú]ú]^^^ ^&^8^C^N^T^Y^Y^d^i^i^t^y^y^y^y^y^y^y^~^ƒ^ƒ^Ž^‘^•^œ^¡^¦^«^«^¿^Ä^Ä^Ñ^Õ^æ^î^ò^_␍____*_2_8_H_L_]_o_z_~_~_‹_“_›_¡_¡_¡_¡_¡_£_£_±_¸_Å_Ñ_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_ß_á_á_ø_þ_
`
``,`G`I`U`b`b`z`‡`’`›`¤`¯`¶`¶`À`À`Ã`Õ`ó`ÿ`ÿ`BcÏÀ mFcFccckcnc|cŠcŸc¨cÀcÖcècócdddd(d1d=dPd�d\d‘d¥d¶dÂdÐdîde$e5e7e>eseseve{e~e~e…eœe£e°eµeÄeÑeäeäeøeüeff4f9f9fIfQfafkf{f…f•f¡f¦f¦f¶f¾fÎfØfèfòfggggg'g5g?gDgQgfgfgkgug„g‰g�g”g”g™g£g²g·g½gÂgÂgÈgÎgÓgÓgâgõghhh-h5h;hDh[hoh€h�h’hªh½hÔháhéhühi
iiii!i!i!i!i!i-i-i-i6iOidili‡i˜i¥i§i»iÀiÀiÀiËiÙiÞiÞiåióiøijj.j:j@jOjSj\jej‚jŽj”jšj­jµj½jêjûjk
kkkkk$k2k7kJkVkbkhklkukzkzkzkzkzk’k—k—k—k—k—k¨k¨k¨k¨k¨k¨k¨k¨k¨k¨k±kÊkßkçkll l"l6lBlGlGlGlPljlvl�l©l©l®l®l®l®l®l®l®l®lÃlÈlÈlÈlÙlälélélélmm.m2mJmZmbmjmŸm¨m¬mÄmÔmÔmÔmÔmÔmöm/n8n<nBnGnPnYn^n^n^n^nmn�nŸnªn¯nµnºnºnÍnánooo o o%o%o4oHofoqovo|o�o�o”o¨oÎoÙoáoçoçoìoìoìoõop#p+pFpWpdpfpupwpwpwpwpwp‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹p‹pšp©p´p¶p¶p¿pÁpÁpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕpÕp×p×pîpôpqqq qqIqXqdqzq”q—q¡q­qÓqóqr7r9rLrRr•r•r˜r¨r°rËrÜrßrùrss+s+sVsYshs|s�s®sÊs¶sæsøstItGt1t"tWtWtWtZt_tbt|tŠt¸tÚtÚtuuu+uLu]uyueu•u³uæuäuÎu¿uôuôuôu÷uüuüuvv4v@v©yÐð«ã~~—›¦­¸ÌÌ×èïü€€€.€.€7€<€D€X€f€u€€€“€“€¦€¦€¼€Û€Û€ï€ñ€ñ€ü€�����$�,�,�,�=�=�=�A�I�O�T�T�X�`�d�j�o�o�{��� �ª�½�Â�Ê�Ê�Ï�Ï�Ö�â�÷�‚‚‚ ‚2‚7‚?‚E‚E‚J‚Q‚\‚„‚�‚ž‚¨‚°‚¶‚È‚΂Ó‚Ó‚Ó‚Ó‚Ó‚Ó‚Ó‚Ó‚Ó‚Þ‚ê‚÷‚ƒ␍ƒƒ(ƒ-ƒ5ƒ:ƒBƒGƒGƒGƒOƒWƒ`ƒhƒmƒuƒzƒ�ƒŒƒ´ƒ¿ƒǃÖƒàƒòƒ÷ƒýƒ„„ „„#„6„>„F„[„]„h„p„…„…„¡„©„°„¶„º„¾„̈́ބô„………)….…:…E…J…J…k………Š…’…¡…©…±…Æ…Ë…Ö…Þ…ó…ø…††&†.†C†O†T†`†k†p†p†p†p†p†p†{†{†{†{†{†{†{†{†{†{†{†{†††¦†ÆÓ†Ù†á†ô†ù†‡ ‡ ‡‡&‡,‡4‡<‡>‡^‡f‡o‡w‡‡„‡‰‡�‡›‡Ç·Ö‡å‡ï‡ˆ␍ˆˆˆˆˆ#ˆ,ˆ/ˆ9ˆGˆYˆ[ˆmˆˆˆˆŠˆ�ˆ¬ˆ±ˆ±ˆºˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆ¿ˆʈֈ∉‰‰=‰B‰J‰Q‰^‰f‰o‰w‰~‰ƒ‰ƒ‰‹‰“‰¯‰·‰º‰¼‰̉Ö‰Ö‰Ö‰؉ë‰ü‰ÿ‰Š
ŠŠŠŠŠ%Š,Š9ŠRŠYŠ^ŠvЀЛдмŠÉŠâŠéŠéŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠîŠöŠ‹ ‹‹ ‹ ‹(‹0‹=‹B‹B‹B‹F‹K‹K‹[‹`‹`‹`‹v‹‚‹”‹§‹­‹µ‹Ê‹Ñ‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Ù‹Û‹Û‹ö‹ü‹
Œ
ŒŒŒ!Œ/Œ<Œ<Œ<Œ@ŒKŒiŒwŒƒŽÑø{†Ž†ŽœŽ§Ž®Ž¹ŽÄŽÛŽæŽíŽýŽ���%�?�F�O�V�Y�e�n�u�x�}�“���¯�µ�Á�Ö�Ý�å�ñ��␍�␍�␍��)�3�6�D�N�Q�c�h�m�}�€�…�•�˜�œ�¥�­�¿�Ç�Ç�Ç�Ý�ç�ù�ÿ� ‘ ‘'‘/‘A‘G‘V‘g‘g‘n‘n‘n‘|‘Š‘”‘—‘¥‘¯‘²‘đɑΑÞ‘á‘æ‘ö‘ù‘ý‘’’ ’(’(’4’B’B’E’P’n’|’Å’Ò´pÙ——0—H—O—V—a——’—•—ž—¥—­—À—Ñ—Ý—í—û—þ—˜˜˜&˜,˜<˜A˜P˜Z˜p˜|˜‘˜™˜¤˜¯˜º˜ŘИܘè˜û˜™™/™F™N™W™_™‡™�™•™Ÿ™Ÿ™¬™¿™Å™Í™à™æ™î™î™ü™šš.š4š<šOšUš]š]š†š†šŒš­š±š´š¿šÙšåšõš›1›E›M›W›v›Š›Š›œÓ`pî“î“”&”+”B”T”Z”d”r”z”‰”Ÿ”¡”ª”À”ΔÖ”Þ”à”ë”ö”ö”þ”•••"•+•3•6•?•M•^•p•s•x•‹•£•·•¿•¿•ѕԕٕ앖– – –A–D–I–\–b–w–�–�–¤–º–––Í–ì–ó–þ–—ÔØ³bb/bAbObXbzb„b’b¯b¼b¼bÆbÆbÞbîbîbùbc ccc)c0c;cScYc\cqcvc�cŒc¦cÁcÕcöcd ddd"d/d5dVdZd`dhdmdud–dšd d¨d­d­dºdÀdÛdÇdçdëdñdùdþd e#e)e1e@e[eGegekeqeye~eŸe£e©e±e±e¶eÃeÉeêeîeôeüef%f)f/f7f7fDfJfkfofuf}f…f¦fªf°f¸f¸f¸fÍfÍfÍfÍfØfâfëf gg(g-g>gRgWgWgbgjgrg{g›g¨g·gÆgàgågågðgøghhh(hBhThfhqhvhvh�h—h¬h¸hÉhÎhßhóhóhûhóhiii'i,i,i;i@i@iQiViVigililiiŽi“i“i¦iµiºiºiÜiáiáijjj*j/j/jQjVjVjsjšjŸjŸjÁjÆjÆjãj
kkk1k6k6kSkzkkk¡k¦k¦kÃkêkïkïklll1l6l6l6lQlVlVlVlqlvlvlvl‘l–l–l±l¶l¶l¶lÑlÖlÖlÖlñlölölölmmm'm,m,m=mBmBmNmYmnmsmsmm˜m�mÀmÇmÑmÖmçmñmnnn'n2n:n?n?nCnGnNnXnbnbnunznznzn~n—n n nÃnÈnÈnÐnänínoo o*o5oGoSo\oaoaoaoro�ošo¤o¯o´o¿oÇoÌoÌo×oßoèoóopp3pGpLpLpWpjptpp p¬p½pÂpÓp×pÜpÜpìp÷pÿpqqq'qAqSqeqpquq€qˆq�q˜q¥q°qÊqÜqîqîqîqîqóqøqøqrr;rYrYrcrwr�rƒr�r—r´rÅrÏrÚrýr s0s;sSscshshsssxsxs€s‹s�s�s˜s£s¨s¨s°sÎs¸sæsësësóstûs)t.tBt.tZt_t_tltqtqtyt~t~tŠt›t­t²t²tÆt²tÞtãtãtëtðtðtuuuu u u:uJuOuOuiuyu~u~u˜u¨u­u­uÇu×uÜuóuÜu vvvv v\vJv vtvyvµv£vyvÍvÒvÒvávñvövövwwww)w7w<wdwRw<w|w�w©w—w�wÁwÆwîwÜwÆwx x x(xxRxbxgxgx‚xnx¬x¼xÁxÁxÍxÒxÒxÞxãxãxöxy y yy.y3y3yFyVy[y[yny~yƒyƒy‹y�y�y˜y�y�y¥yªyªy²y·y·yÊyÏyÏyâyçy5z#zzçyBzGz•zƒzqzGz¢z§z§z¶zÑzÖzÖzçz{{{{&{+{+{3{8{8{@{E{E{M{R{R{Š{x{Y{©{Ä{É{É{|ï{Ð{ |;|@|r|`|@|Š|�|Á|¯|�|Ù|Þ|ø|Þ|}}2}}J}O}O}[}t}„}•}»}½}Ó}Ù}õ}~3~u~R~�~‰~‰~‰~•~š~š~­~¸~Â~Ç~Ò~Ü~á~á~û~␍!␍-8=Q=]hmmx†‹‹–¡¦¦·¼¼ÍÒÒì÷ü€ü€€)€€5€:€B€:€N€S€g€S€s€x€x€Œ€x€˜€˜€�€©€�€¼€Á€Á€Í€Á€à€å€å€ñ€å€� � �� �(�-�A�-�M�Y�d�o�t�ˆ�t�”� �«��»�Ï�»�Û�ì�ñ�ñ�ù�þ�þ�‚ ‚ ‚‚‚‚"‚'‚'‚0‚5‚5‚@‚E‚E‚P‚U‚U‚`‚e‚e‚p‚u‚u‚€‚…‚…‚�‚•‚•‚ ‚¥‚¹‚¥‚Å‚ЂÛ‚æ‚ë‚ë‚õ‚ú‚ú‚ƒ ƒ ƒƒƒƒ"ƒ'ƒ'ƒ/ƒ4ƒ4ƒAƒFƒFƒSƒXƒXƒXƒXƒXƒ`ƒeƒeƒmƒrƒrƒzƒƒƒ‡ƒŒƒŒƒ”ƒ™ƒ­ƒ™ƒ¹ƒʃσσáƒìƒ „„'„2„K„7„W„b„m„r„r„„„�„¯„´„ʄՄî„Ú„ú„…………'…2…R…W…m…x…‘…}…�…¨…³…¸…¸…Þ…Ê…ê…
††%†0†5†P†<†p†\†|†’†~†²†ž†¾†ɆΆΆô†à†‡ ‡%‡;‡F‡K‡f‡R‡†‡r‡’‡¨‡”‡ȇ´‡Ô‡߇ä‡ä‡
ˆö‡ˆ6ˆ;ˆQˆ\ˆaˆ|ˆhˆœˆˆˆ¨ˆ¾ˆªˆÞˆʈêˆõˆúˆúˆ ‰‰‰‰"‰"‰"‰(‰-‰-‰-‰7‰9‰9‰C‰P‰p‰r‰r‰|‰|‰|‰|‰|‰|‰|‰~‰~‰•‰›‰¦‰¦‰³‰¹‰À‰ˉÖ‰á‰ì‰ñ‰ŠŠ2Š:ŠcŠ[Š{Š{Š{ŠƒŠŒŠ’Š�Š�ЫооŠÖŠàŠôŠ‹‹‹/‹?‹T‹f‹v‹v‹ž‹¥‹§‹­‹³‹³‹‹Ô‹Ø‹Ý‹ä‹ô‹ŒŒŒ.Œ5Œ:Œ:Œ>ŒIŒUŒcŒ�Œ™ŒªŒ¸ŒëŒ÷ŒüŒ�*�6�G�L�]�|�ª�Ð�Ó�ã�å�å�é�ŽŽŽŽ$ŽRŽrŽrŽrެ�Õ0.¯.¯7¯=¯E¯T¯c¯h¯Ö0!n¯n¯|¯‚¯†¯•¯¤¯ª¯×,¶½¶½¿½É½Ù½ä½ä½¾ØØ4fþ¾þ¾¿¿¿B¿B¿_¿r¿…¿˜¿�¿�¿»¿É¿Ü¿ï¿÷¿÷¿ù¿ù¿ù¿ ÀÀÀÀÀ(À;À;À;ÀMÀYÀlÀ‚À‡ÀŽÀ•ÀªÀ½ÀÄÀÄÀÇÀìÀÙ¤/T®ú®úÈúÎúÕúÝúåúèúóúûûûûû-û-û0û8ûNûQû_ûbûeûlûpûxû†û˜ûžû¦ûÛûÚD¬9p„p„ˆ„²„º„º„Ȅۄô„÷„………………%…'…'…/…1…1…9…9…B…H…M…M…V…b…f…k…q…v…v…~…‡…�…’…’…—…£…»…Ú…Ý…ò…†††††††#†%†%†%†-†/†/†/†7†9†9†D†D†J†O†V†a†q†q†q†q†x†ƒ†“†“†ž†¢†¨†À†Î†á†í†
‡␍‡‡&‡.‡7‡B‡B‡M‡S‡X‡_‡j‡o‡v‡�‡�‡“‡¨‡°‡¶‡Ø‡ä‡ê‡ï‡ö‡ˆˆˆˆˆ ˆ ˆ'ˆ2ˆ=ˆ=ˆ=ˆ=ˆ”ˆÛDýÊæ¥æ¥¦¦¦ ¦$¦*¦<¦B¦Z¦`¦~¦’¦�¦£¦Å¦Å¦Õ¦ê¦ì¦ï¦û¦§ §§!§'§-§9§9§;§M§S§X§X§o§o§�§�§ §­§²§²§É§Ò§á§÷§¨¨¨+¨8¨J¨P¨Z¨f¨s¨u¨u¨}¨‚¨‚¨Š¨�¨�¨—¨œ¨œ¨¤¨©¨©¨¯¨´¨´¨»¨À¨À¨Ç¨Ì¨Ì¨×¨Ü¨Ü¨ç¨ì¨ì¨÷¨ü¨ü¨©©©#©)©,©3©6©A©H©K©]©_©e©p©p©p©z©’©§©·©È©Î©ß©å©ê©ô©ªª%ª+ª<ªGªQª`ªoªuª€ª†ª›ª¡ª²ª½ªÃªÓªÓªãªöª«
««!«'«8«C«H«e«z«ˆ«˜«¤«¶«Á«Ð«Ò«ä«ì«ñ«ø«ü«
¬¬¬$¬*¬5¬;¬=¬J¬W¬a¬†¬†¬Œ¬“¬Ó®Ü4¤í†¢†¢ ¢¤¢¼¢Ä¢Ì¢Ö¢Ú¢á¢ç¢û¢££ ££!£)£4£?£A£Y£`£g£r£}££Š£•£—£££¬£¬£Â£ã£é£ï£¤¤¤!¤'¤'¤/¤3¤>¤C¤U¤`¤d¤r¤t¤x¤‡¤‡¤‡¤˜¤˜¤�¤¯¤µ¤#¥Ý˜Š¬8ƒ8ƒFƒXƒ\ƒdƒlƒwƒ‚ƒŠƒ•ƒ ƒ¥ƒ½ƒÄƒËƒÖƒáƒãƒîƒùƒûƒ„„„&„.„.„2„i„Þl␍¤ޑޑ«‘²‘º‘őݑç‘ç‘ÿ‘ ’$’:’H’L’l’€’‡’Š’£’­’¾’À’Ñ’Ñ’Ø’ß’è’í’ò’ù’““!“1“5“5“?“U“Y“Y“k““““““𓥓¬“µ“À“ǓГۓâ“â“í“ ”””B”B”H”O”^”f”t”{””�”“”“”“”¥”­”Ó”á”á”å”ú”•••2•7•E•T•\•j•u•y•~•†•Š•™•›•ª•¬•»•½•̕ӕٕí•õ•–
–––)–.–L–T–b–i–m–u–ƒ–Š–Ž–ª–²–½–Ã–Ã–Ã–Ì–×–ç– ———+—3—>—C—K—V—b—f—q—v—ˆ—�—›—›—›—›—©—¸—Õ—á—é—ù— ˜'˜+˜Z˜@˜j˜j˜t˜{˜Š˜™˜¡˜¯˜¶˜º˜¼˜Ë˜Ó˜á˜è˜ì˜ì˜î˜™™™™™™$™6™>™V™‚™�™”™²™¹™À™Ë™á™ã™ê™ý™šššš š3š;šIšPšTšTšTšTšbšmš|š„š’š�š¡š¡š¦š®š²šÁšÃšÒšÔšãšåšôšûš›››+›2›6›F›Q›V›t›|›Š›‘›•›�›«›²›¶›Ò›Ú›å›ë›ë›ë›ô› œ#œ3œ>œSœXœcœsœ•œ�œ¨œ·œ¿œÊœÏœ×œâœîœòœýœ���'�'�'�'�;�K�`�m�q�…�–�«�¸�¼�Ê�ß�ï�ž ž8ž:žEžMžMžVžkž|ž“ž¬žÅžÇžÒžÚžÚžÚžôžŸŸ%ŸBŸQŸ}Ÿ„Ÿ„Ÿ”Ÿ¨ŸÂŸÂŸÆŸÜŸëŸ  ( 0 0 R R e € ‰ ž ¾ Í ù ¡¡6¡F¡^¡^¡v¡v¡‚¡š¡²¡»¡»¡»¡Ç¡Ø¡ð¡ù¡ù¡¢ ¢¢¢�¢ßPíý&¥&¥8¥M¥^¥q¥x¥€¥�¥˜¥©¥¯¥á¥àSv v ™ ® ³ » à Ë Ø Þ ç í ò ú     - - / K Q S U b b b g p x � ‰ ‹ “ › £ °  Á È Ø ã ï ␍␍␍ ␍%␍6␍=␍E␍E␍Y␍i␍q␍t␍Ú␍ádVïVïbïyï‰ï�ï•ï™ï£ï­ïµï¸ï¾ïâp6 6 L W b p { � ’ ˜ © ¯ » Ò Ò ä õ     m ãœTwÞûÞûúûÿûüüü!ü1ü9üAüFüQü[üaülü|ü„ü”ü›ü£ü«ü³ü»üÀüËüÙüÙüïüä”*KVÇVÇ^ÇbÇnÇÇ�ǑǜǮǹÇÄÇëÇëÇÈÈÈÈ È&È9ÈBÈPÈaÈ}ȂȟÈå f*îÀîÀÁÁÁ&Á(Á(Á9Á9Á9ÁAÁIÁ[Á[ÁÁ�Á�Á›Á�Á�Á¨Á­ÁÇÁÌÁÌÁÌÁáÁãÁðÁòÁÿÁÂÂÂÂ%Â4ÂAÂCÂWÂdÂdÂdÂmÂ’˜ ¢¯¯ÂÄÂÄÂÄÂÏÂÙÂñÂöÂöÂöÂÃ
ÃÃÃ"Ã4Ã?ÃDÃDÃKÃOÃ]ÃdÃmÃtÆÃ�ÔÃ�Ã¹Ã¾Ã¾Ã¾Ã¾ÃÆÃÑÃßÃßÃÿÃÿÃÿÃÄÄ#Ä6ÄIÄKÄKÄKÄ^Ä^ÄeÄlÄqÄwĉēĮÄ×ÄÝÄÝÄñÄöÄÅÅÅ-Å:ÅEÅLÅPÅPÅPÅPÅ[ÅeÅs੮ÅÇÅÇÅÕÅÿÅÆ#Æ:ÆMÆRÆRÆRÆZÆeÆwÆ‚Æ‡Æ‡Æ‡Æ™ÆÆÆÌÆÌÆÌÆ×ÆáÆíÆøÆúÆúÆúÆÿÆ Ç ÇUÇæ¤>n n † ˜ ž ª µ à Ï æ ñ !!! !%!8!>!G!M!_!e!p!x!†!“!Ð!ç’ÐÆÆäò
(.39GN]bnŒ—ª±Ëèô'CL[cpy~�½ÂÊãõ  %kF{‘ÆÉé}èP™iöËöËÌÌÌ&Ì0ÌHÌXÌaÌgÌkÌoÌq̴̶̙̦̬̰̺̉̾̾ÌáÌåÌëÌëÌòÌÍ)Í<ÍOÍUÍ\ÍgÍqÍuÍxÍÍ…Í‹Í�ͧͬ͡ͳÍÀÍÂÍÔÍÖÍÛÍèÍêÍüÍüÍüÍüÍüÍÎ)Î5ÎOÎOÎdÎpÎ�αÎËÎÐÎçÎìÎúÎÏÏÏ-ÏBÏHÏXÏeÏ}Ï„Ï�ϛϨϴϴϴϺϽÏÀÏÙÏßÏóÏùÏÐ Ð ÐÐÐ*Ð*Ð0Ð>ÐUÐ[Ð^ÐaÐhÐoÐvÐvÐ{ЈЕЕЛЩÐÀÐÆÐÉÐÌÐÓÐÓÐäÐéÐöÐÑÑ
ÑÑÑ!Ñ(Ñ3ÑGÑGÑaÑfÑmÑuÑ|Ñ‹Ñ�јѰѵÑÞÑéÑðÑøÑÒ%Ò%Ò@Ò@ÒZÒoÒvÒ˜Ò«ÒÏÒÑÒÛÒýÒýÒýÒÓ$Ó2ÓJÓNÓ#Ôé S’Þ␍Þ␍ 09;HHJdjln{{{{Ž—Ÿ¨°·½¿Ûßñ
#00DKR[ir’˜œ¡¦©³ÆêP&¾ï¾ïÊïáïñïõïýïð ððð ð&ðë4îøîøùNù?ùùùbùjùì ÐÏ~~›¦¹¦Óááñú;GSYd††™¤ª±ÉÔßæîûû␍"''':?RX_tˆˆ���¢¢§®½¿ÇÎÎÝãð÷ú$3>EG[mrwwwŠ�ž¥¬ÁÕÕÚÚâøý)8JYlp�›ªÇÒ׿ý +;=KXho„‹—¨¿ÁÍØÚÚåù '<CS_€‡“´´´¼ÇËÓ×âéù#*5>FKKZgu€‹™Ÿ¥«´»ÍÚâîü)+7X^djs„®·ÁÎæíù##05GMMMMí€Ïë4FLXoo�‡’¢®·½ÃÎÜéõBî4-6VðVðdð„ðŠð�ð�ð–ðïH f*f*t*~*ˆ*˜*�*£*¯*±*Ã*Ã*Å*õ*ðˆ{™®Ê®ÊÀÊÕÊßÊèÊêÊñÊË ËËËËË/Ë2Ë2ËSË^Ë`Ëyˀ˄Ë�Ë£ËöËñ$␍.¾.¾7¾K¾P¾ò$޾޾—¾¶¾»¾óp4¾¾¾¾Ì¾Ö¾ß¾æ¾í¾÷¾÷¾ý¾ô$␍¾¾¾(¾.¾õ$V¾V¾d¾ƒ¾‰¾öÐK{¦È¦ÈºÈÏÈÞÈâÈðÈöÈÉÉÉ É*É5É<ÉLÉvÉ|É�ɅɕɕɫɭɷɨÉãÉåÉþÉÊÊÊÊÊ(Ê0ÊCÊ­Ê÷ø€ºf/f/„/‡/�/¡/©/º/Ç/Í/Ò/Ò/ß/è/î/þ/ 0 0&020>0>0L0_0j0n0000„0„0�0Ÿ0²0¸0½0Ñ0×0ß0ñ0÷0ù0111!1&1,12191E1L1N1S1[1]1b1n1p1u1}11„1Œ1Ž1“1›1�1¢1¬1®1³1½1½1½1Í1Í1Í1ä1ê1ð1û122!2'22262<2G2`2k2v2|2‰2Ž2“2“2¨2°2¸2Ö2á2ì2ò23
333)30393E3K3W3[3`3p3{3†3ˆ3Ž3›3 3¥3¾3É3Ô3Ô3Ú3ç3é3î3÷344&4,49494=4B4B4S4U4U4h4j4j4}444’4”4”4§4©4©4»4»4Á4Æ4Æ4Ý4ñ4æ4þ45␍555/515J5J5d5g5i5u5‡5—5£5º5Ô5Ù5í5ý56666/6A6L6T6\6`6n6t6y6y66“6£6¨6¨6®6´6¹6¹6¹6¿6Î6á6î6ò6÷6÷6û67777767L7X7X7^7k7m7x7„7“7¦7¦7³7¿7¿7¿7¿7Ã7È7Ù7ë7ö7þ7888 8-898?8L8L8c8s8s8‡8“8•8ž8ª8Á8Á8Ç8Ô8Ö8è8è8ó8ó8ó8ó8ó8o;øŒ/nùnùŽù–ùšù¨ù®ù´ùáù÷ù úú0ú6úBúGúUútú}ú�ú�ú–ú–úœúœú¬úù  Cö*ö*+++.+F+L+Z+k+s+z+�+¶+Ð+Ý+ê+ú+,,,5,<,B,P,X,n,y,,…,¨,ú,JÖ!Ö!ó!û!""("."9"P"_"j"n"y"…"�"œ"³"Ê"Ý"ô" ###+#1#B#H#X#X#p#p#•#•#š#š# #¬#¹#Å#Ú#ñ#$ $$)$@$X$y$y$‚$‡$‡$‡$‡$—$ $¨$­$»$É$Ù$Þ$Þ$ö$ö$û$û$%%"%(%4%D%O%Y%]%f%%‚%’%Ÿ%¯%¿%Æ%Ì%Ø%à%ë%ò%ö% &&&'&-&=&M&M&z&œ&¨&°&»&Â&Í&Ï&Ú&Ú&ê&ï&ï&ù&'''*'7'D'N'R'['t'w'‡'Ž'“'“'§'§'¬'°'À'É'Û'á'ã'ã'ñ'÷'ý'(( (0(0(0(5(M(M(\(_(s(‘(œ(Å(×(â(ô(ø(ý())&)>)E)I)O)W)b)e*ûC€®,®,Ê,Ñ,é,- ----&-2-=-K-[-k-r-y-Ž-£-£-·-Ï-Ü-ë-ø-..%.3.:.A.V.k.k..Œ.š.ª.°.Á.Á.Ç.Õ.æ.ó./e/üˆwÕöüöüý#ý*ý2ý5ý5ýEýPýPýSýZýaýhýnýtý{ý�ý’ý’ý”ý�ý©ý¯ýÕýÜýßýïý÷ýüýüýþ þþ þ&þ1þBþBþKþPþZþaþhþpþvþxþ†þ�þ þ¯þ»þÈþÈþÈþÈþÎþàþæþ÷þÿ,ÿ@ÿGÿQÿYÿ`ÿ`ÿiÿpÿÿ�ÿšÿšÿšÿ®ÿÂÿÒÿÕÿ�ý|Ôo¶ã¶ãØãßãîãùã ä ä(ä*ä*ä1ä[äeäeätäƒä˜ä£ä£ä²ä¹äÉäÏäíäøäúäåå$å4åFåOåZå_åeålå‘å–å¤å­å­å´åÃåÚåÚåéåïåæ
æææ!æ'æ/æUæ^æeæjæuæ�æ�æ¤æ©æ±æ½æÏæÏæææíæõæççç&ç&ç5ç;çOçXçhçwçŒç•ç¥ç¸çÃç×çøçèè è6èRèdèjèuè�è‘è¡è¦è¯è¯èÁèÅèÑèèèééé'é3éCéSéeékéképéréréwéwé†éŒé’é’é–éìþ¼iÔ&Ô&ÔDÔOÔZÔ€Ô€Ô‚Ô–Ô¡Ô§Ô¸ÔÇÔÖÔãÔãÔéÔîÔóÔÕÕ$Õ(Õ:ÕKÕSÕZÕuÕƒÕƒÕƒÕŽÕªÕ•Õ»Õ²ÕÅÕÇÕãÕÏÕëÕùÕùÕûÕÖÖÖ$Ö-Ö4Ö7ÖNÖYÖmÖ`ÖuÖ{քքք֤֤֗֜֜֯ÖÄÖÍÖÍÖÍÖÍÖéÖ×× × × ×&×+×+×7×T×r×w×|×|׈ץ״×Ã×Ë×Ð×Ö×Û×Û×â×é× Ø)Ø+ØHØ]Ø]ØcØcØw؀؀حظؽØÑØÜØäØìØüØÙÙ#Ù#Ù5Ù;ÙcÙlÙlÙnÙuÙzÙzَٟٙ٨٨ٻÙÏÙáÙìÙúÙÚÚ/Ú8ÚCÚHÚOÚWÚjÚÚ„Ú‹Ú˜ÚŸÚ±ÚÆÚÍÚÓÚÜÚÜÚÿÚÛ ÛÛ)Û7Û7Û=ÛDÛMÛMÛ`ÛrÛuÛuÛ†ÛŽÛ–Û¢Û¿ÛÆÛÓÛÕÛÜÛðÛÿÛÿÛÿÛ&Ü&Ü&Ü:Ü:ÜOÜZÜlÜy܄ܒÜ�ܬܳÜÍÜàÜâÜñÜÝÝÝ+Ý+Ý1Ý:Ý:ÝNÝTÝfÝfÝzÝ}݈ݚݡݬݱݹÝÀÝËÝÐÝåÝêÝÞÞÞÞÞ"Þ)Þ=ÞKÞ`Þ`ÞfÞmÞvÞ{ޜޥޥޫ޴޴ÞÓÞÓÞçÞêÞðÞùÞß ßß$ß/ß/ßCßFßLßUß]ßhßz߀ߋߋߟߢߨ߱߳ßÕßèßýßàà à&à.à.à.à.à9à´ãÿÄB¯&ñ&ñHñSñZñcñsñ…ñŒñ’ñ˜ñ�ñÂñÏñÒñÛñíñóñøñò.ò2ò8òOòVòdòjòvò€ò…òŒò¥ò¯ò¸òÈòÊòÑòÖòÞòýò óó1óPóWóaópóvó|ó‚óˆóžó¿óÓóßóöóô
ôô*ô7ôEô`ômôxô�ô°ôÂôÙôâôèôôôùôõõ"õ/õ6õ6õDõSõUõcõrõ„õ„õŒõ¯õºõîõXµîõîõö#ö6öAöSöaöhöwö~ö†öœö¤ö·öÌöÜöæöèöøö÷÷÷÷#÷*÷0÷6÷A÷L÷O÷V÷p÷x÷’÷§÷´÷·÷¿÷Ã÷Õ÷ä÷ï÷÷÷ø'ø+ø4ø;øMøUø\ø`øiøkø}ø”ø¢ø¨ø¬ø®ø»ø»ø»ø½øÔøÚøÚøìøÕ––¸ÀÆÓèöüüüü   '3>DNUffq{{�“£©®µµÖÜëþ␍␍.8==R\\py…› §º¾¾ÆÌÒÜãêó*.5;J]cgntzz|€‡�“˜˜˜˜ÃÔÔëøü99?BFLL^o„˜ ±µÆÊÐéëñþ *1<_jpv|…Œ¡²º¾ÏÓÙòôú 39?ENUeŒ•››°µµ¼ÃÕÚÚÚôö,2:>Ehnt€—ž¤°µµ¼ÀÇÕ×ßäì÷ý !&5P`m|˜š½Ò×àíòùþþ     ( , 0 : F M Q Y a i x „ ‰ • • ž ž Á Á Ï Õ Ú Þ ã ã ã ã é ë ë 


7
9
9
9
D
D
D
I
l
r hëFF\nt�™°°ÂÈÓãîü 5 DáîÈÈÑÜçòý)+;X¼ÎêÈêÈÉÉÉ#É0ÉEÉGÉYÉcÉxÉxÉÉ‚ÉÖÉH’­’­¬­¿­É­ЭÜ­õ­þ­®®®:®Lƒ’&&&-&=&D&[&v&ˆ&Œ&Ï&¨»á¸␍¸␍È␍Ê␍Õ␍à␍ñ␍ü␍,09<R]fovƒ—ž ¤¦¾Èdîƒ@@Ydt½ÄØßçïø
!(G_hh�ÇÐò )S_�ƒŠ‘‘·÷7w·÷77FSXXgtvv~~~�¦¿ØÚÚááïòÿ␍1lsss{˜¦ÄÍÖò666Sa}›››¦©ÖØïõ -/<<`bizƒ…“•£¥³³ÓÓÓÓàó'4MUYaes�ƒ‹�“›©··ÑÜò$;FPWp|ƒœœ®³µ»ÌÝìó␍ -/===aa~…Œ�›ž¬°¾ÂÐÔÔíôù 5UhwyˆŠ™££±ºÐ×ü*Z_mo}† ¢¤«¼ÅÇÕ×åçõõ444?[€™žžžÀÅÅÅåêêê <Xlqqy|� ¼ÐÕÕÜßä 388S`bqz”––›–¼¾¾Áÿÿÿ   ? D D D f k k k ‹ � � � ¯ ´ ´ Ï Ý ß î ÷      9 ; ; > | | | ‡ ‡ ± ± Û ó !!,!<!Q!i!}!—!™!ª!Ä!Û!â!& L’¡Ð&Ð&é&ë&ò&'''5'M'P'b'ª'
(6<–ð–ðšð²ðÄðÞð (<BÞðÞðìðññ!ñ
ÿ
 3 : ? S � ’ ˜ ž ¥ ª ª ° » » Ó ù ÿ  " ) ) ) . 1 7 = D I I O U Z Z p Š ˜ ­ ³ Ã Ï Õ ã ê ì ␍␍␍␍␍␍␍␍␍␍␍␍␍␍␍␍␍!␍,␍8␍;␍=␍A␍A␍F␍F␍W␍i␍† �…ÎüÎüÜüñü÷ü‡\ŒŸIBIBiBxB�BŠBŽB’B›B B¥B¥B¶BºBÁBÙBÜBèBˆP³ÃqCqCCŒCšC¬C·CÅCÒCàCòCýC DDD‰,(o¡G¡GÆGÒGÝGçGíG÷GýGHH H1H;HAHKHQH[HbHnHtH}H¨H·HºH¼HÆHØHâHôHþHIII I5I:IJIUIZInI�I‹I I®I·I¿IÍIÞIîIÿI J JJJ!JhJЏï‘E‘E©E«E·E»EÈEËEåEåEåEëEïE÷EFF"F$F$F-F/F/F8F:F:FCFEFEFNFNFWF]F`FjF{F�F�F�FõF‹dÙîÉDÉDÙDàDìDòDúDEE'E>EKEKENE\ElEƒE‡E�EŒ<ÍØqDqD…DŒD˜D¤D´D¹D¼DÀDÈD�D'ùFùFGGG(G=GCGOG`G`GgG›GŽ,„‹ B BB!B,B7B=BCB�0ÄÌDD-D9DGDKDcDfDnD� ®²QCQCZCfCkC‘(§­!C!C/C6CFCICOC’( ¦éBéB÷BCCC C“4zƒÑAÑAßAæAðAþABB B”Ø ¨HeHeeeteteteŽeŽe�e�e£e¥e¥e«e­e­e³eµeµe¼eÀeÅeÅeÅeÅeÅeÅeÍeâeâeìeñeúeff&f(fCfEf`fef€f…f‹f‹f f£fÊf×fÿfïfgggg;g)gAgPgUg\gegxg€gˆg�g�g�g–g¯gµgµgÎgÜgög hhhh$h)h)h/h/h8hIhKh`hbhjhphxh}h}h}h}h‹hŸh¡hµhµh½hÃhËhÐhÙháhêhðhöhøhøhøhiii"i&i(i4i6iQiWi_idimixi{i�i‡i�i“i“i¡i¯i±iÔiñi÷iÿij␍jjjjjjj9jKjPj\jbjej|j~j�j‘j•jœj¥j´jÂjÈjÐjÕjÝjâjâjëjøjýjkk&kNkNkTkYkYk_kdkdkjkokokukzkzk€k…k…k‹k�k�k–k›k›k¡k¦k¦k¦k®k®kÇkÕkïklllllllll$l$l,l5l;lGlGlNlbldlgllltl|l�l�l‡l‹l�lŸl¤l®l¸l¸lÅlìlìlòlmmm$m2mAmWm]mbmbmgmzm†mŽmžm¨m±m¿mÆmÈmÑmÑm×måmñmnn+n1n3nFnKnKnhnhnzn€n‰n�n˜n¦n«n«n¾nÄnÆnÑnãnönön
oo(o-o9o?oBoYo[o^onoxo{o{oŠo�o¯o´oÀoÆoÉoàoâoåoõoùoppppp p'p,p,p2p2p@pFpLpVp`pƒp†pˆp’p’p”pœp¡p¦p«p«p±p¹p¾p¾pÃpÎpÓpØpãpèpqqqq q$q)q.q3q3q8q=qYq‹q‘q™q™q§q­q³q½qÇqêqíqïqùqr␍r␍r␍rrr#r#r(r(r.r6r;r;r@rKrPrUrZririrzr€r€rŽr”ršr¤r®rÑrÔrÖràrïrôrôrôrürs
sssss"s"s's2s7s<sAsPsPsasgsgsus{s�s‹s•s¸s»s½sÇsÖsÛsÛsÛsãsèsñsösösüst t tttt*t0t6t@tJtmtptrt|t‹t�t�t�t˜t�t¦t«t«t±t¹t¾t¾tËtÑtÑtßtåtëtõtÿt"u%u'u1u@uEuEuEuMuRu[u`u`ujuruwuwuwu}u‡u�u¡u¦u¦u¬u¶u¼uÁuÁuÇuÕuÞuæuóuýuv
v
vvv*v;vHvOvWvavovovtvtvvvvƒvˆvˆvŽv’v—vŸv¥v§v°v¿vÇvÌvÒvÒvÚvàvîvùvþvw wwwwwwwwwww*w0w9w?wGwLwQwZwewnwvw{w{w{w�w‰wŽwŽw’w—w—w w®wºwÇwÍwÍwÖwêwêwðwùw␍x␍xxxx'x;x;xDxDxDxIxNxNxVx[x[xxx†x’x›x¡x«x³x¸x¸x¸xÌxÕxÛxíx÷x÷xÿxÿxy y y"y,y5y7y7y7y=yAyCyCyCyCyHyNyTyXyŽ|•À…±È[È[î[ÿ[\ \\\"\5\9\>\S\U\X\\\c\w\{\‡\Ž\’\™\¡\£\«\¸\Æ\Î\Ð\Ó\á\í\û\] ]]]+]–8ƒ�àOàOîOõOPPPPPP!P—L®½îýîýüýþþþ.þ4þ=þOþUþXþ”þ˜\¾Ñ–þ–þ¤þ¶þ¼þÄþÖþÜþåþ÷þýþÿÿÿoÿ™dBWaMaMqMxM„M‹M—MŸM¨M¬MºMÃMÑMÝMæMïMøMþMNšPp€8[8[N[Z[b[f[w[…[‹[—[Ÿ[ª[°[³[½[›DŽ›(P(PBPIPRP^PsP{P�P‡P‰P‰P˜PœTü␍¨¨ÄÏÖæ÷ü€ €&€-€;€G€•€�<¢­®ý®ý¾ýÏýØýÞýâýåýíýžTo€6ü6üLüZü`üfüwü…ü“ü¥ü©ü¯ü½üÀüÊüŸD”¡VýVýfýzýƒý‰ý›ý›ýŸý¢ýªý D†“þüþüý"ý+ý1ýCýCýGýJýRý¡p©Á�|�|®|²|¶|¾|È|Ë|Î|Ý|á|å|í|ö|}}(}/}6}6}@}C}U}¢dH]àYàYZ ZZZZ,Z.Z;Z=ZHZ\ZdZtZyZZ‡ZŠZœZ£ œ@˜P˜P®PºPºPÐP×PÙPõPõPõPüPQ
QQQQQQ4Q4QjQvQ‡Q—Q­Q²QµQºQºQºQÒQÙQæQíQõQúQúQRR&R+R+RCRPRXR]R]RuR�RŠR’RšR¦R¼RÇRêRîRüRS S S!S;SESQSYS^S^S}S‰SšSŸS·SÃSÒS×SæSóSøSøSøSûSTTT T+T<T>TATFTFTFTPTbTiTxT�T‰T�TœT¥T­TµT¼TÀTËTÖTÜTêTôTôTúTUU U U3U;U;U=U=U=UBUBUIUOUSUZU^U^U^U^UmUmU’U›U›UŸU­Y¤$pµèbèb ccc c)c4c@cHcRczczc†cˆcˆc”c™c™c¥cªcªc¶c»c»cÇcÌcÌcØcÝcÝcécîcîcúcÿcÿcÿcddd)d=dMdMdOdOd[dadfdfdldxdxdƒd�dœd±d¹d¿d¿dÐdÐdÙdÜdCe¥T^o Z ZÁZÈZ×ZÚZÞZæZêZîZöZ[%[,[8[¦ˆ#A!L!L=LLLVLcLjLyL�LµLËLÜLãLñLM M M2MGMOMRM^M§<¾É¸]¸]È]Ï]î]ù]^^^$^,^¨<²½0]0]@]G]f]{]�]Ž]˜]±]©|ÂÝX}X}n}w}‚}›}›}ž}­}³}¼}¾}Ä}Í}Ï}Õ}ß}æ}é}é}ó}ªDÞëø}ø}~~"~'~R~T~q~—~ž~¯~Â~«`l€©N©N²N¹NÍNáNæNO O'O)OGOIO`OtO}OO“O£OÔO¬\Xk N NN"N$N0N7NFNQN]NaNoN�N�N—NšN¤N­(AG°Y°Y¾YÇYÕYÛY®”0ª³ª³̳Ö³â³ç³÷³ý³´&´5´C´Q´h´p´z´‰´‘´ž´¦´©´©´©´«´º´Ä´Í´Õ´Ø´ê´¯LìûÈ~È~Ö~ç~ó~35Pkksz¡°Ì2h_h_ˆ_Œ_Í_Û_á_ø_`%`%`*`.`5`@`K`X`a`a`f`k`r`}`Š`Œ`™`›`�`�`�`¥`¥`¥`­`µ`½`Å`É`Ó` a±\àó¸^¸^Î^Î^Ò^×^ê^í^ò^ò^ü^_____²Hô _ _4_8_=_H_H_R_X_X_\_d_³”3T a a4a8aAaDaMaVahaha‘a•aša�a¦a¶a½aÀaÈaËaØaàaèaða÷abbb´(&,FFTcgjpµxUobb*b,b0b9bEbQbfbfb’b–b›b§bºbÄbÇbÒbÕbÝbçb8ÊÔ0^0^D^H^M^W^b^e^i^q^·8Õßx^x^Œ^�^•^Ÿ^©^¬^°^¸^¸ À'À'Ê'Ò'×'¹( Ø'Ø'æ'÷'( ((ºeã>È>ÈXÈaÈ�È�ȇÈ�ȗȟȧȭȺȺÈÈÈÍÈÍÈÓÈØÈØÈÞÈãÈãÈéÈîÈîÈÉÉ É$É$É-ÉMÉMÉMÉTÉVÉVÉ]É_É_ÉeÉeÉlÉnÉnÉtÉtÉ{É}É}ɃɃɊɊɒɘɞɦɦɦɦɲɺÉÂÉÊÉÒÉÚÉâÉèÉÊÊÊÊÊ&Ê,Ê2Ê2Ê6Ê>ÊEÊMÊUÊYÊ_ÊgÊnÊvÊ~ʂʈʓʙʦʲʸÊÀÊÄÊËÊÓÊÛÊßÊåÊíÊôÊüÊËËËËË4ËEËJËMËóË»ædvÄvÄ�ęĹĹĿÄÇÄÏÄ×ÄßÄåÄòÄòÄÅÅÅÅ Å Å%Å*Å*Å0Å5Å5ÅMÅ`ÅfÅkÅkÅtŔŔŔśÅ�Å�ŤŦŦŬŬųŵŵŻŻÅÂÅÄÅÄÅÊÅÊÅÑÅÑÅÙÅßÅåÅíÅíÅíÅíÅùÅÆ ÆÆÆ!Æ)Æ/ÆGÆVÆ`ÆcÆcÆmÆsÆyÆyÆ}Æ…ÆŒÆ�ƘƠƦƮƵƽÆÅÆÉÆÏÆÚÆàÆíÆùÆÿÆÇ ÇÇÇ"Ç&Ç,Ç4Ç;ÇCÇKÇOÇUÇ`ÇeÇ{njǑǔÇ:ȼ, ƾƾԾ۾ã¾è¾î¾½ 0'0'?'X'^'¾häúöËöË
Ì Ì-Ì8Ì<ÌCÌGÌPÌ_ÌaÌaÌuÌẁ̆̆̆̆̎̿``´¦À¦ÀÄÀÈÀÕÀ×ÀäÀæÀòÀòÀÿÀÁÁÁÁÁ2Á;Á;ÁFÁMÁ\ÁgÁmÁrÁtÁ€Á‡Á–Á¡Á§Á¬Á®ÁºÁêÁ Â0Â@ÂBÂRÂbÂrÂrÂw‘˜ŸŸŸŸ¦¼ÂÈÂÎÂÔÂÚÂÞÂÞÂÞ ÃÃ(Ã4Ã:Ã@ÃFÃHÃHÃVÃÀDµÂVÃVÃlÃoÃrÃÅÒÕØÞàêÃÁ�Ãã®Ã®ÃÊÃÖÃÚÃÞÃåÃìÃûÃÄ ÄÄÄ Ä&Ä.Ä4Ä:Ä>Ä>ÄMÄTÄ\ÄbÄhÄjÄjÄvÄÂ(!'n¿n¿w¿…¿‹¿�¿’¿Ã´ª®Š®ŠÈŠ׊׊ÚŠãŠïŠïŠûŠ‹1‹C‹U‹Y‹i‹‰‹›‹¡‹´‹½‹Á‹Ç‹ЋЋñ‹õ‹ŒŒ0ŒBŒHŒ[ŒmŒyŒ{Œ‡Œ�Œ“Œ™Œ¢Œ¢Œ¢Œ¢Œ´ŒÊŒÐŒÜŒñŒøŒ� �!�(�(�(�6�D�N�Q�_�i�l�~�ƒ�ˆ�˜�›� �°�³�·�À�È�Ú�â�ë�ŽŽŽ(Ž/Ž7ŽIŽOŽ^ŽoŽoŽvŽvŽvŽ„Ž’ŽœŽŸŽ­Ž·ŽºŽÌŽÑŽÖŽæŽéŽîŽþŽ����(�0�9�9�D�[�s�w�ƒ�›�£�©�µ�¾�Â�Ê�Ó�Ó�Ó�ì�ô�ú���"�(�.�.�.�5�G�S�[�a�g�g�i�{�Äxî£î£ü£¤¤#¤E¤y¤•¤§¤»¤Á¤ͤÖ¤Þ¤æ¤è¤î¤ô¤¥¥¥¥¥Å,ž¾ž¾¬¾³¾»¾À¾Æ¾Æ8(2–¿–¿Ÿ¿Ÿ¿­¿±¿¸¿»¿À¿Ç83=ƿƿϿϿݿá¿ï¿ò¿÷¿È8>Hþ¿þ¿ÀÀÀÀ À#À(ÀÉ4IR.À.À7À7À:ÀHÀVÀYÀ^ÀÊ &*ÆÍÆÍÔÍàÍË  x'x'�'‰'Ž'Ì 
`'`'i'q'v'ÍØ ®K®KiqËKÓKåKL LL%L6L>LFLILWLƒLƒL˜LšLšL¦L®L²L¿L¿LËLÓL×LäLäLäLM MMM!M9MHMMMSM^McMcMhM€M�M”MšM¥MªMªM¸MÁMÍMÕMÝMåMèMîMóMüMNN(N8N8N=NENMNPNVNVN[N[N[NaNdNkNvN°NÇNÔNÜNäNðNüNO OOOO%O+O2O7O7OEOUOUObObOjOrO{OŠO�O�O–O¡O§O¯OµOÀOÅOÅOÔOßOñO÷OÿOP
PP'P-P5P;P@P@PTPZPePkPmP}PƒPƒP¥PÌPÑPÑPåPëPQQQQ6Q<QLQTQ\QbQgQgQ{Q�Q—Q¨Q®Q³QÌQÒQâQêQòQøQýQýQRR/R@RFRKRZR`RqRyR�R‡RŽR“R“R©R¯RÅRÖRÜRÞRíRóRýRS␍SSSSS,S5SFSVSVS[S[SiSqS‚S•SœS¢SªS°SÀSÆSÎSÔSÔSÔSÙSÙSÙSÙSÙSøST T T T(T3T<TGTRTWTWTmTsT‰TšT T¥T·T½TÂTÛTùTùTþTþT
UUUU!U&U&UJURUZUjUpUvUvU‡U¥U¥UªUªU¶U¾UÁUÈUÎUÓUÓUóUûU VVV6VEVMVeVmVpVwV}V•V�VµV½VÀVÇVÍVÍVÍVìVüVWWWW W0W?WKWfWnWqWxW~W–W¢W½WÅWÈWÏWÕWÕWÕWÕWÚWÚWóW XX'X:X@XEXWX]XbX~X„X�X˜X›X¢X¨XÑXÙXéXïXöXöXöXûXûXY2Y8YPYcYiYnY™YŸY²YûYZ Z%Z*Z*ZDZPZ\ZgZgZlZlZ†Z’ZžZ©Z©Z®Z®ZÈZÔZàZëZëZðZðZ[ [[[#[5[;[@[O[[[g[m[s[z[�[˜[¡[­[µ[¸[¾[Ä[É[Ý[ì[ô[ \\\\#\;\C\c\}\…\ˆ\Ž\”\”\¥\®\º\Â\Å\Ì\Ò\×\é\ø\]] ]#]*]0]H]P]o]‰]‘]”]›]¡]¡]±]º]Æ]Î]Ñ]×]Ý]â]ö]^␍^'^/^2^8^>^V^^^€^œ^¤^§^­^³^³^Ä^Í^Ù^á^ä^ë^ñ^ö^__ _:_B_E_L_R_j_r_”_±_¹_¼_Ã_É_É_É_É_É_Î_Î_ä_ê_ö_ü_````,`8`A`M`U`X`_`e`j`|`‹`“`«`³`¶`½`Ã`Û`ã`aa$a'a.a4a4a4aEaNaZabaealarawa‰a˜a¤a¿aÇaÊaÑa×aïaûab:bBbEbLbRbRbRbRbRbWbWbjb…b‹b–b›b›b®bÄbÊbÕb×b×bêb␍cccc0c9cJcOcacqcqcvcvc‰cŸc¥c³cÂcÇcÇcÚcðcöcdddd.d4dQdidid“d™dždªd³dÂdÂdÇdÇdÝdãdeeeBeHeMeYebeqeqeveveŒe’e¯eÇeÇeñe÷eüeff f f%f%f;fAf^fvfvf f¦f¨f´f½fÈfÈfÈfÈfÍfÛfäfõf÷f gggg&g6g;g_gkglgqg†g£g³g×gçgígígígòg÷g h h]hmhshuhzh‹hšhÌhÔhÚhÜháhèhèhñhii i.i.i3i8iGiPi[i]ifiqiqi’i™iŸi§i²i¸iÈiÎiÖiáiçiçiìiñiøiÿij␍jj%j%j%j*j*j*j<jAjAjSj^jfjnjtjtjtjyjyj„j•j˜j¤j­j¹jÀjÆjËjËjÖjçjêjöjÿj kkkkkkk"k'k'k.k2k2k>kGkJkJkUkWkikpkvk…k�k›k¡kªk®k®kºkÃkÆkÆkÑkÓkåkìkòkúklll l#l'l'l/l6l9l;lFlJlSlVlVlalcl{l‚l�l˜l›l¡l¦l¦l­l±l±l½lÆlÉlÉlÔlÖlèlïlõlmmm m)m-m-m9mBmEmEmPmRmdmkmqmym„m�m•mŸm¢m¦m¦m®mµm¸mºmÅmÉmÒmÕmÕmàmâmúmn nnn n%n%n7n;n;nGnPnSnSn^n`nrnynn‘nœn§n­n²n²n½nÂnÂnÍnÒnÒnÝnànänënðnõnúnúnooo o$o5o=oAoUo\o`o`omoyo�o‡o—o›o¬o¾oÉoÍoÍoÚoâoêoðoðoðoðoðoòoòoppp p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p0p0pGpOp[p[p|pŠp¢p¤p°p½p½pàpípøpq
qqqq&q&q)q;qYqeqeq–sÎÀ m–s–s³s»s¾sÌsÚsïsøst&t8tCtTtXtjtmtxt�t�t tÑt¬tátõtuu u>uPutu…u‡uŽuÃuÃuÆuËuÎuÎuÕuìuóuvvv!v4v4vHvLvyvyv‘v–v–v¦v®v¾vÈvØvâvòvþvwwww+w5wEwOw_wkwpwpwpw’w wªw¯w¼wÑwÑwÖwàwïwôwúwÿwÿwxxx"x(x-x-x3x9x>x>xMx`xlxyx…x˜x x¦x¯xÆxÚxëxøxýxy(y?yLyTygyoyuy~y‡y‡yŒyŒyŒyŒyŒy˜y˜y˜y¡yºyÏy×yòyzzz&z+z+z+z6zDzIzIzPz^zcz{z‡z™z¥z«zºz¾zÇzÐzízùzÿz{{ {({U{f{s{u{ƒ{ƒ{ˆ{ˆ{�{�{¢{µ{Á{Í{Ó{×{à{å{å{å{å{å{ý{||||||||||||||||5|J|R|m|~|‹|�|¡|­|²|²|²|»|Õ|á|}}}}}}}}}}}.}3}3}3}D}O}T}T}_}q}‰}›}¼}Ü}ç}ø}ý}ý}ý}(~1~B~F~^~n~v~~~³~¼~À~Ø~è~è~è~è~è~
CLPV[dmrrrr�•³¾ÃÉÎÎáõ€&€.€4€4€9€9€H€\€z€…€Š€�€•€•€¨€¼€â€í€õ€û€û€��� �"�7�?�Z�k�x�z�‰�‹�‹�‹�‹�‹�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�®�½�È�Ê�Ê�Ó�Õ�Õ�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�ë�ë�‚
‚‚‚‚ ‚/‚_‚n‚z‚�‚ª‚­‚·‚Âé‚ ƒ)ƒMƒOƒbƒhƒ«ƒ«ƒ®ƒ¾ƒƃáƒòƒõƒ„„)„A„A„l„o„~„’„³„Ä„à„Ì„ü„…,…_…]…G…8…m…m…m…p…u…x…’… …Î…ð…ð…††-†A†b†s†�†{†«†Ɇü†ú†ä†Õ†
‡
‡
‡␍‡‡‡‡)‡J‡V‡­ŠÏœ«Î~�~�”�˜�£�ª�µ�É�É�Ô�å�ì�ù�‘‘‘+‘+‘4‘9‘A‘Q‘_‘n‘y‘Œ‘Œ‘Ÿ‘Ÿ‘µ‘á‘á‘õ‘÷‘÷‘’ ’ ’’’’’,’,’,’0’8’>’C’C’G’O’S’Y’^’^’j’’�’™’¬’±’¹’¹’¾’¾’Å’Ñ’æ’ö’“““!“&“.“4“4“9“@“K“s“~“�“—“Ÿ“¥“·“½““““““““““͓ٓæ“ö“ü“”””$”)”1”6”6”6”>”F”O”W”\”d”i”p”{”£”®”¶”Å”Ï”á”æ”ì”ñ”ñ”ø”
••%•-•5•J•L•W•_•t•t•�•˜•Ÿ•¥•©•­•¼•Í•ã•ï•÷• –––)–4–9–9–Z–t–y–�–�–˜– –µ–º–Å–Í–â–ç–ó– ———2—>—C—O—Z—_—_—_—_—_—_—j—j—j—j—j—j—j—j—j—j—j—j—u—•—²——È—Зã—è—ð—ø—ú—˜˜˜#˜+˜-˜M˜U˜^˜f˜n˜s˜x˜˜Š˜²˜½˜ŘÔ˜Þ˜÷˜ü˜™ ™ ™ ™™™™(™6™H™J™\™n™n™n™y™~™›™ ™ ™©™®™®™®™®™®™®™®™®™®™®™®™®™®™®™®™®™¹™Å™Ñ™ñ™š š,š1š9š@šMšUš^šfšmšršršzš‚šžš¦š©š«š»šÅšÅšÅšÇšÚšëšîšñšùšþšþš› ›››(›A›H›M›e›o›Š›£›«›¸›Ñ›Ø›Ø›Ý›Ý›Ý›Ý›Ý›Ý›Ý›å›ð›û›
œœœœ œ,œ1œ1œ1œ5œ:œ:œJœOœOœOœ[œbœhœxœ‰œ¥œ¸œ¾œÆœÛœâœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœìœìœ�� � �$�/�6�R�_�_�_�c�n�Œ�š�”ŸÐø{–Ÿ–Ÿ¬Ÿ·Ÿ¾ŸÉŸÔŸëŸöŸýŸ␍   * * F ` g p w z † � – ™ ž ´ ¾ РÖ â ÷ þ ¡¡'¡.¡.¡.¡<¡J¡T¡W¡e¡o¡r¡„¡‰¡Ž¡ž¡¡¡¦¡¶¡¹¡½¡Æ¡Ρà¡è¡è¡è¡þ¡¢¢ ¢,¢A¢H¢P¢b¢h¢w¢ˆ¢ˆ¢�¢�¢�¢�¢«¢µ¢¸¢Æ¢ТÓ¢å¢ê¢ï¢ÿ¢£££££'£/£A£I£I£b£j£j£m£x£–£¤£í£Ñ\oÂN¨N¨h¨{¨‚¨‰¨”¨§¨ª¨³¨º¨½¨ͨÛ¨æ¨ñ¨ô¨
©©+©6©A©W©b©y©…©œ©¤©­©µ©Ý©à©æ©ë©þ©ª ª ª%ª-ª-ª;ªMªZªmªsª{ªŽª”ªœªœªŪʪéªìªìªóª«««)«5«E«e«�«•«�«§«Æ«Ú«Ú«P¬ÒXn¥¥<¥N¥S¥j¥|¥†¥�¥ž¥¦¥µ¥Ë¥Í¥Ö¥ì¥ú¥¦
¦ ¦¦"¦"¦*¦2¦<¦D¦N¦W¦_¦b¦k¦†¦—¦©¦¬¦±¦Ħܦð¦ø¦ø¦
§␍§§%§=§Q§Y§Y§z§}§‚§•§›§°§Ƨȧݧó§û§û§¨%¨,¨7¨N¨Ó¤¦>s>s_sqs|s…s§s±s¿sÙsæsæsðsðsttt#t-t3t9t<tJtQtitptst…tŠt•t tºtÕtétu(u-u3u9uDuQuWuxu|u‚uŠu�u—u¸u¼uÂuÊuÏuÏuÜuâuýuéu v␍vvv vAvEvKvSvbv}viv‰v�v“v›v vÁvÅvËvÓvÓvØvåvëv wwww&wGwKwQwYwYwfwlw�w‘w—wŸw§wÈwÌwÒwÚwÚwÚwðwðwðwðwûwxx.x:xHxMx[xoxtxtxx‡x�x˜x¸xÅxÔxãxýxyy␍yy"y-y:yEy_yqyƒyŽy“y“yžy´yÉyÕyãyèyöy
z
zz
z*z/z/z>zCzCzRzWzWzhzmzmz~zƒzƒz–z¥zªzªz½zÌzÑzÑzózøzøz{ { {A{F{F{h{m{m{Š{±{¶{¶{Ø{Ý{Ý{ú{!|&|&|H|M|M|j|‘|–|–|¸|½|½|Ú|}}}(}-}-}H}M}M}h}m}m}ˆ}�}�}¨}­}­}È}Í}Í}è}í}í}~␍~␍~(~-~-~>~C~C~T~Y~Y~e~p~…~Š~Š~–~¯~´~×~Þ~è~í~þ~(->IQVVZ^eoyyŒ‘‘‘•«´´×ÜÜäø€€(€3€>€I€[€g€p€u€u€u€†€£€®€¸€ÀÈ€Ó€Û€à€à€ë€ó€ü€��/�G�[�`�`�k�~�ˆ�“�´�À�Î�Ó�á�å�ê�ê�ú�‚␍‚‚‚*‚5‚O‚a‚s‚~‚ƒ‚Ž‚–‚›‚¦‚³‚¾‚Ø‚ê‚ü‚ü‚ü‚ü‚ƒƒƒƒ#ƒIƒgƒgƒqƒ…ƒ�ƒ‘ƒ�ƒ¥ƒƒÓƒ݃èƒ „-„>„I„a„q„v„v„�„†„†„Ž„™„ž„ž„¦„±„¶„¶„¾„܄Ƅô„ù„ù„… … …7…<…P…<…h…m…m…z………‡…Œ…Œ…˜…©…»…À…À…Ô…À…ì…ñ…ñ…ù…þ…þ…†††)†.†.†H†X†]†]†w†‡†Œ†Œ†¦†¶†»†»†Õ†å†ê†‡ê†‡‡‡)‡.‡j‡X‡.‡‚‡‡‡Ç±‡‡‡Û‡à‡à‡ï‡ÿ‡ˆˆˆ#ˆ(ˆ(ˆ7ˆEˆJˆrˆ`ˆJˆŠˆ�ˆ·ˆ¥ˆ�ˆψÔˆüˆêˆÔˆ‰‰‰6‰ ‰`‰p‰u‰u‰�‰|‰º‰ʉωωÛ‰à‰à‰ì‰ñ‰ñ‰ŠŠŠŠ,Š<ŠAŠAŠTŠdŠiŠiŠ|ŠŒŠ‘Š‘Š™ŠžŠžŠ¦Š«Š«Š³Š¸Š¸ŠÀŠÅŠÅŠØŠÝŠÝŠðŠõŠC‹1‹ ‹õŠP‹U‹£‹‘‹‹U‹°‹µ‹µ‹Ä‹ß‹ä‹ä‹õ‹ŒŒŒ&Œ4Œ9Œ9ŒAŒFŒFŒNŒSŒSŒ[Œ`Œ`Œ˜Œ†ŒgŒ·ŒÒŒ׌׌�ýŒÞŒ.�I�N�€�n�N�˜���Ï�½���ç�ì�Žì�Ž#Ž@Ž#ŽXŽ]Ž]ŽiނޒޣŽÉŽËŽáŽçŽ��A�ƒ�`���—�—�—�£�¨�¨�»�Æ�Ð�Õ�à�ê�ï�ï� �����/��;�F�K�_�K�k�v�{�{�†�”�™�™�¤�¯�´�´�Å�Ê�Ê�Û�à�à�ú�‘
‘‘
‘‘#‘7‘#‘C‘H‘P‘H‘\‘a‘u‘a‘�‘†‘†‘𑆑¦‘¦‘¦‘«‘·‘«‘ʑϑϑۑϑî‘ó‘ó‘ÿ‘ó‘’’’#’’6’;’O’;’[’g’r’}’‚’–’‚’¢’®’¹’Ä’É’Ý’É’é’ú’ÿ’ÿ’“ “ ““““"“'“'“0“5“5“>“C“C“N“S“S“^“c“c“n“s“s“~“ƒ“ƒ“Ž“““““ž“£“£“®“³“Ç“³“Ó“Þ“é“ô“ù“ù“””””””!”&”&”0”5”5”=”B”B”O”T”T”a”f”f”f”f”f”n”s”s”{”€”€”ˆ”�”�”•”š”š”¢”§”»”§”ǔؔݔݔï”ú”• •5•@•Y•E•e•p•{•€•€•’•�•½••Ø•ã•ü•è•–––#–#–5–@–`–e–{–†–Ÿ–‹–«–¶–Á–Æ–Æ–ì–Ø–ø–——3—>—C—^—J—~—j—Š— —Œ—À—¬—Ì—×—Ü—Ü—˜î—˜.˜3˜I˜T˜Y˜t˜`˜”˜€˜ ˜¶˜¢˜Ö˜˜â˜í˜ò˜ò˜™™$™D™I™_™j™o™Š™v™ª™–™¶™Ì™¸™ì™Ø™ø™šššššš+š0š0š0š6š;š;š;šEšGšGšQš^š~š€š€šŠšŠšŠšŠšŠšŒšŒš£šªšµšµššÈšÏšÚšåšðšûš›)›!›A›I›r›j›Š›Š›Š›“›››®›´››Õ›Õ›í›÷› œ%œ%œFœVœkœ}œ�œ�œµœ¼œËœÝœÝœáœæœíœýœ�� �7�>�C�C�G�R�^�l�™�¢�³�Á�ô�žžž/ž;žIžNž\žxž£žÉžÌžÜžÞžÞžâžŸ Ÿ ŸŸŸHŸhŸhŸhŸ–¡Ô,î¾î¾÷¾ý¾¿¿#¿(¿Õ, .¿.¿<¿B¿F¿U¿d¿j¿Ö(æÍæÍïÍùÍ ÎÎÎ2Î×Ô4e.Ï.ÏDÏKÏNÏrÏrÏ�ϢϵÏÈÏÍÏÍÏëÏùÏ Ð Ð'Ð'Ð)Ð)Ð)Ð<Ð>Ð>Ð>ÐEÐXÐkÐkÐkÐ}ЉМвзлÐÂÐ×ÐêÐñÐñÐôÐÑØ 1UÞ
Þ
ø
þ
 ␍   # 7 > A C L ] ] ` h ~ � � ’ • œ   ¨  È Î Ö  Ù0®6ø“ø“”A”I”I”W”j”ƒ”†”¢”¢”¢”ª”¬”¬”´”¶”¶”¾”À”À”ȔȔєהܔܔå”ñ”õ”ú”•••␍•••!•!•&•2•J•i•l•�• • • •¨•ª•ª•ª•²•´•´•´•¼•¾•¾•¾•ƕȕȕӕӕٕޕޕޕޕå•ð•–––(–(–(–8–8–?–C–I–a–o–‚–Ž–·–º–Á–Ó–Û–ä–ï–ï–ú–———— ——'—/—5—W—c—i—n—n—u—€—€—…———�—�—�—�—ö—ÚXþÐ^µ^µxµµŒµ—µœµ¢µ´µºµÒµØµöµ
=¶=¶M¶bd¶g¶s¶{¶ƒ¶‹¶™Ÿ¶¥¶±¶±¶³¶Å¶Ëжжç¶ç¶···%·*·*·A·J·Y·o·z·ˆ·“·£·°·Â·È·Ò·Þ·ë·í·í·õ·ú·ú·¸¸¸¸¸¸¸!¸!¸'¸,¸,¸3¸8¸8¸?¸D¸D¸O¸T¸T¸_¸d¸d¸o¸t¸t¸¸¸˜¸Ÿ¸¥¸¨¸³¸¶¸Ê¸×¸æ¸í¸ð¸¹¹
¹¹+¹:¹:¹:¹:¹D¹\¹q¹�¹’¹˜¹©¹¯¹´¹¾¹Ï¹à¹ï¹õ¹ººº*º9º?ºJºPºeºkº|º‡º�º�º�º­ºÀºÌºÔºäºëºñº»␍»»/»D»R»b»n»€»‹»š»œ»®»¶»»»Â»Æ»Ô»Þ»ä»î»ô»ÿ»¼¼¼!¼+¼P¼P¼V¼]¼�¾Û0¥íþ±þ±²²4²<²D²N²R²Y²_²s²{²€²ƒ²Ž²™²¡²¬²·²¹²Ñ²Ø²ß²ê²õ²÷²³␍³³³$³$³:³[³a³g³x³~³‡³™³Ÿ³Ÿ³§³«³¶³»³Í³Ø³Ü³ê³ì³ð³ÿ³ÿ³ÿ³´´´'´-´›´Ü”Œ­À’À’Î’à’ä’ì’ô’ÿ’
“““(“-“E“L“S“^“i“k“v“�“ƒ“�“𓥓®“¶“¶“º“ñ“Ýt ¤î î  ¡¡¡%¡=¡G¡G¡_¡i¡„¡š¡¨¡¬¡Ì¡à¡ç¡ê¡¢␍¢¢ ¢1¢1¢8¢?¢H¢M¢R¢Y¢`¢z¢�¢‘¢•¢•¢Ÿ¢µ¢¹¢¹¢Ë¢ß¢ó¢ó¢ú¢£ ££ £'£0£;£B£B£M£k£o£x£¢£¢£¨£¯£¾£Æ£Ô£Û£ß£á£ó£ó£ó£¤␍¤3¤A¤A¤E¤Z¤b¤r¤}¤’¤—¤¥¤´¤¼¤Ê¤Õ¤Ù¤Þ¤æ¤ê¤ù¤û¤
¥ ¥¥¥,¥3¥9¥M¥U¥c¥j¥n¥~¥‰¥Ž¥¬¥´¥Â¥É¥Í¥Õ¥ã¥ê¥î¥
¦¦¦#¦#¦#¦,¦7¦G¦i¦q¦|¦‹¦“¦ž¦£¦«¦¶¦Â¦Æ¦Ñ¦Ö¦è¦ð¦û¦û¦û¦û¦ §§5§A§I§Y§i§‡§‹§º§ §Ê§Ê§Ô§Û§ê§ù§¨¨¨¨¨+¨3¨A¨H¨L¨L¨N¨`¨`¨r¨r¨r¨x¨„¨–¨ž¨¶¨â¨ð¨ô¨©© ©+©A©C©J©]©e©s©z©~©€©“©›©©©°©´©´©´©´©Â©Í©Ü©ä©ò©ý©ªªªªª!ª#ª2ª4ªCªEªTª[ªaªuª}ª‹ª’ª–ª¦ª±ª¶ªÔªÜªêªñªõªýª «««2«:«E«K«K«K«T«i«ƒ«“«ž«³«¸«Ã«Ó«õ«ý«¬¬ ¬*¬/¬7¬B¬N¬R¬]¬b¬t¬|¬‡¬‡¬‡¬‡¬›¬«¬À¬Í¬Ñ¬å¬ö¬ ­­­*­?­O­f­­˜­š­¥­­­­­¶­Ó­ä­û­®"®-®:®B®D®O®W®W®W®q®®�®¢®¿®Î®ú®¯¯¯%¯?¯?¯C¯Y¯h¯ƒ¯Ž¯¥¯­¯­¯Ï¯Ï¯â¯ý¯°°;°J°v°„°š°³°Ã°Û°Û°ó°ó°ÿ°±/±8±8±8±D±U±m±v±v±}±†±Œ±˜±þ±ÞLîýž´ž´°´Å´Ö´ç´î´ö´µµ µ%µWµßSžžÁÖÛãëó">DFHUUWsy{}ŠŠŠ�˜ ©±³»ÃËØÞéð 5<GM^bjj~Ž–™ÿà`vÿvÿ‚ÿ™ÿ­ÿµÿ¹ÿÃÿÍÿÕÿØÿÞÿáhF/F/\/g/r/€/‹/‘/¢/¨/¹/¿/Ë/â/â/ô/000)0/0}0â˜Vx  * / 6 @ F Q a i q v � ‹ ‘ œ ¬ ´ Ä Ë Ó Û ã ë ð û    ã�*JÞ×Þ׿×ê×öר ØØ$Ø6ØAØLØsØsØŒØ�Ø�Ø�اخØÁØÊØØØìØÙ Ù*Ùäf)ÑÑ@ÑHÑNÑVÑXÑXÑiÑiÑiÑqÑyыыѯѱѱÑËÑÍÑÍÑØÑÝÑ÷ÑüÑüÑüÑÒÒ Ò"Ò/Ò1Ò>ÒFÒNÒUÒdÒqÒsÒ„Ò‘Ò‘Ò‘ÒšÒ¬Ò¿ÒÅÒÍÒÏÒÜÒÜÒñÒñÒñÒüÒÓÓ#Ó#Ó#Ó1Ó7Ó<ÓDÓOÓaÓlÓqÓqÓxÓ|ÓŠÓŽÓ—ÓžÓ¼ÓÉÓÐÓÙÓõÓúÓúÓúÓúÓÔ ÔÔÔ;Ô;Ô;ÔBÔPÔ_ÔrÔ…Ô‡Ô‡Ô‡ÔšÔšÔ¡Ô¨Ô­Ô³ÔÅÔÏÔêÔÕÕÕ-Õ2ÕVÕ]ÕiÕ‡ÕšÕ¥Õ¬Õ°Õ°Õ°Õ°Õ»ÕÅÕÓÕõÕÖÖ'Ö'Ö5ÖƒÖ–Ö§Ö¾ÖÑÖÖÖÖÖÖÖÞÖéÖûÖ× × × ××J×P×P×P×[×e×q×|×~×~×~׃×�×�×Ù×å >~0~0–0¨0®0º0Å0Ó0ß0ö011#1)1/151H1N1W1]1o1u1€1ˆ1–1£1à1æ“Ôî î   - 2 P V [ a o v … Š – ¨ ¨ Æ Ñ ä ë !"!.!I!a!}!†!•!�!ª!³!¸!É!÷!ü!""/"?"E"P"Y"_"¥"€"µ"ð"Ë"####·#çL™h~Ü~ܜܢܥܮܸÜÐÜàÜéÜïÜóÜ÷ÜùÜÝ!Ý.Ý4Ý8Ý<Ý>ÝBÝFÝFÝiÝmÝsÝsÝzݜݱÝÄÝ×ÝÝÝäÝïÝùÝýÝÞÞ ÞÞÞ)Þ/Þ4Þ;ÞHÞJÞ\Þ^ÞcÞpÞrÞ„Þ„Þ„Þ„Þ„Þ¦Þ±Þ½ÞÔÞÔÞéÞõÞß6ßPßUßlßqßߖߛߡ߲ßÇßÍßÝßêßà àà à-à9à9à9à?àBàEà^àdàxà~à…à�à�à•à¢à¯à¯àµàÃàÚàààãàæàíàôàûàûàá ááá á.áEáKáNáQáXáXáiáná{áˆáˆá�á™á á¦á­á¸áÌáÌáæáëáòáúáââââ5â:âcânâuâ}â–âªâªâÅâÅâßâôâûâã0ãTãVã`ã‚ã‚ã‚ã›ã©ãºãÒãÖã«äèT’*16>XacpprŒ’”–££££§¿ÇÐØßåç   , 2 F K X X l s z ƒ ‘ š º À Ä É Î Ñ Û Þ î éL%ÞÿÞÿêÿ!+5=@Fê0 & & > € t H F ” œ ëÕÓ¾#¾#Û#æ#ù#æ#$!$!$1$:$A$E$N$N$V$Z$x$„$�$–$¡$Ã$Ã$Ö$á$ç$î$ó$ó$%%%#%+%8%8%J%O%O%_%d%d%d%w%|%�%•%œ%±%Å%Å%Ê%Ê%Ú%ß%ß%ä%ë%ó%ú%ü%& & && &-&4&7&Y&Y&a&pLine truncated
++$+;+=+F+Q+S+_+}+ƒ+‰+�+˜+©+Ð+Ù+ã+ð+,,,*,?,?,L,Q,c,i,i,i,i,%-ìxÔî&-&-D-V-\-h---‘-—-¢-²-¾-Ç-Í-Ó-Þ-ì-ù-..".".R.í0-5vv„¤ª°°îD v:v:„:Ž:˜:¨:­:³:¿:Á:Ó:Ó:Õ:;ï„{˜6Û6ÛHÛ]ÛgÛpÛrÛyÛ‰Û”Û–Û Û Û¦Û·ÛºÛºÛÛÛæÛèÛÜÜ ÜÜ+Ü~Üð ␍^Î^ÎgÎ{΀Îñ ¾Î¾ÎÇÎæÎëÎò4%îÎîÎüÎÏÏÏÏ'Ï-Ïó  6Î6ÎDÎXÎ^Îô †Î†Î”γιÎõÌKz.Ù.ÙBÙWÙfÙjÙxÙ~Ù�Ù�ٜ٧ٲٽÙÄÙÔÙþÙÚ Ú␍ÚÚÚ3Ú5Ú?Ú`ÚkÚmÚ†ÚŠÚ˜Ú�Ú�Ú¤Ú°Ú¸ÚËÚ5Ûö�½~?~?œ?Ÿ?¥?¹?Á?Ò?ß?å?ê?ê?÷?@@@$@&@E@V@]@i@y@y@‡@š@¥@©@º@º@º@¿@¿@Ë@Ú@í@ó@ø@ AAA,A2A4ACAPAVA\AaAgAmAtA€A‡A‰AŽA–A˜A�A©A«A°A¸AºA¿AÇAÉAÎAÖAØAÝAçAéAîAøAøAøABBB B%B+B6B;BCB\BbBmBqBwB‚B›B¦B±B·BÄBÉBÎBÎBãBëBóBCC'C-C<CECJCOCdCkCtC€C†C’C–C›C«C¶CÁCÃCÉCÖCÛCàCùCDDDD"D$D)D2DKDVDaDgDtDtDxD}D}DŽD�D�D£D¥D¥D¸DºDºDÍDÏDÏDâDäDäDöDöDüDEEE,E!E9EAEHEOEWEjElE…E…EŸE¢E¤E°EÂEÒEÞEõEFF(F8FKFPFPFVFjF|F‡F�F—F›F©F¯F´F´FºFÎFÞFãFãFéFïFôFôFôFúF GG)G-G2G2G6G;G;G@GKGWGqG‡G“G“G™G¦G¨G³G¿GÎGáGáGîGúGúGúGúGþGHH&H1H9HAHCHUHZHhHtHzH‡H‡HžH®H®HÂHÎHÐHÙHåHüHüHIII#I#I.I.I.I.I.IªK÷ˆ0ž ž ¾ Æ Ê Ø Þ ä 
'
;
I
`
f
r
w
…
¤
­
½
¿
Æ
Æ
Ì
Ì
Ü
øœ C;;;";.;>;V;\;j;{;ƒ;Š; ;Æ;à;í;ú;
<<<#<E<L<R<`<h<~<‰<�<•<¸<ù(Kæ1æ12 22&282>2I2`2o2z2~2‰2•2 2¬2Ã2Ú2í233)3)3;3A3R3X3h3h3€3€3¥3¥3ª3ª3°3¼3É3Õ3ê3444-494P4h4‰4‰4’4—4—4—4—4§4°4¸4½4Ë4Ù4é4î4î455 5 55 52585D5T5_5i5m5v5�5’5¢5¯5¿5Ï5Ö5Ü5è5ð5û5666 6,676=6M6]6]6Š6¬6¸6À6Ë6Ò6Ý6ß6ê6ê6ú6ÿ6ÿ6 77&7,7:7G7T7^7b7k7„7‡7—7ž7£7£7·7·7¼7À7Ð7Ù7ë7ñ7ó7ó788␍88$808@8@8@8E8]8]8l8o8ƒ8¡8¬8Õ8ç8ò899␍99&969N9U9Y9_9g9r9u:úD€¾<¾<Ú<á<ù<==&=&=+=6=B=M=[=k={=‚=‰=ž=³=³=Ç=ß=ì=û=>>*>8>F>M>T>i>~>~>’>Ÿ>°>À>Æ>×>×>Ý>ë>ü> ??{?û„yÖ&␍&␍H␍S␍Z␍b␍e␍e␍u␍€␍€␍ƒ␍Š␍‘␍˜␍ž␍¤␍«␍±␍Â␍Â␍Ä␍Í␍Ù␍ß␍  $))06GMS^oox}‡Ž•�£¥³ÊÍÜèõõõõû␍$EVjq{ƒŠŠ“š¦ÁÁÁÕéùü·üxÔnæóæóôôô)ôOôOôXôZôZôaôˆô�ô�ôžô­ôÂôÍôÍôÙôàôðôöôõ õ!õ:õ@õKõ[õmõvõ�õ†õŒõ“õ¸õ½õËõÔõÔõÛõêõöööö*ö1ö8ö=öHöNöVö|ö…öŒö‘öœö¨ö·öËöÐöØöäööööö␍÷÷÷,÷>÷D÷M÷M÷\÷b÷v÷÷�÷ž÷°÷¹÷É÷Ü÷ä÷ø÷ø0ø4ø@øWøsø…ø‹ø–ø¢ø²øÂøÇøÐøÐøâøæøòø ù%ù7ù=ùHùTùdùtù†ùŒùŒù‘ù“ù“ù˜ù˜ù§ù­ù³ù³ù·ù0üý¸iÓ®ä®äÌä×äâäåå
åå"å(å9åHåWådådåjåoåtå‡åšå¥å©å»åÌåÔåÛåöåææææ+ææ<æ3æFæHædæPælæzæzæ|æ˜æ˜æŸæ¥æ®æµæ¸æÏæÚæîæáæöæüæçççççç%ç%ç0çEçNçNçNçNçjç�ç‡çŒçŒç¡ç§ç¬ç¬ç¸çÕçóçøçýçýç è&è5èDèLèQèWè\è\ècèjè�èªè¬èÉèÞèÞèäèäèñèúèúè'é2é7éDéOéWé_éoé†é†é–é–é¨é®éÖéßéßéáéèéíéíéúéê êêê'ê4êFêQê_êhêmê”ê�ê¨ê­ê´ê¼êÏêäêéêðêýêëë+ë2ë8ëAëAëdëkëpë~ëŽëœëœë¢ë©ë²ë²ëÅë×ëÚëÚëëëóëûëì$ì+ì8ì:ìAìUìdìdìdì‹ì‹ì‹ì˜ì˜ì­ì¸ìÊì×ìâìðìûì
íí+í>í@íOídífítí‰í‰í�í˜í˜í¥í«í½í½íÊíÍíØíêíñíüíî îîî î5î7îQîfîfîfîhîoîvî‡î•î§î§î­î´î½îÂîãîìîìîòîûîûîïï'ï*ï0ï9ïAïLï^ïdïoïoï|ïï…ïŽï–ï¡ï³ï¹ïÄïÄïÑïÔïÚïãïåïðð/ð5ð@ðRðXð`ð`ð`ð`ðkðæóþÈB°FFhszƒ“¥¬²¸½âïòû␍;NRXov„Š– ¥¬ÅÏØèêñöþ+7Qpw��–œ¢¨¾ßóÿ!0=LYiw’Ÿª¿âô &+2ITahhv…‡•¤¾áì ÿT·&&Q[ny‹™ ¯¾ÔÜï 0@IOT[bhny„‡Ž¨°Êßìï÷û␍'/F_cls…�”˜¡£µÌÚàäæóóóõ   $ ø×¾¾àèîû$$$13>HO[flv}ŽŽ™££µ»ËÑÖÝÝþ&,/557=CEEEV`eez„„˜¡§­ÃÈÏâææîôú --RV]cr…‹�–œ¢¢¤¨¯µ»ÀÀÀÀëüü $,Aaagjntt†—¬ÀÈÙÝîòø&(4RYd‡’˜ž¤­´É×ßãôøþ ,.:X^djszбºÀÀÕÚÚáèúÿÿÿ57QW_cj�“™¥¼ÃÉÕÚÚáåìúü ".39>FKZu…’¡½¿ÛÛâ÷ü##*.5CEMQU_krv~†Ž�©®ººÃÃææôúÿ39?\^^^iiin‘—\ïV.V.l.~.„.�.�.©.À.À.Ò.Ø.ã.ó.þ. //E/@åñÈÈÑÜçòý)+;0+3H(H(Q(w(ˆ(Ž(Ž(–(T¥bÎbÎ|Î�ΑΛΨνοÎÑÎÛÎðÎðÎ÷ÎúÎNÏD³³³/³9³@³L³e³n³r³„³‹³ª³H€Ž€%€%—%­%½%Ä%Û%ö%& &O&´»äp␍p␍‚␍…␍�␍›␍¬␍·␍Â␍Ô␍ì␍ñ␍
,>V[dkxŒ“•˜�Ÿ¸ÄDò@@Ydt½ÄØßçïø
!(G_hh�ÇÐò )S_�ƒŠ‘‘·÷7w·÷77FSXXgtvv~~~�¦¿ØÚÚááïòÿ␍1lsss{˜¦ÄÍÖò666Sa}›››¦©ÖØïõ -/<<`bizƒ…“•£¥³³ÓÓÓÓàó'4MUYaes�ƒ‹�“›©··ÑÜò$;FPWp|ƒœœ®³µ»ÌÝìó␍ -/===aa~…Œ�›ž¬°¾ÂÐÔÔíôù 5UhwyˆŠ™££±ºÐ×ü*Z_mo}† ¢¤«¼ÅÇÕ×åçõõ444?[€™žžžÀÅÅÅåêêê  !!((+0OeЦº¿¿Úçéø"CEEH†††¥¥¥ÆËËËíòòò    6 ; ; V d f u ~ ˜ š š Ÿ š À   Š     8 8 b z ’ � ³ Ã Ø ð !! !1!K!b!i!{% L�žP&P&i&k&r&ˆ&˜&ž&µ&Í&Ð&â&*'
$6;ºÒäþ $<Aþþ  'A
+26 -23
View File
@@ -1,36 +1,39 @@
#exe {OptOn(OPTf_WARN_PAREN);};
#exe {OptOn(OPTf_WARN_DUP_TYPES);};
#exe {OptOn(OPTf_KEEP_PRIVATE);};
#include "/Kernel/Adam1a.HPP"
#exe {
Cd(__DIR__);;
OptOn(OPTf_WARN_PAREN);
OptOn(OPTf_WARN_DUP_TYPES);
OptOn(OPTf_KEEP_PRIVATE);
}
#include "/Kernel/KernelA.HPP"
#exe {OptOn(OPTf_EXTERNS_TO_IMPORTS);};
#include "/Compiler/CmpDefs.HPP"
#include "/Kernel/Adam1b.HPP"
#include "/Kernel/Adam1c.HPP"
#include "/Compiler/CompilerA.HPP"
#include "/Kernel/KernelB.HPP"
#include "/Kernel/KernelC.HPP"
#exe {OptOff(OPTf_EXTERNS_TO_IMPORTS);};
#exe {OptOff(OPTf_KEEP_PRIVATE);};
#include "CmpAsm"
#include "CmpExts"
#include "Templates"
#include "CExts"
CCmpGlbls cmp;
CUasmGlbls uasm;
#include "Unassembler"
#include "ICLCC"
#include "UAsm"
#include "CMisc"
#include "Lex"
#include "Hash1b"
#include "Assembler"
#include "CHash"
#include "Asm"
#include "OptLib"
#include "ExpParser"
#include "StmtParser"
#include "PrsExp"
#include "PrsStmt"
#include "OptPass012"
#include "OptPass3"
#include "OptPass4"
#include "OptPass5"
#include "OptPass6"
#include "BackLib"
#include "BackF1a"
#include "BackF1b"
#include "Back1a"
#include "Back1b"
#include "Back1c"
#include "OptPass789"
#include "CmpInit"
#include "CmpMain"
#include "BackFA"
#include "BackFB"
#include "BackA"
#include "BackB"
#include "BackC"
#include "OptPass789A"
#include "CInit"
#include "CMain"
+59 -46
View File
@@ -1,4 +1,21 @@
//Intermediate compiler codes
#define IS_0_ARG 0
#define IS_1_ARG 1
#define IS_2_ARG 2
#define IS_V_ARG 3 //Variable Arg Cnt
#define IST_NULL 0
#define IST_DEREF 1
#define IST_ASSIGN 2
#define IST_CMP 3
class CIntermediateStruct
{
U8 arg_cnt,result_cnt,type;
Bool fpop,not_const,pad[3];
U8 *name;
};
#define IC_END 0x00
#define IC_NOP1 0x01
#define IC_END_EXP 0x02
@@ -9,7 +26,7 @@
#define IC_CALL_END2 0x07
#define IC_RETURN_VAL 0x08
#define IC_RETURN_VAL2 0x09
#define IC_IMM_U64 0x0A
#define IC_IMM_I64 0x0A
#define IC_IMM_F64 0x0B
#define IC_STR_CONST 0x0C
#define IC_ABS_ADDR 0x0D
@@ -70,9 +87,9 @@
#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_GREATER_EQUAL 0x3D
#define IC_GREATER 0x3E
#define IC_LESS_EQUAL 0x3F
#define IC_PUSH_CMP 0x40
#define IC_AND_AND 0x41
@@ -164,18 +181,21 @@
#define IC_BR_NOT_ZERO 0x88
#define IC_BR_CARRY 0x89
#define IC_BR_NOT_CARRY 0x8A
#define IC_BR_NOT_EQUAL 0x8B
#define IC_BR_EQUAL_EQUAL 0x8C
#define IC_BR_GREATER_EQUAL 0x8D
#define IC_BR_LESS_EQUAL 0x8E
#define IC_BR_EQUAL_EQUAL 0x8B
#define IC_BR_NOT_EQUAL 0x8C
#define IC_BR_LESS 0x8D
#define IC_BR_GREATER_EQUAL 0x8E
#define IC_BR_GREATER 0x8F
#define IC_BR_LESS 0x90
#define IC_BR_NOT_EQUAL2 0x91
#define IC_BR_EQUAL_EQUAL2 0x92
#define IC_BR_GREATER_EQUAL2 0x93
#define IC_BR_LESS_EQUAL2 0x94
#define IC_BR_LESS_EQUAL 0x90
#define IC_BR_EQUAL_EQUAL2 0x91
#define IC_BR_NOT_EQUAL2 0x92
#define IC_BR_LESS2 0x93
#define IC_BR_GREATER_EQUAL2 0x94
#define IC_BR_GREATER2 0x95
#define IC_BR_LESS2 0x96
#define IC_BR_LESS_EQUAL2 0x96
#define IC_BR_AND_ZERO 0x97
#define IC_BR_AND_NOT_ZERO 0x98
#define IC_BR_MM_ZERO 0x99
@@ -189,40 +209,33 @@
#define IC_BR_BTS 0xA0
#define IC_BR_BTR 0xA1
#define IC_BR_BTC 0xA2
#define IC_BR_LBTS 0xA3
#define IC_BR_LBTR 0xA4
#define IC_BR_LBTC 0xA5
#define IC_BR_NOT_BT 0xA6
#define IC_BR_NOT_BTS 0xA7
#define IC_BR_NOT_BTR 0xA8
#define IC_BR_NOT_BTC 0xA9
#define IC_BR_NOT_LBTS 0xAA
#define IC_BR_NOT_LBTR 0xAB
#define IC_BR_NOT_LBTC 0xAC
#define IC_BR_NOT_BT 0xA3
#define IC_BR_NOT_BTS 0xA4
#define IC_BR_NOT_BTR 0xA5
#define IC_BR_NOT_BTC 0xA6
#define IC_SWAP_U8 0xAD
#define IC_SWAP_U16 0xAE
#define IC_SWAP_U32 0xAF
#define IC_SWAP_I64 0xB0
#define IC_SWAP_U8 0xA7
#define IC_SWAP_U16 0xA8
#define IC_SWAP_U32 0xA9
#define IC_SWAP_I64 0xAA
#define IC_ABS_I64 0xB1
#define IC_SIGN_I64 0xB2
#define IC_MIN_I64 0xB3
#define IC_MIN_U64 0xB4
#define IC_MAX_I64 0xB5
#define IC_MAX_U64 0xB6
#define IC_MOD_U64 0xB7
#define IC_SQR_I64 0xB8
#define IC_SQR_U64 0xB9
#define IC_SQR 0xBA
#define IC_ABS 0xBB
#define IC_SQRT 0xBC
#define IC_SIN 0xBD
#define IC_COS 0xBE
#define IC_TAN 0xBF
#define IC_ATAN 0xC0
#define IC_NUM_ENTRIES 0xC1
//Don't forget $LK,"IC_INIT_TABLE",A="FA:::/Compiler/CmpInit.CPP,IC_INIT_TABLE"$
#define IC_ABS_I64 0xAB
#define IC_SIGN_I64 0xAC
#define IC_MIN_I64 0xAD
#define IC_MIN_U64 0xAE
#define IC_MAX_I64 0xAF
#define IC_MAX_U64 0xB0
#define IC_MOD_U64 0xB1
#define IC_SQR_I64 0xB2
#define IC_SQR_U64 0xB3
#define IC_SQR 0xB4
#define IC_ABS 0xB5
#define IC_SQRT 0xB6
#define IC_SIN 0xB7
#define IC_COS 0xB8
#define IC_TAN 0xB9
#define IC_ATAN 0xBA
#define IC_NUM_ENTRIES 0xBB
#define KW_INCLUDE 0
#define KW_DEFINE 1
+3 -3
View File
@@ -1,5 +1,5 @@
#help_index "Compiler"
extern U0 CmpInit(Bool first);
extern U0 CInit(Bool first);
public extern I64 ExeFile(U8 *name,Bool just_load=FALSE);
public extern I64 ExeFile2(U8 *name,Bool just_load=FALSE);
public extern I64 ExePrint(U8 *fmt,...);
@@ -10,15 +10,15 @@ public extern I64 ExePutS2(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE);
public extern CCmpGlbls cmp;
#help_index "Compiler/Directive"
#help_file "::/Doc/Directives"
public extern Bool CTrace(Bool val);
public extern Bool Echo(Bool val);
public extern Bool GetOpt(I64 num);
public extern I64 IncludeDepth();
public extern Bool OTrace(Bool val);
public extern I64 OTraceMask(I64 i=0b1001111101);
public extern Bool OptEqu(I64 num,Bool val);
public extern Bool OptOff(I64 num);
public extern Bool OptOn(I64 num);
extern U0 StreamDir();
public extern I64 StreamExePrint(U8 *fmt,...);
public extern U0 StreamPrint(U8 *fmt,...);
-424
View File
@@ -1,424 +0,0 @@
Bool OptEqu(I64 num,Bool val)
{//Set compiler option to value.
return BEqu(&Fs->last_lex->opts,num,val);
}
Bool OptOn(I64 num)
{//Turn on compiler option.
return OptEqu(num,ON);
}
Bool OptOff(I64 num)
{//Turn off compiler option.
return OptEqu(num,OFF);
}
Bool GetOpt(I64 num)
{//Get state of compiler option.
return Bt(&Fs->last_lex->opts,num);
}
Bool OTrace(Bool val)
{//Displays intermediate code after passes through optimization.
return OptEqu(OPTf_OPT_TRACE,val);
}
I64 OTraceMask(I64 i=0b1001111101)
{//Ctrls which optimizer passes are displayed.
I64 old=Fs->last_lex->pass_trace_mask;
Fs->last_lex->pass_trace_mask=i;
return old;
}
Bool CTrace(Bool val)
{//Displays assembly code output from compiler.
return OptEqu(OPTf_COMPILE_TRACE,val);
}
Bool Echo(Bool val)
{//Displays text as it is being compiled.
return OptEqu(OPTf_ECHO,val);
}
I64 IncludeDepth()
{//Returns how many #includes we are in. See $LK,"IncludeDepth",A="FF:::/Demo/Graphics/Camp.CPP,IncludeDepth"$.
CLex *lx=Fs->last_lex;
return lx->cur_lfn-&lx->lfns;
}
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 *a)
{
if (a->type_pointed)
"%Z %Z %Z ",
a->type&RT_MASK,"ST_RAW_TYPES",
a->type_pointed&RT_MASK,"ST_RAW_TYPES",
a->type>>4,"ST_TY_TYPES";
else
"%Z %Z ",
a->type&RT_MASK,"ST_RAW_TYPES",
a->type>>4,"ST_TY_TYPES";
switch (a->type>>4) {
case TY_STK>>4:
"STK";
break;
case TY_IMM>>4:
"#%X",a->disp;
break;
case TY_REG>>4:
"%Z",a->reg,"ST_U64_REGS";
break;
case TY_DISP>>4:
"%X[%Z]",a->disp,a->reg,"ST_U64_REGS";
break;
case TY_RIP_DISP32>>4:
"[%X]",a->disp;
break;
case TY_SIB>>4:
if (a->disp)
"%X",a->disp;
if (a->reg==REG_RIP)
'[';
else
"[%Z+",a->reg&15,"ST_U64_REGS";
"%Z",a->reg>>8&15,"ST_U64_REGS";
switch (a->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_code,i;
if (opcode>=IC_END_EXP && opcode!=IC_NOP2) {
"%15ts %016X ",
DefineSub(opcode,"ST_INTERMEDIATE_CODE")+5,
tempi->ic_data;
if (tempi->r.type&TY_MASK) {
ICArgPut(&tempi->r);
"<-";
}
if (tempi->a1.type&TY_MASK)
ICArgPut(&tempi->a1);
',';
if (tempi->a2.type&TY_MASK)
ICArgPut(&tempi->a2);
'' CH_SPACE;
ICClassPut(tempi->ic_class);
if (tempi->ic_flags & ICF_LOCK)
"$$BROWN$$lock$$FG$$ ";
if (tempi->ic_flags & ICF_A2_TO_F64)
"$$LTBLUE$$a2d$$FG$$ ";
if (tempi->ic_flags & ICF_A2_TO_INT)
"$$GREEN$$a2i$$FG$$ ";
if (tempi->ic_flags & ICF_A1_TO_F64)
"$$LTBLUE$$a1d$$FG$$ ";
if (tempi->ic_flags & ICF_A1_TO_INT)
"$$GREEN$$a1i$$FG$$ ";
if (tempi->ic_flags & ICF_R_TO_F64)
"$$LTBLUE$$rd$$FG$$ ";
if (tempi->ic_flags & ICF_R_TO_INT)
"$$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<3;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 ";
'\n';
}
}
U0 LCCQuePut(CLex *lx)
{
CIntermediateCode *tempi=lx->lcc.lcc_root.next;
while (tempi->ic_code) {
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_code=IC_END;
}
CIntermediateCode *LCCAdd(CLex *lx,
I64 opcode_and_precedence,I64 arg, CHashClass *c,I64 flags=0)
{
CIntermediateCode *tempi=MAlloc(sizeof(CIntermediateCode));
tempi->ic_code=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;
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||mc->type==CMT_ASM_LABEL) &&
!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,CLexCodeCtrl *lcc)
{
CLexCodeMisc *mc,*mc1;
U8 *undef=NULL;
QueDel(&lcc->lcc_root.next);
mc=lcc->lcc_next_misc;
while (mc!=&lcc->lcc_next_misc) {
mc1=mc->next;
switch (mc->type) {
case CMT_GOTO_LABEL:
case CMT_ASM_LABEL:
if (!(mc->flags&CMF_DEFINED)) {
undef=mc->str;
mc->str=NULL;
} else if (!mc->use_cnt) {
PrintWarn("Unused label %s\n",mc->str);
LexWarn(lx,"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("Undefined goto label %s\n",undef);
Free(undef);
LexExcept(lx,"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,I64 *_code_size,CDbgInfo **_dbg,I64 *_type)
{
U8 *result;
CLexCodeMisc *lb;
I64 i,code_size,last_code_size;
COptReg reg_offsets[NUM_REGS];
if (_dbg) *_dbg=NULL;
LCCHeaderPut(lx,1,TRUE);
OptPass012(lx);
LCCHeaderPut(lx,2,TRUE);
OptPass012(lx);
LCCHeaderPut(lx,3,TRUE);
OptPass3(lx,reg_offsets);
LCCHeaderPut(lx,4,TRUE);
OptPass4(lx,reg_offsets,_type);
LCCHeaderPut(lx,5,TRUE);
OptPass5(lx);
LCCHeaderPut(lx,6,TRUE);
OptPass6(lx);
LCCHeaderPut(lx,7,TRUE);
lb=lx->lcc.lcc_next_misc;
while (lb!=&lx->lcc.lcc_next_misc) {
if (lb->type==CMT_JMP_TABLE) {
for (i=0;i<lb->range;i++)
lb->jmp_table[i]=OptLabelFwd(lb->jmp_table[i]);
lb->dft=OptLabelFwd(lb->dft);
}
lb=lb->next;
}
LCCHeaderPut(lx,7,FALSE);
OptPass789(lx,reg_offsets,NULL,NULL);
LCCHeaderPut(lx,8,FALSE);
code_size=OptPass789(lx,reg_offsets,NULL,NULL);
do {
last_code_size=code_size;
LCCHeaderPut(lx,8,FALSE);
code_size=OptPass789(lx,reg_offsets,NULL,NULL);
if (code_size>last_code_size) {
"Pass:8 Code Size\n";
LexExcept(lx,"Compiler Optimization Error at ");
}
} 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,reg_offsets,result,_dbg);
cmp.compiled_bytes+=code_size;
LCCDel(lx,&lx->lcc);
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;
}
+41 -110
View File
@@ -36,14 +36,14 @@ CLex *LexNew(U8 *buf=NULL,I64 flags=0,U8 *filename=NULL)
{//MAlloc new lex ctrl node.
//Frees buf in $LK,"LexDel",A="MN:LexDel"$ unless $LK,"LF_DONT_FREE_BUF",A="MN:LF_DONT_FREE_BUF"$ flag is set.
//FileName is for error reporting. If files are #included, new names are used.
//See $LK,"Psalmody LexNew",A="FF:::/Apps/Psalmody/Psalmody.CPP,LexNew"$.
//See $LK,"Psalmody LexNew",A="FF:::/Apps/Psalmody/PsalmodyFile.CPP,LexNew"$.
CLex *lx=MAlloc(sizeof(CLex));
CLexFile *tempf=&lx->lfns[0];
MemSet(lx,0,offset(CLex.end_of_zeroed_members)+sizeof(CLexFile));
MemSet(lx,0,offset(CLex.end_zeroed)+sizeof(CLexFile));
QueInit(lx);
lx->flags=flags;
lx->opts=1<<OPTf_WARN_UNUSED_VAR;
lx->pass_trace_mask=0b1001111101;
lx->otrace_mask=0b10001111101;
lx->htc.hash_mask=HTG_TYPE_MASK-HTT_IMPORT_SYS_SYM;
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)
@@ -53,9 +53,9 @@ CLex *LexNew(U8 *buf=NULL,I64 flags=0,U8 *filename=NULL)
lx->cur_lfn=tempf;
QueInit(&lx->next_stream_blk);
if (filename)
tempf->name=FileNameAbs(filename);
tempf->full_name=FileNameAbs(filename);
else
tempf->name=StrNew(dsk.temp_filename);
tempf->full_name=StrNew(dsk.temp_filename);
if (flags & LF_PMT)
buf=CAlloc(4);
tempf->buf=tempf->buf_ptr=tempf->line_start=lx->cur_buf_ptr=buf;
@@ -71,17 +71,17 @@ U0 LexDel(CLex *lx)
if (doc=tempf->doc)
DocDel(doc);
Free(tempf->buf);
Free(tempf->name);
Free(tempf->full_name);
tempf--;
}
LinkedLstDel(lx->htc.next);
Free(tempf->name);
Free(tempf->full_name);
if (!(lx->flags & LF_DONT_FREE_BUF))
Free(tempf->buf);
Free(lx->ps);
Free(lx->cur_str);
Free(lx->cur_help_index);
Free(lx->dollar);
Free(lx->dollar_buf);
Free(lx);
}
@@ -94,10 +94,10 @@ I64 LexSize(CLex *lx)
if (doc=tempf->doc)
result+=DocSize(doc);
result+=MSize2(tempf->buf);
result+=MSize2(tempf->name);
result+=MSize2(tempf->full_name);
tempf--;
}
result+=MSize2(tempf->name);
result+=MSize2(tempf->full_name);
if (!(lx->flags & LF_DONT_FREE_BUF))
result+=MSize2(tempf->buf);
result+=MSize2(lx->cur_str);
@@ -143,9 +143,9 @@ Bool LexDollar(CLex *lx,CDoc *doc,CDocEntry *doc_e)
{
U8 *st;
if (lx->flags&LF_IN_QUOTES) {
Free(lx->dollar);
Free(lx->dollar_buf);
st=Doc2PlainText(doc,doc_e);
lx->dollar=MStrPrint("$$%Q$$",st);
lx->dollar_buf=MStrPrint("$$%Q$$",st);
lx->dollar_cnt=2;
Free(st);
return TRUE;
@@ -181,7 +181,7 @@ lgc_start2:
if (doc_e->de_flags & ~(DOCEF_TAG|DOCEF_DEFINE|DOCEF_TAG_CB|
DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|
DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP) &&
LexDollar(lx,doc,doc_e) && *(src=lx->dollar)) {
LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) {
tempf->line_num=doc_e->y+1;
tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src;
} else if (*(src=doc_e->tag))
@@ -196,8 +196,6 @@ lgc_start2:
tempf->line_start=doc_e->next;
tempf->line_num=doc_e->y+2; //+1 because NEW_LINE is on previous line, +1 because doc y starts at zero
cmp.compiled_lines++;
if (tempf==lx->fun_lfn && tempf->line_num>lx->max_line)
lx->max_line=tempf->line_num;
lx->last_U16='\n';
goto lgc_done;
case DOCT_TAB:
@@ -235,7 +233,7 @@ lgc_start2:
lx->last_U16=TK_INS_BINARY_SIZE;
goto lgc_done;
case DOCT_SHIFTED_Y:
if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar)) {
if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) {
tempf->line_num=doc_e->y+1;
tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src;
} else {
@@ -255,7 +253,7 @@ lgc_start2:
goto lgc_start2;
case 0xFF: //nobound_switch
default:
if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar)) {
if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) {
tempf->line_num=doc_e->y+1;
tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src;
} else {
@@ -269,13 +267,13 @@ lgc_start2:
if (tempf!=&lx->lfns[0] || !(lx->flags&LF_DONT_FREE_BUF))
DocDel(doc);
tempf->doc=tempf->buf=NULL;
Free(tempf->name);
tempf->name=NULL;
Free(tempf->full_name);
tempf->full_name=NULL;
}
tempf=lx->cur_lfn;
if (tempf!=&lx->lfns[0]) {
Free(tempf->name);
tempf->name=NULL;
Free(tempf->full_name);
tempf->full_name=NULL;
Free(tempf->buf);
tempf->buf=NULL;
tempf1=tempf;
@@ -306,8 +304,6 @@ lgc_start2:
tempf->line_num++;
cmp.compiled_lines++;
tempf->line_start=src;
if (tempf==lx->fun_lfn && tempf->line_num>lx->max_line)
lx->max_line=tempf->line_num;
}
break;
case 0xFF: //nobound_switch
@@ -363,9 +359,9 @@ U0 LexIncludeStr(CLex *lx,U8 *abs_filename,U8 *src,Bool actual_file)
tempf->last_U16=0;
tempf->flags=0;
if (actual_file)
tempf->name=StrNew(abs_filename);
tempf->full_name=StrNew(abs_filename);
else
tempf->name=StrNew(dsk.temp_filename);
tempf->full_name=StrNew(dsk.temp_filename);
lx->cur_buf_ptr=src;
}
@@ -401,7 +397,7 @@ U0 LexAttachDoc(CLex *lx,CLexFile *tempf=NULL,
}
if (!doc_e)
doc_e=doc->root.next;
tempf->name=StrNew(doc->filename.name);
tempf->full_name=StrNew(doc->filename.name);
tempf->doc=doc;
while (doc_e!=doc) {
if (Bt(cmp_type_flags_src_code,doc_e->type_u8))
@@ -460,7 +456,7 @@ U0 LexPop(CLex *lx)
}
I64 MemberMetaData(U8 *needle_str,CMemberLst *haystack_member_lst)
{//Find meta data name, return meta data val. See $LK,"::/Demo/ClassMeta.CPP.Z"$.
{//Find meta data name, return meta data val. See $LK,"::/Demo/ClassMeta.CPP"$.
CMemberLstMeta *meta=haystack_member_lst->meta;
while (meta) {
if (!StrCmp(meta->str,needle_str))
@@ -471,7 +467,7 @@ I64 MemberMetaData(U8 *needle_str,CMemberLst *haystack_member_lst)
}
CMemberLstMeta *MemberMetaFind(U8 *needle_str,CMemberLst *haystack_member_lst)
{//Find meta data name, return meta data struct. See $LK,"::/Demo/ClassMeta.CPP.Z"$.
{//Find meta data name, return meta data struct. See $LK,"::/Demo/ClassMeta.CPP"$.
CMemberLstMeta *meta=haystack_member_lst->meta;
while (meta) {
if (!StrCmp(meta->str,needle_str))
@@ -524,7 +520,7 @@ U0 MemberAdd(CLex *lx,CMemberLst *tempm,CHashClass *tempc,I64 mode)
if (MemberFind(st,tempc) && StrCmp(st,"pad") && StrCmp(st,"reserved") && StrCmp(st,"_anon_"))
LexExcept(lx,"Duplicate member at ");
if (mode==PRS1B_LOCAL_VAR) {
tempc2=tempm->member_class-tempm->member_class->ptr_cnt;
tempc2=tempm->member_class-tempm->member_class->ptr_stars_cnt;
if (Bt(&lx->opts,OPTf_WARN_DUP_TYPES) && MemberFind2(tempc2,tempc))
LexWarn(lx,"Duplicate type at ");
} else
@@ -576,7 +572,7 @@ U0 MemberLstDel(CHashClass *tempc)
if (tempm->flags & MLF_STR_DFT_AVAILABLE)
Free(tempm->dft_val);
if (tempm->flags & MLF_FUN)
HashDel(tempm->fun_ptr-tempm->fun_ptr->ptr_cnt);
HashDel(tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt);
temp_meta=tempm->meta;
while (temp_meta) {
temp_meta1=temp_meta->next;
@@ -610,7 +606,7 @@ I64 MemberLstSize(CHashClass *tempc)
if (tempm->flags & MLF_STR_DFT_AVAILABLE)
result+=MSize2(tempm->dft_val);
if (tempm->flags & MLF_FUN)
result+=HashEntrySize2(tempm->fun_ptr-tempm->fun_ptr->ptr_cnt);
result+=HashEntrySize2(tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt);
temp_meta=tempm->meta;
while (temp_meta) {
result+=MSize2(temp_meta->str);
@@ -657,6 +653,9 @@ I64 LexInStr(CLex *lx,U8 *buf,I64 size,Bool *done)
case 't':
buf[i++]='\t';
break;
case '0':
buf[i++]=0;
break;
case 'x':
case 'X':
j=0;
@@ -673,36 +672,6 @@ I64 LexInStr(CLex *lx,U8 *buf,I64 size,Bool *done)
buf[i++]=j;
lx->flags|=LF_USE_LAST_U16;
break;
case 'b':
case 'B':
j=0;
while (TRUE) {
ch=LexGetChar(lx);
if ('0'<=ch<='1')
j=j<<1+ch-'0';
else
break;
}
buf[i++]=j;
lx->flags|=LF_USE_LAST_U16;
break;
case 'o':
case 'O':
j=0;
goto lis_octal;
case '0'...'7':
j=ch-'0';
lis_octal:
while (TRUE) {
ch=LexGetChar(lx);
if ('0'<=ch<='7')
j=j<<3+ch-'0';
else
break;
}
buf[i++]=j;
lx->flags|=LF_USE_LAST_U16;
break;
default:
lx->flags|=LF_USE_LAST_U16;
buf[i++]='\\';
@@ -831,18 +800,6 @@ lex_ident:
goto lex_end;
}
}
} else if (ch=='O') {
while (TRUE) {
ch=LexGetChar(lx);
if ('0'<=ch<='7')
i=i<<3+ch-'0';
else {
lx->cur_i64=i;
lx->flags|=LF_USE_LAST_U16;
lx->token=TK_INTEGER;
goto lex_end;
}
}
}
while (TRUE) {
if (Bt(chars_bitmap_dec_numeric,ch))
@@ -958,6 +915,9 @@ lex_float_start:
case 't':
k.u8[j]='\t';
break;
case '0':
k.u8[j]=0;
break;
case 'x':
case 'X':
i=0;
@@ -974,39 +934,9 @@ lex_float_start:
k.u8[j]=i;
lx->flags|=LF_USE_LAST_U16;
break;
case 'b':
case 'B':
i=0;
while (TRUE) {
ch=LexGetChar(lx);
if ('0'<=ch<='1')
i=i<<1+ch-'0';
else
break;
}
k.u8[j]=i;
lx->flags|=LF_USE_LAST_U16;
break;
case 'o':
case 'O':
i=0;
goto lex_octal;
case '0'...'7':
i=ch-'0';
lex_octal:
while (TRUE) {
ch=LexGetChar(lx);
if ('0'<=ch<='7')
i=i<<3+ch-'0';
else
break;
}
k.u8[j]=i;
lx->flags|=LF_USE_LAST_U16;
break;
default:
lx->flags|=LF_USE_LAST_U16;
k.u8[j]='\\';
lx->flags|=LF_USE_LAST_U16;
}
} else if (ch=='$$') {
ch=LexGetChar(lx);
@@ -1053,7 +983,7 @@ lex_octal:
temph->str=lx->cur_str;
lx->cur_str=0;
temph->type=HTT_DEFINE_STR;
SetSrcFileInfo(lx,temph);
HashSrcFileSet(lx,temph);
do ch=LexGetChar(lx); //skip space between define name and start
while (Bt(chars_bitmap_non_eol_white_space,ch));
@@ -1153,6 +1083,7 @@ lex_else:
}
} while (j);
break;
case KW_IF:
if (lx->flags & LF_IN_IF) {
lx->token=TK_IF;
@@ -1367,7 +1298,7 @@ lex_ifjit:
temph->str=FileNameAbs(fbuf);
Free(fbuf);
temph->type=HTT_HELP_FILE|HTF_PUBLIC;
SetSrcFileInfo(lx,temph);
HashSrcFileSet(lx,temph);
HashAdd(temph,lx->htc.glbl_hash_table);
break;
}
@@ -1571,12 +1502,12 @@ U8 *LexPutLine(CLex *lx,U8 *start)
U0 LexPutPos(CLex *lx)
{//Print token, line link and, then, $LK,"LexPutLine",A="MN:LexPutLine"$().
LexPutToken(lx);
SetFix(lx->cur_lfn->name,lx->cur_lfn->line_num);
FixSet(lx->cur_lfn->full_name,lx->cur_lfn->line_num);
if (IsRaw)
"%s,%d ",lx->cur_lfn->name,lx->cur_lfn->line_num;
"%s,%d ",lx->cur_lfn->full_name,lx->cur_lfn->line_num;
else {
PutFileLink(lx->cur_lfn->name,lx->cur_lfn->line_num);
AdamErr("%s,%d\n",lx->cur_lfn->name,lx->cur_lfn->line_num);
PutFileLink(lx->cur_lfn->full_name,lx->cur_lfn->line_num);
AdamErr("%s,%d\n",lx->cur_lfn->full_name,lx->cur_lfn->line_num);
'' CH_SPACE;
}
LexPutLine(lx,lx->cur_lfn->line_start);
+2 -2
View File
@@ -8,7 +8,6 @@
'^'= Rex xor-like
':'= floating sti-like for disassembly
'$$'= ending zero (ENTER)
$FG,4$Note:$FG$ TempleOS uses nonstandard opcodes.
Asm is kind-of a bonus and I made changes
to make the assembler simpler. For opcodes
@@ -906,7 +905,8 @@ OPCODE CMPXCHG
OPCODE CHPXCHG8B 0x0F 0xC7, RM64;
OPCODE DAA 0x27;
OPCODE DAS 0x2F;
OPCODE ENTER 0xC8, $$IW IMM16;
OPCODE ENTER
0xC8, $$IW IMM16;
OPCODE HLT 0xF4;
OPCODE IN
0xE4, IB &AL UIMM8
+68 -94
View File
@@ -97,6 +97,7 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tempi,
CIntermediateCode *tempi1,CIntermediateCode *tempi2,
Bool *is_unsigned)
{
CIntermediateCode *tempii;
CHashClass *tempc=tempi->ic_class,*tempc1,*tempc2;
if (tempi1->ic_flags&ICF_R_TO_INT)
@@ -121,36 +122,54 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tempi,
tempc=tempi->ic_class=tempc2;
if (tempc->raw_type==RT_F64) {
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
tempi1->ic_data(F64)=tempi1->ic_data;
tempi1->ic_class=cmp.internal_types[RT_F64];
tempi1->ic_code=IC_IMM_F64;
tempi1->ic_flags&=~ICF_R_TO_F64;
} else
if (tempc1->raw_type!=RT_F64)
tempi1->ic_flags|=ICF_R_TO_F64;
if (tempi2->ic_code==IC_IMM_U64) {
tempi1->ic_flags|=ICF_R_TO_F64;
if (tempi2->ic_code==IC_IMM_I64) {
tempi2->ic_data(F64)=tempi2->ic_data;
tempi2->ic_class=cmp.internal_types[RT_F64];
tempi2->ic_code=IC_IMM_F64;
tempi2->ic_flags&=~ICF_R_TO_F64;
} else
if (tempc2->raw_type!=RT_F64)
tempi2->ic_flags|=ICF_R_TO_F64;
if (tempi1->ic_code==IC_IMM_F64 &&
tempi2->ic_code==IC_IMM_F64 &&
!(tempi->ic_flags&(ICF_PUSH_CMP|ICF_POP_CMP))) {
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags;
OptSetNOP1(tempi1);
OptSetNOP1(tempi2);
return FBO1_F64;
} else
return FBO1_NOT_CONST;
tempi2->ic_flags|=ICF_R_TO_F64;
if (IC_LESS<=tempi->ic_code<=IC_GREATER_EQUAL && (tempii=OptLead1(tempi)) &&
tempii->ic_code!=IC_PUSH_CMP && tempii->ic_code!=IC_AND_AND) {
//We are looking for float comparisons to zero to convert to int.
if (tempi1->ic_code==IC_IMM_F64 && !tempi1->ic_data &&
tempi2->ic_code==IC_DEREF && tempc2==cmp.internal_types[RT_F64]) {
tempi1->ic_code==IC_IMM_I64;
goto fb_here1;
} else if (tempi2->ic_code==IC_IMM_F64 && !tempi2->ic_data &&
tempi1->ic_code==IC_DEREF && tempc1==cmp.internal_types[RT_F64]) {
tempi2->ic_code==IC_IMM_I64;
fb_here1:
tempi1->ic_flags&=~ICF_R_TO_F64;
tempi->ic_class=tempi1->ic_class=tempi2->ic_class=cmp.internal_types[RT_I64];
*is_unsigned=FALSE;
return FBO1_NOT_CONST;
}
goto fb_here2;
} else {
fb_here2:
if (tempi1->ic_code==IC_IMM_F64 && tempi2->ic_code==IC_IMM_F64 &&
!(tempi->ic_flags&(ICF_PUSH_CMP|ICF_POP_CMP))) {
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags;
OptSetNOP1(tempi1);
OptSetNOP1(tempi2);
return FBO1_F64;
} else
return FBO1_NOT_CONST;
}
}
*is_unsigned=tempc1->raw_type&1 || tempc2->raw_type&1;
if (tempi1->ic_code==IC_IMM_U64 &&
tempi2->ic_code==IC_IMM_U64 &&
!(tempi->ic_flags&(ICF_PUSH_CMP|ICF_POP_CMP))) {
if (tempi1->ic_code==IC_IMM_I64 && tempi2->ic_code==IC_IMM_I64 &&
!(tempi->ic_flags&(ICF_PUSH_CMP|ICF_POP_CMP))) {
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags;
OptSetNOP1(tempi1);
OptSetNOP1(tempi2);
@@ -163,11 +182,9 @@ Bool OptFixupBinaryOp2(CIntermediateCode **tempi1,CIntermediateCode **tempi2)
{
CIntermediateCode *tempii1=*tempi1,
*tempii2=*tempi2;
if (tempii1->ic_code==IC_IMM_U64 &&
!(tempii1->ic_flags & ICF_R_TO_F64))
if (tempii1->ic_code==IC_IMM_I64 && !(tempii1->ic_flags & ICF_R_TO_F64))
return TRUE;
if (tempii2->ic_code==IC_IMM_U64 &&
!(tempii2->ic_flags & ICF_R_TO_F64)) {
if (tempii2->ic_code==IC_IMM_I64 && !(tempii2->ic_flags & ICF_R_TO_F64)) {
*tempi1=tempii2;
*tempi2=tempii1;
return TRUE;
@@ -184,7 +201,7 @@ Bool OptFixupUnaryOp(CIntermediateCode *tempi,
tempi->ic_class=tempc1;
tempc=tempi->ic_class;
if (tempc->raw_type==RT_F64) {
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
tempi1->ic_data(F64)=tempi1->ic_data;
tempi1->ic_class=cmp.internal_types[RT_F64];
tempi1->ic_code=IC_IMM_F64;
@@ -200,7 +217,7 @@ Bool OptFixupUnaryOp(CIntermediateCode *tempi,
return FBO1_NOT_CONST;
}
*is_unsigned=tempc1->raw_type&1;
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
tempi->ic_flags|=tempi1->ic_flags;
OptSetNOP1(tempi1);
return FBO1_INT;
@@ -223,23 +240,8 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi)
tempi->t.a1t=tempii->t.a1t;
OptFree(tempii);
return OptBrNotZero(lx,tempi);
case IC_EQUAL_EQUAL:
tempi->ic_code=IC_BR_NOT_EQUAL;
break;
case IC_NOT_EQUAL:
tempi->ic_code=IC_BR_EQUAL_EQUAL;
break;
case IC_LESS:
tempi->ic_code=IC_BR_GREATER_EQUAL;
break;
case IC_GREATER:
tempi->ic_code=IC_BR_LESS_EQUAL;
break;
case IC_LESS_EQUAL:
tempi->ic_code=IC_BR_GREATER;
break;
case IC_GREATER_EQUAL:
tempi->ic_code=IC_BR_LESS;
case IC_EQUAL_EQUAL...IC_LESS_EQUAL:
tempi->ic_code=(tempii->ic_code-IC_EQUAL_EQUAL)^1+IC_BR_EQUAL_EQUAL;
break;
case IC_OR_OR:
tempi->ic_code=IC_BR_OR_OR_ZERO;
@@ -265,27 +267,21 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi)
case IC_BT:
tempii2->ic_code=IC_BR_NOT_BT;
break;
case IC_LBTS:
tempii2->ic_flags|=ICF_LOCK;
case IC_BTS:
tempii2->ic_code=IC_BR_NOT_BTS;
break;
case IC_LBTR:
tempii2->ic_flags|=ICF_LOCK;
case IC_BTR:
tempii2->ic_code=IC_BR_NOT_BTR;
break;
case IC_LBTC:
tempii2->ic_flags|=ICF_LOCK;
case IC_BTC:
tempii2->ic_code=IC_BR_NOT_BTC;
break;
case IC_LBTS:
tempii2->ic_code=IC_BR_NOT_LBTS;
tempii2->ic_flags|=ICF_LOCK;
break;
case IC_LBTR:
tempii2->ic_code=IC_BR_NOT_LBTR;
tempii2->ic_flags|=ICF_LOCK;
break;
case IC_LBTC:
tempii2->ic_code=IC_BR_NOT_LBTC;
tempii2->ic_flags|=ICF_LOCK;
break;
sub_switch_end:
tempii2->ic_data=tempi->ic_data;
tempii->ic_code=IC_CALL_END2;
@@ -304,11 +300,11 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi)
OptFree(tempii);
if (tempi->ic_flags&ICF_PUSH_CMP &&
IC_BR_NOT_EQUAL<=tempi->ic_code<=IC_BR_LESS &&
IC_BR_NOT_EQUAL<=tempi->ic_code<=IC_BR_LESS_EQUAL &&
!(tempi->ic_flags&ICF_USE_F64)) {
tempi->ic_code+=IC_BR_NOT_EQUAL2-IC_BR_NOT_EQUAL;
tempi->ic_code+=IC_BR_EQUAL_EQUAL2-IC_BR_EQUAL_EQUAL;
tempi->ic_flags&=~ICF_PUSH_CMP;
tempii =tempi->next; //IC_PUSH_CMP instruction
tempii=tempi->next; //IC_PUSH_CMP instruction
while (tempii->ic_code!=IC_PUSH_CMP)
tempii=tempii->next;
tempii->t.a1t=tempi;
@@ -371,23 +367,8 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi)
tempi->t.a1t=tempii->t.a1t;
OptFree(tempii);
return OptBrZero(lx,tempi);
case IC_EQUAL_EQUAL:
tempi->ic_code=IC_BR_EQUAL_EQUAL;
break;
case IC_NOT_EQUAL:
tempi->ic_code=IC_BR_NOT_EQUAL;
break;
case IC_LESS:
tempi->ic_code=IC_BR_LESS;
break;
case IC_GREATER:
tempi->ic_code=IC_BR_GREATER;
break;
case IC_LESS_EQUAL:
tempi->ic_code=IC_BR_LESS_EQUAL;
break;
case IC_GREATER_EQUAL:
tempi->ic_code=IC_BR_GREATER_EQUAL;
case IC_EQUAL_EQUAL...IC_LESS_EQUAL:
tempi->ic_code=tempii->ic_code+IC_BR_EQUAL_EQUAL-IC_EQUAL_EQUAL;
break;
case IC_OR_OR:
tempi->ic_code=IC_BR_OR_OR_NOT_ZERO;
@@ -413,27 +394,21 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi)
case IC_BT:
tempii2->ic_code=IC_BR_BT;
break;
case IC_LBTS:
tempii2->ic_flags|=ICF_LOCK;
case IC_BTS:
tempii2->ic_code=IC_BR_BTS;
break;
case IC_LBTR:
tempii2->ic_flags|=ICF_LOCK;
case IC_BTR:
tempii2->ic_code=IC_BR_BTR;
break;
case IC_LBTC:
tempii2->ic_flags|=ICF_LOCK;
case IC_BTC:
tempii2->ic_code=IC_BR_BTC;
break;
case IC_LBTS:
tempii2->ic_code=IC_BR_LBTS;
tempii2->ic_flags|=ICF_LOCK;
break;
case IC_LBTR:
tempii2->ic_code=IC_BR_LBTR;
tempii2->ic_flags|=ICF_LOCK;
break;
case IC_LBTC:
tempii2->ic_code=IC_BR_LBTC;
tempii2->ic_flags|=ICF_LOCK;
break;
sub_switch_end:
tempii2->ic_data=tempi->ic_data;
tempii->ic_code=IC_CALL_END2;
@@ -452,11 +427,11 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi)
OptFree(tempii);
if (tempi->ic_flags&ICF_PUSH_CMP &&
IC_BR_NOT_EQUAL<=tempi->ic_code<=IC_BR_LESS &&
IC_BR_NOT_EQUAL<=tempi->ic_code<=IC_BR_LESS_EQUAL &&
!(tempi->ic_flags&ICF_USE_F64)) {
tempi->ic_code+=IC_BR_NOT_EQUAL2-IC_BR_NOT_EQUAL;
tempi->ic_code+=IC_BR_EQUAL_EQUAL2-IC_BR_EQUAL_EQUAL;
tempi->ic_flags&=~ICF_PUSH_CMP;
tempii =tempi->next; //IC_PUSH_CMP instruction
tempii=tempi->next; //IC_PUSH_CMP instruction
while (tempii->ic_code!=IC_PUSH_CMP)
tempii=tempii->next;
tempii->t.a1t=tempi;
@@ -508,12 +483,11 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi)
U0 OptFixSizeOf(CIntermediateCode *tempi1,CIntermediateCode *tempi_push,CHashClass *tempcc)
{
if (tempi1->ic_code==IC_MUL &&
tempi1->t.a2t->ic_code==IC_SIZEOF) {
tempi1->t.a2t->ic_code=IC_IMM_U64;
if (tempi1->ic_code==IC_MUL && tempi1->t.a2t->ic_code==IC_SIZEOF) {
tempi1->t.a2t->ic_code=IC_IMM_I64;
tempi1->t.a2t->ic_class=tempcc;
tempi_push->ic_class=tempcc;
if (tempcc->ptr_cnt) {
if (tempcc->ptr_stars_cnt) {
tempcc--;
if (tempcc->size==1)
goto here;
@@ -542,7 +516,7 @@ I64 CmpRawType(CHashClass *tempc)
I64 CmpRawTypePointed(CHashClass *tempc)
{
if (tempc) {
if (tempc->ptr_cnt)
if (tempc->ptr_stars_cnt)
tempc--;
tempc=OptClassFwd(tempc);
return tempc->raw_type;
@@ -552,7 +526,7 @@ I64 CmpRawTypePointed(CHashClass *tempc)
U0 CmpF1PushPop(CIntermediateCode *tempi,CIntermediateCode *tempi2)
{
if (Bt(cmp.ic_bitmap_fpop,tempi2->ic_code)|| tempi2->ic_flags&ICF_R_TO_F64)
if (intermediate_code_table[tempi2->ic_code].fpop|| tempi2->ic_flags&ICF_R_TO_F64)
Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0);
}
@@ -560,9 +534,9 @@ U0 CmpF2PushPop(CIntermediateCode *tempi,CIntermediateCode *tempi1,CIntermediate
{
if ((tempi2->ic_code==IC_MOV || tempi2->ic_code==IC_IMM_F64) &&
!(tempi2->ic_flags&ICF_R_TO_F64) &&
(Bt(cmp.ic_bitmap_fpop,tempi1->ic_code) || tempi1->ic_flags&ICF_R_TO_F64))
(intermediate_code_table[tempi1->ic_code].fpop || tempi1->ic_flags&ICF_R_TO_F64))
Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0);
else if ((Bt(cmp.ic_bitmap_fpop,tempi2->ic_code) || tempi2->ic_flags&ICF_R_TO_F64)&&
else if ((intermediate_code_table[tempi2->ic_code].fpop || tempi2->ic_flags&ICF_R_TO_F64)&&
!(tempi1->ic_flags&ICF_R_TO_F64))
Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0);
}
+114 -140
View File
@@ -3,7 +3,7 @@
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",A="FF:::/Compiler/ExpParser.CPP,OptPass012"$
the type of the expression. $LK,"OptPass012",A="FF:::/Compiler/PrsExp.CPP,OptPass012"$
Pass#1&2
Constant expressions are simplified.
@@ -44,25 +44,25 @@ args.
tempi->ic_class2=tempc;
tempi_push=tempi;
MemSet(&tempi->a1,0,sizeof(CICArg)*4);
nobound_switch (cmp.arg_cnt[code]) {
case 9:
nobound_switch (intermediate_code_table[code].arg_cnt) {
case IS_V_ARG:
ps->ptr-=tempi->ic_data>>2;
break;
case 2:
case IS_2_ARG:
tempi2=PrsPop(ps);
tempc2=tempi2->ic_class;
tempi->t.a2t=tempi2;
tempi->t.a2c=PrsPop(ps);
case 1:
case IS_1_ARG:
tempi1=PrsPop(ps);
tempc1=tempi1->ic_class;
tempi->t.a1t=tempi1;
tempi->t.a1c=PrsPop(ps);
break;
case 0: //nobound_switch
case IS_0_ARG: //nobound_switch
break;
}
if (Bt(cmp.ic_bitmap_not_const,code))
if (intermediate_code_table[code].not_const)
lx->flags|=LF_NOT_CONST;
nobound_switch (code) {
case IC_IMM_F64:
@@ -70,11 +70,11 @@ args.
if (lx->pass==2 && tempi->ic_flags&ICF_R_TO_INT) {
tempi->ic_data=ToI64(tempi->ic_data(F64));
tempi->ic_flags&=~ICF_R_TO_INT;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
tempi->ic_class=cmp.internal_types[RT_I64];
}
break;
case IC_IMM_U64:
case IC_IMM_I64:
tempi->ic_flags&=~ICF_R_TO_INT;
if (lx->pass==2 && tempi->ic_flags&ICF_R_TO_F64) {
tempi->ic_data(F64)=ToF64(tempi->ic_data);
@@ -84,18 +84,18 @@ args.
}
break;
case IC_HOLYC_TYPECAST:
if (tempi1->ic_code==IC_IMM_U64 || tempi1->ic_code==IC_IMM_F64) {
if (tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) {
if (tempi->ic_class->raw_type==RT_F64)
tempi1->ic_code=IC_IMM_F64;
else
tempi1->ic_code=IC_IMM_U64;
tempi1->ic_code=IC_IMM_I64;
tempi1->ic_class=tempi->ic_class;
tempi1->ic_flags|=tempi->ic_flags;
tempi_push=tempi1;
OptSetNOP1(tempi);
} else {
if (tempi->ic_data) {//was paren
if (!tempi_push->ic_class->ptr_cnt) {
if (!tempi_push->ic_class->ptr_stars_cnt) {
if (tempi_push->ic_class->raw_type==RT_F64)
tempi_push->ic_class2=cmp.internal_types[RT_F64];
else
@@ -115,7 +115,7 @@ args.
tempi1=tempi->next->next; //IMM
tempi2=tempi1->next; //ADD
tempi3=tempi2->next; //DEREF
if (tempi1->ic_code==IC_IMM_U64 && tempi2->ic_code==IC_ADD &&
if (tempi1->ic_code==IC_IMM_I64 && tempi2->ic_code==IC_ADD &&
tempi3->ic_code==IC_DEREF && !(tempi3->ic_flags&~ICG_NO_CVT_MASK)) {
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags|tempi3->ic_flags;
if (tempi->ic_code==IC_FS)
@@ -149,9 +149,9 @@ args.
tempi->ic_flags|=ICF_USE_F64;
break;
case IC_COM:
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
tempi->ic_data=~tempi1->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
tempi->ic_flags|=tempi1->ic_flags;
OptSetNOP1(tempi1);
}
@@ -168,9 +168,9 @@ args.
}
break;
}
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
tempi->ic_data=!tempi1->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
tempi->ic_flags|=tempi1->ic_flags;
OptSetNOP1(tempi1);
}
@@ -179,7 +179,7 @@ args.
if (i=OptFixupUnaryOp(tempi,tempi1,&is_unsigned)) {
if (i==FBO1_INT) {
tempi->ic_data=-tempi1->ic_data(I64);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=-tempi1->ic_data(F64);
tempi->ic_code=IC_IMM_F64;
@@ -195,7 +195,7 @@ args.
tempi->ic_data=tempi1->ic_data(U64)<<tempi->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)<<tempi->ic_data(I64);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64)<<tempi->ic_data;
tempi->ic_code=IC_IMM_F64;
@@ -213,7 +213,7 @@ args.
tempi->ic_data=tempi1->ic_data(U64)>>tempi->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)>>tempi->ic_data(I64);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64)>>tempi->ic_data;
tempi->ic_code=IC_IMM_F64;
@@ -231,12 +231,12 @@ args.
tempi->ic_data=tempi1->ic_data(U64)<<tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)<<tempi2->ic_data(I64);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64) << tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_F64;
}
} else if (tempi2->ic_code==IC_IMM_U64) {
} else if (tempi2->ic_code==IC_IMM_I64) {
tempi->ic_flags|=tempi2->ic_flags;
tempi->ic_data=tempi2->ic_data;
tempi->ic_code=IC_SHL_CONST;
@@ -250,12 +250,12 @@ args.
tempi->ic_data=tempi1->ic_data(U64)>>tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)>>tempi2->ic_data(I64);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64) >> tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_F64;
}
} else if (tempi2->ic_code==IC_IMM_U64) {
} else if (tempi2->ic_code==IC_IMM_I64) {
tempi->ic_flags|=tempi2->ic_flags;
tempi->ic_data=tempi2->ic_data;
tempi->ic_code=IC_SHR_CONST;
@@ -263,7 +263,7 @@ args.
}
break;
sub_switch_end:
if (!tempi_push->ic_class->ptr_cnt) {
if (!tempi_push->ic_class->ptr_stars_cnt) {
if (tempi_push->ic_class->raw_type==RT_F64)
tempi_push->ic_class2=cmp.internal_types[RT_F64];
else
@@ -310,13 +310,13 @@ args.
tempi->ic_data=tempi1->ic_data(U64)*tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)*tempi2->ic_data(I64);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64)*tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_F64;
}
} else {
if (tempi1->ic_code==IC_IMM_U64 && lx->pass==2) {
if (tempi1->ic_code==IC_IMM_I64 && lx->pass==2) {
switch (i=tempi1->ic_data) {
case 0:
break;
@@ -336,7 +336,7 @@ args.
OptSetNOP1(tempi1);
}
}
} else if (tempi2->ic_code==IC_IMM_U64) {
} else if (tempi2->ic_code==IC_IMM_I64) {
switch (i=tempi2->ic_data) {
case 0:
break;
@@ -354,14 +354,14 @@ args.
tempi->ic_code=IC_SHL_CONST;
OptSetNOP1(tempi2);
} else if (tempi1->ic_code==IC_MUL && lx->pass==2) {
if (tempi1->t.a1t->ic_code==IC_IMM_U64) {
if (tempi1->t.a1t->ic_code==IC_IMM_I64) {
tempi1->ic_flags|=tempi->ic_flags;
tempi1->t.a1t->ic_data*=tempi2->ic_data;
tempi1->ic_class2=tempi->ic_class2;
tempi_push=tempi1;
OptSetNOP1(tempi2);
OptSetNOP1(tempi);
} else if (tempi1->t.a2t->ic_code==IC_IMM_U64) {
} else if (tempi1->t.a2t->ic_code==IC_IMM_I64) {
tempi1->ic_flags|=tempi->ic_flags;
tempi1->t.a2t->ic_data*=tempi2->ic_data;
tempi1->ic_class2=tempi->ic_class2;
@@ -399,21 +399,21 @@ args.
}
break;
case IC_DIV:
if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_U64 && tempi2->ic_code!=IC_IMM_F64) &&
if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_I64 && tempi2->ic_code!=IC_IMM_F64) &&
(i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned))) {
if (i==FBO1_INT) {
if (is_unsigned)
tempi->ic_data=tempi1->ic_data(U64)/tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)/tempi2->ic_data(I64);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64)/
tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_F64;
}
} else {
if (tempi2->ic_code==IC_IMM_U64 && (i=tempi2->ic_data)) {
if (tempi2->ic_code==IC_IMM_I64 && (i=tempi2->ic_data)) {
if (i==1) {
tempi1->ic_flags|=tempi2->ic_flags|tempi->ic_flags;
tempi1->ic_class2=tempi->ic_class2;
@@ -430,20 +430,20 @@ args.
}
break;
case IC_MOD:
if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_U64 && tempi2->ic_code!=IC_IMM_F64) &&
if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_I64 && tempi2->ic_code!=IC_IMM_F64) &&
(i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned))) {
if (i==FBO1_INT) {
if (is_unsigned)
tempi->ic_data=tempi1->ic_data(U64)%tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)%tempi2->ic_data(I64);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64)%
tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_F64;
}
} else if (lx->pass==2 && tempi2->ic_code==IC_IMM_U64 &&
} else if (lx->pass==2 && tempi2->ic_code==IC_IMM_I64 &&
(i=tempi2->ic_data) && Bsf(i)==Bsr(i) && tempi_push->ic_class->raw_type!=RT_F64 &&
tempi_push->ic_class->raw_type&1) {//do only unsigned
tempi2->ic_data=i-1;
@@ -454,7 +454,7 @@ args.
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
tempi->ic_data=tempi1->ic_data&tempi2->ic_data;
if (i==FBO1_INT)
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
else
tempi->ic_code=IC_IMM_F64;
}
@@ -463,7 +463,7 @@ args.
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
tempi->ic_data=tempi1->ic_data|tempi2->ic_data;
if (i==FBO1_INT)
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
else
tempi->ic_code=IC_IMM_F64;
}
@@ -472,7 +472,7 @@ args.
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
tempi->ic_data=tempi1->ic_data^tempi2->ic_data;
if (i==FBO1_INT)
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
else
tempi->ic_code=IC_IMM_F64;
}
@@ -481,21 +481,21 @@ args.
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
if (i==FBO1_INT) {
tempi->ic_data=tempi1->ic_data+tempi2->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64)+
tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_F64;
}
} else {
if (tempi1->ic_code==IC_ABS_ADDR&&tempi2->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_ABS_ADDR&&tempi2->ic_code==IC_IMM_I64) {
tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags;
tempi->ic_data=tempi1->ic_data+tempi2->ic_data;
tempi->ic_code=IC_ABS_ADDR;
OptSetNOP1(tempi1);
OptSetNOP1(tempi2);
} else if (lx->pass==2) {
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
if (!tempi1->ic_data) {
tempi2->ic_flags|=tempi1->ic_flags|tempi->ic_flags;
tempi2->ic_class2=tempi->ic_class2;
@@ -504,14 +504,14 @@ args.
OptSetNOP1(tempi);
} else if (tempi2->ic_code==IC_ADD||
tempi2->ic_code==IC_SUB) {
if (tempi2->t.a1t->ic_code==IC_IMM_U64) {
if (tempi2->t.a1t->ic_code==IC_IMM_I64) {
tempi2->ic_flags|=tempi->ic_flags;
tempi2->t.a1t->ic_data+=tempi1->ic_data;
tempi2->ic_class2=tempi->ic_class2;
tempi_push=tempi2;
OptSetNOP1(tempi1);
OptSetNOP1(tempi);
} else if (tempi2->t.a2t->ic_code==IC_IMM_U64) {
} else if (tempi2->t.a2t->ic_code==IC_IMM_I64) {
tempi2->ic_flags|=tempi->ic_flags;
if (tempi2->ic_code==IC_ADD)
tempi2->t.a2t->ic_data+=tempi1->ic_data;
@@ -523,7 +523,7 @@ args.
OptSetNOP1(tempi);
}
}
} else if (tempi2->ic_code==IC_IMM_U64) {
} else if (tempi2->ic_code==IC_IMM_I64) {
if (!tempi2->ic_data) {
tempi1->ic_flags|=tempi2->ic_flags|tempi->ic_flags;
tempi1->ic_class2=tempi->ic_class2;
@@ -532,14 +532,14 @@ args.
OptSetNOP1(tempi);
} else if (tempi1->ic_code==IC_ADD ||
tempi1->ic_code==IC_SUB) {
if (tempi1->t.a1t->ic_code==IC_IMM_U64) {
if (tempi1->t.a1t->ic_code==IC_IMM_I64) {
tempi1->ic_flags|=tempi->ic_flags;
tempi1->t.a1t->ic_data+=tempi2->ic_data;
tempi1->ic_class2=tempi->ic_class2;
tempi_push=tempi1;
OptSetNOP1(tempi2);
OptSetNOP1(tempi);
} else if (tempi1->t.a2t->ic_code==IC_IMM_U64) {
} else if (tempi1->t.a2t->ic_code==IC_IMM_I64) {
tempi1->ic_flags|=tempi->ic_flags;
if (tempi1->ic_code==IC_ADD)
tempi1->t.a2t->ic_data+=tempi2->ic_data;
@@ -615,7 +615,7 @@ args.
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
if (i==FBO1_INT) {
tempi->ic_data=tempi1->ic_data-tempi2->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else {
tempi->ic_data(F64)=tempi1->ic_data(F64)-
tempi2->ic_data(F64);
@@ -623,7 +623,7 @@ args.
}
} else {
if (lx->pass==2) {
if (tempi2->ic_code==IC_IMM_U64) {
if (tempi2->ic_code==IC_IMM_I64) {
if (!tempi2->ic_data) {
tempi1->ic_flags|=tempi2->ic_flags|tempi->ic_flags;
tempi1->ic_class2=tempi->ic_class2;
@@ -633,14 +633,14 @@ args.
} else
if (tempi1->ic_code==IC_ADD ||
tempi1->ic_code==IC_SUB) {
if (tempi1->t.a1t->ic_code==IC_IMM_U64) {
if (tempi1->t.a1t->ic_code==IC_IMM_I64) {
tempi1->ic_flags|=tempi->ic_flags;
tempi1->t.a1t->ic_data-=tempi2->ic_data;
tempi1->ic_class2=tempi->ic_class2;
tempi_push=tempi1;
OptSetNOP1(tempi2);
OptSetNOP1(tempi);
} else if (tempi1->t.a2t->ic_code==IC_IMM_U64) {
} else if (tempi1->t.a2t->ic_code==IC_IMM_I64) {
tempi1->ic_flags|=tempi->ic_flags;
if (tempi1->ic_code==IC_ADD)
tempi1->t.a2t->ic_data-=tempi2->ic_data;
@@ -689,26 +689,26 @@ args.
case IC_AND_AND:
if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
tempi->ic_data=tempi1->ic_data&&tempi2->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
}
tempi->ic_class=cmp.internal_types[RT_I64];
break;
case IC_OR_OR:
if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
tempi->ic_data=tempi1->ic_data||tempi2->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
}
tempi->ic_class=cmp.internal_types[RT_I64];
break;
case IC_XOR_XOR:
if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
tempi->ic_data=tempi1->ic_data^^tempi2->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
}
tempi->ic_class=cmp.internal_types[RT_I64];
break;
sub_switch_end:
if (!tempi_push->ic_class->ptr_cnt) {
if (!tempi_push->ic_class->ptr_stars_cnt) {
if (tempi_push->ic_class->raw_type==RT_F64)
tempi_push->ic_class2=cmp.internal_types[RT_F64];
else if (is_unsigned)
@@ -721,7 +721,7 @@ args.
case IC_EQUAL_EQUAL:
if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
tempi->ic_data=tempi1->ic_data==tempi2->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else
if (tempi->ic_class->raw_type==RT_F64)
tempi->ic_flags|=ICF_USE_F64;
@@ -729,7 +729,7 @@ args.
case IC_NOT_EQUAL:
if (OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
tempi->ic_data=tempi1->ic_data!=tempi2->ic_data;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
} else
if (tempi->ic_class->raw_type==RT_F64)
tempi->ic_flags|=ICF_USE_F64;
@@ -741,49 +741,9 @@ args.
tempi->ic_data=tempi1->ic_data(U64)<tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)<tempi2->ic_data(I64);
} else {
tempi->ic_data=tempi1->ic_data(F64)<
tempi2->ic_data(F64);
}
tempi->ic_code=IC_IMM_U64;
} else {
if (is_unsigned)
tempi->ic_flags|=ICF_USE_UNSIGNED;
if (tempi->ic_class->raw_type==RT_F64)
tempi->ic_flags|=ICF_USE_F64;
}
break;
case IC_GREATER:
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
if (i==FBO1_INT) {
if (is_unsigned)
tempi->ic_data=tempi1->ic_data(U64)>tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)>tempi2->ic_data(I64);
} else {
tempi->ic_data=tempi1->ic_data(F64)>
tempi2->ic_data(F64);
}
tempi->ic_code=IC_IMM_U64;
} else {
if (is_unsigned)
tempi->ic_flags|=ICF_USE_UNSIGNED;
if (tempi->ic_class->raw_type==RT_F64)
tempi->ic_flags|=ICF_USE_F64;
}
break;
case IC_LESS_EQUAL:
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
if (i==FBO1_INT) {
if (is_unsigned)
tempi->ic_data=tempi1->ic_data(U64)<=tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)<=tempi2->ic_data(I64);
} else {
tempi->ic_data=tempi1->ic_data(F64)<=
tempi2->ic_data(F64);
}
tempi->ic_code=IC_IMM_U64;
} else
tempi->ic_data=tempi1->ic_data(F64)<tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_I64;
} else {
if (is_unsigned)
tempi->ic_flags|=ICF_USE_UNSIGNED;
@@ -798,11 +758,43 @@ args.
tempi->ic_data=tempi1->ic_data(U64)>=tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)>=tempi2->ic_data(I64);
} else {
tempi->ic_data=tempi1->ic_data(F64)>=
tempi2->ic_data(F64);
}
tempi->ic_code=IC_IMM_U64;
} else
tempi->ic_data=tempi1->ic_data(F64)>=tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_I64;
} else {
if (is_unsigned)
tempi->ic_flags|=ICF_USE_UNSIGNED;
if (tempi->ic_class->raw_type==RT_F64)
tempi->ic_flags|=ICF_USE_F64;
}
break;
case IC_GREATER:
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
if (i==FBO1_INT) {
if (is_unsigned)
tempi->ic_data=tempi1->ic_data(U64)>tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)>tempi2->ic_data(I64);
} else
tempi->ic_data=tempi1->ic_data(F64)>tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_I64;
} else {
if (is_unsigned)
tempi->ic_flags|=ICF_USE_UNSIGNED;
if (tempi->ic_class->raw_type==RT_F64)
tempi->ic_flags|=ICF_USE_F64;
}
break;
case IC_LESS_EQUAL:
if (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned)) {
if (i==FBO1_INT) {
if (is_unsigned)
tempi->ic_data=tempi1->ic_data(U64)<=tempi2->ic_data(U64);
else
tempi->ic_data=tempi1->ic_data(I64)<=tempi2->ic_data(I64);
} else
tempi->ic_data=tempi1->ic_data(F64)<=tempi2->ic_data(F64);
tempi->ic_code=IC_IMM_I64;
} else {
if (is_unsigned)
tempi->ic_flags|=ICF_USE_UNSIGNED;
@@ -812,7 +804,7 @@ args.
break;
sub_switch_end:
tempi->ic_flags&=~ICF_R_TO_INT;
if (!tempi_push->ic_class->ptr_cnt) {
if (!tempi_push->ic_class->ptr_stars_cnt) {
if (tempi_push->ic_class->raw_type==RT_F64)
tempi_push->ic_class2=cmp.internal_types[RT_F64];
else if (is_unsigned)
@@ -830,7 +822,7 @@ args.
LexWarn(lx,"Assign U0 ");
sub_switch_start:
case IC_MUL_EQUAL:
if (tempi2->ic_code==IC_IMM_U64 &&
if (tempi2->ic_code==IC_IMM_I64 &&
tempc->raw_type!=RT_F64 &&
tempc2->raw_type!=RT_F64) {
if (i=tempi2->ic_data) {
@@ -842,7 +834,7 @@ args.
}
break;
case IC_DIV_EQUAL:
if (tempi2->ic_code==IC_IMM_U64 &&
if (tempi2->ic_code==IC_IMM_I64 &&
tempc->raw_type!=RT_F64 &&
tempc2->raw_type!=RT_F64 &&
(i=tempi2->ic_data) && Bsf(i)==Bsr(i)) {
@@ -851,7 +843,7 @@ args.
}
break;
case IC_MOD_EQUAL:
if (tempi2->ic_code==IC_IMM_U64 &&
if (tempi2->ic_code==IC_IMM_I64 &&
tempc->raw_type!=RT_F64 &&
tempc2->raw_type!=RT_F64 &&
(i=tempi2->ic_data) && Bsf(i)==Bsr(i)) {
@@ -917,7 +909,7 @@ args.
case IC_ADD_RSP1:
break;
case IC_BSF:
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
tempi1->ic_data=Bsf(tempi1->ic_data);
tempi_push=tempi1;
OptSetNOP1(OptLag(tempi1)); //CALL_START
@@ -928,7 +920,7 @@ args.
}
break;
case IC_BSR:
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
tempi1->ic_data=Bsr(tempi1->ic_data);
tempi_push=tempi1;
OptSetNOP1(OptLag(tempi1)); //CALL_START
@@ -957,12 +949,12 @@ args.
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_INT|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
tempi->ic_data=ToI64(tempi1->ic_data(F64));
tempi->ic_class=cmp.internal_types[RT_I64];
tempi->ic_class2=cmp.internal_types[RT_I64];
OptSetNOP1(tempi1);
} else if (tempi1->ic_code==IC_IMM_U64) {
} else if (tempi1->ic_code==IC_IMM_I64) {
tempi2=tempi1->last;
while (tempi2->ic_code!=IC_CALL_START)
tempi2=tempi2->last;
@@ -975,7 +967,7 @@ args.
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
tempi->ic_data=tempi1->ic_data;
tempi->ic_class=cmp.internal_types[RT_I64];
tempi->ic_class2=cmp.internal_types[RT_I64];
@@ -1008,7 +1000,7 @@ args.
}
break;
case IC_TO_F64:
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
tempi2=tempi1->last;
while (tempi2->ic_code!=IC_CALL_START)
tempi2=tempi2->last;
@@ -1072,7 +1064,7 @@ args.
}
break;
case IC_TO_BOOL:
if (tempi1->ic_code==IC_IMM_U64 || tempi1->ic_code==IC_IMM_F64) {
if (tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) {
tempi2=tempi1->last;
while (tempi2->ic_code!=IC_CALL_START)
tempi2=tempi2->last;
@@ -1085,7 +1077,7 @@ args.
tempi->ic_flags|=tempi1->ic_flags&~ICF_R_TO_F64|tempi2->ic_flags;
OptSetNOP1(tempi2);
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
tempi->ic_data=ToBool(tempi1->ic_data);
tempi->ic_class=cmp.internal_types[RT_I64];
tempi->ic_class2=cmp.internal_types[RT_I64];
@@ -1098,14 +1090,6 @@ args.
case IC_BR_NOT_ZERO:
tempi_push=OptBrNotZero(lx,tempi);
break;
case IC_BR_LBTS:
case IC_BR_LBTR:
case IC_BR_LBTC:
case IC_BR_NOT_LBTS:
case IC_BR_NOT_LBTR:
case IC_BR_NOT_LBTC:
tempi->ic_flags|=ICF_LOCK;
break;
case IC_NOP1:
if (tempi->ic_flags&ICF_PUSH_RESULT) {
tempi1=tempi;
@@ -1177,18 +1161,8 @@ args.
case IC_ATAN:
case IC_BR_CARRY:
case IC_BR_NOT_CARRY:
case IC_BR_NOT_EQUAL:
case IC_BR_EQUAL_EQUAL:
case IC_BR_GREATER_EQUAL:
case IC_BR_LESS_EQUAL:
case IC_BR_GREATER:
case IC_BR_LESS:
case IC_BR_NOT_EQUAL2:
case IC_BR_EQUAL_EQUAL2:
case IC_BR_GREATER_EQUAL2:
case IC_BR_LESS_EQUAL2:
case IC_BR_GREATER2:
case IC_BR_LESS2:
case IC_BR_EQUAL_EQUAL ...IC_BR_LESS_EQUAL:
case IC_BR_EQUAL_EQUAL2...IC_BR_LESS_EQUAL2:
case IC_BR_OR_OR_NOT_ZERO:
case IC_BR_OR_OR_ZERO:
case IC_BR_AND_AND_NOT_ZERO:
@@ -1278,10 +1252,10 @@ args.
break;
default:
"Pass:%d Missing IC handler\n",lx->pass;
ICPut(tempi);
ICPut(lx,tempi);
LexExcept(lx,"Compiler Optimization Error at ");
}
if (cmp.arg_cnt[code]==2) {
if (intermediate_code_table[code].arg_cnt==IS_2_ARG) {
if (tempi_push->ic_precedence.u8[0]&~ASSOC_MASK==PREC_ASSIGN)
OptFixSizeOf(tempi2,tempi_push,tempi1->ic_class-1);
else {
@@ -1289,7 +1263,7 @@ args.
OptFixSizeOf(tempi2,tempi_push,tempi1->ic_class);
}
}
if (cmp.result_cnt[tempi_push->ic_code]) {
if (intermediate_code_table[tempi_push->ic_code].result_cnt) {
PrsPush(ps,tempi->ic_class2);
PrsPush(ps,tempi_push);
}
+45 -44
View File
@@ -7,6 +7,8 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
I64 code,i,j,l,member_cnt,used_reg_mask=0;
CMemberLst *tempm;
COptMemberVar *mv=NULL;
CExe *tempx;
CExeImportExport *tempe;
CPrsStk *ps=lx->ps;
ps->ptr=0;
ps->ptr2=0;
@@ -27,7 +29,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
if (0<=tempm->reg<NUM_REGS) {
if (Bts(&used_reg_mask,tempm->reg))
PrintWarn("Reg in use\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n",
lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str);
lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str);
reg_offsets[tempm->reg].offset=tempm->offset;
reg_offsets[tempm->reg].m=tempm;
} else if (tempc->raw_type!=RT_F64 && tempm->reg!=REG_NONE ||
@@ -40,7 +42,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
} else {
if (tempm->reg==REG_ALLOC)
PrintWarn("Can't reg var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n",
lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str);
lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str);
}
tempm=tempm->next;
}
@@ -59,11 +61,11 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
} else
tempil1=tempil2=&cmp.ic_nop;
tempc=tempi->ic_class;
nobound_switch (cmp.arg_cnt[code]) {
case 9:
nobound_switch (intermediate_code_table[code].arg_cnt) {
case IS_V_ARG:
ps->ptr-=tempi->ic_data>>3;
break;
case 2:
case IS_2_ARG:
tempi2=PrsPop(ps);
if (tempi2->ic_flags&ICF_R_TO_F64)
tempc2=cmp.internal_types[RT_F64];
@@ -74,7 +76,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
tempi->a2.type=TY_STK+CmpRawType(tempc2);
tempi->a2.type_pointed=CmpRawTypePointed(tempc2);
tempi->ic_flags|=ICF_A2_WAS_STK;
case 1:
case IS_1_ARG:
tempi1=PrsPop(ps);
if (tempi1->ic_flags&ICF_R_TO_F64)
tempc1=cmp.internal_types[RT_F64];
@@ -86,10 +88,10 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
tempi->a1.type_pointed=CmpRawTypePointed(tempc1);
tempi->ic_flags|=ICF_A1_WAS_STK;
break;
case 0: //nobound_switch
case IS_0_ARG: //nobound_switch
break;
}
if (cmp.result_cnt[code]) {
if (intermediate_code_table[code].result_cnt) {
tempi->r.type=TY_STK+CmpRawType(tempc);
tempi->r.type_pointed=CmpRawTypePointed(tempc);
tempi->ic_flags|=ICF_R_WAS_STK;
@@ -101,10 +103,10 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
if (tempi->ic_flags&ICF_R_TO_INT) {
tempi->ic_data=ToI64(tempi->ic_data(F64));
tempi->ic_flags&=~ICF_R_TO_INT;
tempi->ic_code=IC_IMM_U64;
tempi->ic_code=IC_IMM_I64;
}
break;
case IC_IMM_U64:
case IC_IMM_I64:
tempi->ic_flags&=~ICF_R_TO_INT;
if (tempi->ic_flags&ICF_R_TO_F64) {
tempi->ic_data(F64)=ToF64(tempi->ic_data);
@@ -207,7 +209,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
CmpF2PushPop(tempi,tempi1,tempi2);
break;
}
if (tempi2->ic_code==IC_IMM_U64) {
if (tempi2->ic_code==IC_IMM_I64) {
tempi->ic_flags|=tempi2->ic_flags;
tempi->ic_data=tempi2->ic_data;
tempi->ic_code=IC_SUB_CONST;
@@ -216,9 +218,9 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
}
break;
case IC_LESS:
case IC_GREATER_EQUAL:
case IC_GREATER:
case IC_LESS_EQUAL:
case IC_GREATER_EQUAL:
if (tempi->ic_flags&ICF_USE_F64)
CmpF2PushPop(tempi,tempi1,tempi2);
break;
@@ -273,9 +275,20 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
lb=OptLabelFwd(tempi->ic_data(CLexCodeMisc *)->dft);
lb->use_cnt++;
break;
case IC_ASM:
tempx=tempi->ic_data;
tempe=tempx->next_ie;
while (tempe!=&tempx->next_ie) {
if (EIT_REL_I0<=tempe->type<=EIT_IMM_I64 &&
tempe->str && tempe->flags&EIF_GOTO_LABEL &&
(lb=LCCGoToLabelFind(lx,tempe->str)))
lb->use_cnt++; //Prevent deadcode elimination.
tempe=tempe->next;
}
break;
case IC_BR_NOT_EQUAL:
case IC_BR_EQUAL_EQUAL:
if ((tempi1->ic_code==IC_IMM_U64 || tempi1->ic_code==IC_IMM_F64) && !tempi1->ic_data) {
if ((tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) && !tempi1->ic_data) {
OptFree(tempi1);
MemCpy(&tempi->a1,&tempi->a2,sizeof(CICArg));
tempi->a2.type=TY_NULL;
@@ -285,7 +298,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
code=tempi->ic_code=IC_BR_NOT_ZERO;
tempi1=tempi2;
tempc1=tempc2;
} else if ((tempi2->ic_code==IC_IMM_U64 || tempi2->ic_code==IC_IMM_F64) && !tempi2->ic_data) {
} else if ((tempi2->ic_code==IC_IMM_I64 || tempi2->ic_code==IC_IMM_F64) && !tempi2->ic_data) {
OptFree(tempi2);
tempi->a2.type=TY_NULL;
if (code==IC_BR_EQUAL_EQUAL)
@@ -296,7 +309,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
goto here1;
case IC_BR_ZERO:
case IC_BR_NOT_ZERO:
if (tempi1->ic_code==IC_IMM_U64 || tempi1->ic_code==IC_IMM_F64) {
if (tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) {
if (code==IC_BR_ZERO ^^ tempi1->ic_data) {
OptFree(tempi1);
tempi->a1.type=TY_NULL;
@@ -309,7 +322,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
}
goto here1;
case IC_BR_AND_ZERO:
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
i=Bsr(tempi1->ic_data);
if (0<=i==Bsf(tempi1->ic_data)) {
tempi1->ic_data=i;
@@ -318,7 +331,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
goto here1;
}
}
if (tempi2->ic_code==IC_IMM_U64) {
if (tempi2->ic_code==IC_IMM_I64) {
i=Bsr(tempi2->ic_data);
if (0<=i==Bsf(tempi2->ic_data)) {
tempi2->ic_data=i;
@@ -328,7 +341,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
}
goto here1;
case IC_BR_AND_NOT_ZERO:
if (tempi1->ic_code==IC_IMM_U64) {
if (tempi1->ic_code==IC_IMM_I64) {
i=Bsr(tempi1->ic_data);
if (0<=i==Bsf(tempi1->ic_data)) {
tempi1->ic_data=i;
@@ -337,7 +350,7 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
goto here1;
}
}
if (tempi2->ic_code==IC_IMM_U64) {
if (tempi2->ic_code==IC_IMM_I64) {
i=Bsr(tempi2->ic_data);
if (0<=i==Bsf(tempi2->ic_data)) {
tempi2->ic_data=i;
@@ -359,20 +372,15 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
}
tempi->a1.type_pointed=CmpRawType(tempc);
goto here1;
case IC_BR_GREATER_EQUAL:
case IC_BR_LESS_EQUAL:
case IC_BR_GREATER:
case IC_BR_LESS:
case IC_BR_GREATER_EQUAL:
case IC_BR_GREATER:
case IC_BR_LESS_EQUAL:
if (tempi->ic_flags&ICF_USE_F64)
CmpF2PushPop(tempi,tempi1,tempi2);
case IC_BR_EQUAL_EQUAL2...IC_BR_LESS_EQUAL2:
case IC_BR_CARRY:
case IC_BR_NOT_CARRY:
case IC_BR_GREATER_EQUAL2:
case IC_BR_LESS_EQUAL2:
case IC_BR_GREATER2:
case IC_BR_LESS2:
case IC_BR_NOT_EQUAL2:
case IC_BR_EQUAL_EQUAL2:
case IC_GET_LABEL:
case IC_BR_BT:
case IC_BR_BTS:
@@ -382,12 +390,6 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets)
case IC_BR_NOT_BTS:
case IC_BR_NOT_BTR:
case IC_BR_NOT_BTC:
case IC_BR_LBTS:
case IC_BR_LBTR:
case IC_BR_LBTC:
case IC_BR_NOT_LBTS:
case IC_BR_NOT_LBTR:
case IC_BR_NOT_LBTC:
case IC_JMP:
case IC_SUB_CALL:
here1:
@@ -470,7 +472,6 @@ here1:
case IC_OUT_U32:
case IC_OUT_U16:
case IC_OUT_U8:
case IC_ASM:
case IC_STR_CONST:
case IC_FS:
case IC_GS:
@@ -509,7 +510,7 @@ here1:
break;
default:
"Pass:%d Missing IC handler\n",lx->pass;
ICPut(tempi);
ICPut(lx,tempi);
LexExcept(lx,"Compiler Optimization Error at ");
}
}
@@ -550,7 +551,7 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k.
} else {
if (mv[i].m->reg==REG_ALLOC)
PrintWarn("Can't reg var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n",
lx->cur_lfn->name,lx->cur_lfn->line_num,mv[i].m->str,lx->htc.fun->str);
lx->cur_lfn->full_name,lx->cur_lfn->line_num,mv[i].m->str,lx->htc.fun->str);
}
}
if (j>0) {
@@ -561,7 +562,7 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k.
for (i=0;i<j && l<cmp.num_non_ptr_vars;i++) {
tempm=mv[i].m;
tempc=OptClassFwd(tempm->member_class);
if (!tempc->ptr_cnt && !tempm->dim.next) {
if (!tempc->ptr_stars_cnt && !tempm->dim.next) {
while (l<cmp.num_non_ptr_vars &&
Bts(&lx->htc.fun->used_reg_mask,cmp.non_ptr_vars_map[l]))
l++;
@@ -574,10 +575,10 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k.
tempm->str,reg_offsets[tempm->reg].offset;
mv[i].offset_start=0; //flag as reg var
if (tempm->size<8 && !StrIMatch("Bool",tempm->member_class->str) &&
tempm->member_class->type&HTT_INTERNAL_TYPE)
tempm->member_class->type&HTT_INTERNAL_TYPE)
PrintWarn("Using 64-bit reg var.\n "
"$$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n",
lx->cur_lfn->name,lx->cur_lfn->line_num,
lx->cur_lfn->full_name,lx->cur_lfn->line_num,
tempm->str,lx->htc.fun->str);
}
}
@@ -600,11 +601,11 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k.
"Reg %Z Var \"%-15ts\" %016X[RBP]\n",tempm->reg,"ST_U64_REGS",
tempm->str,reg_offsets[tempm->reg].offset;
if (tempm->size<8 && !StrIMatch("Bool",tempm->member_class->str) &&
tempm->member_class->type&HTT_INTERNAL_TYPE)
tempm->member_class->type&HTT_INTERNAL_TYPE)
PrintWarn("Using 64-bit reg var.\n "
"$$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n",
lx->cur_lfn->name,lx->cur_lfn->line_num,
tempm->str,lx->htc.fun->str);
"$$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n",
lx->cur_lfn->full_name,lx->cur_lfn->line_num,
tempm->str,lx->htc.fun->str);
}
}
}
+24 -45
View File
@@ -3,7 +3,7 @@ Bool OptIC4(CIntermediateCode *tempi)
I64 i,ty,pt,ty1,pt1;
CIntermediateCode *tempil1,*tempil2;
if (tempi->ic_code<IC_IMM_U64) return FALSE;
if (tempi->ic_code<IC_IMM_I64) return FALSE;
tempil1=tempi;
if (!(tempil2=OptLag1(tempil1)))
@@ -170,8 +170,8 @@ Bool OptIC4(CIntermediateCode *tempi)
U0 OptPass4(CLex *lx,COptReg *reg_offsets,I64 *_type)
{
CHashClass *tempc,*tempc1,*tempc2,*tempc3;
CIntermediateCode *tempi,*tempi1,*tempi2,*tempi3,*tempil1,*tempil2,*tempil3,*tempi_next;
CHashClass *tempc,*tempc1,*tempc2;
CIntermediateCode *tempi,*tempi1,*tempi2,*tempil1,*tempil2,*tempil3,*tempi_next;
I64 code,i;
Bool dead_code=FALSE;
CLexCodeMisc *lb;
@@ -194,7 +194,7 @@ U0 OptPass4(CLex *lx,COptReg *reg_offsets,I64 *_type)
tempi=OptFree(tempi);
} else {
tempc=tempi->ic_class;
tempi1=tempi2=tempi3=&cmp.ic_nop;
tempi1=tempi2=&cmp.ic_nop;
if (tempil1=OptLag2(tempi)) {
if (tempil2=OptLag2(tempil1)) {
if (!(tempil3=OptLag2(tempil2)))
@@ -203,25 +203,22 @@ U0 OptPass4(CLex *lx,COptReg *reg_offsets,I64 *_type)
tempil2=tempil3=&cmp.ic_nop;
} else
tempil1=tempil2=tempil3=&cmp.ic_nop;
nobound_switch (cmp.arg_cnt[code]) {
case 9:
nobound_switch (intermediate_code_table[code].arg_cnt) {
case IS_V_ARG:
ps->ptr-=tempi->ic_data>>3;
break;
case 3:
tempi3=PrsPop(ps);
tempc3=tempi3->ic_class;
case 2:
case IS_2_ARG:
tempi2=PrsPop(ps);
tempc2=tempi2->ic_class;
case 1:
case IS_1_ARG:
tempi1=PrsPop(ps);
tempc1=tempi1->ic_class;
break;
case 0: //nobound_switch
case IS_0_ARG: //nobound_switch
break;
}
nobound_switch (code) {
case IC_IMM_U64:
case IC_IMM_I64:
case IC_TYPE:
tempi->a1.type=TY_IMM+RT_I64;
tempi->a1.disp=tempi->ic_data;
@@ -391,7 +388,7 @@ p4_sib:
case IC_ASSIGN_PP:
case IC_ASSIGN_MM:
//this val was stashed during pass012 for pointer arithmetic
tempi->ic_class2=tempi->t.class2;
tempi->ic_class2=tempi->t.class2; //See $LK,"ic_class2",A="FF:::/Compiler/BackB.CPP,ic_class2"$
case IC_ASSIGN:
case IC_SHL_EQUAL:
case IC_SHR_EQUAL:
@@ -476,12 +473,6 @@ p4_sib:
case IC_BR_NOT_BTS:
case IC_BR_NOT_BTR:
case IC_BR_NOT_BTC:
case IC_BR_LBTS:
case IC_BR_LBTR:
case IC_BR_LBTC:
case IC_BR_NOT_LBTS:
case IC_BR_NOT_LBTR:
case IC_BR_NOT_LBTC:
case IC_BT:
case IC_BTS:
case IC_BTR:
@@ -553,22 +544,12 @@ p4_sib:
}
}
break;
case IC_BR_NOT_EQUAL2:
case IC_BR_EQUAL_EQUAL2:
case IC_BR_GREATER_EQUAL2:
case IC_BR_LESS_EQUAL2:
case IC_BR_GREATER2:
case IC_BR_LESS2:
case IC_BR_ZERO:
case IC_BR_NOT_ZERO:
case IC_BR_EQUAL_EQUAL ...IC_BR_LESS_EQUAL:
case IC_BR_EQUAL_EQUAL2...IC_BR_LESS_EQUAL2:
case IC_BR_CARRY:
case IC_BR_NOT_CARRY:
case IC_BR_NOT_EQUAL:
case IC_BR_EQUAL_EQUAL:
case IC_BR_GREATER_EQUAL:
case IC_BR_LESS_EQUAL:
case IC_BR_GREATER:
case IC_BR_LESS:
case IC_BR_ZERO:
case IC_BR_NOT_ZERO:
lb=tempi->ic_data;
if (tempi->ic_flags&ICF_PUSH_CMP) {
lb->flags|=CMF_POP_CMP;
@@ -589,9 +570,12 @@ p4_sib:
break;
case IC_CALL_END:
case IC_END_EXP:
if (tempi->a1.type&TY_MASK==TY_STK) {
if (tempil1->r.type&TY_MASK==TY_STK &&
!(tempil1->ic_flags&ICF_PUSH_RESULT)) {
if (!(tempil1->ic_flags&ICF_PUSH_RESULT)) {
if (tempi->ic_flags&ICF_NO_DEPEND_RESULT) {
tempil1->ic_flags|=ICF_NO_DEPEND_RESULT;
tempil1->r.type=TY_NULL+tempil1->r.type&RT_MASK;
} else if (tempi->a1.type&TY_MASK==TY_STK &&
tempil1->r.type&TY_MASK==TY_STK) {
tempi->a1.type=TY_REG+tempi->a1.type&RT_MASK;
tempi->a1.reg=REG_RAX;
tempi->a1.disp=0;
@@ -652,12 +636,7 @@ p4_sib:
case IC_OR:
case IC_XOR:
case IC_SUB:
case IC_EQUAL_EQUAL:
case IC_NOT_EQUAL:
case IC_LESS:
case IC_GREATER:
case IC_LESS_EQUAL:
case IC_GREATER_EQUAL:
case IC_EQUAL_EQUAL...IC_LESS_EQUAL:
case IC_AND_AND:
case IC_OR_OR:
case IC_XOR_XOR:
@@ -719,13 +698,13 @@ p4_sib:
break;
default:
"Pass:%d Missing IC handler\n",lx->pass;
ICPut(tempi);
ICPut(lx,tempi);
LexExcept(lx,"Compiler Optimization Error at ");
}
if (tempi) {
while (OptIC4(tempi));
code=tempi->ic_code;
if (cmp.result_cnt[code])
if (intermediate_code_table[code].result_cnt)
PrsPush(ps,tempi);
}
}
+4 -4
View File
@@ -10,12 +10,12 @@ U0 OptPass5(CLex *lx)
while (code=tempi->ic_code) {
if (code>IC_NOP2) {
if (tempi->ic_flags&ICF_TRACE) {
if (Bt(&lx->pass_trace_mask,5)) {
if (Bt(&lx->otrace_mask,5)) {
"%2d:",ps->ptr;
ICPut(tempi);
ICPut(lx,tempi);
}
}
if (cmp.arg_cnt[code]==9)
if (intermediate_code_table[code].arg_cnt==IS_V_ARG)
ps->ptr-=tempi->ic_data>>3;
if (code==IC_PUSH_REGS) {
for (i=0;i<NUM_REGS;i++)
@@ -110,7 +110,7 @@ U0 OptPass5(CLex *lx)
OptSetNOP2(tempi1);
}
}
if (tempi->r.type&TY_MASK==TY_STK)
if (tempi->r.type&TY_MASK==TY_STK && !(tempi->ic_flags&ICF_NO_DEPEND_RESULT))
PrsPush(ps,tempi);
}
tempi=tempi->next;
+39 -62
View File
@@ -1,7 +1,7 @@
Bool OptIC6(CIntermediateCode *tempi)
{
CIntermediateCode *tempil1;
if (tempi->ic_code<IC_IMM_U64 || !(tempil1=OptLag1(tempi)))
if (tempi->ic_code<IC_IMM_I64 || !(tempil1=OptLag1(tempi)))
return FALSE;
if (tempil1->ic_code==IC_ADD_CONST && tempi->ic_code==IC_DEREF &&
tempi->ic_flags&ICF_A1_WAS_STK && tempi->a1.type&TY_MASK==TY_REG &&
@@ -25,21 +25,20 @@ Bool OptIC6(CIntermediateCode *tempi)
return FALSE;
}
U0 OptPass6Lag(CLex *lx,
CPrsStk *ps,CIntermediateCode *tempi,I64 *i_,I64 num_stk,
I64 *_clobbered_reg_mask,I64 fun_num)
U0 OptPass6Lag(CLex *lx,CPrsStk *ps,CIntermediateCode *tempi,
I64 *i_,I64 num_stk,I64 *_clobbered_reg_mask,I64 fun_num)
{
I64 i=*i_,j,k,l,code,clobbered_reg_mask=*_clobbered_reg_mask;
CHashFun *tempf;
code=tempi->ic_code;
if (tempi->ic_flags&ICF_TRACE && Bt(&lx->pass_trace_mask,6)) {
if (tempi->ic_flags&ICF_TRACE && Bt(&lx->otrace_mask,6)) {
"%2d:",i;
ICPut(tempi);
ICPut(lx,tempi);
}
if (code==IC_CALL_START) {
k=MinI64(i,num_stk);
j=0;
//See $LK,"STK TEMP ALLOCATION",A="FF:::/Compiler/CmpInit.CPP.Z,STK TEMP ALLOCATION"$
//See $LK,"STK TEMP ALLOCATION",A="FF:::/Compiler/CInit.CPP,STK TEMP ALLOCATION"$
if (fun_num&1)
for (l=0;l<k;l++)
Bts(&j,cmp.to_stk_temps_map_odd[l]);
@@ -64,7 +63,7 @@ U0 OptPass6Lag(CLex *lx,
ps->ptr--;
i=PrsPop(ps);
}
if (cmp.arg_cnt[code]==9)
if (intermediate_code_table[code].arg_cnt==IS_V_ARG)
i-=tempi->ic_data>>3;
if (tempi->a2.type&TY_MASK==TY_STK) {
i--;
@@ -111,66 +110,41 @@ U0 OptPass6Lag(CLex *lx,
U0 OptPass6(CLex *lx)
{
CIntermediateCode *tempi,*tempil1,*tempil2,*tempil3,*tempif1,*tempif2,*old_tempil2;
I64 i=0,code,num_stk,clobbered_reg_mask=REG_ALWAYS_CLOBBERED_MASK,fun_num=0;
CIntermediateCode *tempi,*tempi_next,*tempil1,*tempil2,*old_tempil2;
I64 i=0,num_stk,clobbered_reg_mask=REG_ALWAYS_CLOBBERED_MASK,fun_num=0;
CPrsStk *ps=lx->ps;
ps->ptr=0;
ps->ptr2=0;
if (lx->htc.fun)
fun_num=cmp.compiled_funs++;
if (Bt(&lx->opts,OPTf_NO_REG_VAR) || lx->flags&LF_NO_REG_OPT)
num_stk=0;
else
num_stk=cmp.num_stk_temps;
tempi=lx->lcc.lcc_root.next;
old_tempil2=NULL;
tempil1=tempil2=tempil3=&cmp.ic_nop;
while (code=tempi->ic_code) {
if ( code>=IC_END_EXP && code!=IC_NOP2) {
if ( tempil1->ic_code>=IC_END_EXP && tempil1->ic_code!=IC_NOP2) {
if (tempil2->ic_code>=IC_END_EXP && tempil2->ic_code!=IC_NOP2)
tempil3=tempil2;
tempil1=tempil2=&cmp.ic_nop;
while (tempi->ic_code) {
if (tempi->ic_code>IC_NOP2) {
if (tempil1->ic_code>IC_NOP2)
tempil2=tempil1;
}
tempil1=tempi;
}
if (tempil2->ic_code==IC_END_EXP && code!=IC_RETURN_VAL2 && code!=IC_NOP1 &&
!(tempil3->ic_flags&(ICF_R_TO_F64|ICF_R_TO_INT|ICF_PUSH_RESULT|ICF_DEPEND_RESULT))) {
tempil3->ic_flags|=ICF_NO_DEPEND_RESULT;
tempil3->r.type=TY_NULL+tempil3->r.type&RT_MASK;
tempil2->ic_flags|=ICF_NO_DEPEND_RESULT;
tempil2->r.type=TY_NULL+tempil2->r.type&RT_MASK;
}
if (code>IC_NOP2) {
if (tempi->a2.type&TY_MASK==TY_STK) {
if (tempil2->r.type&TY_MASK==TY_STK &&
!(tempil2->ic_flags&ICF_PUSH_RESULT)) {
tempif2=NULL;
if (tempi->ic_code==IC_ASSIGN &&
tempi->ic_flags&ICF_NOT_ADDR &&
tempil2->ic_code!=IC_CALL_END &&
tempil2->ic_code!=IC_CALL_END2 &&
if (tempi->ic_code==IC_ASSIGN && tempi->ic_flags&ICF_NOT_ADDR &&
tempi->ic_flags&ICF_NO_DEPEND_RESULT &&
tempil2->ic_code!=IC_CALL_END && tempil2->ic_code!=IC_CALL_END2 &&
tempil2->ic_code!=IC_SET_RAX &&
!(tempi->ic_flags&
(ICF_A2_TO_F64|ICF_A2_TO_INT)) &&
!(tempil2->ic_flags&
(ICF_R_TO_F64|ICF_R_TO_INT))) {
if (tempif1=OptLead1(tempi)) //predict NO_DEPEND
if (tempif2=OptLead1(tempif1))
if (tempif1->ic_code==IC_END_EXP &&
tempif2->ic_code!=IC_RETURN_VAL2) {
tempil2->r.type =tempi->a1.type&TY_MASK+tempi->a1.type_pointed;
tempil2->r.type_pointed=tempi->a1.type_pointed;
tempil2->r.reg =tempi->a1.reg;
tempil2->r.disp =tempi->a1.disp;
tempil2->ic_flags=tempil2->ic_flags&~(ICF_NO_DEPEND_RESULT|ICF_R_WAS_STK)|
tempi->ic_flags&~(ICF_NOT_ADDR|ICF_A1_WAS_STK|ICF_A2_WAS_STK)|ICF_DEPEND_RESULT;
old_tempil2=NULL;
OptSetNOP1(tempi);
} else
tempif2=NULL;
}
if (!tempif2) {
!(tempi->ic_flags&(ICF_A2_TO_F64|ICF_A2_TO_INT)) &&
!(tempil2->ic_flags&(ICF_R_TO_F64|ICF_R_TO_INT))) {
tempil2->r.type =tempi->a1.type&TY_MASK+tempi->a1.type_pointed;
tempil2->r.type_pointed=tempi->a1.type_pointed;
tempil2->r.reg =tempi->a1.reg;
tempil2->r.disp =tempi->a1.disp;
tempil2->ic_flags=tempil2->ic_flags&~(ICF_NO_DEPEND_RESULT|ICF_R_WAS_STK)|
tempi->ic_flags&~(ICF_NOT_ADDR|ICF_A1_WAS_STK|ICF_A2_WAS_STK)|ICF_DEPEND_RESULT;
old_tempil2=NULL;
OptSetNOP1(tempi);
} else {
tempi->a2.type=TY_REG+tempi->a2.type&RT_MASK;
tempi->a2.reg=REG_RAX;
tempi->a2.disp=0;
@@ -180,8 +154,8 @@ U0 OptPass6(CLex *lx)
}
}
} else if (tempi->a1.type&TY_MASK==TY_STK &&
tempil2->r.type&TY_MASK==TY_STK &&
!(tempil2->ic_flags&ICF_PUSH_RESULT)) {
tempil2->r.type&TY_MASK==TY_STK &&
!(tempil2->ic_flags&ICF_PUSH_RESULT)) {
tempi->a1.type=TY_REG+tempi->a1.type&RT_MASK;
tempi->a1.reg=REG_RAX;
tempi->a1.disp=0;
@@ -191,13 +165,16 @@ U0 OptPass6(CLex *lx)
}
if (tempi->ic_flags & ICF_PUSH_RESULT)
tempi->r.type==TY_STK+tempi->r.type&RT_MASK;
if (old_tempil2!=tempil2) {
if (tempil2->ic_code>IC_NOP2)
OptPass6Lag(lx,ps,tempil2,&i,num_stk,&clobbered_reg_mask,fun_num);
old_tempil2=tempil2;
}
}
if (old_tempil2!=tempil2) {
if (tempil2->ic_code>IC_NOP2)
OptPass6Lag(lx,ps,tempil2,&i,num_stk,&clobbered_reg_mask,fun_num);
old_tempil2=tempil2;
}
tempi=tempi->next;
tempi_next=tempi->next;
if (tempi->ic_code<=IC_NOP2)
OptFree(tempi);
tempi=tempi_next;
}
if (ps->ptr>2) {
"Pass:%d Stk:%08X\n",lx->pass,ps->ptr;
@@ -208,7 +185,7 @@ U0 OptPass6(CLex *lx)
lx->htc.fun->used_reg_mask|=clobbered_reg_mask;
lx->htc.fun->clobbered_reg_mask=clobbered_reg_mask;
if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT) &&
Bt(&lx->pass_trace_mask,6)) {
Bt(&lx->otrace_mask,6)) {
"Used Reg Mask:%04X\n",lx->htc.fun->used_reg_mask;
"Clobbered Reg Mask:%04X\n",clobbered_reg_mask;
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+45 -45
View File
@@ -55,15 +55,15 @@ CIntermediateCode *PrsAddOp(CLex *lx,I64 stk_op,CHashClass *tempc)
Bool div_sizeof=FALSE;
switch (stk_op.u16[0]) {
case IC_ADD:
if (tempc->ptr_cnt && !tempi->ic_class->ptr_cnt &&
if (tempc->ptr_stars_cnt && !tempi->ic_class->ptr_stars_cnt &&
tempi->ic_class->raw_type!=RT_F64) {
LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]);
}
break;
case IC_SUB:
if (tempc->ptr_cnt && tempi->ic_class->raw_type!=RT_F64) {
if (!tempi->ic_class->ptr_cnt) {
if (tempc->ptr_stars_cnt && tempi->ic_class->raw_type!=RT_F64) {
if (!tempi->ic_class->ptr_stars_cnt) {
LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]);
} else
@@ -76,7 +76,7 @@ CIntermediateCode *PrsAddOp(CLex *lx,I64 stk_op,CHashClass *tempc)
break;
case IC_ADD_EQUAL:
case IC_SUB_EQUAL:
if (tempc->ptr_cnt) {
if (tempc->ptr_stars_cnt) {
LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]);
}
@@ -91,7 +91,7 @@ CIntermediateCode *PrsAddOp(CLex *lx,I64 stk_op,CHashClass *tempc)
if (div_sizeof) {
tempc--;
if (tempc->size!=1) {
LCCAdd(lx,IC_IMM_U64,tempc->size,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_IMM_I64,tempc->size,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_DIV,0,cmp.internal_types[RT_I64]);
tempc=cmp.internal_types[RT_I64];
}
@@ -183,11 +183,11 @@ pe_check_binary_ops2:
} else {
tempi=lx->lcc.lcc_root.last;
tempc=tempi->ic_class;
if (stk_op.u16[0]==IC_DEREF && tempc->ptr_cnt)
if (stk_op.u16[0]==IC_DEREF && tempc->ptr_stars_cnt)
tempc--;
else if (stk_op.u16[0]==IC_ADDR) {
lx->abs_cnts.c_addres++;
if (Bt(cmp.ic_bitmap_deref,tempi->ic_code))
if (intermediate_code_table[tempi->ic_code].type==IST_DEREF)
OptFree(tempi);
tempc++;
}
@@ -208,7 +208,7 @@ pe_do_binary_op:
case IC_ADD:
case IC_SUB:
tempi=lx->lcc.lcc_root.last;
if (!tempi->ic_class->ptr_cnt &&
if (!tempi->ic_class->ptr_stars_cnt &&
tempi->ic_class->raw_type!=RT_F64) {
LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]);
@@ -233,11 +233,11 @@ pe_do_binary_op:
if (cur_op.u8[2]>max_prec)
max_prec=cur_op.u8[2];
left_prec=cur_op.u8[2];
if (Bt(cmp.ic_bitmap_assign,cur_op.u16[0])) {
if (intermediate_code_table[cur_op.u16[0]].type==IST_ASSIGN) {
tempi=lx->lcc.lcc_root.last;
tempc=OptClassFwd(tempi->ic_class);
if (!Bt(cmp.ic_bitmap_deref,tempi->ic_code) ||
!tempc->ptr_cnt && !Bt(&tempc->flags,Cf_INTERNAL_TYPE))
if (intermediate_code_table[tempi->ic_code].type!=IST_DEREF ||
!tempc->ptr_stars_cnt && !Bt(&tempc->flags,Cf_INTERNAL_TYPE))
LexExcept(lx,"invalid lval at ");
tempi->ic_code=IC_NOP1; //Important for setting class (pretty sure)
cur_op.u8[2]=PREC_ASSIGN|ASSOCF_RIGHT;
@@ -257,7 +257,7 @@ pe_pop_higher:
tempi=PrsAddOp(lx,stk_op,tempc);
if (Bt(cmp.ic_bitmap_cmp,cur_op.u16[0]) && Bt(cmp.ic_bitmap_cmp,stk_op.u16[0])) {
if (intermediate_code_table[cur_op.u16[0]].type==IST_CMP && intermediate_code_table[stk_op.u16[0]].type==IST_CMP) {
tempi->ic_flags|=ICF_PUSH_CMP;
LCCAdd(lx,IC_NOP1,0,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_PUSH_CMP,0,tempc);
@@ -323,7 +323,7 @@ Bool PrsExpression(CLex *lx,I64 *_max_prec,Bool end_exp,CPrsStk *_ps=NULL)
Free(ps);
}
if (end_exp && result)
LCCAdd(lx,IC_END_EXP,0,0);
LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT);
lx->flags|=old_flags&(LF_PREINC|LF_PREDEC);
return result;
}
@@ -373,7 +373,7 @@ pu_sizeof_member:
while (Lex(lx)=='*');
i=sizeof(U8 *);
}
LCCAdd(lx,IC_IMM_U64,i,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_IMM_I64,i,cmp.internal_types[RT_I64]);
}
U0 PrsOffsetOf(CLex *lx)
@@ -403,7 +403,7 @@ U0 PrsOffsetOf(CLex *lx)
i+=tempm->offset;
tempc=tempm->member_class;
} while (Lex(lx)=='.');
LCCAdd(lx,IC_IMM_U64,i,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_IMM_I64,i,cmp.internal_types[RT_I64]);
}
I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf)
@@ -481,7 +481,7 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf)
(lx->token==')' || lx->token==',' || !needs_right_paren)) {
dft_val=tempm->dft_val;
if (tempm->flags & MLF_LASTCLASS && last_class)
dft_val=(last_class-last_class->ptr_cnt)->str;
dft_val=(last_class-last_class->ptr_stars_cnt)->str;
if (tempm->flags & (MLF_STR_DFT_AVAILABLE|MLF_LASTCLASS) &&
lx->flags&LF_AOT_COMPILE) {
mc=LCCMiscNew(lx,CMT_STR_CONST);
@@ -490,7 +490,7 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf)
mc->str=StrNew(dft_val);
lx->flags|=LF_HAS_MISC_DATA;
} else
LCCAdd(lx,IC_IMM_U64,dft_val,tempm->member_class);
LCCAdd(lx,IC_IMM_I64,dft_val,tempm->member_class);
} else {
if (!PrsExpression(lx,NULL,FALSE,ps))
throw('Compiler');
@@ -516,7 +516,7 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf)
}
if (tempm && tempm->flags & MLF_DOT_DOT_DOT) {
LCCInit(lx);
tempi=LCCAdd(lx,IC_IMM_U64,0,tempm->member_class);
tempi=LCCAdd(lx,IC_IMM_I64,0,tempm->member_class);
LCCPush(lx);
if (is_str_out) {
if (lx->token!=';') {
@@ -609,7 +609,7 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf)
if (!is_template_fun)
LCCAdd(lx,IC_CALL_END,tempf,tempf->return_class);
if (is_str_out||is_putchars)
LCCAdd(lx,IC_END_EXP,0,0);
LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT);
lx->flags=(lx->flags|LF_RAX) & ~(LF_ARRAY|LF_FUN_EXP);
return PE_UNARY_MODIFIERS;
}
@@ -659,7 +659,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa
LexExcept(lx,"Can't take addr of extern fun");
}
lx->abs_cnts.externs++;
LCCAdd(lx,IC_IMM_U64,
LCCAdd(lx,IC_IMM_I64,
&tempf->executable_addr,cmp.internal_types[RT_PTR]);
LCCAdd(lx,IC_DEREF,0,
cmp.internal_types[RT_PTR]);
@@ -670,7 +670,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa
if (lx->flags&LF_ASM_EXPRESSIONS)
lx->abs_cnts.abs_addres++;
} else
LCCAdd(lx,IC_IMM_U64,
LCCAdd(lx,IC_IMM_I64,
tempf->executable_addr,cmp.internal_types[RT_PTR]);
}
lx->abs_cnts.c_addres++;
@@ -682,7 +682,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa
if (lx->flags&LF_ASM_EXPRESSIONS && !(lx->flags&LF_AOT_COMPILE) &&
tempex->type&HTF_IMM) {
lx->abs_cnts.c_addres++;
LCCAdd(lx,IC_IMM_U64,
LCCAdd(lx,IC_IMM_I64,
tempex->val,cmp.internal_types[RT_PTR]);
Lex(lx);
return PE_MAYBE_MODIFIERS;
@@ -704,9 +704,9 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa
case TK_CHAR_CONST:
case TK_INS_BINARY_SIZE:
if (lx->cur_i64<0)
LCCAdd(lx,IC_IMM_U64,lx->cur_i64,cmp.internal_types[RT_U64]);
LCCAdd(lx,IC_IMM_I64,lx->cur_i64,cmp.internal_types[RT_U64]);
else
LCCAdd(lx,IC_IMM_U64,lx->cur_i64,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_IMM_I64,lx->cur_i64,cmp.internal_types[RT_I64]);
Lex(lx);
break;
case TK_F64:
@@ -734,10 +734,10 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa
if (lx->flags&LF_AOT_COMPILE)
LCCAdd(lx,IC_ABS_ADDR,lx->a->ip,cmp.internal_types[RT_PTR]);
else
LCCAdd(lx,IC_IMM_U64,lx->a->ip,cmp.internal_types[RT_PTR]);
LCCAdd(lx,IC_IMM_I64,lx->a->ip,cmp.internal_types[RT_PTR]);
} else {
if (lx->flags&LF_CLASS_IP)
LCCAdd(lx,IC_IMM_U64,lx->class_ip,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_IMM_I64,lx->class_ip,cmp.internal_types[RT_I64]);
else
LCCAdd(lx,IC_RIP,0,cmp.internal_types[RT_PTR]);
}
@@ -789,7 +789,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa
if (tempm->flags & MLF_FUN && !(lx->flags&LF_ASM_EXPRESSIONS)) {
PrsPopDeref(ps);
lx->flags|=LF_FUN_EXP;
PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_cnt);
PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt);
}
if (tempm->dim.next) {
*_tempad=tempm->dim.next;
@@ -802,14 +802,14 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa
// else
LCCAdd(lx,IC_ABS_ADDR,tempm->static_data_ip,tempc);
} else
LCCAdd(lx,IC_IMM_U64,tempm->static_data,tempc);
LCCAdd(lx,IC_IMM_I64,tempm->static_data,tempc);
} else {
if (lx->flags&LF_ASM_EXPRESSIONS) {
i=PrsPop(ps);
ps->ptr--;
if (i.u16[0]!=IC_ADDR)
LexExcept(lx,"expecting '&' at ");
LCCAdd(lx,IC_IMM_U64,tempm->offset,cmp.internal_types[RT_PTR]);
LCCAdd(lx,IC_IMM_I64,tempm->offset,cmp.internal_types[RT_PTR]);
*_local_var=tempm;
Lex(lx);
return PE_MAYBE_MODIFIERS;
@@ -819,7 +819,7 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa
lx->flags&=~LF_ARRAY;
}
LCCAdd(lx,IC_RBP,0,tempc);
LCCAdd(lx,IC_IMM_U64,tempm->offset,tempc);
LCCAdd(lx,IC_IMM_I64,tempm->offset,tempc);
LCCAdd(lx,IC_ADD,0,tempc);
}
}
@@ -866,7 +866,7 @@ pu_export_sys_sym:
lx->flags|=LF_UNRESOLVED|LF_LOCAL;
else
lx->flags|=LF_UNRESOLVED;
LCCAdd(lx,IC_IMM_U64,&tempex->val,cmp.internal_types[RT_PTR],ICF_NO_RIP);
LCCAdd(lx,IC_IMM_I64,&tempex->val,cmp.internal_types[RT_PTR],ICF_NO_RIP);
LCCAdd(lx,IC_DEREF,0,cmp.internal_types[RT_PTR]);
} else {
if (lx->flags&LF_AOT_COMPILE && !(tempex->type & HTF_IMM))
@@ -874,7 +874,7 @@ pu_export_sys_sym:
else {
if (tempex->type&HTF_IMM)
lx->abs_cnts.c_addres++;
LCCAdd(lx,IC_IMM_U64,tempex->val,cmp.internal_types[RT_PTR]);
LCCAdd(lx,IC_IMM_I64,tempex->val,cmp.internal_types[RT_PTR]);
}
}
Lex(lx);
@@ -910,16 +910,16 @@ pu_export_sys_sym:
} else {
if (tempg->flags & GVF_EXTERN) {
lx->abs_cnts.externs++;
LCCAdd(lx,IC_IMM_U64,&tempg->data_addr,tempc);
LCCAdd(lx,IC_IMM_I64,&tempg->data_addr,tempc);
LCCAdd(lx,IC_DEREF,0,tempc);
} else
LCCAdd(lx,IC_IMM_U64,tempg->data_addr,tempc);
LCCAdd(lx,IC_IMM_I64,tempg->data_addr,tempc);
}
Lex(lx);
if (tempg->flags & GVF_FUN) {
PrsPopDeref(ps);
lx->flags|=LF_FUN_EXP;
PrsPush2(ps,tempg->fun_ptr-tempg->fun_ptr->ptr_cnt);
PrsPush2(ps,tempg->fun_ptr-tempg->fun_ptr->ptr_stars_cnt);
}
return PE_UNARY_MODIFIERS;
case HTt_CLASS:
@@ -961,9 +961,9 @@ pu_export_sys_sym:
j++;
if (lx->token==TK_IDENT &&
(lx->hash_entry || lx->local_var_entry))
LCCAdd(lx,IC_IMM_U64,TRUE,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_IMM_I64,TRUE,cmp.internal_types[RT_I64]);
else
LCCAdd(lx,IC_IMM_U64,FALSE,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_IMM_I64,FALSE,cmp.internal_types[RT_I64]);
Lex(lx);
while (j--) {
if (lx->token!=')')
@@ -1005,7 +1005,7 @@ um_join:
if (!*unary_post_prec)
*unary_post_prec=PREC_TERM;
tempc=lx->lcc.lcc_root.last->ic_class;
if (!tempc->ptr_cnt && lx->token=='.')
if (!tempc->ptr_stars_cnt && lx->token=='.')
LexExcept(lx,"Must be address, not value ");
if (!(lx->flags & LF_RAX))
tempc--;
@@ -1018,7 +1018,7 @@ um_join:
lx->local_var_entry->use_cnt--;
Lex(lx); //skip member name
tempc1=tempm->member_class+1;
LCCAdd(lx,IC_IMM_U64,tempm->offset,tempc1);
LCCAdd(lx,IC_IMM_I64,tempm->offset,tempc1);
lx->flags&=~(LF_RAX|LF_ARRAY|LF_FUN_EXP);
if (tempm->dim.next) {
*_tempad=tempm->dim.next;
@@ -1026,7 +1026,7 @@ um_join:
}
if(tempm->flags & MLF_FUN) {
PrsPopDeref(ps);
PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_cnt);
PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt);
lx->flags|=LF_FUN_EXP;
}
LCCAdd(lx,IC_ADD,0,tempc1);
@@ -1075,17 +1075,17 @@ um_join:
*unary_post_prec=PREC_TERM;
Lex(lx);
tempc=OptClassFwd(lx->lcc.lcc_root.last->ic_class);
if (!tempc->ptr_cnt)
if (!tempc->ptr_stars_cnt)
LexExcept(lx,"not array or ptr ");
if (!(lx->flags & (LF_ARRAY | LF_RAX))) {
tempc=OptClassFwd(tempc-1);
if (!tempc->ptr_cnt)
if (!tempc->ptr_stars_cnt)
LexExcept(lx,"not array or ptr ");
LCCAdd(lx,IC_DEREF+PREC_UNARY_PRE<<16,0,tempc);
}
tempc1=tempc-1;
if (tempad1=*_tempad) {
LCCAdd(lx,IC_IMM_U64,tempad1->total_cnt*tempc1->size,tempc);
LCCAdd(lx,IC_IMM_I64,tempad1->total_cnt*tempc1->size,tempc);
if (*_tempad=tempad1->next) {
old_flags=lx->flags;
if (!PrsExpression(lx,NULL,FALSE,ps))
@@ -1102,7 +1102,7 @@ um_join:
return PE_UNARY_MODIFIERS;
}
} else
LCCAdd(lx,IC_IMM_U64,tempc1->size,tempc);
LCCAdd(lx,IC_IMM_I64,tempc1->size,tempc);
old_flags=lx->flags;
if (!PrsExpression(lx,NULL,FALSE,ps))
throw('Compiler');
@@ -1140,7 +1140,7 @@ U8 *LexExpression2Bin(CLex *lx,I64 *_type=NULL)
LCCPush(lx);
LCCInit(lx);
if (PrsExpression(lx,NULL,FALSE)) {
LCCAdd(lx,IC_RETURN_VAL,0,NULL);
LCCAdd(lx,IC_RETURN_VAL,0,0);
LCCAdd(lx,IC_RET,0,0);
result=LCCCompile(lx,&size,NULL,_type);
} else
@@ -11,7 +11,7 @@ for one * and two fwd for two **.
tempc->type=HTT_CLASS;
tempc->raw_type=RT_PTR;
tempc->size=sizeof(U8 *);
tempc->ptr_cnt=i;
tempc->ptr_stars_cnt=i;
tempc++;
}
result->last_in_member_lst=&result->member_lst;
@@ -27,7 +27,7 @@ CHashFun *PrsFunNew()
tempf->type=HTT_FUN;
tempf->raw_type=RT_PTR;
tempf->size=sizeof(U8 *);
tempf->ptr_cnt=i;
tempf->ptr_stars_cnt=i;
tempf++;
}
result->last_in_member_lst=&result->member_lst;
@@ -43,7 +43,7 @@ CMemberLst *MemberLstNew(I64 _reg)
}
I64 PrsKeyWord(CLex *lx)
{//Cvt cur token to $LK,"KEYWORD",A="FF:::/Compiler/OpCodes.TXT.Z,KEYWORD"$ or -1.
{//Cvt cur token to $LK,"KEYWORD",A="FF:::/Compiler/OpCodes.TXT,KEYWORD"$ or -1.
CHashGeneric *temph;
if (lx->token==TK_IDENT &&(temph=lx->hash_entry) && temph->type&HTT_KEYWORD)
return temph->user_data0;
@@ -92,7 +92,7 @@ U0 PrsVarInit(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_ad
LexExcept(lx,"missing '}' at ");
Lex(lx);
} else {
if (tempc->ptr_cnt==1 && ((tempc-1)->raw_type==RT_I8 || (tempc-1)->raw_type==RT_U8) &&
if (tempc->ptr_stars_cnt==1 && ((tempc-1)->raw_type==RT_I8 || (tempc-1)->raw_type==RT_U8) &&
!tempad && lx->token==TK_STR)
is_str=TRUE;
else
@@ -127,15 +127,17 @@ U0 PrsVarInit(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_ad
LCCPush(lx);
LCCInit(lx);
LCCAdd(lx,IC_ABS_ADDR,data_addr_ip,tempc+1);
LCCAdd(lx,IC_IMM_U64,dst-*_base,tempc+1);
LCCAdd(lx,IC_IMM_I64,dst-*_base,tempc+1);
LCCAdd(lx,IC_ADD,0,tempc+1);
if (!PrsExpression(lx,NULL,TRUE))
throw('Compiler');
tempi=lx->lcc.lcc_root.last;
if (tempi->ic_code==IC_END_EXP)
if (tempi->ic_code==IC_END_EXP) {
tempi->ic_code=IC_NOP1;
tempi->ic_flags=0;
}
LCCAdd(lx,IC_ASSIGN,0,tempc);
LCCAdd(lx,IC_END_EXP,0,tempc);
LCCAdd(lx,IC_END_EXP,0,tempc,ICF_NO_DEPEND_RESULT);
LCCAdd(lx,IC_RET,0,0);
if (ex=LCCCompile(lx,&size,NULL,NULL)) {
tempe=CAlloc(sizeof(CExeImportExport));
@@ -186,7 +188,7 @@ U0 PrsVarInit2(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_a
CArrayDim *tempad1;
tempc=OptClassFwd(tempc);
if (tempad1=tempad->next) {
if (!tempc->ptr_cnt &&
if (!tempc->ptr_stars_cnt &&
(tempc->raw_type==RT_I8 || tempc->raw_type==RT_U8) &&
lx->token==TK_STR) {
lx->stk_ptr--; //grows up
@@ -376,7 +378,7 @@ CHashClass *PrsType(CLex *lx,CHashClass **_tempc1,
I64 *_mode,CMemberLst *tempm,U8 **_ident,CHashFun **_fun_ptr,
CHashExport **_tempex,CArrayDim *tempad,I64 fsp_flags)
{
I64 k,ptr_cnt,mode=*_mode;
I64 k,ptr_stars_cnt,mode=*_mode;
CHashClass *tempc1=*_tempc1,*tempc2;
CHashFun *fun_ptr=NULL;
CHashExport *tempex=NULL;
@@ -386,7 +388,7 @@ pt_start:
if (!tempc1 || !(tempc1->type & (HTT_CLASS|HTT_INTERNAL_TYPE)))
LexExcept(lx,"invalid class at ");
ptr_cnt=0;
ptr_stars_cnt=0;
while (lx->token=='*') {
if (mode.u8[1]) {
lx->stk_ptr--; //grows up
@@ -394,7 +396,7 @@ pt_start:
}
Lex(lx);
tempc1++;
if (++ptr_cnt>MAX_PTR_STARS)
if (++ptr_stars_cnt>MAX_PTR_STARS)
LexExcept(lx,"Too many *'s at ");
}
@@ -412,13 +414,13 @@ pt_start:
if (lx->token=='(') {
if (Lex(lx)!='*')
LexExcept(lx,"expecting '*' at ");
ptr_cnt=1; //fun_ptr
ptr_stars_cnt=1; //fun_ptr
while (Lex(lx)=='*')
ptr_cnt++; //fun_ptr
if (ptr_cnt>MAX_PTR_STARS)
ptr_stars_cnt++; //fun_ptr
if (ptr_stars_cnt>MAX_PTR_STARS)
LexExcept(lx,"Too many *'s at ");
} else
ptr_cnt=-1; //fun_ptr
ptr_stars_cnt=-1; //fun_ptr
if (_ident) {
if (lx->token==TK_IDENT) {
@@ -438,13 +440,13 @@ pt_start:
}
}
if (ptr_cnt>=0) { //fun_ptr
if (ptr_stars_cnt>=0) { //fun_ptr
if (lx->token!=')')
LexExcept(lx,"missing ')' at ");
if (Lex(lx)!='(')
LexExcept(lx,"expecting '(' at ");
fun_ptr=PrsFunJoin(lx,tempc1,NULL,fsp_flags)+ptr_cnt;
tempc1=cmp.internal_types[RT_PTR]+ptr_cnt;
fun_ptr=PrsFunJoin(lx,tempc1,NULL,fsp_flags)+ptr_stars_cnt;
tempc1=cmp.internal_types[RT_PTR]+ptr_stars_cnt;
}
if (!PrsArrayDims(lx,tempad) && lx->token!='=') {
tempc1++;
@@ -454,8 +456,8 @@ pt_start:
}
tempc2=OptClassFwd(tempc1);
if (tempc2->ptr_cnt) {
tempc2-=tempc2->ptr_cnt;
if (tempc2->ptr_stars_cnt) {
tempc2-=tempc2->ptr_stars_cnt;
if (tempc2->type&HTT_INTERNAL_TYPE && !tempc2->size)
LexWarn(lx,"use \"U8 *\" instead of \"U0 *\" at ");
}
@@ -478,10 +480,9 @@ U0 PrsVarLst(CLex *lx,CHashClass *tempc,I64 mode,I64 union_base=0)
lx->flags|=LF_DONT_MAKE_RESULT;
if (mode.u8[1]==PRS1B_CLASS)
lx->flags|=LF_CLASS_IP;
if (mode.u8[1]!=PRS1B_LOCAL_VAR && mode.u8[1]!=PRS1B_STATIC_LOCAL_VAR || mode&PRSF_UNION) {
if (lx->token=='(' || lx->token=='{')
Lex(lx);
}
if ((mode.u8[1]!=PRS1B_LOCAL_VAR && mode.u8[1]!=PRS1B_STATIC_LOCAL_VAR ||
mode&PRSF_UNION) && (lx->token=='(' || lx->token=='{'))
Lex(lx);
while (TRUE) {
while (lx->token==';')
Lex(lx);
@@ -793,7 +794,7 @@ CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern)
lx->cur_str=NULL;
HashAdd(tempc,lx->htc.glbl_hash_table);
LBts(&tempc->flags,Cf_EXTERN);
SetSrcFileInfo(lx,tempc);
HashSrcFileSet(lx,tempc);
Lex(lx);
} else {
if (lx->flags&LF_AOT_COMPILE) {
@@ -827,9 +828,9 @@ CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern)
tempc->type|=HTF_PUBLIC;
tempc->use_cnt=0;
if (lx->last_U16=='\n')
SetSrcFileInfo(lx,tempc,-1);
HashSrcFileSet(lx,tempc,-1);
else
SetSrcFileInfo(lx,tempc,0);
HashSrcFileSet(lx,tempc,0);
if (Lex(lx)==':') {
if (Lex(lx)!=TK_IDENT || !(base_class=lx->hash_entry) ||
!(base_class->type&HTT_CLASS))
@@ -897,7 +898,7 @@ CHashFun *PrsFunJoin(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags)
BEqu(&tempf->type,HTf_PUBLIC,fsp_flags&FSF_PUBLIC);
tempf->return_class=temp_return;
tempf->use_cnt=0;
SetSrcFileInfo(lx,tempf);
HashSrcFileSet(lx,tempf);
PrsVarLst(lx,tempf,PRS0_NULL|PRS1_FUN_ARG);
tempf->arg_cnt=tempf->member_cnt;
if (0<tempf->arg_cnt<<3<=MAX_I16 && !Bt(&tempf->flags,Ff_DOT_DOT_DOT))
@@ -932,6 +933,10 @@ U0 PrsFun(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags)
lx->lb_leave=LCCMiscNew(lx,CMT_LABEL);
lx->flags&=~LF_HAS_RETURN;
PrsStatement(lx,,,0);
if (lx->max_line<lx->min_line)
lx->max_line=lx->min_line;
if (lx->htc.fun->return_class->size && !(lx->flags&LF_HAS_RETURN))
LexWarn(lx,"Function should return val ");
LCCAdd(lx,IC_LABEL,lx->lb_leave,0);
@@ -964,10 +969,10 @@ U0 PrsFun(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags)
if (tempm->flags & MLF_NO_UNUSED_WARN) {
if (tempm->use_cnt>1&&StrCmp(tempm->str,"_anon_"))
PrintWarn("Unneeded nounusedwarn\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n",
lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str);
lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str);
} else if (!tempm->use_cnt && GetOpt(OPTf_WARN_UNUSED_VAR))
PrintWarn("Unused var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n",
lx->cur_lfn->name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str);
lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str);
tempm=tempm->next;
}
lx->htc.local_var_lst=lx->htc.fun=lx->fun_lfn=NULL;
@@ -1145,8 +1150,8 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc,
}
tempg->type=HTT_GLBL_VAR;
if (tempex && tempex->type&HTT_GLBL_VAR &&
tempex->type&HTF_UNRESOLVED &&
MHeapCtrl(tempex)==MHeapCtrl(tempg))
tempex->type&HTF_UNRESOLVED &&
MHeapCtrl(tempex)==MHeapCtrl(tempg))
has_alias=TRUE;
if (sys_var_init_flag&1)
MemSet(tempg->data_addr,sys_var_init_val,j);
@@ -1161,9 +1166,9 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc,
tempg->dim.total_cnt=i;
tempg->use_cnt=0;
if (lx->last_U16=='\n')
SetSrcFileInfo(lx,tempg,-1);
HashSrcFileSet(lx,tempg,-1);
else
SetSrcFileInfo(lx,tempg,0);
HashSrcFileSet(lx,tempg,0);
if (mode&255==PRS0_IMPORT || mode&255==PRS0__IMPORT)
tempg->flags|=GVF_IMPORT;
if (mode&255==PRS0_EXTERN)
@@ -1232,7 +1237,6 @@ U0 PrsIf(CLex *lx,I64 try_cnt,CLexCodeMisc *lb_break)
{
CLexCodeMisc *lb,*lb1;
I64 k;
if (lx->token!='(')
LexExcept(lx,"expecting '(' at ");
Lex(lx);
@@ -1259,7 +1263,6 @@ U0 PrsIf(CLex *lx,I64 try_cnt,CLexCodeMisc *lb_break)
U0 PrsWhile(CLex *lx,I64 try_cnt)
{
CLexCodeMisc *lb,*lb_done;
if (lx->token!='(')
LexExcept(lx,"expecting '(' at ");
Lex(lx);
@@ -1270,7 +1273,6 @@ U0 PrsWhile(CLex *lx,I64 try_cnt)
if (lx->token!=')')
LexExcept(lx,"missing ')' at ");
Lex(lx);
lb_done=LCCMiscNew(lx,CMT_LABEL);
LCCAdd(lx,IC_BR_ZERO,lb_done,0);
PrsStatement(lx,try_cnt,lb_done);
@@ -1281,7 +1283,6 @@ U0 PrsWhile(CLex *lx,I64 try_cnt)
U0 PrsDoWhile(CLex *lx,I64 try_cnt)
{
CLexCodeMisc *lb,*lb_done;
lb=LCCMiscNew(lx,CMT_LABEL);
lb_done=LCCMiscNew(lx,CMT_LABEL);
LCCAdd(lx,IC_LABEL,lb,0);
@@ -1374,9 +1375,9 @@ U0 PrsSwitch(CLex *lx,Bool nobound,I64 try_cnt)
mc_jt->begin->use_cnt++;
if (!PrsExpression(lx,NULL,FALSE))
throw('Compiler');
tempi_sub=LCCAdd(lx,IC_IMM_U64,0,cmp.internal_types[RT_I64]);
tempi_sub=LCCAdd(lx,IC_IMM_I64,0,cmp.internal_types[RT_I64]);
LCCAdd(lx,IC_SUB,0,cmp.internal_types[RT_I64]);
tempi_cmp=LCCAdd(lx,IC_IMM_U64,0,cmp.internal_types[RT_I64]);
tempi_cmp=LCCAdd(lx,IC_IMM_I64,0,cmp.internal_types[RT_I64]);
if (nobound)
LCCAdd(lx,IC_NOBOUND_SWITCH,mc_jt,0);
else
@@ -1632,7 +1633,7 @@ U0 PrsTryBlk(CLex *lx,I64 try_cnt)
else
LCCAdd(lx,IC_ADD_RSP,16,tempc);
LCCAdd(lx,IC_CALL_END,0,tempc);
LCCAdd(lx,IC_END_EXP,0,0);
LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT);
PrsStatement(lx,try_cnt+1);
@@ -1647,7 +1648,7 @@ U0 PrsTryBlk(CLex *lx,I64 try_cnt)
} else
LCCAdd(lx,IC_CALL,temp_untry->executable_addr,tempc);
LCCAdd(lx,IC_CALL_END,0,tempc);
LCCAdd(lx,IC_END_EXP,0,0);
LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT);
LCCAdd(lx,IC_JMP,lb_done,0);
@@ -1684,6 +1685,8 @@ Bool PrsStatement(CLex *lx,I64 try_cnt=0,
Lex(lx);
while (lx->token!='}' && lx->token!=TK_EOF)
PrsStatement(lx,try_cnt,lb_break);
if (lx->cur_lfn==lx->fun_lfn)
lx->max_line=lx->cur_lfn->line_num;
if (Lex(lx)!=',') goto sm_done;
} else if (lx->token==';') {
if (cmp_flags&CMPF_PRS_SEMICOLON)
File renamed without changes.
+34 -37
View File
@@ -188,35 +188,39 @@ U0 UasmHashLoad()
{
CHashOpcode *temph;
CInstruction *tempi;
I64 cnt=0,j,k;
I64 i,j,k,cnt=0;
uasm.table=NULL;
uasm.table_entries=0;
uasm.ins64_mask=0x0880888880+1<<ARGT_ST0+1<<ARGT_STI;
uasm.signed_arg_mask=1<<ARGT_REL8+1<<ARGT_REL16+1<<ARGT_REL32+
1<<ARGT_IMM8+1<<ARGT_IMM16+1<<ARGT_IMM32+1<<ARGT_IMM64;
1<<ARGT_IMM8+1<<ARGT_IMM16+1<<ARGT_IMM32+1<<ARGT_IMM64;
uasm.mem_mask=1<<ARGT_M8+1<<ARGT_M16+1<<ARGT_M32+1<<ARGT_M64;
temph=cmp.asm_hash->next_added;
while (temph!=cmp.asm_hash) {
if (temph->type==HTT_OPCODE)
cnt+=temph->instruction_entry_cnt;
temph=temph->next_added;
for (i=0;i<=cmp.asm_hash->mask;i++) {
temph=cmp.asm_hash->body[i];
while (temph) {
if (temph->type==HTT_OPCODE)
cnt+=temph->instruction_entry_cnt;
temph=temph->next;
}
}
uasm.table_entries=cnt;
j=0;
uasm.table=MAlloc(cnt*sizeof(U8 *));
temph=cmp.asm_hash->next_added;
while (temph!=cmp.asm_hash) {
if (temph->type==HTT_OPCODE) {
tempi=&temph->ins;
for (k=0;k<temph->instruction_entry_cnt;k++) {
uasm.table[j++]=tempi;
tempi++;
for (i=0;i<=cmp.asm_hash->mask;i++) {
temph=cmp.asm_hash->body[i];
while (temph) {
if (temph->type==HTT_OPCODE) {
tempi=&temph->ins;
for (k=0;k<temph->instruction_entry_cnt;k++) {
uasm.table[j++]=tempi;
tempi++;
}
}
}
temph=temph->next_added;
temph=temph->next;
}
}
QSortI64(uasm.table,cnt,&InstEntriesCompare);
@@ -246,7 +250,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
CInstruction *tempi,*tempi2;
CHashOpcode *tempo;
U8 *ip=*_ip,*ptr,*reloced_a1_st,*reloced_a2_st,*bin_data_area1,*bin_data_area2,
line1[512],line2[512],a1_st[512],a2_st[512],seg_overrides[32];
line1[512],line2[512],buf2[512],a1_st[512],a2_st[512],seg_overrides[32];
if (_jmp_dst) *_jmp_dst=-1;
if (seg_size==16) {
@@ -530,29 +534,22 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE)
case ARGT_UIMM64:
CatPrint(a1_st,"%016X",*ip(I64 *)++);
break;
case ARGT_REL8:
disp=*ip(I8 *)++;
disp+=ip;
if (IsDbg)
CatPrint(a1_st,"%p ",disp);
else
CatPrint(a1_st,"%P ",disp);
if (_jmp_dst) *_jmp_dst=disp;
break;
case ARGT_REL16:
disp=*ip(I16 *)++;
disp+=ip;
if (IsDbg)
CatPrint(a1_st,"%p ",disp);
else
CatPrint(a1_st,"%P ",disp);
if (_jmp_dst) *_jmp_dst=disp;
break;
case ARGT_REL32:
disp=*ip(I32 *)++;
sub_switch_start:
case ARGT_REL8:
disp=*ip(I8 *)++;
break;
case ARGT_REL16:
disp=*ip(I16 *)++;
break;
case ARGT_REL32:
disp=*ip(I32 *)++;
break;
sub_switch_end:
disp+=ip;
if (IsDbg)
CatPrint(a1_st,"%p ",disp);
else if (PutSrcLink(disp,512,buf2))
CatPrint(a1_st,"%s ",buf2);
else
CatPrint(a1_st,"%P ",disp);
if (_jmp_dst) *_jmp_dst=disp;