summaryrefslogblamecommitdiffstats
path: root/private/mvdm/softpc.new/base/ccpu386/lxs.c
blob: 7e8f22dad977f32962d7b2a8c92f8ebd00191aa7 (plain) (tree)




















































































































































                                                                        
/*[

lxs.c

LOCAL CHAR SccsID[]="@(#)lxs.c	1.5 02/09/94";

LDS, LES, LGS, LGS and LSS (ie LxS) CPU Functions.
--------------------------------------------------

]*/


#include <insignia.h>

#include <host_def.h>
#include <xt.h>
#include <c_main.h>
#include <c_addr.h>
#include <c_bsic.h>
#include <c_prot.h>
#include <c_seg.h>
#include <c_stack.h>
#include <c_xcptn.h>
#include	<c_reg.h>
#include <lxs.h>
#include <mov.h>


/*
   =====================================================================
   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];
   }