{
File name write.mc
Description: Mesa Write op-codes
Author: don charnley

Created: February 16, 1980
Charnley, March 28, 1980  5:09 PM
R. Garner, April 2, 1980  10:34 PM
Johnsson, January 14, 1981  11:04 AM
Fiala, 16-May-86 14:45:51 Changes for 4MB storage
Trow	13-Oct-87 15:39:36 Reverse targets 1 and 2 of XwdDisp.
}



{The Write mesa op-codes consist of the following:
OP	val	bytes	stk	time
W0	106'b	1	2	3
W1	107'b	1	2	3
W2	110'b	1	2	3
WB	111'b	2	2	3
WS0	130'b	1	2	3
WSB	131'b	2	2	3
WBL	140'b	2	3	3
WDBL	142'b	2	4	4
WD0	117'b	1	3	3
WDB	116'b	2	3	3
WDS0	xxx	1	3	4
WSDB	133'b	2	3	4
PS0	xxx	1	2+1	3
PSB	xxx	2	2+1	3
PDS0	xxx	1	3+1	4
PDSB	xxx	2	3+1	4
WILP	126'b	2	1	4
WILPL	150'b	2	1	6
WIGPL	152'b	2	1	6
WXLP	123'b	2	2	6
WXLPL	144'b	2	2	6
WXGPL	146'b	2	2	6
}


{
	Wn{n:[0..2]} and WB
}
{@Wn}  {@WB, alpha}
{Timing:	2 clicks if no remap, + ? if fix map flags}

{		entry:		exit:
							
  TOS =		|  ptr	|	|  v	|
						
  STK =		|  ~	|	|  ptr	|
	      -->	|  data	|	|  data	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}


