File:  [MW Coherent from dump] / coherent / b / bin / c / n1 / i8086 / tables / add.t
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Wed May 29 04:56:37 2019 UTC (7 years, 2 months ago) by root
Branches: MarkWilliams, MAIN
CVS tags: relic, HEAD
coherent

/////////
/
/ Addition.
/ Check for +1 (inc) and +2 (inc, inc; thanks to Mac).
/ Handle LARGE model addition of integers and pointers,
/ which are OFFSET adjustments only.
/
/////////

ADD:
%	PEFFECT|PRVALUE|PSREL|P_SLT
	WORD		ANYR	ANYR	*	TEMP
		TREG		WORD
		1|MMX		*
%	PLVALUE|P_SLT
	WORD		ANYL	ANYL	*	TEMP
		TREG		WORD
		1|MMX		*
			[ZINC]	[R]
		[IFR]	[REL0]	[LAB]

#ifndef ONLYSMALL
%	PEFFECT|PRVALUE|P_SLT
	LPTX		ANYR	ANYR	*	TEMP
		TREG		LPTX
		1|MMX		*
%	PLVALUE|P_SLT
	LPTX		ANYL	ANYL	*	TEMP
		TREG		LPTX
		1|MMX		*
			[ZINC]	[LO R]
#endif

%	PEFFECT|PRVALUE|PSREL|P_SLT
	WORD		ANYR	ANYR	*	TEMP
		TREG		WORD
		2|MMX		*
%	PLVALUE|P_SLT
	WORD		ANYL	ANYL	*	TEMP
		TREG		WORD
		2|MMX		*
			[ZINC]	[R]
			[ZINC]	[R]
		[IFR]	[REL0]	[LAB]

#ifndef ONLYSMALL
%	PEFFECT|PRVALUE|P_SLT
	LPTX		ANYR	ANYR	*	TEMP
		TREG		LPTX
		2|MMX		*
%	PLVALUE|P_SLT
	LPTX		ANYL	ANYL	*	TEMP
		TREG		LPTX
		2|MMX		*
			[ZINC]	[LO R]
			[ZINC]	[LO R]
#endif

%	PEFFECT|PRVALUE|PSREL|P_SLT
	WORD		ANYR	ANYR	*	TEMP
		TREG		WORD
		ADR|IMM		WORD
%	PLVALUE|P_SLT
	WORD		ANYL	ANYL	*	TEMP
		TREG		WORD
		ADR|IMM		WORD
			[ZADD]	[R],[AR]
		[IFR]	[REL0]	[LAB]

#ifndef ONLYSMALL
%	PEFFECT|PRVALUE|P_SLT
	LPTX		ANYR	ANYR	*	TEMP
		TREG		LPTX
		ADR|IMM		WORD
%	PLVALUE|P_SLT
	LPTX		ANYL	ANYL	*	TEMP
		TREG		LPTX
		ADR|IMM		WORD
			[ZADD]	[LO R],[AR]
#endif

/////////
/
/ Index like contexts.
/ The hard tree is an integer and the
/ result is a pointer. There are a lot of
/ cases here, mainly to make sure the
/ correct segment base gets moved over to
/ the result.
/
/////////

#ifndef ONLYSMALL
%	PEFFECT|PRVALUE
	LPTX		DXAX	AX	*	TEMP
		TREG		WORD
		ICN|MMX		LPTX
			[ZADD]	[LO R],[AR]
			[ZSUB]	[HI R],[HI R]

%	PLVALUE
	LPTX		ANYL	LOTEMP	AX	TEMP
		TREG		WORD
		ICN|MMX		LPTX
			[ZADD]	[LO R],[AR]
			[ZSUB]	[REGNO AX],[REGNO AX]
			[ZMOV]	[HI R],[REGNO AX]

%	PEFFECT|PRVALUE
	LPTX		DXAX	AX	*	TEMP
		TREG		WORD
		LCN|MMX		LPTX
			[ZADD]	[LO R],[LO AR]
			[ZSUB]	[HI R],[HI R]

%	PLVALUE
	LPTX		ANYL	LOTEMP	AX	TEMP
		TREG		WORD
		LCN|MMX		LPTX
			[ZADD]	[LO R],[LO AR]
			[ZMOV]	[REGNO AX],[HI AR]
			[ZMOV]	[HI R],[REGNO AX]

%	PEFFECT|PRVALUE
	LPTX		DXAX	AX	*	TEMP
		TREG		WORD
		ACS|MMX		LPTX
			[ZADD]	[LO R],[AR]
			[ZMOV]	[HI R],[REGNO CS]

