TempleOSCD_140715.ISO
This commit is contained in:
1 parent
7ef616a20e
commit
64f679eeb9
1095 files changed
+24814
-221011
No files matched your search
+44
-49
@@ -1,5 +1,4 @@
|
||||
/*
|
||||
OptPass012
|
||||
/*OptPass012
|
||||
|
||||
Pass#0
|
||||
When parsing the arg expressions to a function
|
||||
@@ -22,9 +21,7 @@ logic. 3-Arg comparisons are established.
|
||||
*/
|
||||
|
||||
CIntermediateCode *OptPass012(CLex *lx)
|
||||
{
|
||||
/*
|
||||
Simplify CONST arithmetic.
|
||||
{/*Simplify CONST arithmetic.
|
||||
Sets the class throughout Expression trees.
|
||||
Returns the type of an Expression for use
|
||||
in int<-->F64 conversions of fun
|
||||
@@ -47,7 +44,7 @@ args.
|
||||
tempi->ic_class2=tempc;
|
||||
tempi_push=tempi;
|
||||
MemSet(&tempi->a1,0,sizeof(CICArg)*4);
|
||||
nobound_switch (cmp_arg_cnt[code]) {
|
||||
nobound_switch (cmp.arg_cnt[code]) {
|
||||
case 9:
|
||||
ps->ptr-=tempi->ic_data>>2;
|
||||
break;
|
||||
@@ -65,7 +62,7 @@ args.
|
||||
case 0: //nobound_switch
|
||||
break;
|
||||
}
|
||||
if (Bt(ic_bitmap_not_const,code))
|
||||
if (Bt(cmp.ic_bitmap_not_const,code))
|
||||
lx->flags|=LF_NOT_CONST;
|
||||
nobound_switch (code) {
|
||||
case IC_IMM_F64:
|
||||
@@ -74,7 +71,7 @@ args.
|
||||
tempi->ic_data=ToI64(tempi->ic_data(F64));
|
||||
tempi->ic_flags&=~ICF_R_TO_INT;
|
||||
tempi->ic_code=IC_IMM_U64;
|
||||
tempi->ic_class=sys_internal_types[RT_I64];
|
||||
tempi->ic_class=cmp.internal_types[RT_I64];
|
||||
}
|
||||
break;
|
||||
case IC_IMM_U64:
|
||||
@@ -83,7 +80,7 @@ args.
|
||||
tempi->ic_data(F64)=ToF64(tempi->ic_data);
|
||||
tempi->ic_flags&=~ICF_R_TO_F64;
|
||||
tempi->ic_code=IC_IMM_F64;
|
||||
tempi->ic_class=sys_internal_types[RT_F64];
|
||||
tempi->ic_class=cmp.internal_types[RT_F64];
|
||||
}
|
||||
break;
|
||||
case IC_HOLYC_TYPECAST:
|
||||
@@ -97,12 +94,12 @@ args.
|
||||
tempi_push=tempi1;
|
||||
OptSetNOP1(tempi);
|
||||
} else {
|
||||
if (tempi->ic_data) { //was paren
|
||||
if (tempi->ic_data) {//was paren
|
||||
if (!tempi_push->ic_class->ptr_cnt) {
|
||||
if (tempi_push->ic_class->raw_type==RT_F64)
|
||||
tempi_push->ic_class2=sys_internal_types[RT_F64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_F64];
|
||||
else
|
||||
tempi_push->ic_class2=sys_internal_types[RT_I64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_I64];
|
||||
}
|
||||
} else {
|
||||
tempi1->ic_class=tempi->ic_class;
|
||||
@@ -158,7 +155,7 @@ args.
|
||||
tempi->ic_flags|=tempi1->ic_flags;
|
||||
OptSetNOP1(tempi1);
|
||||
}
|
||||
tempi_push->ic_class2=sys_internal_types[RT_I64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_I64];
|
||||
break;
|
||||
sub_switch_start:
|
||||
case IC_NOT:
|
||||
@@ -189,7 +186,7 @@ args.
|
||||
}
|
||||
}
|
||||
if (tempc1->type&HTT_INTERNAL_TYPE && tempc1->raw_type& 1)
|
||||
tempi->ic_class=sys_internal_types[tempc1->raw_type-1];
|
||||
tempi->ic_class=cmp.internal_types[tempc1->raw_type-1];
|
||||
break;
|
||||
case IC_SHL_CONST:
|
||||
if (i=OptFixupUnaryOp(tempi,tempi1,&is_unsigned)) {
|
||||
@@ -268,9 +265,9 @@ args.
|
||||
sub_switch_end:
|
||||
if (!tempi_push->ic_class->ptr_cnt) {
|
||||
if (tempi_push->ic_class->raw_type==RT_F64)
|
||||
tempi_push->ic_class2=sys_internal_types[RT_F64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_F64];
|
||||
else
|
||||
tempi_push->ic_class2=sys_internal_types[RT_I64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_I64];
|
||||
}
|
||||
break;
|
||||
case IC_DEREF:
|
||||
@@ -298,12 +295,12 @@ args.
|
||||
LexWarn(lx,"Dereference U0 ");
|
||||
break;
|
||||
case IC_POWER:
|
||||
tempc=tempi->ic_class=sys_internal_types[RT_F64];
|
||||
tempc=tempi->ic_class=cmp.internal_types[RT_F64];
|
||||
if (tempc1->raw_type!=RT_F64)
|
||||
tempi1->ic_flags|=ICF_R_TO_F64;
|
||||
if (tempc2->raw_type!=RT_F64)
|
||||
tempi2->ic_flags|=ICF_R_TO_F64;
|
||||
tempi_push->ic_class2=sys_internal_types[RT_F64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_F64];
|
||||
break;
|
||||
sub_switch_start:
|
||||
case IC_MUL:
|
||||
@@ -448,7 +445,7 @@ args.
|
||||
}
|
||||
} else if (lx->pass==2 && tempi2->ic_code==IC_IMM_U64 &&
|
||||
(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
|
||||
tempi_push->ic_class->raw_type&1) {//do only unsigned
|
||||
tempi2->ic_data=i-1;
|
||||
tempi->ic_code=IC_AND;
|
||||
}
|
||||
@@ -694,30 +691,30 @@ args.
|
||||
tempi->ic_data=tempi1->ic_data&&tempi2->ic_data;
|
||||
tempi->ic_code=IC_IMM_U64;
|
||||
}
|
||||
tempi->ic_class=sys_internal_types[RT_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_class=sys_internal_types[RT_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_class=sys_internal_types[RT_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->raw_type==RT_F64)
|
||||
tempi_push->ic_class2=sys_internal_types[RT_F64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_F64];
|
||||
else if (is_unsigned)
|
||||
tempi_push->ic_class2=sys_internal_types[RT_U64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_U64];
|
||||
else
|
||||
tempi_push->ic_class2=sys_internal_types[RT_I64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_I64];
|
||||
}
|
||||
break;
|
||||
sub_switch_start:
|
||||
@@ -817,16 +814,16 @@ args.
|
||||
tempi->ic_flags&=~ICF_R_TO_INT;
|
||||
if (!tempi_push->ic_class->ptr_cnt) {
|
||||
if (tempi_push->ic_class->raw_type==RT_F64)
|
||||
tempi_push->ic_class2=sys_internal_types[RT_F64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_F64];
|
||||
else if (is_unsigned)
|
||||
tempi_push->ic_class2=sys_internal_types[RT_U64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_U64];
|
||||
else
|
||||
tempi_push->ic_class2=sys_internal_types[RT_I64];
|
||||
tempi_push->ic_class2=cmp.internal_types[RT_I64];
|
||||
}
|
||||
if (tempi_push->ic_flags & ICF_PUSH_CMP)
|
||||
tempi->ic_class=tempi->ic_class2;
|
||||
else
|
||||
tempi->ic_class=sys_internal_types[RT_I64];
|
||||
tempi->ic_class=cmp.internal_types[RT_I64];
|
||||
break;
|
||||
sub_switch_start:
|
||||
if (lx->pass==2 && (!tempc->size||!tempc2->size))
|
||||
@@ -962,8 +959,8 @@ args.
|
||||
|
||||
tempi->ic_code=IC_IMM_U64;
|
||||
tempi->ic_data=ToI64(tempi1->ic_data(F64));
|
||||
tempi->ic_class=sys_internal_types[RT_I64];
|
||||
tempi->ic_class2=sys_internal_types[RT_I64];
|
||||
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) {
|
||||
tempi2=tempi1->last;
|
||||
@@ -980,8 +977,8 @@ args.
|
||||
|
||||
tempi->ic_code=IC_IMM_U64;
|
||||
tempi->ic_data=tempi1->ic_data;
|
||||
tempi->ic_class=sys_internal_types[RT_I64];
|
||||
tempi->ic_class2=sys_internal_types[RT_I64];
|
||||
tempi->ic_class=cmp.internal_types[RT_I64];
|
||||
tempi->ic_class2=cmp.internal_types[RT_I64];
|
||||
OptSetNOP1(tempi1);
|
||||
}
|
||||
if (tempi1->ic_flags&ICF_R_TO_F64) {
|
||||
@@ -1004,8 +1001,8 @@ args.
|
||||
tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags&~(ICF_R_TO_F64|ICF_PUSH_RESULT)|tempi2->ic_flags;
|
||||
OptSetNOP1(tempi2);
|
||||
|
||||
tempi1->ic_class=sys_internal_types[RT_I64];
|
||||
tempi1->ic_class2=sys_internal_types[RT_I64];
|
||||
tempi1->ic_class=cmp.internal_types[RT_I64];
|
||||
tempi1->ic_class2=cmp.internal_types[RT_I64];
|
||||
tempi_push=tempi1;
|
||||
OptSetNOP1(tempi);
|
||||
}
|
||||
@@ -1026,8 +1023,8 @@ args.
|
||||
|
||||
tempi->ic_code=IC_IMM_F64;
|
||||
tempi->ic_data(F64)=ToF64(tempi1->ic_data);
|
||||
tempi->ic_class=sys_internal_types[RT_F64];
|
||||
tempi->ic_class2=sys_internal_types[RT_F64];
|
||||
tempi->ic_class=cmp.internal_types[RT_F64];
|
||||
tempi->ic_class2=cmp.internal_types[RT_F64];
|
||||
OptSetNOP1(tempi1);
|
||||
} else if (tempi1->ic_code==IC_IMM_F64) {
|
||||
tempi2=tempi1->last;
|
||||
@@ -1044,8 +1041,8 @@ args.
|
||||
|
||||
tempi->ic_code=IC_IMM_F64;
|
||||
tempi->ic_data=tempi1->ic_data;
|
||||
tempi->ic_class=sys_internal_types[RT_F64];
|
||||
tempi->ic_class2=sys_internal_types[RT_F64];
|
||||
tempi->ic_class=cmp.internal_types[RT_F64];
|
||||
tempi->ic_class2=cmp.internal_types[RT_F64];
|
||||
OptSetNOP1(tempi1);
|
||||
}
|
||||
if (tempi1->ic_flags&ICF_R_TO_INT) {
|
||||
@@ -1068,8 +1065,8 @@ args.
|
||||
tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags&~(ICF_R_TO_INT|ICF_PUSH_RESULT)|tempi2->ic_flags;
|
||||
OptSetNOP1(tempi2);
|
||||
|
||||
tempi1->ic_class=sys_internal_types[RT_F64];
|
||||
tempi1->ic_class2=sys_internal_types[RT_F64];
|
||||
tempi1->ic_class=cmp.internal_types[RT_F64];
|
||||
tempi1->ic_class2=cmp.internal_types[RT_F64];
|
||||
tempi_push=tempi1;
|
||||
OptSetNOP1(tempi);
|
||||
}
|
||||
@@ -1090,8 +1087,8 @@ args.
|
||||
|
||||
tempi->ic_code=IC_IMM_U64;
|
||||
tempi->ic_data=ToBool(tempi1->ic_data);
|
||||
tempi->ic_class=sys_internal_types[RT_I64];
|
||||
tempi->ic_class2=sys_internal_types[RT_I64];
|
||||
tempi->ic_class=cmp.internal_types[RT_I64];
|
||||
tempi->ic_class2=cmp.internal_types[RT_I64];
|
||||
OptSetNOP1(tempi1);
|
||||
}
|
||||
break;
|
||||
@@ -1259,7 +1256,7 @@ args.
|
||||
case IC_SWAP_U8:
|
||||
case IC_SWAP_U16:
|
||||
case IC_SWAP_U32:
|
||||
case IC_SWAP_U64:
|
||||
case IC_SWAP_I64:
|
||||
case IC_IN_U32:
|
||||
case IC_IN_U16:
|
||||
case IC_IN_U8:
|
||||
@@ -1284,7 +1281,7 @@ args.
|
||||
ICPut(tempi);
|
||||
LexExcept(lx,"Compiler Optimization Error at ");
|
||||
}
|
||||
if (cmp_arg_cnt[code]==2) {
|
||||
if (cmp.arg_cnt[code]==2) {
|
||||
if (tempi_push->ic_precedence.u8[0]&~ASSOC_MASK==PREC_ASSIGN)
|
||||
OptFixSizeOf(tempi2,tempi_push,tempi1->ic_class-1);
|
||||
else {
|
||||
@@ -1292,7 +1289,7 @@ args.
|
||||
OptFixSizeOf(tempi2,tempi_push,tempi1->ic_class);
|
||||
}
|
||||
}
|
||||
if (cmp_result_cnt[tempi_push->ic_code]) {
|
||||
if (cmp.result_cnt[tempi_push->ic_code]) {
|
||||
PrsPush(ps,tempi->ic_class2);
|
||||
PrsPush(ps,tempi_push);
|
||||
}
|
||||
@@ -1310,9 +1307,7 @@ args.
|
||||
"Pass:%d Stk:%08X\n",lx->pass,ps->ptr;
|
||||
LexExcept(lx,"Compiler Optimization Error at ");
|
||||
}
|
||||
|
||||
/*
|
||||
This is for determining type conversions
|
||||
/*This is for determining type conversions
|
||||
for passing args to funs.
|
||||
*/
|
||||
return last_with_class;
|
||||
|
||||
Reference in new issue
Block a user