Table of contents
TRANSPORTUIP - Microcode Subroutine Call Setup
Purpose
TRANSPORTUIP prepares for microcode subroutine execution by saving a return address. It does NOT perform the actual jump - a subsequent U_JCC or U_JMP instruction does that. Return from subroutine happnes via U_JMP_INDIR or using some flow bits (xxx need to clarify this).
result = TRANSPORTUIP(CONST, target_label, IA.11, U3.01)
- Saves the current microcode position as a return address
- Returns some value in result register (internal state, not the address itself)
- The target_label is used by the following jump instruction
- When the subroutine ends with EOM (with special "subroutine return" flag), execution returns to the saved position
TMP8 = TRANSPORTUIP(CONST, part_macro_fxsave_alt, IA.11, U3.01) // TMP8 contains internal state (not directly usable) // Actual jump happens next (implicitly or explicitly)
- Subroutines end with EOM that has a special flag bit set
- This flag indicates "return to saved address" instead of "end of macro-operation"
- The return address comes from what TRANSPORTUIP saved internally
- Normal EOM (without flag) means end of entire instruction
// Main path: TMP8 = TRANSPORTUIP(CONST, part_macro_fxsave_alt, IA.11, U3.01) [... store FP registers ...] // At part_macro_fxsave_alt: [... alternate FP register stores ...] EOM + ???FL2??? // With return flag - goes back to main path
Cpuid in some cache CRBUS handling subroutine also uses U_JMP.INDIR to return back from subroutine.
- The returned value is not used directly in code but has some meaning
- Internal mechanism likely uses a microcode call stack (or register chain?)
- Allows code reuse and conditional path selection in microcode
Example with TMP5 used as return address from subroutine:
... TMP5 = TRANSPORTUIP (CONST , loc_ret , IA_11, U3_01) ... U_JMP_NT (CONST , sub_xyz , IA_11, U3_1B) loc_ret: ... # microcode subroutine sub_xyz: ... U_JMP_INDIR_N (CONST_0 , TMP5 , U3_40)
This project is an independent, unofficial work based on publicly available information and reverse-engineering research, and is not affiliated with, endorsed by, sponsored by, or associated with Intel Corporation or its affiliates. It is provided "as is", without warranty of any kind. The author assumes no responsibility or liability for any use, misuse, damage, data loss, hardware failure, or other consequences arising from its use. Intel, Pentium, Core and related trademarks are the property of their respective owners and are used solely for identification and informational purposes.