|
|
|
@ -1112,6 +1112,287 @@ |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE |
|
|
|
|
|
|
|
|
|
static |
|
|
|
|
const char* const opcode_name[256] = |
|
|
|
|
{ |
|
|
|
|
"SVTCA y", |
|
|
|
|
"SVTCA x", |
|
|
|
|
"SPvTCA y", |
|
|
|
|
"SPvTCA x", |
|
|
|
|
"SFvTCA y", |
|
|
|
|
"SFvTCA x", |
|
|
|
|
"SPvTL ||", |
|
|
|
|
"SPvTL +", |
|
|
|
|
"SFvTL ||", |
|
|
|
|
"SFvTL +", |
|
|
|
|
"SPvFS", |
|
|
|
|
"SFvFS", |
|
|
|
|
"GPV", |
|
|
|
|
"GFV", |
|
|
|
|
"SFvTPv", |
|
|
|
|
"ISECT", |
|
|
|
|
|
|
|
|
|
"SRP0", |
|
|
|
|
"SRP1", |
|
|
|
|
"SRP2", |
|
|
|
|
"SZP0", |
|
|
|
|
"SZP1", |
|
|
|
|
"SZP2", |
|
|
|
|
"SZPS", |
|
|
|
|
"SLOOP", |
|
|
|
|
"RTG", |
|
|
|
|
"RTHG", |
|
|
|
|
"SMD", |
|
|
|
|
"ELSE", |
|
|
|
|
"JMPR", |
|
|
|
|
"SCvTCi", |
|
|
|
|
"SSwCi", |
|
|
|
|
"SSW", |
|
|
|
|
|
|
|
|
|
"DUP", |
|
|
|
|
"POP", |
|
|
|
|
"CLEAR", |
|
|
|
|
"SWAP", |
|
|
|
|
"DEPTH", |
|
|
|
|
"CINDEX", |
|
|
|
|
"MINDEX", |
|
|
|
|
"AlignPTS", |
|
|
|
|
"INS_$28", |
|
|
|
|
"UTP", |
|
|
|
|
"LOOPCALL", |
|
|
|
|
"CALL", |
|
|
|
|
"FDEF", |
|
|
|
|
"ENDF", |
|
|
|
|
"MDAP[0]", |
|
|
|
|
"MDAP[1]", |
|
|
|
|
|
|
|
|
|
"IUP[0]", |
|
|
|
|
"IUP[1]", |
|
|
|
|
"SHP[0]", |
|
|
|
|
"SHP[1]", |
|
|
|
|
"SHC[0]", |
|
|
|
|
"SHC[1]", |
|
|
|
|
"SHZ[0]", |
|
|
|
|
"SHZ[1]", |
|
|
|
|
"SHPIX", |
|
|
|
|
"IP", |
|
|
|
|
"MSIRP[0]", |
|
|
|
|
"MSIRP[1]", |
|
|
|
|
"AlignRP", |
|
|
|
|
"RTDG", |
|
|
|
|
"MIAP[0]", |
|
|
|
|
"MIAP[1]", |
|
|
|
|
|
|
|
|
|
"NPushB", |
|
|
|
|
"NPushW", |
|
|
|
|
"WS", |
|
|
|
|
"RS", |
|
|
|
|
"WCvtP", |
|
|
|
|
"RCvt", |
|
|
|
|
"GC[0]", |
|
|
|
|
"GC[1]", |
|
|
|
|
"SCFS", |
|
|
|
|
"MD[0]", |
|
|
|
|
"MD[1]", |
|
|
|
|
"MPPEM", |
|
|
|
|
"MPS", |
|
|
|
|
"FlipON", |
|
|
|
|
"FlipOFF", |
|
|
|
|
"DEBUG", |
|
|
|
|
|
|
|
|
|
"LT", |
|
|
|
|
"LTEQ", |
|
|
|
|
"GT", |
|
|
|
|
"GTEQ", |
|
|
|
|
"EQ", |
|
|
|
|
"NEQ", |
|
|
|
|
"ODD", |
|
|
|
|
"EVEN", |
|
|
|
|
"IF", |
|
|
|
|
"EIF", |
|
|
|
|
"AND", |
|
|
|
|
"OR", |
|
|
|
|
"NOT", |
|
|
|
|
"DeltaP1", |
|
|
|
|
"SDB", |
|
|
|
|
"SDS", |
|
|
|
|
|
|
|
|
|
"ADD", |
|
|
|
|
"SUB", |
|
|
|
|
"DIV", |
|
|
|
|
"MUL", |
|
|
|
|
"ABS", |
|
|
|
|
"NEG", |
|
|
|
|
"FLOOR", |
|
|
|
|
"CEILING", |
|
|
|
|
"ROUND[0]", |
|
|
|
|
"ROUND[1]", |
|
|
|
|
"ROUND[2]", |
|
|
|
|
"ROUND[3]", |
|
|
|
|
"NROUND[0]", |
|
|
|
|
"NROUND[1]", |
|
|
|
|
"NROUND[2]", |
|
|
|
|
"NROUND[3]", |
|
|
|
|
|
|
|
|
|
"WCvtF", |
|
|
|
|
"DeltaP2", |
|
|
|
|
"DeltaP3", |
|
|
|
|
"DeltaCn[0]", |
|
|
|
|
"DeltaCn[1]", |
|
|
|
|
"DeltaCn[2]", |
|
|
|
|
"SROUND", |
|
|
|
|
"S45Round", |
|
|
|
|
"JROT", |
|
|
|
|
"JROF", |
|
|
|
|
"ROFF", |
|
|
|
|
"INS_$7B", |
|
|
|
|
"RUTG", |
|
|
|
|
"RDTG", |
|
|
|
|
"SANGW", |
|
|
|
|
"AA", |
|
|
|
|
|
|
|
|
|
"FlipPT", |
|
|
|
|
"FlipRgON", |
|
|
|
|
"FlipRgOFF", |
|
|
|
|
"INS_$83", |
|
|
|
|
"INS_$84", |
|
|
|
|
"ScanCTRL", |
|
|
|
|
"SDVPTL[0]", |
|
|
|
|
"SDVPTL[1]", |
|
|
|
|
"GetINFO", |
|
|
|
|
"IDEF", |
|
|
|
|
"ROLL", |
|
|
|
|
"MAX", |
|
|
|
|
"MIN", |
|
|
|
|
"ScanTYPE", |
|
|
|
|
"InstCTRL", |
|
|
|
|
"INS_$8F", |
|
|
|
|
|
|
|
|
|
"INS_$90", |
|
|
|
|
"INS_$91", |
|
|
|
|
"INS_$92", |
|
|
|
|
"INS_$93", |
|
|
|
|
"INS_$94", |
|
|
|
|
"INS_$95", |
|
|
|
|
"INS_$96", |
|
|
|
|
"INS_$97", |
|
|
|
|
"INS_$98", |
|
|
|
|
"INS_$99", |
|
|
|
|
"INS_$9A", |
|
|
|
|
"INS_$9B", |
|
|
|
|
"INS_$9C", |
|
|
|
|
"INS_$9D", |
|
|
|
|
"INS_$9E", |
|
|
|
|
"INS_$9F", |
|
|
|
|
|
|
|
|
|
"INS_$A0", |
|
|
|
|
"INS_$A1", |
|
|
|
|
"INS_$A2", |
|
|
|
|
"INS_$A3", |
|
|
|
|
"INS_$A4", |
|
|
|
|
"INS_$A5", |
|
|
|
|
"INS_$A6", |
|
|
|
|
"INS_$A7", |
|
|
|
|
"INS_$A8", |
|
|
|
|
"INS_$A9", |
|
|
|
|
"INS_$AA", |
|
|
|
|
"INS_$AB", |
|
|
|
|
"INS_$AC", |
|
|
|
|
"INS_$AD", |
|
|
|
|
"INS_$AE", |
|
|
|
|
"INS_$AF", |
|
|
|
|
|
|
|
|
|
"PushB[0]", |
|
|
|
|
"PushB[1]", |
|
|
|
|
"PushB[2]", |
|
|
|
|
"PushB[3]", |
|
|
|
|
"PushB[4]", |
|
|
|
|
"PushB[5]", |
|
|
|
|
"PushB[6]", |
|
|
|
|
"PushB[7]", |
|
|
|
|
"PushW[0]", |
|
|
|
|
"PushW[1]", |
|
|
|
|
"PushW[2]", |
|
|
|
|
"PushW[3]", |
|
|
|
|
"PushW[4]", |
|
|
|
|
"PushW[5]", |
|
|
|
|
"PushW[6]", |
|
|
|
|
"PushW[7]", |
|
|
|
|
|
|
|
|
|
"MDRP[00]", |
|
|
|
|
"MDRP[01]", |
|
|
|
|
"MDRP[02]", |
|
|
|
|
"MDRP[03]", |
|
|
|
|
"MDRP[04]", |
|
|
|
|
"MDRP[05]", |
|
|
|
|
"MDRP[06]", |
|
|
|
|
"MDRP[07]", |
|
|
|
|
"MDRP[08]", |
|
|
|
|
"MDRP[09]", |
|
|
|
|
"MDRP[10]", |
|
|
|
|
"MDRP[11]", |
|
|
|
|
"MDRP[12]", |
|
|
|
|
"MDRP[13]", |
|
|
|
|
"MDRP[14]", |
|
|
|
|
"MDRP[15]", |
|
|
|
|
|
|
|
|
|
"MDRP[16]", |
|
|
|
|
"MDRP[17]", |
|
|
|
|
"MDRP[18]", |
|
|
|
|
"MDRP[19]", |
|
|
|
|
"MDRP[20]", |
|
|
|
|
"MDRP[21]", |
|
|
|
|
"MDRP[22]", |
|
|
|
|
"MDRP[23]", |
|
|
|
|
"MDRP[24]", |
|
|
|
|
"MDRP[25]", |
|
|
|
|
"MDRP[26]", |
|
|
|
|
"MDRP[27]", |
|
|
|
|
"MDRP[28]", |
|
|
|
|
"MDRP[29]", |
|
|
|
|
"MDRP[30]", |
|
|
|
|
"MDRP[31]", |
|
|
|
|
|
|
|
|
|
"MIRP[00]", |
|
|
|
|
"MIRP[01]", |
|
|
|
|
"MIRP[02]", |
|
|
|
|
"MIRP[03]", |
|
|
|
|
"MIRP[04]", |
|
|
|
|
"MIRP[05]", |
|
|
|
|
"MIRP[06]", |
|
|
|
|
"MIRP[07]", |
|
|
|
|
"MIRP[08]", |
|
|
|
|
"MIRP[09]", |
|
|
|
|
"MIRP[10]", |
|
|
|
|
"MIRP[11]", |
|
|
|
|
"MIRP[12]", |
|
|
|
|
"MIRP[13]", |
|
|
|
|
"MIRP[14]", |
|
|
|
|
"MIRP[15]", |
|
|
|
|
|
|
|
|
|
"MIRP[16]", |
|
|
|
|
"MIRP[17]", |
|
|
|
|
"MIRP[18]", |
|
|
|
|
"MIRP[19]", |
|
|
|
|
"MIRP[20]", |
|
|
|
|
"MIRP[21]", |
|
|
|
|
"MIRP[22]", |
|
|
|
|
"MIRP[23]", |
|
|
|
|
"MIRP[24]", |
|
|
|
|
"MIRP[25]", |
|
|
|
|
"MIRP[26]", |
|
|
|
|
"MIRP[27]", |
|
|
|
|
"MIRP[28]", |
|
|
|
|
"MIRP[29]", |
|
|
|
|
"MIRP[30]", |
|
|
|
|
"MIRP[31]" |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#endif /* FT_DEBUG_LEVEL_TRACE */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static |
|
|
|
|
const FT_Char opcode_length[256] = |
|
|
|
|
{ |
|
|
|
@ -4571,7 +4852,7 @@ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
def->opc = (FT_Byte)args[0]; |
|
|
|
|
def->start = CUR.IP+1; |
|
|
|
|
def->start = CUR.IP + 1; |
|
|
|
|
def->range = CUR.curRange; |
|
|
|
|
def->active = TRUE; |
|
|
|
|
|
|
|
|
@ -6773,7 +7054,7 @@ |
|
|
|
|
call = CUR.callStack + CUR.callTop++; |
|
|
|
|
|
|
|
|
|
call->Caller_Range = CUR.curRange; |
|
|
|
|
call->Caller_IP = CUR.IP+1; |
|
|
|
|
call->Caller_IP = CUR.IP + 1; |
|
|
|
|
call->Cur_Count = 1; |
|
|
|
|
call->Cur_Restart = def->start; |
|
|
|
|
|
|
|
|
@ -7142,6 +7423,10 @@ |
|
|
|
|
{ |
|
|
|
|
CUR.opcode = CUR.code[CUR.IP]; |
|
|
|
|
|
|
|
|
|
FT_TRACE7(( " " )); |
|
|
|
|
FT_TRACE7(( opcode_name[CUR.opcode] )); |
|
|
|
|
FT_TRACE7(( "\n" )); |
|
|
|
|
|
|
|
|
|
if ( ( CUR.length = opcode_length[CUR.opcode] ) < 0 ) |
|
|
|
|
{ |
|
|
|
|
if ( CUR.IP + 1 > CUR.codeSize ) |
|
|
|
|