/*[ lxs.c LOCAL CHAR SccsID[]="@(#)lxs.c 1.5 02/09/94"; LDS, LES, LGS, LGS and LSS (ie LxS) CPU Functions. -------------------------------------------------- ]*/ #include #include #include #include #include #include #include #include #include #include #include #include #include /* ===================================================================== EXTERNAL ROUTINES START HERE ===================================================================== */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Load Full Pointer to DS segment register:general register pair. */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ GLOBAL VOID LDS #ifdef ANSI ( IU32 *pop1, /* Pntr to dst(offset) operand */ IU32 op2[2] /* src(offset:selector pair) operand */ ) #else (pop1, op2) IU32 *pop1; IU32 op2[2]; #endif { /* load segment selector first */ MOV_SR((IU32)DS_REG, op2[1]); /* then (if it works) load offset */ *pop1 = op2[0]; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Load Full Pointer to ES segment register:general register pair. */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ GLOBAL VOID LES #ifdef ANSI ( IU32 *pop1, /* Pntr to dst(offset) operand */ IU32 op2[2] /* src(offset:selector pair) operand */ ) #else (pop1, op2) IU32 *pop1; IU32 op2[2]; #endif { /* load segment selector first */ MOV_SR((IU32)ES_REG, op2[1]); /* then (if it works) load offset */ *pop1 = op2[0]; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Load Full Pointer to FS segment register:general register pair. */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ GLOBAL VOID LFS #ifdef ANSI ( IU32 *pop1, /* Pntr to dst(offset) operand */ IU32 op2[2] /* src(offset:selector pair) operand */ ) #else (pop1, op2) IU32 *pop1; IU32 op2[2]; #endif { /* load segment selector first */ MOV_SR((IU32)FS_REG, op2[1]); /* then (if it works) load offset */ *pop1 = op2[0]; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Load Full Pointer to GS segment register:general register pair. */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ GLOBAL VOID LGS #ifdef ANSI ( IU32 *pop1, /* Pntr to dst(offset) operand */ IU32 op2[2] /* src(offset:selector pair) operand */ ) #else (pop1, op2) IU32 *pop1; IU32 op2[2]; #endif { /* load segment selector first */ MOV_SR((IU32)GS_REG, op2[1]); /* then (if it works) load offset */ *pop1 = op2[0]; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Load Full Pointer to SS segment register:general register pair. */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ GLOBAL VOID LSS #ifdef ANSI ( IU32 *pop1, /* Pntr to dst(offset) operand */ IU32 op2[2] /* src(offset:selector pair) operand */ ) #else (pop1, op2) IU32 *pop1; IU32 op2[2]; #endif { /* load segment selector first */ MOV_SR((IU32)SS_REG, op2[1]); /* then (if it works) load offset */ *pop1 = op2[0]; }