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)
The author is not affiliated with, endorsed by, or sponsored by Intel Corporation or its affiliates. All trademarks, including but not limited to Intel, Pentium, and any other registered or unregistered marks mentioned herein, are the property of their respective owners. Their use in this context is solely for descriptive and informational purposes and constitutes nominative fair use under applicable trademark laws.