Google
 

Trailing-Edge - PDP-10 Archives - bb-bt99g-bb - ifgen.c05
There are 2 other files named ifgen.c05 in the archive. Click here to see a list.
 INS 22/1	;05C1
	;[1416] 68274 Generate warning if size of literal and data item not the same.
	;[1404] If LITTAB is expanded, update byte pointer to literal.
	;[1374] Check coll. seq. when generating high-values
	;[1353] If literal generated by call to LITD. too large, FERROR set to force 
	;		exit
	;[1351] STORE READ .. INTO OPERANDS IN A FIXED LOCATION - AVOID LINK FAILURES
	;[1317] FIX COBOL-74 COMPARE NUMERIC TO NON-NUMERIC ITEMS

 REP 3/21	;05C2
	IFGN9:	MOVEI	LN,EBASEB
 WIT
	IFGN9:				;[1416]
	IFN FT68274,<			;[1416]
		MOVEI	DW,E.765	;[1416] SET UP WARNING MESSAGE
		MOVE	TA,ESIZEA	;[1416] GET SIZE OF OPERATOR
		TSWT	FBNUM		;[1416] NUMERIC LITERAL ?
		CAMN	TA,ESIZEB	;[1416]   OR SIZE EQUAL ?
		SKIPA			;[1416] YES
		PUSHJ	PP,OPNWRN##	;[1416] NO, GENERATE WARNING
	>				;[1416]
		MOVEI	LN,EBASEB	;[1416]
 INS 44/28	;05C3
	IFN BIS,<			;[1317]
		MOVE	TD,EMODEA	;[1317] NO NEED TO BREAK DOWN THE SIZE
		CAME	TD,EMODEB	;[1317]  IF THE MODES ARE THE SAME
		JRST	IFDD3F		;[1317]
	IFN ANS74,<			;[1317]
		SKIPN	COLSEQ		;[1317]  AND NO SPECIAL COLLATING
	>  ;END IFN ANS74		;[1317]
		JRST	IFDD3B		;[1317]  SO USE THE WHOLE SIZE
	IFDD3F:				;[1317]
	>  ;END IFN BIS			;[1317]
 INS 50/28	;05C4
		PUSH	PP,TD		;[1317] SAVE TD FOR A SECOND
		IDIVI	TE,3770		;[1317] FIND OUT HOW MANY
		SKIPE	TD		;[1317]  PARTS LEFT
		ADDI	TE,1		;[1317] 
		MOVEM	TE,ECNTA	;[1317] SAVE PART COUNT
		POP	PP,TD		;[1317] RESTORE TD
 INS 54/28	;05C5
		HRROI	TE,-1		;[1317] DECREMENT NUMBER
		ADDM	TE,ECNTA	;[1317]  OF PARTS LEFT
 INS 16/33	;05C6
		HRRZ	TA,EBASEB	;[1404] SET UP ETABLB AGAIN
		PUSHJ	PP,LNKSET	;[1404]  INCASE THE TABLES EXPANDED
		HRRM	TA,EBYTEB	;[1404]
 INS 51/33	;05C7
		TSWF	FERROR		;[1353] LITERAL TOO LARGE
		POPJ	PP,		;[1353]
 REP 7/39	;05C8
		HRRZI	TC,2(TA)	;TC POINTS TO INTO ITEM
		HRRZI	TA,0(TA)	;TA POINTS TO RECORD ITEM
		MOVEM	TC,CUREOP	;SETUP CUREOP THE WAY MOVGN. LIKES
		PUSHJ	PP,MOVGN.	;GENERATE THE MOVE CODE
 WIT
		HRLI	TB,0(TA)	;[1351] MOVE HLDTAB ENTRY
		HRRI	TB,EINTO##	;[1351]  TO A FIXED LOCATION 
		MOVEI	TC,EINTO	;[1351]  BECAUSE TABLE EXPANSION
		ADDI	TC,OPNSIZ+OPNMAX;[1351]  IS CLOBBERING CUREOP'S PTR
		BLT	TB,-1(TC)	;[1351] 
		MOVEI	TA,EINTO	;[1351] TA POINTS TO RECORD ITEM
		MOVEI	TC,2(TA)	;[1351] TC POINTS TO INTO ITEM
		MOVEM	TC,CUREOP	;[1351] SETUP CUREOP THE WAY MOVGN. LIKES IT
	;[1351]	HRRZI	TC,2(TA)	;TC POINTS TO INTO ITEM
	;[1351]	HRRZI	TA,0(TA)	;TA POINTS TO RECORD ITEM
	;[1351]	MOVEM	TC,CUREOP	;SETUP CUREOP THE WAY MOVGN. LIKES
		PUSHJ	PP,MOVGN.	;GENERATE THE MOVE CODE
		SETZM	EINTO		;[1351] RESET EINTO
 INS 27/51	;05C9
	IFN ANS74,<
		SKIPL	TD,COLSEQ	;[1374] WAS ASCII OR EBCDIC COLL SEQ DECLARED?
		JRST	IFHIVA		;[1374] NO, CONT
		TRNE	TD,%AN.EB	;[1374] YES, WAS IT EBCDIC?
		MOVEI	TE,D9MODE	;[1374] YES, CHANGE MODE OF HIGH-VAL TO EBCDIC
	IFHIVA:				;[1374]
	>
 REP 3/69	;05C10
	ADDRS3:	MOVEI	TC,3
 WIT
	ADDRS3:	MOVEI	TC,4		;[1317] OFFSET BASE FOR JRSTS EQUALS
		IMUL	TC,ECNTA	;[1317]  NUMBER OF PIECES  LEFT TIMES 4
		TLNE	W1,NOTF		;[1317]  UNLESS THIS IS A "NOT"
		SETZ	TC,		;[1317]   THEN THE OFFSET BASE = 0
		PUSH	PP,TC		;[1317] SAVE THE OFFSET BASE
		ADDI	TC,3		;[1317] FIRST OFFSET
 REP 8/69	;05C11
		MOVEI	TC,2
 WIT
		POP	PP,TC		;[1317] RESTORE OFFSET BASE
		ADDI 	TC,2		;[1317] SECOND OFFSET BASE

 INS 13/69	;05C12
		SKIPE	ECNTA		;[1317] IF THIS ISN'T THE LAST PART
		POPJ	PP,		;[1317]  DON'T WANT THIRD JRST
 SUM 138607