@W0:	Map ← Q ← [rhMDS,TOS + 0], L1←L1w.DecOnly, GOTO[WnTail],	c1, opcode[106'b];
@W1:	Map ← Q ← [rhMDS,TOS + 1], L1←L1w.DecOnly, GOTO[WnTail],	c1, opcode[107'b];
@W2:	T ← 2, L1←L1w.DecOnly,	c1, opcode[110'b];
	Noop,	c2;
WbMap:	Noop,	c3;

	Map ← Q ← [rhMDS,TOS + T],			c1;
WnTail:	PC ← PC + PC16, push, L0←L0.RedoW,		c2;
	Rx ← rhRx ← MD, XwdDisp, STK ← TOS, pop,	c3;

RedoW:	MAR ← [rhRx, Q + 0], DISP2[WxMapUD],		c1, at[L0.RedoW,10,WMapFixCaller];
WxMapUD:
	CALL[WMapFix] {will return to RedoW},		c2, at[0, 4, WxMapUD];
{db}	CALL[WMapFix] {WP fault},			c2, at[1, 4, WxMapUD];
	CALL[WMapFix] {Page fault},			c2, at[3, 4, WxMapUD];
{db}	MDR ← STK{data}, pop, IBDisp, GOTO[SLTail],	c2, at[2, 4, WxMapUD];

@WB:	T ← ib, L1 ← L1w.DecDec,	c1, opcode[111'b];
	PC ← PC + PC16, GOTO[WbMap],	c2;


{
	WS0 and WSB
}
{@WS0}  {@WSB, alpha}
{Timing:	3 clicks if no remap, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  data	|	|  v	|
						
  STK =		|  ~	|	|  data	|
	      -->	|  ptr	|	|  ptr	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}


@WS0:	TT ← STK{ptr}, push, L1 ← L1w.PushOnly,		c1, opcode[130'b];
	STK ← TOS{data}, pop,				c2;
	pop, GOTO[WSTail],				c3;

@WSB:	TT ← STK{ptr}, push, L1 ← L1w.PushDec,		c1, opcode[131'b];
	PC ← PC + PC16, STK ← TOS{data}, pop,		c2;
	TT ← ib + TT, pop,				c3;

WSTail:	Map ← Q ← [rhMDS,TT],				c1;
	T ← TOS, L0 ← L0.WriteGo,			c2;
WriteGo:
	Rx ← rhRx ← MD, XwdDisp,			c3;

WriteGox:
	MAR ← [rhRx,Q + 0], DISP2[WMapUD],		c1, at[L0.WriteGo,10,WMapFixCaller];
WMapUD:	CALL[WMapFix] {will return to WriteGo },	c2, at[0, 4, WMapUD];
{db}	CALL[WMapFix] {will return to WriteGo },	c2, at[1, 4, WMapUD];
	CALL[WMapFix] {will return to WriteGo },	c2, at[3, 4, WMapUD];
{db}	MDR ← T{data}, PC ← PC + PC16, IBDisp, GOTO[SLTail],	c2, at[2, 4, WMapUD];

{
	WBL
}
{@WBL, alpha}
{Timing:	3 clicks, + 1 if (ptr + ib) crosses 64K, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  ptrH	|	|  v	|
						
  STK =		|  ~	|	|  ~	|
	      -->	|  ptrL	|	|  ptrL	|
		|  data	|	|  data	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}

@WBL:	TT ← STK{ptrL}, pop, L1 ← L1w.Push2Only,	c1, opcode[140'b];
	TT ← TT + ib, CarryBr, L2 ← L2.WBL,		c2;
	rhTT ← TOS{ptrH} LRot0, BRANCH[WLrhOK,$],	c3;

WLrhFix:
	Q ← rhTT, CALL[rhTTIncx],			c1;

WLrhOK:	Map ← Q ← [rhTT,TT], L0 ← L0.RedoLW,		c1, at[L2.WBL,10,rhTTIncRets];
	T ← STK{data}, pop,				c2;
RedoLWz:
	Rx ← rhRx ← MD, XwdDisp,			c3;

RedoLW:	MAR ← [rhRx, Q + 0], DISP2[WLMapUD],		c1, at[L0.RedoLW,10,WMapFixCaller];
WLMapUD:
	CALL[WLMapFix] {will return to RedoLW},		c2, at[0, 4, WLMapUD];
{db}	CALL[WLMapFix] {WP fault},			c2, at[1, 4, WLMapUD];
	CALL[WLMapFix] {Page fault},			c2, at[3, 4, WLMapUD];
{db}	MDR ← T{data}, IBDisp, PC ← PC + 1, GOTO[SLTail],	c2, at[2, 4, WLMapUD];


{
	WDBL
}
{@WDBL, alpha}
{Timing:	4 clicks, + 1 if (ptr + ib + 1) crosses 64K, + 2
if fix map flags, + 2 if data on 2 pages, + 2 if 2 pages diff 64K}

{		entry:		exit:
							
  TOS =		|  ptrH	|	|  v	|
						
  STK =		|  ~	|	|  ~	|
	      -->	|  ptrL	|	|  ptrL	|
		|  data1	|	|  data1	|
		|  data0	|	|  data0	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}

@WDBL:	TT ← STK{ptrL}, pop, L0 ← L0.wdblW1,		c1, opcode[142'b];
	TT ← TT + ib, CarryBr, L2 ← L2.WDBL0,		c2;
	rhTT ← TOS{ptrH} LRot0, BRANCH[wdblRhOK,$],	c3;

	Q ← rhTT, CALL[rhTTIncx],			c1;

wdblRhOK:
	Map ← Q ← [rhTT,TT], L1 ← L1w.Push2Only,	c1, at[L2.WDBL0,10,rhTTIncRets];
	T ← STK{data1}, pop,				c2;
	Rx ← rhRx ← MD, XwdDisp,			c3;

wdblW1:	MAR ← [rhRx,Q + 0], DISP2[wdblMapUD1],		c1, at[L0.wdblW1,10,WMapFixCaller];
wdblMapUD1:
	CALL[WLMapFix] {will return to wdblW1},		c2, at[0, 4, wdblMapUD1];
{db}	CALL[WLMapFix] {WP fault},			c2, at[1, 4, wdblMapUD1];
	CALL[WLMapFix] {Page fault},			c2, at[3, 4, wdblMapUD1];
{db}	MDR ← STK{data0}, pop, L0 ← L0.RedoLW,		c2, at[2, 4, wdblMapUD1];
	Noop,	c3;

wdblW0:	MAR ← [rhRx,Q + 1],				c1;
	MDR ← T{data1}, PC ← PC + 1, IBDisp, BRANCH[$,wdblPgCr,1],	c2;
	TOS ← STK{v}, pop, DISPNI[OpTable],		c3;

wdblPgCr:	TT ← TT + 1, CarryBr, L2 ← L2.WDBL1,	c3;

WDBL1:	Map ← Q ← [rhTT,TT], L1 ← L1w.Push3Only, BRANCH[$,wdblFixrh],	c1, at[L2.WDBL1,10,rhTTIncRets];
	PC ← PC - 1, GOTO[RedoLWz],			c2;
	
wdblFixrh:
	GOTO[FixrhTT]{in RDBL; calls rhTTInc},		c2;


{
	WD0
}
{@WD0}
{Timing:	3 clicks, + 2 if fix map flags, + 2 if data on 2 pages}

{		entry:		exit:
							
  TOS =		|  ptr	|	|  v	|
						
  STK =		|  ~	|	|  ~	|
	      -->	|  data1	|	|  data1	|
		|  data0	|	|  data0	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}

@WD0:	Map ← Q ← [rhMDS,TOS], L0 ← L0.WDw0,		c1, opcode[117'b];
	T ← STK{data1}, L1 ← L1w.PushOnly, pop,		c2;
	Rx ← rhRx ← MD, XwdDisp,			c3;

	MAR ← [rhRx,Q + 0], DISP2[WDw0MapUD],		c1, at[L0.WDw0,10,WMapFixCaller];
WDw0MapUD:
	CALL[WMapFix] {will return to WDw0},		c2, at[0, 4, WDw0MapUD];
{db}	CALL[WMapFix] {WP fault},			c2, at[1, 4, WDw0MapUD];
	CALL[WMapFix] {Page fault},			c2, at[3, 4, WDw0MapUD];
{db}	MDR ← STK{data0}, pop, L1 ← L1w.Push2Only,	c2, at[2, 4, WDw0MapUD];
	Noop,						c3;

WDw1:	MAR ← [rhRx,Q + 1],				c1;
WDw1c2:	MDR ← T{data0}, PC ← PC + PC16, IBDisp, BRANCH[$,WDw1PgCr,1],	c2;
	TOS ← STK{v}, pop, DISPNI[OpTable],		c3;

WDw1PgCr:
	PC ← PC - PC16,					c3;

	Map ← Q ← [rhMDS,Q + 1],			c1;
	L0 ← L0.WriteGo, GOTO[WriteGo],			c2;

{
	WDB
}
{@WDB, alpha}
{Timing:	3 clicks, + 2 if fix map flags, + 2 if data on 2 pages}

{		entry:		exit:
							
  TOS =		|  ptr	|	|  v	|
						
  STK =		|  ~	|	|  ~	|
	      -->	|  data1	|	|  data1	|
		|  data0	|	|  data0	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}

@WDB:	Q ← TOS + ib, L1 ← L1w.Push2Dec,	c1, opcode[116'b];
	T ← STK{data1}, pop,			c2;
WDBx:	PC ← PC + PC16,				c3;

	Map ← [rhMDS, Q],			c1;
	TT ← STK{data0}, pop, L0 ← L0.WDBw0, 	c2;
	Rx ← rhRx ← MD, XwdDisp,		c3;

	MAR ← [rhRx,Q + 0], DISP2[WDBw0MapUD],	c1, at[L0.WDBw0,10,WMapFixCaller];
WDBw0MapUD:
	CALL[WMapFix] {will return to WDBw0},	c2, at[0, 4, WDBw0MapUD];
{db}	CALL[WMapFix] {WP fault},		c2, at[1, 4, WDBw0MapUD];
	CALL[WMapFix] {Page fault},		c2, at[3, 4, WDBw0MapUD];
{db}	MDR ← TT,				c2, at[2, 4, WDBw0MapUD];
	GOTO[WDw1],				c3;


{
	WDS0
}
{@WDS0}
{Timing:	4 clicks, + 2 if fix map flags, + 2 if data on 2 pages}

{		entry:		exit:
							
  TOS =		|  data1	|	|  v	|
						
  STK =		|  ~	|	|  ~	|
	      -->	|  data0	|	|  data0	|
		|  ptr	|	|  ptr	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}


	{ UNUSED AT PRESENT
@WDS0:	pop,	c1, opcode[xxx];
	T ← STK{ptr},					c2;
	Noop,						c3;

	Map ← Q ← [rhMDS,T + 1], L0 ← L0.WDSw0,		c1;
	T ← TOS{data1}, L1 ← L1w.PushOnly,		c2;
	Rx ← rhRx ← MD, XwdDisp,			c3;

WDSw0:	MAR ← [rhRx,Q + 0], DISP2[WDSw0MapUD],		c1, at[L0.WDSw0,10,WMapFixCaller];
WDSw0MapUD:
	CALL[WMapFix] {will return to WDSw0},		c2, at[0, 4, WDSw0MapUD];
{db}	CALL[WMapFix] {WP fault},			c2, at[1, 4, WDSw0MapUD];
	CALL[WMapFix] {Page fault},			c2, at[3, 4, WDSw0MapUD];
{db}	MDR ← T{data1}, push, L1 ← L1.Push2Only,	c2, at[2, 4, WDSw0MapUD];
	T ← STK{data0}, pop,				c3;

	MAR ← [rhRx,Q - 1], pop, GOTO[WDw1c2],		c1;
	}

{
	WSDB
}
{@WSDB, alpha}
{Timing:	4 clicks, + 2 if fix map flags, + 2 if data on 2 pages}

{		entry:		exit:
							
  TOS =		|  data1	|	|  v	|
						
  STK =		|  ~	|	|  ~	|
	      -->	|  data0	|	|  data0	|
		|  ptr	|	|  ptr	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}

@WSDB:	PC ← PC + PC16, pop,			c1, opcode[133'b];
	T ← STK{ptr},				c2;
	T ← T + ib,				c3;

	Map ← Q ← [rhMDS,T], L0 ← L0.WDSBw0,	c1;
	T ← TOS{data1}, L1 ← L1w.DecOnly,	c2;
	Rx ← rhRx ← MD, XwdDisp, push,	c3;

WSDBw0:	MAR ← [rhRx,Q + 0], DISP2[WSDBw0MapUD],	c1, at[L0.WDSBw0,10,WMapFixCaller];
WSDBw0MapUD:
	CALL[WMapFix] {will return to WSDBw0 },	c2, at[0, 4, WSDBw0MapUD];
{db}	CALL[WMapFix] {WP fault},		c2, at[1, 4, WSDBw0MapUD];
	CALL[WMapFix] {Page fault},		c2, at[3, 4, WSDBw0MapUD];
{db}	MDR ← STK{data0}, pop, L1 ← L1w.Push2Dec,	c2, at[2, 4, WSDBw0MapUD];
	Noop,					c3;

	MAR ← [rhRx,Q + 1], pop, GOTO[WDw1c2],	c1;


{
	PS0 and PSB
}
{@PS0}  {@PSB, alpha}
{Timing:	3 clicks if no remap, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  data	|	|  ptr	|
						
  STK =		|  ~	|	|  data	|
	      -->	|  ptr	|	|  ptr	|
		|  v	|      -->	|  v	|	}

	{ UNUSED AT PRESENT
@PS0:	TT ← STK{ptr}, push, L1 ← L1w.NoFixes,		c1, opcode[xxx];
	T ← STK ← TOS{data}, pop,			c2;
	fXpop, fZpop,					c3;

	Map ← Q ← [rhMDS,TT], push, GOTO[WS0Mapx],	c1;

@PSB:	TT ← STK{ptr}, push, L1 ← L1w.DecOnly,		c1, opcode[xxx];
	T ← STK ← TOS{data}, pop,			c2;
	TT ← ib + TT, pop,				c3;

	Map ← Q ← [rhMDS,TT], pop,			c1;
	PC ← PC + PC16, push, L0 ← L0.WriteGo,		c2;
	Rx ← rhRx ← MD, XwdDisp, push, GOTO[WriteGo],	c3;
	}

{
	PDS0
}
{@PDS0}
{Timing:	4 clicks, + 2 if fix map flags, + 2 if data on 2 pages}

{		entry:		exit:
							
  TOS =		|  data1	|	|  ptr	|
						
  STK =		|  ~	|	|  data1	|
	      -->	|  data0	|	|  data0	|
		|  ptr	|	|  ptr	|
		|  v	|      -->	|  v	|	}


	{ UNUSED AT PRESENT
@PDS0:	pop,					c1, opcode[xxx];
	T ← STK{ptr}, fXpop, fZpop, push,	c2;
	push,					c3;

	Map ← Q ← [rhMDS,T + 1], push, L0 ← L0.PDSw0,	c1;
	STK ← T ← TOS{data1}, pop, L1 ← L1w.NoFixes,	c2;
	Rx ← rhRx ← MD, XwdDisp,		c3;

PDSw0:	MAR ← [rhRx,Q + 0], DISP2[PDSw0MapUD],	c1, at[L0.PDSw0,10,WMapFixCaller];
PDSw0MapUD:
	CALL[WMapFix] {will return to PDSw0},	c2, at[0, 4, PDSw0MapUD];
{db}	CALL[WMapFix] {WP fault},		c2, at[1, 4, PDSw0MapUD];
	CALL[WMapFix] {Page fault},		c2, at[3, 4, PDSw0MapUD];
{db}	MDR ← T{data1}, L1 ← L1w.PushOnly,	c2, at[2, 4, PDSw0MapUD];
	T ← STK{data0}, pop, GOTO[WDw1],	c3;
	}


{
	PDSB
}
{@PDSB, alpha}
{Timing:	4 clicks, + 2 if fix map flags, + 2 if data on 2 pages}

{		entry:		exit:
							
  TOS =		|  data1	|	|  ptr	|
						
  STK =		|  ~	|	|  data1	|
	      -->	|  data0	|	|  data0	|
		|  ptr	|	|  ptr	|
		|  v	|      -->	|  v	|	}

	{ UNUSED AT PRESENT
@PDSB:	PC ← PC + PC16, pop,			c1, opcode[xxx];
	T ← STK{ptr}, fXpop, fZpop, push,	c2;
	push, L0 ← L0.PDSBw0,			c3;

	Map ← Q ← [rhMDS,T + ib + 1], push,	c1;
	STK ← T ← TOS{data1}, pop, L1 ← L1w.DecOnly,	c2;
	Rx ← rhRx ← MD, XwdDisp,		c3;

PDSBw0:	MAR ← [rhRx,Q + 0], DISP2[PDSBw0MapUD],	c1, at[L0.PDSBw0,10,WMapFixCaller];
PDSBw0MapUD:
	CALL[WMapFix] {will return to PDSBw0 },	c2, at[0, 4, PDSBw0MapUD];
{db}	CALL[WMapFix] {WP fault},		c2, at[1, 4, PDSBw0MapUD];
	CALL[WMapFix] {Page fault},		c2, at[3, 4, PDSBw0MapUD];
{db}	MDR ← T{data1}, L1 ← L1w.PushDec,	c2, at[2, 4, PDSBw0MapUD];
	T ← STK{data0}, pop, GOTO[WDw1],	c3;
	}


{
	WILP
}
{@WILP, alpha{pair}}
{Timing:	4 clicks, + 2 if L remap, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  data	|	|  v	|
						
  STK =		|  ~	|	|  data	|
	      -->	|  v	|	|  v	|
		|  u	|      -->	|  u	|	}

@WILP:	push, T ← Lbias, L0 ← L0.WritePopGo,	c1, opcode[126'b];
	STK ← TOS{data}, L1 ← L1w.PopDec,	c2;
	T ← alpha.left + T, L2 ← L2.WIxPTail,	c3;

	MAR ← Q ← [rhL,T + L],			c1;
	PC ← PC + PC16, BRANCH[$,LRemapA,1],	c2;
	TT ← MD, GOTO[WIxPTail],		c3;

WIxPTail:
	TT ← TT + alpha.right,			c1, at[L2.WIxPTail,10,LGRemapCaller];
	Noop,					c2;
	Noop,					c3;

	Map ← Q ← [rhMDS, TT],			c1;
	Xbus ← ib,				c2;
	Rx ← rhRx ← MD, XwdDisp, GOTO[WritePopGo],	c3;

WritePopGo:
	MAR ← [rhRx,Q + 0], DISP2[WPMapUD],	c1, at[L0.WritePopGo,10,WMapFixCaller];
WPMapUD:
	CALL[WMapFix] {will return to WritePopGo },	c2, at[0, 4, WPMapUD];
{db}	CALL[WMapFix] {WP fault},		c2, at[1, 4, WPMapUD];
	CALL[WMapFix] {Page fault},		c2, at[3, 4, WPMapUD];
{db}	MDR ← TOS{data}, PC ← PC + PC16, IBDisp, pop, GOTO[SLTail],	c2, at[2, 4, WPMapUD];

LRemapA:
	TT ← UvL, CALL[LGRemap] {will return to WIxPTail},	c3;


{
	WILPL
}
{@WILPL, alpha{pair}}
{Timing:	6 clicks, + 2 if L remap, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  data	|	|  v	|
						
  STK =		|  ~	|	|  data	|
	      -->	|  v	|	|  v	|
		|  u	|      -->	|  u	|	}

@WILPL:	push, T ← Lbias, L0 ← L0.WritePopGo,	c1, opcode[150'b];
	STK ← TOS, L1 ← L1.PopDec, GOTO[ILPLcom],	c2;

	Rx ← rhRx ← MD, XwdDisp,		c3, at[L0.WritePopGo,10,ILPthings];

	MAR ← [rhRx,Q + 0], DISP2[WPLMapUD],	c1;
WPLMapUD:
	CALL[WLMapFix] {will return to WritePopGo},	c2, at[0, 4, WPLMapUD];
{db}	CALL[WLMapFix] {WP fault},		c2, at[1, 4, WPLMapUD];
	CALL[WLMapFix] {Page fault},		c2, at[3, 4, WPLMapUD];
{db}	MDR ← TOS{data}, PC ← PC + PC16, IBDisp, pop, GOTO[SLTail],	c2, at[2, 4, WPLMapUD];

{
	WIGPL
}
{@WIGPL, alpha{pair}}
{Timing:	6 clicks, + 2 if L remap, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  data	|	|  v	|
						
  STK =		|  ~	|	|  data	|
	      -->	|  v	|	|  v	|
		|  u	|      -->	|  u	|	}


@WIGPL:	push, T ← Gbias, L0 ← L0.WritePopGo,	c1, opcode[152'b];
	STK ← TOS, L1 ← L1.PopDec, GOTO[IGPLcom],	c2;

{
	WXLP
}
{@WXLP, alpha{pair}}
{Timing:	5 clicks, + 2 if L remap, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  inx	|	|  v	|
						
  STK =		|  ~	|	|  inx	|
	      -->	|  data	|	|  data	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}


@WXLP:	T ← Lbias, push, L0 ← L0.WriteGo,	c1, opcode[123'b];
	STK ← TOS, pop, L1 ← L1w.NoFixes,	c2;
	T ← T + alpha.left, L2 ← L2.rxlp, GOTO[XLPcom],	c3;

	T ← STK, pop, L1 ← L1w.PushDec,		c2, at[L0.WriteGo,10,XLPthings];
	Rx ← rhRx ← MD, XwdDisp, GOTO[WriteGox],	c3;


{
	WXLPL
}
{@WXLPL, alpha{pair}}
{Timing:	6 clicks, + 2 if L remap, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  inx	|	|  v	|
						
  STK =		|  ~	|	|  inx	|
	      -->	|  data	|	|  data	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}

@WXLPL:	T ← Lbias, push, L0 ← L0.RedoLW,	c1, opcode[144'b];
	STK ← TOS, PC ← PC - PC16, L1 ← L1w.NoFixes,	c2; {XLPLcom increments PC}
	T ← T + alpha.left, pop, GOTO[XLPLcom],	c3;

	T ← STK, pop, L1 ← L1w.PushOnly,	c2, at[L0.RedoLW,10,XLPthings];
	Rx ← rhRx ← MD, XwdDisp, GOTO[RedoLW],	c3;


{
	WXGPL
}
{@WXGPL, alpha{pair}}
{Timing:	6 clicks, + 2 if L remap, + 2 if fix map flags}

{		entry:		exit:
							
  TOS =		|  inx	|	|  v	|
						
  STK =		|  ~	|	|  inx	|
	      -->	|  data	|	|  data	|
		|  v	|	|  v	|
		|  u	|      -->	|  u	|	}


@WXGPL:	T ← Gbias, push, L0 ← L0.RedoLW,	c1, opcode[146'b];
	STK ← TOS, PC ← PC - PC16, L1 ← L1w.NoFixes,	c2; {XLPLcom increments PC}
	T ← T + alpha.left, pop, GOTO[XGPLcom],	c3;

	{ E N D }