Lines Matching refs:CodeInfo

60 extern ret_code SetSegOverride( const struct expr *opndx, struct code_info *CodeInfo );
74 static void jumpExtend( struct code_info *CodeInfo, int far_flag ) in jumpExtend() argument
83 …%u, curr offset=%X, Ofssize=%u\n", far_flag, Parse_Pass + 1, GetCurrOffset(), CodeInfo->Ofssize )); in jumpExtend()
85 if ( CodeInfo->prefix.opsiz ) { in jumpExtend()
87 next_ins_size = CodeInfo->Ofssize ? 6 : 8; in jumpExtend()
90 next_ins_size = CodeInfo->Ofssize ? 7 : 5; in jumpExtend()
94 next_ins_size = CodeInfo->Ofssize ? 5 : 3; in jumpExtend()
101 OutputCodeByte( CodeInfo->pinstr->opcode ^ 1 ); in jumpExtend()
103 CodeInfo->token = T_JMP; in jumpExtend()
104 CodeInfo->pinstr = &InstrTable[ IndexFromToken( T_JMP )]; in jumpExtend()
112 static void FarCallToNear( struct code_info *CodeInfo ) in FarCallToNear() argument
119 CodeInfo->mem_type = MT_NEAR; in FarCallToNear()
124 ret_code process_branch( struct code_info *CodeInfo, unsigned CurrOpnd, const struct expr *opndx ) in process_branch() argument
143 unsigned opidx = IndexFromToken( CodeInfo->token ); in process_branch()
151 CodeInfo->mem_type = opndx->mem_type; in process_branch()
168 CodeInfo->mem_type = MT_FAR; in process_branch()
173 CodeInfo->opnd[OPND1].data32l = opndx->value; in process_branch()
175 CodeInfo->opnd[OPND1].data32h = 0; in process_branch()
184 if( IS_JMPCALL( CodeInfo->token ) ) in process_branch()
185 CodeInfo->isfar = TRUE; /* ??? most likely nonsense! */ in process_branch()
187 if( CodeInfo->opnd[OPND1].data32l > USHRT_MAX ) in process_branch()
188 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
190 CodeInfo->opnd_type[OPND1] = OP_I16; in process_branch()
196 … GetCurrOffset(), sym->name, opndx->explicit, opndx->mem_type, opndx->Ofssize, CodeInfo->mem_type, in process_branch()
260 if ( SegOverride != NULL && CodeInfo->mem_type == MT_EMPTY ) { in process_branch()
262 CodeInfo->mem_type = MT_FAR; in process_branch()
265 if( ( CodeInfo->mem_type == MT_EMPTY || in process_branch()
266 CodeInfo->mem_type == MT_NEAR ) && in process_branch()
267 CodeInfo->isfar == FALSE ) { in process_branch()
273 if( CodeInfo->token == T_CALL && in process_branch()
274 CodeInfo->mem_type == MT_EMPTY && in process_branch()
277 FarCallToNear( CodeInfo ); /* switch mem_type to NEAR */ in process_branch()
283 addr += CodeInfo->opnd[OPND1].data32l; in process_branch()
286 if (( CodeInfo->Ofssize && InstrTable[opidx].byte1_info == F_16A ) || in process_branch()
287 ( CodeInfo->Ofssize != USE32 && InstrTable[opidx].byte1_info == F_32A )) in process_branch()
294 DebugMsg(("process_branch: CI.memtype=%Xh addr=%Xh\n", CodeInfo->mem_type, addr )); in process_branch()
295 if( CodeInfo->mem_type != MT_NEAR && CodeInfo->token != T_CALL && in process_branch()
297 CodeInfo->opnd[OPND1].type = OP_I8; in process_branch()
299 if ( opndx->instr == T_SHORT || ( IS_XCX_BRANCH( CodeInfo->token ) ) ) { in process_branch()
301 if( CodeInfo->token == T_CALL ) { in process_branch()
308 …DebugMsg(("process_branch: jump out of range, mem_type=%Xh addr=%Xh\n", CodeInfo->mem_type, addr )… in process_branch()
319 …return( EmitErr( CodeInfo->mem_type == MT_EMPTY ? JUMP_OUT_OF_RANGE : ONLY_SHORT_JUMP_DISTANCE_IS_… in process_branch()
325 CodeInfo->opnd[OPND1].type = OP_I16; in process_branch()
328 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
331 CodeInfo->prefix.opsiz = OPSIZE( CodeInfo->Ofssize, opndx->Ofssize ); in process_branch()
332 if ( CodeInfo->prefix.opsiz ) in process_branch()
334 } else if( CodeInfo->Ofssize > USE16 ) { in process_branch()
335 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
338 CodeInfo->opnd[OPND1].type = OP_I16; in process_branch()
341 if( IS_CONDJMP( CodeInfo->token ) ) { in process_branch()
348 CodeInfo->opnd[OPND1].data32l = addr; in process_branch()
349 …_branch: displacement=%" I32_SPEC "X opnd_type=%" I32_SPEC "X\n", addr, CodeInfo->opnd[OPND1].type… in process_branch()
355 if( ( ModuleInfo.curr_cpu & P_CPU_MASK) < P_386 && IS_JCC( CodeInfo->token ) ) { in process_branch()
357 if( CodeInfo->opnd[OPND1].type != OP_I8 ) { in process_branch()
358 if( CodeInfo->mem_type == MT_EMPTY && ModuleInfo.ljmp == TRUE ) { in process_branch()
359 jumpExtend( CodeInfo, FALSE ); in process_branch()
361 CodeInfo->opnd[OPND1].data32l = addr; in process_branch()
365 …istance != SHORT, mem_type=%X, curr_ofs=%X, addr=%d\n", Parse_Pass + 1, CodeInfo->mem_type, GetCur… in process_branch()
367 …return( EmitErr( CodeInfo->mem_type == MT_EMPTY ? JUMP_OUT_OF_RANGE : JUMP_DISTANCE_NOT_POSSIBLE, … in process_branch()
396 if( CodeInfo->token == T_CALL && in process_branch()
397 CodeInfo->mem_type == MT_EMPTY && in process_branch()
403 FarCallToNear( CodeInfo ); /* switch mem_type to NEAR */ in process_branch()
407 if( CodeInfo->mem_type == MT_EMPTY && mem_type != MT_EMPTY && opndx->instr != T_SHORT ) { in process_branch()
414 if( IS_JMPCALL( CodeInfo->token ) ) { in process_branch()
415 CodeInfo->isfar = TRUE; in process_branch()
423 CodeInfo->mem_type = mem_type; in process_branch()
428 CodeInfo->mem_type = mem_type; in process_branch()
433 if ( IS_JMPCALL( CodeInfo->token ) && in process_branch()
434 ( CodeInfo->isfar == TRUE || CodeInfo->mem_type == MT_FAR )) { in process_branch()
435 CodeInfo->isfar = TRUE; /* flag isn't set if explicit is true */ in process_branch()
437 switch( CodeInfo->mem_type ) { in process_branch()
448 CodeInfo->prefix.opsiz = OPSIZE( CodeInfo->Ofssize, opndx->Ofssize ); in process_branch()
450 CodeInfo->prefix.opsiz = OPSIZE( CodeInfo->Ofssize, GetSymOfssize( sym ) ); in process_branch()
454 if( IS_OPER_32( CodeInfo ) ) { in process_branch()
456 CodeInfo->opnd[OPND1].type = OP_I48; in process_branch()
459 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
464 … DebugMsg(("process_branch: JMP/CALL far, unexpected mem_type=%X\n", CodeInfo->mem_type )); in process_branch()
469 CodeInfo->opnd[OPND1].InsFixup = CreateFixup( sym, fixup_type, fixup_option ); in process_branch()
473 switch( CodeInfo->token ) { in process_branch()
478 if( CodeInfo->mem_type == MT_EMPTY ) { in process_branch()
480 if( CodeInfo->Ofssize > USE16 ) { in process_branch()
482 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
485 CodeInfo->opnd[OPND1].type = OP_I16; in process_branch()
491 DebugMsg1(("process_branch: JMP/CALL, CodeInfo->memtype=%X\n", CodeInfo->mem_type )); in process_branch()
492 switch( CodeInfo->mem_type ) { in process_branch()
497 CodeInfo->opnd[OPND1].type = OP_I8; in process_branch()
507 CodeInfo->opnd[OPND1].type = OP_I16; in process_branch()
510 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
512 CodeInfo->prefix.opsiz = OPSIZE( CodeInfo->Ofssize, opndx->Ofssize ); in process_branch()
515 if( CodeInfo->Ofssize > USE16 ) { in process_branch()
517 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
520 CodeInfo->opnd[OPND1].type = OP_I16; in process_branch()
526 DebugMsg(("process_branch: JMP/CALL, unexpected mem_type=%X\n", CodeInfo->mem_type )); in process_branch()
536 if ( IS_XCX_BRANCH( CodeInfo->token ) ) { in process_branch()
537 if( CodeInfo->mem_type != MT_EMPTY && opndx->instr != T_SHORT ) { in process_branch()
540 CodeInfo->opnd[OPND1].type = OP_I8; in process_branch()
549 switch( CodeInfo->mem_type ) { in process_branch()
554 CodeInfo->opnd[OPND1].type = OP_I8; in process_branch()
561 CodeInfo->prefix.opsiz = OPSIZE( CodeInfo->Ofssize, opndx->Ofssize ); in process_branch()
562 CodeInfo->opnd[OPND1].type = (opndx->Ofssize >= USE32) ? OP_I32 : OP_I16; in process_branch()
563 } else if( CodeInfo->Ofssize > USE16 ) { in process_branch()
565 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
568 CodeInfo->opnd[OPND1].type = OP_I16; in process_branch()
576 CodeInfo->prefix.opsiz = OPSIZE( CodeInfo->Ofssize, opndx->Ofssize ); in process_branch()
578 CodeInfo->prefix.opsiz = OPSIZE( CodeInfo->Ofssize, GetSymOfssize( sym )); in process_branch()
581 jumpExtend( CodeInfo, TRUE ); in process_branch()
582 CodeInfo->isfar = TRUE; in process_branch()
583 if( IS_OPER_32( CodeInfo ) ) { in process_branch()
585 CodeInfo->opnd[OPND1].type = OP_I48; in process_branch()
588 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
600 switch( CodeInfo->mem_type ) { in process_branch()
607 CodeInfo->opnd[OPND1].type = OP_I8; in process_branch()
612 if ( CodeInfo->mem_type == MT_FAR ) { in process_branch()
613 jumpExtend( CodeInfo, TRUE ); in process_branch()
615 CodeInfo->isfar = TRUE; in process_branch()
616 CodeInfo->opnd[OPND1].type = OP_I32; in process_branch()
618 jumpExtend( CodeInfo, FALSE ); in process_branch()
620 CodeInfo->opnd[OPND1].type = OP_I16; in process_branch()
630 CodeInfo->opnd[OPND1].InsFixup = CreateFixup( sym, fixup_type, fixup_option ); in process_branch()