{ File : EQL.mc Author : Gwan Santosa Date : 8-Nov-85 15:50:57 EQUAL is opcode 364(octal), EQL is opcode 72(octal). They operate identically: return T if args are EQ. Otherwise, return NIL if either arg is a symbol (high word 0) or both args are smallp Otherwise, call UFN } @EQLOP: MAR _ [rhS, S - 1], GOTO[EQMG0], c1, opcode[72'b]; @EQAOP: MAR _ [rhS, S - 1], GOTO[EQMG0], c1, opcode[364'b]; EQMG0: CANCELBR[$, 2], c2; TT _ MD, c3; MAR _ [rhS, S + 0], c1; Ybus _ TOSH xor TT, ZeroBr, c2; {Compare high words of args} Rx _ MD, BRANCH[NEQ1, $], c3; Ybus _ TOS xor Rx, ZeroBr, c1; {Compare low word of args} BRANCH[NEQ2, $], c2; TOS _ KTval, GOTO[EQFN2], c3; {If EQ return T} NEQ2: Ybus _ TOSH xor smallpl, ZeroBr, c3; {Otherwise check if smallpl} Ybus _ TOSH, ZeroBr, BRANCH[ANSP0, ASP0], c1; {Check if an atom} ASP0: TOSH _ 0, CANCELBR[$], c2; {If not EQ, but smallpl, return NIL} TOS _ 0, c3; S _ S - 2, GOTO[IB.pc1], c1; NEQ1: Ybus _ TOSH, ZeroBr, c1; {Check if arg is an atom} ANSP0: Ybus _ TT, ZeroBr, BRANCH[ANAT0, AAT0], c2; {Check if arg is an atom} ANAT0: BRANCH[ANAT1, AAT1], c3; AAT0: CANCELBR[EQFN1], c3; ANAT1: GOTO[ufnX2], c1; AAT1: TOS _ 0, GOTO[EQFN3], c1; EQFN2: GOTO[EQFN3], c1; EQFN1: TOS _ 0, c1; EQFN3: TOSH _ 0, c2; EQFN4: S _ S - 2, c3; GOTO[IB.pc1], c1; {Go to exit point for Bank 1}