;;;-*- Mode:LISP; Package:NC; Base:10; Readtable:CL -*- (defun li:list-length (list) (do ((n 0 (+ n 2)) (y list (cddr y)) (x list (cdr x))) (()) (when (atom y) (return n)) (when (atom (cdr y)) (return (1+ n))) (when (and (eq x y) (plusp n)) (return nil)))) LIST-LENGTH_16 (MOVEI A3 (QUOTE 0) BOXED) (MOVE A2 A0) (MOVE A1 A0) P_18 DO1051_25 (ALU-FIELD FIELD-PASS R2 A2 (REGISTER *ZERO* 4 0) (BYTE 6 -26) PW-II DT-NONE BOXED-RIGHT) (ALU L-R NOP R2 (REGISTER *TWO* 4 3) BW-24 DT-BOTH-FIXNUM) (TEST BR-NOT-EQUAL) (BRANCH C_37 NIL) C_34 (RETURN A3) C_37 (OPEN-CALL (CDR 1) R2 (O0 A2)) (ALU-FIELD FIELD-PASS R2 R2 (REGISTER *ZERO* 4 0) (BYTE 6 -26) PW-II DT-NONE BOXED-RIGHT) (ALU L-R NOP R2 (REGISTER *TWO* 4 3) BW-24 DT-BOTH-FIXNUM) (TEST BR-NOT-EQUAL) (BRANCH C_47 NIL) C_44 (ALU R+1 RETURN IGNORE A3 BW-24 DT-BOTH-FIXNUM-WITH-OVERFLOW CH-RETURN NEXT-PC-RETURN) C_47 L_119 (ALU L-R NOP A1 A2 BW-32 DT-NONE) (TEST BR-NOT-EQUAL) (BRANCH C_62 NIL) C_65 (MOVE NOP A3 BW-24 DT-BOTH-FIXNUM) (TEST BR-NOT-POSITIVE) (BRANCH C_62 NIL) C_59 (RETURNI (QUOTE NIL)) C_62 (ALU R+2 A3 IGNORE A3 BW-24 DT-BOTH-FIXNUM-WITH-OVERFLOW) (OPEN-CALL (CDDR 1) A2 (O0 A2)) (OPEN-CALL (CDR 1) A1 (O0 A1)) (UNCONDITIONAL-BRANCH DO1051_25 NIL) ;---------------------------------------------------- (defun li:length (seq) ; (cond ((listp seq) (do ((l seq (cdr l)) (i 0 (1+ i))) ((atom l) i))) LENGTH_13 (MOVE A2 A0) (MOVEI A1 (QUOTE 0) BOXED) P_15 DO1055_22 (ALU-FIELD FIELD-PASS R2 A2 (REGISTER *ZERO* 4 0) (BYTE 6 -26) PW-II DT-NONE BOXED-RIGHT) (ALU L-R NOP R2 (REGISTER *TWO* 4 3) BW-24 DT-BOTH-FIXNUM) (TEST BR-NOT-EQUAL) (BRANCH C_28 NIL) C_25 (RETURN A1) C_28 (OPEN-CALL (CDR 1) A2 (O0 A2)) (UNCONDITIONAL-BRANCH DO1055_22 (ALU R+1 A1 IGNORE A1 BW-24 DT-BOTH-FIXNUM-WITH-OVERFLOW)) ;--------------------------------------------------------- ;;; DESTRU -- Destructive operation benchmark (defun destructive (n m) (let ((l (do ((i 10. (1- i)) (a () (push () a))) ((= i 0) a)))) (do ((i n (1- i))) ((= i 0)) (cond ((null (car l)) (do ((l l (cdr l))) ((null l)) (or (car l) (rplaca l (cons () ()))) (nconc (car l) (do ((j m (1- j)) (a () (push () a))) ((= j 0) a))))) (t (do ((l1 l (cdr l1)) (l2 (cdr l) (cdr l2))) ((null l2)) (rplacd (do ((j (floor (length (car l2)) 2) (1- j)) (a (car l2) (cdr a))) ((zerop j) a) (rplaca a i)) (let ((n (floor (length (car l1)) 2))) (cond ((= n 0) (rplaca l1 ()) (car l1)) (t (do ((j n (1- j)) (a (car l1) (cdr a))) ((= j 1) (prog1 (cdr a) (rplacd a ()))) (rplaca a i)))))))))))) Simplified tree: 10067246 ((T_39 NIL C_38) ($*DEFINE 1 ^B_299 DESTRUCTIVE ^P_40)) NIL 10090374 ((B_299 IGNORE_298) (C_38 0 (QUOTE T))) NIL 10067381 ((P_40 NIL K_0 N_1 M_2) ($Y 1 ^Y_272)) NIL 10087851 ((Y_272 NIL C_270 DO8757_33) (C_270 0 ^C_271 ^T_274)) NIL 10087809 ((C_271 NIL NIL) ($OPEN 1 ^C_294 (QUOTE #{NC::CALL-NODE (DO8757_33 1 ^C_296 (QUOTE 10) (QUOTE NIL)) 10089866}))) NIL 10090008 ((C_294) (DO8757_33 1 ^C_296 (QUOTE 10) (QUOTE NIL))) NIL 10110887 ((C_296 NIL L_295) ($Y 1 ^Y_44)) NIL 10110944 ((Y_44 NIL C_42 DO8749_5) (C_42 0 ^C_43 ^T_46)) NIL 10111041 ((C_43 NIL NIL) ($OPEN 1 ^C_269 (QUOTE #{NC::CALL-NODE (DO8749_5 1 K_0 N_1) 10111113}))) NIL 10111096 ((C_269) (DO8749_5 1 K_0 N_1)) NIL 10111378 ((T_46 NIL C_45) (C_45 0 ^DO8749_47)) NIL 10111344 ((DO8749_47 NIL K_6 I_7) ($CONDITIONAL 2 ^C_50 ^C_51 $= I_7 (QUOTE 0))) NIL 10128437 ((C_50 NIL) (K_6 0 (QUOTE NIL))) NIL 10111310 ((C_51 NIL) (^P_53 1 ^B_265)) NIL 10111763 ((P_53 NIL J_52) ($OPEN 1 ^C_254 (QUOTE #{NC::CALL-NODE (CAR 1 ^C_256 L_295) 10111712}))) NIL 10111729 ((C_254) (CAR 1 ^C_256 L_295)) NIL 10111695 ((C_256 NIL V_255) ($CONDITIONAL 2 ^C_54 ^C_126 $EQ V_255 (QUOTE NIL))) NIL 10111661 ((C_54 NIL) ($Y 1 ^Y_57)) NIL 10111627 ((Y_57 NIL C_55 DO8750_8) (C_55 0 ^C_56 ^T_59)) NIL 10111593 ((C_56 NIL NIL) ($OPEN 1 ^C_125 (QUOTE #{NC::CALL-NODE (DO8750_8 1 J_52 L_295) 10111542}))) NIL 10111559 ((C_125) (DO8750_8 1 J_52 L_295)) NIL 10120094 ((T_59 NIL C_58) (C_58 0 ^DO8750_60)) NIL 10119939 ((DO8750_60 NIL K_9 L_10) ($CONDITIONAL 2 ^C_63 ^C_64 $EQ L_10 (QUOTE NIL))) NIL 10120256 ((C_63 NIL) (K_9 0 (QUOTE NIL))) NIL 10120293 ((C_64 NIL) ($OPEN 1 ^C_80 (QUOTE #{NC::CALL-NODE (^P_65 1 ^B_114) 10123944}))) NIL 10131207 ((C_80) ($OPEN 1 ^C_77 (QUOTE #{NC::CALL-NODE (CAR 1 ^C_79 L_10) 10120592}))) NIL 10120609 ((C_77) (CAR 1 ^C_79 L_10)) NIL 10115436 ((C_79 NIL G8751_78) (^P_65 1 ^B_114)) NIL 10123964 ((P_65 NIL K_11) ($CONDITIONAL 2 ^C_68 ^C_69 $TEST $TRUE? G8751_78)) NIL 10124079 ((C_68 NIL) (K_11 0 G8751_78)) NIL 10120830 ((C_69 NIL) ($OPEN 1 ^C_75 (QUOTE #{NC::CALL-NODE (RPLACA 1 K_11 L_10 V_73) 10120686}))) NIL 10131335 ((C_75) ($OPEN 1 ^C_72 (QUOTE #{NC::CALL-NODE (CONS 1 ^C_74 (QUOTE NIL) (QUOTE NIL)) 10120720}))) NIL 10131301 ((C_72) (CONS 1 ^C_74 (QUOTE NIL) (QUOTE NIL))) NIL 10120703 ((C_74 NIL V_73) (RPLACA 1 K_11 L_10 V_73)) NIL 10124378 ((B_114 IGNORE_113) ($OPEN 1 ^C_112 (QUOTE #{NC::CALL-NODE (NCONC 1 ^B_121 V_108 V_110) 10119518}))) NIL 10125321 ((C_112) ($Y 1 ^Y_85)) NIL 10125287 ((Y_85 NIL C_83 DO8752_13) (C_83 0 ^C_84 ^T_87)) NIL 10125624 ((C_84 NIL NIL) ($OPEN 1 ^C_107 (QUOTE #{NC::CALL-NODE (DO8752_13 1 ^C_111 M_2 (QUOTE NIL)) 10125566}))) NIL 10125679 ((C_107) (DO8752_13 1 ^C_111 M_2 (QUOTE NIL))) NIL 10130500 ((C_111 NIL V_110) ($OPEN 1 ^C_82 (QUOTE #{NC::CALL-NODE (CAR 1 ^C_109 L_10) 10120498}))) NIL 10120515 ((C_82) (CAR 1 ^C_109 L_10)) NIL 10119535 ((C_109 NIL V_108) (NCONC 1 ^B_121 V_108 V_110)) NIL 10119501 ((B_121 IGNORE_120) ($OPEN 1 ^C_119 (QUOTE #{NC::CALL-NODE (DO8750_8 1 K_9 V_117) 10119653}))) NIL 10119467 ((C_119) ($OPEN 1 ^C_116 (QUOTE #{NC::CALL-NODE (CDR 1 ^C_118 L_10) 10119416}))) NIL 10119433 ((C_116) (CDR 1 ^C_118 L_10)) NIL 10119670 ((C_118 NIL V_117) (DO8750_8 1 K_9 V_117)) NIL 10125253 ((T_87 NIL C_86) (C_86 0 ^DO8752_88)) NIL 10125219 ((DO8752_88 NIL K_14 J_15 A_16) ($CONDITIONAL 2 ^C_91 ^C_92 $= J_15 (QUOTE 0))) NIL 10125881 ((C_91 NIL) (K_14 0 A_16)) NIL 10125185 ((C_92 NIL) ($OPEN 1 ^C_101 (QUOTE #{NC::CALL-NODE (DO8752_13 1 K_14 V_97 V_99) 10125603}))) NIL 10125151 ((C_101) ($OPEN 1 ^C_94 (QUOTE #{NC::CALL-NODE (CONS 1 ^C_96 (QUOTE NIL) A_16) 10124946}))) NIL 10124963 ((C_94) (CONS 1 ^C_96 (QUOTE NIL) A_16)) NIL 10126215 ((C_96 NIL V_95) ($SETQ-LEXICAL 1 ^C_100 A_16 V_95)) NIL 10126181 ((C_100 NIL V_99) ($1- 1 ^C_98 J_15)) NIL 10126301 ((C_98 NIL V_97) (DO8752_13 1 K_14 V_97 V_99)) NIL 10112029 ((C_126 NIL) ($Y 1 ^Y_129)) NIL 10111995 ((Y_129 NIL C_127 DO8753_17) (C_127 0 ^C_128 ^T_131)) NIL 10111961 ((C_128 NIL NIL) ($OPEN 1 ^C_253 (QUOTE #{NC::CALL-NODE (DO8753_17 1 J_52 L_295 V_251) 10111842}))) NIL 10111927 ((C_253) ($OPEN 1 ^C_250 (QUOTE #{NC::CALL-NODE (CDR 1 ^C_252 L_295) 10111876}))) NIL 10111893 ((C_250) (CDR 1 ^C_252 L_295)) NIL 10111859 ((C_252 NIL V_251) (DO8753_17 1 J_52 L_295 V_251)) NIL 10120115 ((T_131 NIL C_130) (C_130 0 ^DO8753_132)) NIL 10120990 ((DO8753_132 NIL K_18 L1_19 L2_20) ($CONDITIONAL 2 ^C_135 ^C_136 $EQ L2_20 (QUOTE NIL))) NIL 10121207 ((C_135 NIL) (K_18 0 (QUOTE NIL))) NIL 10121371 ((C_136 NIL) ($OPEN 1 ^C_237 (QUOTE #{NC::CALL-NODE (RPLACD 1 ^B_246 V_233 V_235) 10112415}))) NIL 10125541 ((C_237) ($OPEN 1 ^C_232 (QUOTE #{NC::CALL-NODE (^P_176 1 ^C_236) 10116758}))) NIL 10116922 ((C_232) ($OPEN 1 ^C_229 (QUOTE #{NC::CALL-NODE (FLOOR 1 ^C_231 V_227 (QUOTE 2)) 10116435}))) NIL 10116654 ((C_229) ($OPEN 1 ^C_226 (QUOTE #{NC::CALL-NODE (LENGTH 1 ^C_228 V_224) 10116507}))) NIL 10125014 ((C_226) ($OPEN 1 ^C_223 (QUOTE #{NC::CALL-NODE (CAR 1 ^C_225 L1_19) 10116562}))) NIL 10124980 ((C_223) (CAR 1 ^C_225 L1_19)) NIL 10116545 ((C_225 NIL V_224) (LENGTH 1 ^C_228 V_224)) NIL 10116452 ((C_228 NIL V_227) (FLOOR 1 ^C_231 V_227 (QUOTE 2))) NIL 10116741 ((C_231 NIL N_230) (^P_176 1 ^C_236)) NIL 10125521 ((P_176 NIL K_25) ($CONDITIONAL 2 ^C_179 ^C_184 $= N_230 (QUOTE 0))) NIL 10122285 ((C_179 NIL) ($OPEN 1 ^C_180 (QUOTE #{NC::CALL-NODE (RPLACA 1 ^B_183 L1_19 (QUOTE NIL)) 10122234}))) NIL 10122251 ((C_180) (RPLACA 1 ^B_183 L1_19 (QUOTE NIL))) NIL 10122087 ((B_183 IGNORE_182) ($OPEN 1 ^C_181 (QUOTE #{NC::CALL-NODE (CAR 1 K_25 L1_19) 10122015}))) NIL 10122032 ((C_181) (CAR 1 K_25 L1_19)) NIL 10126580 ((C_184 NIL) ($Y 1 ^Y_187)) NIL 10126511 ((Y_187 NIL C_185 DO8755_27) (C_185 0 ^C_186 ^T_189)) NIL 10126694 ((C_186 NIL NIL) ($OPEN 1 ^C_219 (QUOTE #{NC::CALL-NODE (DO8755_27 1 K_25 N_230 V_217) 10121976}))) NIL 10121897 ((C_219) ($OPEN 1 ^C_216 (QUOTE #{NC::CALL-NODE (CAR 1 ^C_218 L1_19) 10121846}))) NIL 10121863 ((C_216) (CAR 1 ^C_218 L1_19)) NIL 10121959 ((C_218 NIL V_217) (DO8755_27 1 K_25 N_230 V_217)) NIL 10126711 ((T_189 NIL C_188) (C_188 0 ^DO8755_190)) NIL 10117595 ((DO8755_190 NIL K_28 J_29 A_30) ($CONDITIONAL 2 ^C_193 ^C_202 $= J_29 (QUOTE 1))) NIL 10127401 ((C_193 NIL) ($OPEN 1 ^C_198 (QUOTE #{NC::CALL-NODE (CDR 1 ^C_200 A_30) 10117979}))) NIL 10117996 ((C_198) (CDR 1 ^C_200 A_30)) NIL 10118053 ((C_200 NIL G8756_199) ($OPEN 1 ^C_195 (QUOTE #{NC::CALL-NODE (RPLACD 1 ^B_197 A_30 (QUOTE NIL)) 10118090}))) NIL 10118107 ((C_195) (RPLACD 1 ^B_197 A_30 (QUOTE NIL))) NIL 10118165 ((B_197 IGNORE_196) (K_28 0 G8756_199)) NIL 10122451 ((C_202 NIL) ($OPEN 1 ^C_203 (QUOTE #{NC::CALL-NODE (RPLACA 1 ^B_212 A_30 I_7) 10116247}))) NIL 10116264 ((C_203) (RPLACA 1 ^B_212 A_30 I_7)) NIL 10117143 ((B_212 IGNORE_211) ($OPEN 1 ^C_210 (QUOTE #{NC::CALL-NODE (DO8755_27 1 K_28 V_206 V_208) 10117239}))) NIL 10117109 ((C_210) ($OPEN 1 ^C_205 (QUOTE #{NC::CALL-NODE (CDR 1 ^C_209 A_30) 10117058}))) NIL 10117075 ((C_205) (CDR 1 ^C_209 A_30)) NIL 10117505 ((C_209 NIL V_208) ($1- 1 ^C_207 J_29)) NIL 10117256 ((C_207 NIL V_206) (DO8755_27 1 K_28 V_206 V_208)) NIL 10128798 ((C_236 NIL V_235) ($Y 1 ^Y_140)) NIL 10128707 ((Y_140 NIL C_138 DO8754_21) (C_138 0 ^C_139 ^T_142)) NIL 10122110 ((C_139 NIL NIL) ($OPEN 1 ^C_175 (QUOTE #{NC::CALL-NODE (DO8754_21 1 ^C_234 V_173 V_171) 10112449}))) NIL 10112814 ((C_175) ($OPEN 1 ^C_169 (QUOTE #{NC::CALL-NODE (FLOOR 1 ^C_174 V_167 (QUOTE 2)) 10112551}))) NIL 10112778 ((C_169) ($OPEN 1 ^C_166 (QUOTE #{NC::CALL-NODE (LENGTH 1 ^C_168 V_164) 10112602}))) NIL 10112704 ((C_166) ($OPEN 1 ^C_163 (QUOTE #{NC::CALL-NODE (CAR 1 ^C_165 L2_20) 10112653}))) NIL 10112670 ((C_163) (CAR 1 ^C_165 L2_20)) NIL 10112636 ((C_165 NIL V_164) (LENGTH 1 ^C_168 V_164)) NIL 10112585 ((C_168 NIL V_167) (FLOOR 1 ^C_174 V_167 (QUOTE 2))) NIL 10112534 ((C_174 NIL V_173) ($OPEN 1 ^C_170 (QUOTE #{NC::CALL-NODE (CAR 1 ^C_172 L2_20) 10112483}))) NIL 10112500 ((C_170) (CAR 1 ^C_172 L2_20)) NIL 10112466 ((C_172 NIL V_171) (DO8754_21 1 ^C_234 V_173 V_171)) NIL 10112432 ((C_234 NIL V_233) (RPLACD 1 ^B_246 V_233 V_235)) NIL 10112398 ((B_246 IGNORE_245) ($OPEN 1 ^C_244 (QUOTE #{NC::CALL-NODE (DO8753_17 1 K_18 V_242 V_240) 10112211}))) NIL 10112364 ((C_244) ($OPEN 1 ^C_238 (QUOTE #{NC::CALL-NODE (CDR 1 ^C_243 L1_19) 10112313}))) NIL 10112330 ((C_238) (CDR 1 ^C_243 L1_19)) NIL 10112296 ((C_243 NIL V_242) ($OPEN 1 ^C_239 (QUOTE #{NC::CALL-NODE (CDR 1 ^C_241 L2_20) 10112245}))) NIL 10112262 ((C_239) (CDR 1 ^C_241 L2_20)) NIL 10112228 ((C_241 NIL V_240) (DO8753_17 1 K_18 V_242 V_240)) NIL 10128917 ((T_142 NIL C_141) (C_141 0 ^DO8754_143)) NIL 10118884 ((DO8754_143 NIL K_22 J_23 A_24) ($CONDITIONAL 2 ^C_146 ^C_147 $= J_23 (QUOTE 0))) NIL 10119188 ((C_146 NIL) (K_22 0 A_24)) NIL 10128550 ((C_147 NIL) ($OPEN 1 ^C_148 (QUOTE #{NC::CALL-NODE (RPLACA 1 ^B_157 A_24 I_7) 10118434}))) NIL 10118460 ((C_148) (RPLACA 1 ^B_157 A_24 I_7)) NIL 10118382 ((B_157 IGNORE_156) ($OPEN 1 ^C_155 (QUOTE #{NC::CALL-NODE (DO8754_21 1 K_22 V_151 V_153) 10118578}))) NIL 10118289 ((C_155) ($OPEN 1 ^C_150 (QUOTE #{NC::CALL-NODE (CDR 1 ^C_154 A_24) 10118221}))) NIL 10118238 ((C_150) (CDR 1 ^C_154 A_24)) NIL 10118700 ((C_154 NIL V_153) ($1- 1 ^C_152 J_23)) NIL 10118595 ((C_152 NIL V_151) (DO8754_21 1 K_22 V_151 V_153)) NIL 10111276 ((B_265 IGNORE_264) ($OPEN 1 ^C_263 (QUOTE #{NC::CALL-NODE (DO8749_5 1 K_6 V_261) 10111191}))) NIL 10111242 ((C_263) ($1- 1 ^C_262 I_7)) NIL 10111208 ((C_262 NIL V_261) (DO8749_5 1 K_6 V_261)) NIL 10110451 ((T_274 NIL C_273) (C_273 0 ^DO8757_275)) NIL 10110526 ((DO8757_275 NIL K_34 I_35 A_36) ($CONDITIONAL 2 ^C_278 ^C_279 $= I_35 (QUOTE 0))) NIL 10110584 ((C_278 NIL) (K_34 0 A_36)) NIL 10110865 ((C_279 NIL) ($OPEN 1 ^C_288 (QUOTE #{NC::CALL-NODE (DO8757_33 1 K_34 V_284 V_286) 10110678}))) NIL 10110831 ((C_288) ($OPEN 1 ^C_281 (QUOTE #{NC::CALL-NODE (CONS 1 ^C_283 (QUOTE NIL) A_36) 10110780}))) NIL 10110797 ((C_281) (CONS 1 ^C_283 (QUOTE NIL) A_36)) NIL 10110763 ((C_283 NIL V_282) ($SETQ-LEXICAL 1 ^C_287 A_36 V_282)) NIL 10110729 ((C_287 NIL V_286) ($1- 1 ^C_285 I_35)) NIL 10110695 ((C_285 NIL V_284) (DO8757_33 1 K_34 V_284 V_286)) NIL Register preference classes: (A* V_286 V_282 L_295 A_36) (* V_284 I_35) (A* V_153 V_233 A_24 V_171) (* V_151 J_23 V_173) (16 V_167) (16 V_164) (IGNORE DO8869_21) (A* G8871_199) (A* V_208 A_30 V_217) (IGNORE DO8870_27) (IGNORE K_25) (* V_206 J_29) (* N_230) (16 V_227) (16 V_224) (A* V_240 L2_20 V_251) (IGNORE DO8868_17) (A* V_99 V_95 V_110 A_16) (* V_97 J_15) (16 V_108) (IGNORE DO8867_13) (17 V_73) (IGNORE K_11) (* G8866_78) (IGNORE DO8865_8) (* V_255) (IGNORE J_52) (A* V_261 I_7) (IGNORE DO8864_5) (A* V_242 L1_19) (A* V_117 L_10) (IGNORE DO8872_33) (1 M_2) (0 N_1) V_286: 2 V_282: 2 L_295: 2 A_36: 2 V_284: 3 I_35: 3 V_153: 4 V_233: 4 A_24: 4 V_171: 4 V_151: 5 J_23: 5 V_173: 5 V_167: 16 V_164: 16 DO8869_21: IGNORE G8871_199: 6 V_208: 7 A_30: 7 V_217: 7 DO8870_27: IGNORE K_25: IGNORE V_206: 8 J_29: 8 N_230: 9 V_227: 16 V_224: 16 V_240: 10 L2_20: 10 V_251: 10 DO8868_17: IGNORE V_99: 11 V_95: 11 V_110: 11 A_16: 11 V_97: 12 J_15: 12 V_108: 16 DO8867_13: IGNORE V_73: 17 K_11: IGNORE G8866_78: 13 DO8865_8: IGNORE V_255: 14 J_52: IGNORE V_261: 15 I_7: 15 DO8864_5: IGNORE V_242: 100 L1_19: 100 V_117: 101 L_10: 101 DO8872_33: IGNORE M_2: 1 N_1: 0 (DEFKFUN DESTRUCTIVE (N M) TAG::P_40 (MOVE A3 '10) (MOVE A2 'NIL) TAG::DO8881_275 (ALU L-R GARBAGE A3 '0) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_279) TAG::C_278 TAG::C_296 (MOVE A15 A0) TAG::DO8873_47 (ALU L-R GARBAGE A15 '0) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_51) TAG::C_50 (MOVE RETURN 'NIL CH-RETURN) TAG::C_51 (OPEN-CALL KWRAP::CAR '1 A14 (O0 A2)) TAG::C_256 (ALU L-R GARBAGE A14 'NIL) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_126) TAG::C_54 (MOVE NIL A2) TAG::DO8874_60 (ALU L-R GARBAGE NIL 'NIL) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_64) TAG::C_63 (MOVE RETURN 'NIL CH-RETURN) TAG::C_64 (OPEN-CALL KWRAP::CAR '1 A13 (O0 NIL)) TAG::C_79 (ALU L-R GARBAGE A13 'NIL) (TEST BR-EQUAL) (BRANCH TAG::C_69) TAG::C_68 TAG::B_114 (MOVE A12 A1 CH-OPEN) (MOVE A11 'NIL) TAG::DO8876_88 (ALU L-R GARBAGE A12 '0) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_92) TAG::C_91 TAG::C_111 (OPEN-CALL KWRAP::CAR '1 O0 (O0 NIL)) TAG::C_109 (KCALL NCONC '2 NIL (O1 A11)) TAG::B_121 (OPEN-CALL KWRAP::CDR '1 NIL (O0 NIL)) TAG::C_118 (JUMP TAG::DO8874_60) TAG::C_92 (MOVE O0 'NIL CH-OPEN) (KCALL KWRAP::CONS '2 A11 (O1 A11)) TAG::C_96 (ALU L+R-1 A12 A12 '0) (JUMP TAG::DO8876_88) TAG::C_69 (KOPEN) (MOVE O0 'NIL CH-OPEN) (KCALL KWRAP::CONS '2 O1 (O1 'NIL)) TAG::C_74 (KCALL RPLACA '2 NIL (O0 NIL)) TAG::C_418 (JUMP TAG::B_114) TAG::C_126 (OPEN-CALL KWRAP::CDR '1 A10 (O0 A2)) TAG::C_252 (MOVE NIL A2) TAG::DO8877_132 (ALU L-R GARBAGE A10 'NIL) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_136) TAG::C_135 (MOVE RETURN 'NIL CH-RETURN) TAG::C_136 (KOPEN) (KOPEN) (KOPEN) (OPEN-CALL KWRAP::CAR '1 O0 (O0 NIL)) TAG::C_225 (KCALL LENGTH '1 O0 NIL) TAG::C_228 (KCALL FLOOR '2 A9 (O1 '2)) TAG::C_231 (ALU L-R GARBAGE A9 '0) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_184) TAG::C_179 (MOVE O0 NIL CH-OPEN) (KCALL RPLACA '2 NIL (O1 'NIL)) TAG::B_183 (OPEN-CALL KWRAP::CAR '1 NIL (O0 NIL)) TAG::C_236 (KOPEN) (KOPEN) (OPEN-CALL KWRAP::CAR '1 O0 (O0 A10)) TAG::C_165 (KCALL LENGTH '1 O0 NIL) TAG::C_168 (KCALL FLOOR '2 A5 (O1 '2)) TAG::C_174 (OPEN-CALL KWRAP::CAR '1 A4 (O0 A10)) TAG::C_172 TAG::DO8878_143 (ALU L-R GARBAGE A5 '0) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_147) TAG::C_146 TAG::C_234 (MOVE O0 A4) (KCALL RPLACD '2 NIL (O1 NIL)) TAG::B_246 (OPEN-CALL KWRAP::CDR '1 NIL (O0 NIL)) TAG::C_243 (OPEN-CALL KWRAP::CDR '1 A10 (O0 A10)) TAG::C_241 (JUMP TAG::DO8877_132) TAG::C_147 (MOVE O0 A4 CH-OPEN) (KCALL RPLACA '2 NIL (O1 A15)) TAG::B_157 (OPEN-CALL KWRAP::CDR '1 A4 (O0 A4)) TAG::C_154 (ALU L+R-1 A5 A5 '0) (JUMP TAG::DO8878_143) TAG::C_184 (OPEN-CALL KWRAP::CAR '1 A7 (O0 NIL)) TAG::C_218 (MOVE A8 A9) TAG::DO8879_190 (ALU L-R GARBAGE A8 '1) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_202) TAG::C_193 (OPEN-CALL KWRAP::CDR '1 A6 (O0 A7)) TAG::C_200 (MOVE O0 A7 CH-OPEN) (KCALL RPLACD '2 NIL (O1 'NIL)) TAG::B_197 (MOVE RETURN A6 CH-RETURN) TAG::C_202 (MOVE O0 A7 CH-OPEN) (KCALL RPLACA '2 NIL (O1 A15)) TAG::B_212 (OPEN-CALL KWRAP::CDR '1 A7 (O0 A7)) TAG::C_209 (ALU L+R-1 A8 A8 '0) (JUMP TAG::DO8879_190) TAG::C_279 (MOVE O0 'NIL CH-OPEN) (KCALL KWRAP::CONS '2 A2 (O1 A2)) TAG::C_283 (ALU L+R-1 A3 A3 '0) (JUMP TAG::DO8881_275)) ;;; C_135 (defun destructive (n m) (let ((l (do ((i 10. (1- i)) (a () (push () a))) ((= i 0) a)))) (print l))) ((Y_18 NIL C_16 DO5956_5) (C_16 0 ^C_17 ^DO5956_21)) STRATEGY/LABEL ((C_17 NIL NIL) ($OPEN 1 ^C_41 DO5956_5)) STRATEGY/OPEN ((C_41) (DO5956_5 1 ^C_43 (QUOTE 10) (QUOTE NIL))) STRATEGY/OPEN ((C_43 NIL L_42) ($OPEN 1 ^C_15 PRINT)) STRATEGY/OPEN ((C_15) (PRINT 1 K_0 L_42)) STRATEGY/OPEN ((DO5956_21 NIL K_6 I_7 A_8) ($CONDITIONAL 2 ^C_24 ^C_25 $= I_7 (QUOTE 0))) STRATEGY/LABEL can we say that when a is allocated to l we mark a2 as used in scope of a? we can only do that if we known allocation of l what if we don't??? body of a labels is allocated before label procs... (let ((l -init-form-)) -body-) the lambda that binds l is the continuation of -init-form- its body is -body- in what cases is a var allocated to another var? 1. (setq other-var var) 2. ($primop ^c var literal-or-var-again ...) ((c other-var) ...) 3. ((lambda (other-var) ...) var) 4. (labels ((foo (other-var) ...)) (foo var)) in what cases is other-var not yet allocated? alloc to var if var is already alloced, set us to it also else get a reg for us and set other var to it??? doesn't work because other var may get targeted to something which would be better for var alloc x to y alloc y to O-reg (let ((x (bar))) (setq y x) (foo y)) (foo v2:(setq x v1:(hair))) (hair ^c1) ((c1 v1)(setq ^c2 x v1)) ((c2 v2) (foo v2)) v1 targeted to x x targeted to v2 v2 targeted to O0 okay, how about recursing then if var is targeted to other-var if other-var allocated use it else alloc other-var? what about open-frame? scope of var must be within open... variable binder must be within open a ref is only targeted to an o-reg if the parent of the ref is the open call at the time the binder of the ref is called when a var is alloced to an open frame every ref must occur with the same open ((x a) ...) open = foo (defun foo () (bar (do ((i 0 (1+ i))) ((= 1 10.) i)))) (DEFKFUN FOO NIL TAG::P_7 (MOVE A0 '0 CH-TAIL-OPEN) TAG::DO7124_14 (ALU L-R GARBAGE '1 '10) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_18) TAG::C_17 (MOVE O0 A0) ;this could go into next inst if c_30 tag not generated TAG::C_30 ;why does i not get allocated to O0? (TAIL-CALL BAR '1) TAG::C_18 (ALU L+R+1 A0 A0 '0) (JUMP TAG::DO7124_14)) IGNORE_45: IGNORE N_1: 0 M_2: 1 L_42: 2 I_7: V_31 A_8: L_42 V_29: A_8 V_33: A_8 V_31: 2 Generating: 11924416 ((T_11 NIL C_10) ($*DEFINE 1 ^B_46 DESTRUCTIVE ^P_12)) STRATEGY/HEAP 11927515 ((B_46 IGNORE_45) (C_10 0 (QUOTE T))) STRATEGY/OPEN 11924551 ((P_12 NIL K_0 N_1 M_2) ($Y 1 ^Y_18)) STRATEGY/HEAP 11924974 ((Y_18 NIL C_16 DO5956_5) (C_16 0 ^C_17 ^DO5956_21)) STRATEGY/LABEL 11924932 ((C_17 NIL NIL) ($OPEN 1 ^C_41 (QUOTE #{NC::CALL-NODE (DO5956_5 1 ^C_43 (QUOTE 10) (QUOTE NIL)) 11927007}))) STRATEGY/OPEN 11927149 ((C_41) (DO5956_5 1 ^C_43 (QUOTE 10) (QUOTE NIL))) STRATEGY/OPEN 11927273 ((C_43 NIL L_42) ($OPEN 1 ^C_15 (QUOTE #{NC::CALL-NODE (PRINT 1 K_0 L_42) 11924654}))) STRATEGY/OPEN 11924785 ((C_15) (PRINT 1 K_0 L_42)) STRATEGY/OPEN 11925102 ((DO5956_21 NIL K_6 I_7 A_8) ($CONDITIONAL 2 ^C_24 ^C_25 $= I_7 (QUOTE 0))) STRATEGY/LABEL 11925220 ((C_24 NIL) (K_6 0 A_8)) STRATEGY/LABEL 11925320 ((C_25 NIL) ($OPEN 1 ^C_35 (QUOTE #{NC::CALL-NODE (DO5956_5 1 K_6 V_31 V_33) 11925396}))) STRATEGY/LABEL 11926268 ((C_35) ($OPEN 1 ^C_28 (QUOTE #{NC::CALL-NODE (CONS 1 ^C_30 (QUOTE NIL) A_8) 11925747}))) STRATEGY/OPEN 11925910 ((C_28) (CONS 1 ^C_30 (QUOTE NIL) A_8)) STRATEGY/OPEN 11926017 ((C_30 NIL V_29) ($SETQ-LEXICAL 1 ^C_34 A_8 V_29)) STRATEGY/OPEN 11926189 ((C_34 NIL V_33) ($1- 1 ^C_32 I_7)) STRATEGY/OPEN 11926110 ((C_32 NIL V_31) (DO5956_5 1 K_6 V_31 V_33)) STRATEGY/OPEN T_11 (MOVE RETURN (QUOTE T)) (RETURN) P_12 (MOVE A2 (QUOTE 10)) (MOVE A2 (QUOTE NIL)) DO5956_21 (ALU L-R GARBAGE A2 (QUOTE 0)) (TEST BR-NOT-EQUAL) (BRANCH C_25) C_24 C_43 (TAIL-OPEN) (MOVE O0 A2) (TAIL-CALL PRINT (QUOTE 1)) C_25 (KOPEN) (MOVE O0 (QUOTE NIL)) (MOVE O1 A2) (KCALL CONS (QUOTE 2) A2) C_30 (ALU L+R-1 A2 A2 (QUOTE 0)) (JUMP DO5956_21) T_11 (MOVE RETURN (QUOTE T) CH-RETURN) P_12 (MOVE A2 (QUOTE 10)) (MOVE A2 (QUOTE NIL)) DO5956_21 (ALU L-R GARBAGE A2 (QUOTE 0)) (TEST BR-NOT-EQUAL) (BRANCH C_25) C_24 C_43 (OPEN-TAIL-CALL PRINT (QUOTE 1) (O0 A2)) C_25 (MOVE O0 (QUOTE NIL) CH-OPEN) (KCALL CONS (QUOTE 2) A2 (O1 A2)) C_30 (ALU L+R-1 A2 A2 (QUOTE 0)) (JUMP DO5956_21) (DEFKFUN DESTRUCTIVE (N M) TAG::P_12 (MOVE A2 '10) (MOVE A2 'NIL) TAG::DO5954_21 (ALU L-R GARBAGE A2 '0) (TEST BR-NOT-EQUAL) (BRANCH TAG::C_25) TAG::C_24 TAG::C_43 (OPEN-TAIL-CALL PRINT '1 (O0 A2)) TAG::C_25 (MOVE O0 'NIL CH-OPEN) (KCALL KWRAP::CONS '2 A2 (O1 A2)) TAG::C_30 (ALU L+R-1 A2 A2 '0) (JUMP TAG::DO5954_21)) (defun des (n m) (let ((l (foo n m))) (print l))) (DEFKFUN DES (N M) TAG::P_8 (MOVE O0 A0 CH-OPEN) (KCALL FOO '2 A2 (O1 A1)) TAG::C_14 (OPEN-TAIL-CALL PRINT '1 (O0 A2))) (defun foo (a) (1+ )) (defun d (a x) (setq a (cons nil x))) ;;; this is ok because l is live in do because l is live in label body ;;; anything live in any label fun (or body) is live in all (defun dd () (let ((l (foo))) (do ((i l (1+ i))) ((= i 10)) (print i)) (bar l))) ;;; happens here too, but here l and i can be in same var (defun dd () (let ((l (foo))) (do ((i l (1+ i))) ((= i 10)) (print i)))) (BLOCK NIL (LABELS ((#:DO0237 (I) (IF (= I 10) (PROGN) (PROGN (TAGBODY (PRINT I)) (#:DO0237 (1+ I)))))) (#:DO0237 L))) ;l is live in body