%	PEFFECT|PRVALUE
	LPTX		DXAX	AX	*	TEMP
		TREG		WORD
		ADS|MMX		LPTX
			[ZADD]	[LO R],[AR]
			[ZMOV]	[HI R],[REGNO DS]

%	PLVALUE
	LPTX		ANYL	LOTEMP	*	TEMP
		TREG		WORD
		ACS|MMX		LPTX
			[ZADD]	[LO R],[AR]
			[ZPUSH]	[REGNO CS]
			[ZPOP]	[HI R]

%	PLVALUE
	LPTX		ANYL	LOTEMP	*	TEMP
		TREG		WORD
		ADS|MMX		LPTX
			[ZADD]	[LO R],[AR]
			[ZPUSH]	[REGNO DS]
			[ZPOP]	[HI R]

%	PEFFECT|PRVALUE
	LPTX		DXAX	AX	*	DXAX
		TREG		WORD
		REG|MMX		LPTX
			[ZADD]	[LO R],[LO AR]
			[ZMOV]	[HI R],[HI AR]

%	PLVALUE
	LPTX		ANYL	LOTEMP	*	TEMP
		TREG		WORD
		REG|MMX		LPTX
			[ZADD]	[LO R],[LO AR]
			[ZPUSH]	[HI AR]
			[ZPOP]	[HI R]

%	PEFFECT|PRVALUE
	LPTX		DXAX	AX	*	DXAX
		TREG		WORD
		ADR		LPTX
%	PLVALUE
	LPTX		ANYL	LOTEMP	*	TEMP
		TREG		WORD
		ADR		LPTX
			[ZADD]	[LO R],[LO AR]
			[ZMOV]	[HI R],[HI AR]
#endif

%	PEFFECT|PRVALUE|PGE|PLT|P_SLT
	LONG		DXAX	DXAX	*	DXAX
		TREG		LONG
		ADR|IMM		LONG
			[ZADD]	[LO R],[LO AR]
			[ZADC]	[HI R],[HI AR]
		[IFR]	[REL1]	[LAB]

#ifndef ONLYSMALL
%	PEFFECT|PRVALUE|P_SLT
	LPTX		ANYR	ANYR	*	TEMP
		TREG		LPTX
		ADR|IMM		LONG
%	PLVALUE|P_SLT
	LPTX		ANYL	ANYL	*	TEMP
		TREG		LPTX
		ADR|IMM		LONG
			[ZADD]	[LO R],[LO AR]

%	PEFFECT|PRVALUE
	LPTX		DXAX	DXAX	*	DXAX
		TREG		LONG
		ADR|IMM		LPTX
%	PLVALUE
	LPTX		ESAX	DXAX	*	DXAX
		TREG		LONG
		ADR|IMM		LPTX
			[ZADD]	[LO R],[LO AR]
			[ZMOV]	[HI R],[HI AR]
#endif

/////////
/
/ These special table entries make pushing offsts into structures and
/ arrays more efficient. In particular, they improve the code for some of
/ the standard I/O macros, when aimed at constant streams (like the stdin,
/ stdout and stder streams).
/
/////////

#ifndef ONLYSMALL
%	PFNARG
	LPTX		AX	*	*	NONE
		ADR		LPTX
		IMM|MMX		WORD
			[ZPUSH]	[HI AL]
			[ZMOV]	[R],[LO AL]
			[ZADD]	[R],[AR]
			[ZPUSH]	[R]

%	PFNARG
	LPTX		AX	*	*	NONE
		IMM|MMX		WORD
		ADR		LPTX
			[ZPUSH]	[HI AR]
			[ZMOV]	[R],[LO AR]
			[ZADD]	[R],[AL]
			[ZPUSH]	[R]
#endif

////////
/
/ Floating point, using the numeric
/ data coprocessor (8087).
/
////////

#ifdef NDPDEF
%	PRVALUE|P_SLT
	FF32|FF64	FPAC	FPAC	*	FPAC
		TREG		FF64
		ADR		FS16
			[ZFADDI] [AR]

%	PRVALUE|P_SLT
	FF32|FF64	FPAC	FPAC	*	FPAC
		TREG		FF64
		ADR		FS32
			[ZFADDL] [AR]

%	PRVALUE|P_SLT
	FF32|FF64		FPAC	FPAC	*	FPAC
		TREG		FF64
		ADR		FF32
			[ZFADDF] [AR]

%	PRVALUE|P_SLT
	FF32|FF64	FPAC	FPAC	*	FPAC
		TREG		FF64
		ADR		FF64
			[ZFADDD] [AR]
#endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.