void byte_of_and(struct emuctx *ctx, byte val1, byte val2) { byte result = val1 & val2; if (!signed_byte(val1) && !signed_byte(val2) && signed_byte(result)) set_of(ctx, YES) ; else if (signed_byte(val1) && signed_byte(val2) && !signed_byte(result)) set_of(ctx, YES) ; else set_of(ctx, NO) ; }
void byte_of_sub(struct emuctx *ctx, byte val1, byte val2) { byte two_comp = (~val2)+1 ; byte result = val1 + two_comp; if (!signed_byte(val1) && !signed_byte(two_comp) && signed_byte(result)) set_of(ctx, YES) ; else if (signed_byte(val1) && signed_byte(two_comp) && !signed_byte(result)) set_of(ctx, YES) ; else set_of(ctx, NO) ; }
void word_of_sub(struct emuctx *ctx, word val1, word val2) { word two_comp ; two_comp.w = (~val2.w) + 1 ; word result ; result.w = val1.w + two_comp.w; if (!signed_word(val1) && !signed_word(two_comp) && signed_word(result)) set_of(ctx, YES) ; else if (signed_word(val1) && signed_word(two_comp) && !signed_word(result)) set_of(ctx,YES) ; else set_of(ctx, NO) ; }
atom() #endif { zzRULE; zzBLOCK(zztasp1); zzMake0; { register int i_prime; anychar(); zzaRet.label = set_of(zzaArg(zztasp1,1 ).letter); i_prime = zzaArg(zztasp1,1 ).letter + MIN_CHAR; if (case_insensitive && islower(i_prime)) set_orel(toupper(i_prime)-MIN_CHAR, &(zzaRet.label)); if (case_insensitive && isupper(i_prime)) set_orel(tolower(i_prime)-MIN_CHAR, &(zzaRet.label)); zzEXIT(zztasp1); return; fail: zzEXIT(zztasp1); zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText); zzresynch(setwd3, 0x8); } }
near_atom() #endif { zzRULE; zzBLOCK(zztasp1); zzMake0; { register int i; register int i_prime; anychar(); zzaRet.letter=zzaArg(zztasp1,1 ).letter; zzaRet.label=set_of(zzaArg(zztasp1,1 ).letter); i_prime = zzaArg(zztasp1,1 ).letter + MIN_CHAR; if (case_insensitive && islower(i_prime)) set_orel(toupper(i_prime)-MIN_CHAR, &(zzaRet.label)); if (case_insensitive && isupper(i_prime)) set_orel(tolower(i_prime)-MIN_CHAR, &(zzaRet.label)); { zzBLOCK(zztasp2); zzMake0; { if ( (LA(1)==RANGE) ) { zzmatch(RANGE); zzCONSUME; anychar(); if (case_insensitive){ i_prime = zzaRet.letter+MIN_CHAR; zzaRet.letter = (islower(i_prime) ? toupper(i_prime) : i_prime)-MIN_CHAR; i_prime = zzaArg(zztasp2,2 ).letter+MIN_CHAR; zzaArg(zztasp2,2 ).letter = (islower(i_prime) ? toupper(i_prime) : i_prime)-MIN_CHAR; } /* check to see if range okay */ if (zzaRet.letter > zzaArg(zztasp2,2 ).letter){ error("invalid range ", zzline); } for (i=zzaRet.letter; i<= (int)zzaArg(zztasp2,2 ).letter; ++i){ set_orel(i,&(zzaRet.label)); i_prime = i+MIN_CHAR; if (case_insensitive && islower(i_prime)) set_orel(toupper(i_prime)-MIN_CHAR, &(zzaRet.label)); if (case_insensitive && isupper(i_prime)) set_orel(tolower(i_prime)-MIN_CHAR, &(zzaRet.label)); } } zzEXIT(zztasp2); } } zzEXIT(zztasp1); return; fail: zzEXIT(zztasp1); zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText); zzresynch(setwd3, 0x4); } }
static struct df_link * get_defs (rtx_insn *insn, rtx reg, vec<rtx_insn *> *dest) { df_ref use; struct df_link *ref_chain, *ref_link; FOR_EACH_INSN_USE (use, insn) { if (GET_CODE (DF_REF_REG (use)) == SUBREG) return NULL; if (REGNO (DF_REF_REG (use)) == REGNO (reg)) break; } gcc_assert (use != NULL); ref_chain = DF_REF_CHAIN (use); for (ref_link = ref_chain; ref_link; ref_link = ref_link->next) { /* Problem getting some definition for this instruction. */ if (ref_link->ref == NULL) return NULL; if (DF_REF_INSN_INFO (ref_link->ref) == NULL) return NULL; /* As global regs are assumed to be defined at each function call dataflow can report a call_insn as being a definition of REG. But we can't do anything with that in this pass so proceed only if the instruction really sets REG in a way that can be deduced from the RTL structure. */ if (global_regs[REGNO (reg)] && !set_of (reg, DF_REF_INSN (ref_link->ref))) return NULL; } if (dest) for (ref_link = ref_chain; ref_link; ref_link = ref_link->next) dest->safe_push (DF_REF_INSN (ref_link->ref)); return ref_chain; }
atom() #endif { zzRULE; zzBLOCK(zztasp1); zzMake0; { register int i_prime; anychar(); zzaRet.label = set_of(zzaArg(zztasp1,1 ).letter); i_prime = zzaArg(zztasp1,1 ).letter + MIN_CHAR; if (case_insensitive && islower(i_prime)) set_orel(toupper(i_prime)-MIN_CHAR, &(zzaRet.label)); if (case_insensitive && isupper(i_prime)) set_orel(tolower(i_prime)-MIN_CHAR, &(zzaRet.label)); zzEXIT(zztasp1); return; } }
void sbb_of_byte(struct emuctx *ctx, byte val1, byte val2) { byte two_comp = (~val2)+1 ; if (get_cf(ctx)) { byte result = val1 + two_comp + 0xFF ; two_comp = two_comp + 0xFF ; if (!signed_byte(val1) && !signed_byte(two_comp) && signed_byte(result)) set_of(ctx, YES) ; else if (signed_byte(val1) && signed_byte(two_comp) && !signed_byte(result)) set_of(ctx, YES) ; else set_of(ctx, NO) ; } else { byte result = val1 + two_comp + 0xFF ; if (!signed_byte(val1) && !signed_byte(two_comp) && signed_byte(result)) set_of(ctx, YES) ; else if (signed_byte(val1) && signed_byte(two_comp) && !signed_byte(result)) set_of(ctx, YES) ; else set_of(ctx, NO) ; } }
void sbb_of_word(struct emuctx *ctx, word val1, word val2) { word two_comp ; two_comp.w = (~val2.w) + 1 ; if (get_cf(ctx) == YES) { word result ; result.w = val1.w + two_comp.w + 0xFFFF ; two_comp.w = two_comp.w + 0xFFFF ; if (!signed_word(val1) && !signed_word(two_comp) && signed_word(result)) set_of(ctx, YES) ; else if (signed_word(val1) && signed_word(two_comp) && !signed_word(result)) set_of(ctx,YES) ; else set_of(ctx, NO) ; } else { word result; result.w = val1.w + two_comp.w ; if (!signed_word(val1) && !signed_word(two_comp) && signed_word(result)) set_of(ctx, YES) ; else if (signed_word(val1) && signed_word(two_comp) && !signed_word(result)) set_of(ctx,YES) ; else set_of(ctx, NO) ; } }