:Title[LJUMP.mc, November 5, 1982 9:21 AM, Masinter]; knowrbase[LTEMP0]; top level; InsSet[LispInsSet, 1]; *-------------------------------------------------------------------- opJUMP: * 1 or 2 byte jump *-------------------------------------------------------------------- NextOpcode; set[dx, 0]; repeat[20, IFUjmp[add[200, dx], 1, ifuBR, 0, opJUMP, add[dx, 2]] set[dx, add[dx,1]]]; IFUjmp[260, 2, ifuBR, 0, opJUMP, 1]; * signed long jump *-------------------------------------------------------------------- opFJUMP: * jump if NIL and pop *-------------------------------------------------------------------- TSP_ (fetch_ TSP) - 1, flipMemBase; T_ Md, TSP_ (fetch_ TSP) - 1; LEFT_ (LEFT) + 1; pd_ T or Md; branch[.+2, alu#0], T_ Id - (PCX') - 1; NextOpcode; * take branch PCF_ T, branch[TL.NOP]; set[dx, 0]; repeat[20, IFUjmp[add[220, dx], 1, StackM2BR, 0, opFJUMP, add[dx, 2]] set[dx, add[dx,1]]]; IFUjmp[262, 2, StackM2BR, 0, opFJUMP, 1]; *-------------------------------------------------------------------- opTJUMP: * jump if not NIL and pop *-------------------------------------------------------------------- TSP_ (fetch_ TSP) - 1, flipMemBase; T_ Md, TSP_ (fetch_ TSP) - 1; LEFT_ (LEFT) + 1; pd_ T or Md; branch[.+2, alu=0], T_ Id - (PCX') - 1; NextOpcode; * take branch PCF_ T, branch[TL.NOP]; set[dx, 0]; repeat[20, IFUjmp[add[240, dx], 1, StackM2BR, 0, opTJUMP, add[dx, 2]] set[dx, add[dx,1]]]; IFUjmp[263, 2, StackM2BR, 0, opTJUMP, 1]; *-------------------------------------------------------------------- opNFJUMPX: * jump if NIL, pop if no jump *-------------------------------------------------------------------- T_ (fetch_ TSP) - 1, flipMemBase; LTEMP0_ Md, fetch_ T; LEFT_ (LEFT) + 1; pd_ (LTEMP0) or Md; branch[.+2, alu#0], T_ Id - (PCX') - 1; LEFT_ (LEFT) - 1, NextOpcode; * take branch PCF_ T; TSP_ (TSP) - (2c); NextOpcode; IFUjmp[264, 2, StackM2BR, 0, opNFJUMPX, 1]; *-------------------------------------------------------------------- opNTJUMPX: * jump if not NIL and pop *-------------------------------------------------------------------- T_ (fetch_ TSP) - 1, flipMemBase; LTEMP0_ Md, fetch_ T; LEFT_ (LEFT) + 1; pd_ (LTEMP0) or Md; branch[.+2, alu=0], T_ Id - (PCX') - 1; LEFT_ (LEFT) - 1, NextOpcode; * take branch PCF_ T, branch[TL.DECTSP2]; IFUjmp[265, 2, StackM2BR, 0, opNTJUMPX, 1]; *-------------------------------------------------------------------- opJUMPXX: * Long jump, relative to byte 0 *-------------------------------------------------------------------- T_ Id; T_ lsh [T, 10]; T_ Id + T; T_ T - (PCX') - 1; PCF_ T, branch[TL.NOP]; IFUpause[261, 3, ifuBR, 0, opJUMPXX, noNData, 0, 0]; (635)\f8 69f0 4f8 631f0 4f8 3f0 4f8 527f0 4f8 3f0 4f8 496f0 4f8 18f0 4f8 3f0 4f8 14f0 4f8 52f0 4f8 3f0 4f8 370f0 4f8 3f0 4f8 14f0 4f8 52f0 4f8 3f0 4f8