Changeset 13747
- Timestamp:
- May 30, 2010, 6:55:52 AM (14 years ago)
- File:
-
- 1 edited
-
branches/arm/lisp-kernel/arm-spentry.s (modified) (22 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/arm/lisp-kernel/arm-spentry.s
r13737 r13747 343 343 __(jump_builtin(_builtin_aset1,3)) 344 344 345 _spentry(jmpsym)346 __(jump_fname())347 348 _spentry(jmpnfn)349 __(jump_nfn())350 345 351 346 /* Call nfn if it's either a symbol or function */ … … 361 356 __(bx lr) 362 357 363 _spentry(mkunwind)364 __(mov arg_z,#unbound_marker)365 __(mov imm2,#fixnum_one)366 __(mkcatch())367 __(bx lr)368 358 369 359 _spentry(mkcatchmv) … … 371 361 __(mkcatch()) 372 362 __(bx lr) 363 364 _spentry(mkunwind) 365 __(mov imm2,#-fixnumone) 366 __(mov imm1,#INTERRUPT_LEVEL_BINDING_INDEX) 367 __(ldr temp0,[rcontext,#tcr.tlb_pointer]) 368 __(ldr arg_y,[temp0,#INTERRUPT_LEVEL_BINDING_INDEX]) 369 __(ldr imm0,[rcontext,#tcr.db_link]) 370 __(vpush1(arg_y)) 371 __(vpush1(imm1)) 372 __(vpush1(imm0)) 373 __(str imm2,[temp0,#INTERRUPT_LEVEL_BINDING_INDEX]) 374 __(str vsp,[rcontext,#tcr.db_link]) 375 __(mov arg_z,#unbound_marker) 376 __(mov imm2,#fixnum_one) 377 __(mkcatch()) 378 __(mov arg_z,arg_y) 379 __(b _SPbind_interrupt_level) 380 373 381 374 382 /* This never affects the symbol's vcell */ … … 885 893 dnl /* as well. */ 886 894 .globl C(egc_set_hash_key) 887 dnl_spentry(set_hash_key)895 _spentry(set_hash_key) 888 896 C(egc_set_hash_key): 889 897 dnl __(cmplr(cr2,arg_z,arg_x)) … … 951 959 .globl C(egc_store_node_conditional) 952 960 .globl C(egc_write_barrier_end) 953 dnl_spentry(store_node_conditional)961 _spentry(store_node_conditional) 954 962 C(egc_store_node_conditional): 955 963 dnl __(cmplr(cr2,arg_z,arg_x)) … … 988 996 dnl Interrupt-related issues are as in store_node_conditional, but 989 997 dnl we have to do more work to actually do the memoization.*/ 990 dnl_spentry(set_hash_key_conditional)998 _spentry(set_hash_key_conditional) 991 999 .globl C(egc_set_hash_key_conditional) 992 1000 C(egc_set_hash_key_conditional): … … 1111 1119 1112 1120 1113 dnl_spentry(progvsave)1121 _spentry(progvsave) 1114 1122 dnl /* Error if arg_z isn't a proper list. That's unlikely, */ 1115 1123 dnl /* but it's better to check now than to crash later. */ … … 1372 1380 1373 1381 1374 dnl_spentry(simple_keywords)1382 _spentry(simple_keywords) 1375 1383 dnl __(mov imm0,#0) 1376 1384 dnl __(vpush_argregs()) 1377 1385 dnl __(b _SPkeyword_bind) 1378 1386 dnl 1379 dnl_spentry(keyword_args)1387 _spentry(keyword_args) 1380 1388 dnl __(vpush_argregs()) 1381 1389 dnl __(b _SPkeyword_bind) … … 1403 1411 dnl define(`limit',`save2') 1404 1412 dnl 1405 dnl_spentry(keyword_bind)1413 _spentry(keyword_bind) 1406 1414 dnl /* Before we can really do anything, we have to */ 1407 1415 dnl /* save the caller's context. To do so, we need to know */ … … 1838 1846 __(jump_fname) 1839 1847 1840 /* No args were vpushed; recover saved context & call symbol */1841 _spentry(tcallsymvsp)1842 __(restore_lisp_frame(imm0))1843 __(jump_fname)1844 1848 1845 1849 /* Tail-recursively call the function in nfn. */ … … 1847 1851 _spentry(tcallnfngen) 1848 1852 __(cmp nargs,#nargregs<<fixnumshift) 1849 __(ble _SPtcallnfnvsp) 1850 __(b _SPtcallnfnslide) 1851 1853 __(bgt _SPtcallnfnslide) 1854 __(restore_lisp_frame(imm0)) 1855 __(jump_nfn()) 1856 1852 1857 /* Some args were vpushed. Slide them down to the base of */ 1853 1858 /* the current frame, then do funcall. */ … … 1868 1873 __(jump_nfn()) 1869 1874 1870 _spentry(tcallnfnvsp)1871 __(restore_lisp_frame(imm0))1872 __(jump_nfn())1873 1875 1874 1876 /* Reference index arg_z of a misc-tagged object (arg_y). */ … … 2102 2104 dnl /* Discard the tsp frame; leave values atop the vsp. */ 2103 2105 dnl 2104 dnl_spentry(recover_values)2106 _spentry(recover_values) 2105 2107 dnl 2106 2108 dnl /* First, walk the segments reversing the pointer to previous segment pointers */ … … 2140 2142 2141 2143 2142 /* Go out of line to do this. Sheesh. */2143 _spentry(vpopargregs)2144 __(cmp nargs,#0)2145 __(bxeq lr)2146 __(vpop_argregs_nz)2147 __(bx lr)2148 2144 2149 2145 /* If arg_z is an integer, return in imm0 something whose sign */ … … 2291 2287 dnl /* .SPrecover_values is therefore pretty simple. */ 2292 2288 dnl 2293 dnl_spentry(save_values)2289 _spentry(save_values) 2294 2290 dnl __(mov imm1,tsp) 2295 2291 dnl … … 2326 2322 dnl /* values. This makes recover_values harder. */ 2327 2323 dnl 2328 dnl_spentry(add_values)2324 _spentry(add_values) 2329 2325 dnl __(cmpri(nargs,0)) 2330 2326 dnl __(ldr imm1,[tsp,#0]) … … 2386 2382 __(return_lisp_frame(imm0)) 2387 2383 2388 dnl2389 dnl _spentry(restorefullcontext)2390 dnl __(mflr loc_pc)2391 dnl __(mtctr loc_pc)2392 dnl __(ldr loc_pc,[sp,#lisp_frame.savelr])2393 dnl __(mtlr loc_pc)2394 dnl __(ldr vsp,[sp,#lisp_frame.savevsp])2395 dnl __(ldr fn,[sp,#lisp_frame.savefn])2396 dnl __(discard_lisp_frame())2397 dnl __(bctr)2398 dnl2399 2384 2400 2385 dnl … … 2406 2391 dnl /* If we can detect that the caller's caller didn't expect */ 2407 2392 dnl /* multiple values, then things are even simpler. */ 2408 dnl_spentry(lexpr_entry)2393 _spentry(lexpr_entry) 2409 2394 dnl __(ref_global(imm1,ret1val_addr)) 2410 2395 dnl __(cmpr(imm1,loc_pc)) … … 2428 2413 dnl __(bx lr) 2429 2414 2430 2431 2432 2433 /* Enter the debugger */2434 _spentry(breakpoint)2435 __(mov r3,#0)2436 __(uuo_debug_trap(al))2437 __(bx lr) /* if handler didn't */2438 2415 2439 2416 … … 2561 2538 /* */ 2562 2539 2563 _spentry(getu32)2540 _spentry(getu32) 2564 2541 __(test_fixnum(arg_z)) 2565 2542 __(moveq imm0,arg_z,asr #fixnumshift) … … 2709 2686 /* any interrupt polling */ 2710 2687 2711 _spentry(unbind_interrupt_level)2688 _spentry(unbind_interrupt_level) 2712 2689 __(ldr imm0,[rcontext,#tcr.flags]) 2713 2690 __(ldr temp2,[rcontext,#tcr.tlb_pointer]) … … 2879 2856 2880 2857 2881 _spentry(nmkunwind)2882 __(mov imm2,#-fixnumone)2883 __(mov imm1,#INTERRUPT_LEVEL_BINDING_INDEX)2884 __(ldr temp0,[rcontext,#tcr.tlb_pointer])2885 __(ldr arg_y,[temp0,#INTERRUPT_LEVEL_BINDING_INDEX])2886 __(ldr imm0,[rcontext,#tcr.db_link])2887 __(vpush1(arg_y))2888 __(vpush1(imm1))2889 __(vpush1(imm0))2890 __(str imm2,[temp0,#INTERRUPT_LEVEL_BINDING_INDEX])2891 __(str vsp,[rcontext,#tcr.db_link])2892 __(mov arg_z,#unbound_marker)2893 __(mov imm2,#fixnum_one)2894 __(mkcatch())2895 __(mov arg_z,arg_y)2896 __(b _SPbind_interrupt_level)2897 2858 2898 2859 /* EOF, basically */
Note:
See TracChangeset
for help on using the changeset viewer.
