{ 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}